diff --git a/assets/lib/filters/label.rb b/assets/lib/filters/label.rb index 56255ef..d1ad2e0 100644 --- a/assets/lib/filters/label.rb +++ b/assets/lib/filters/label.rb @@ -8,15 +8,21 @@ def initialize(pull_requests:, input: Input.instance) end def pull_requests + if @input.source.no_label + @pull_requests = @pull_requests.reject do |pr| + issue = Octokit.issue(@input.source.repo, pr.id) + labels = issue[:labels] || [] + labels.find { |l| l['name'].to_s.casecmp(@input.source.no_label.to_s.downcase).zero? } + end + end if @input.source.label - @memoized ||= @pull_requests.select do |pr| + @pull_requests = @pull_requests.select do |pr| issue = Octokit.issue(@input.source.repo, pr.id) labels = issue[:labels] || [] labels.find { |l| l['name'].to_s.casecmp(@input.source.label.to_s.downcase).zero? } end - else - @pull_requests end + @pull_requests end end end diff --git a/spec/filters/label_spec.rb b/spec/filters/label_spec.rb index a9fb33b..2a6569c 100644 --- a/spec/filters/label_spec.rb +++ b/spec/filters/label_spec.rb @@ -42,5 +42,12 @@ def stub_json(uri, body) expect(filter.pull_requests).to eq [pr] end + + it 'only returns PRs with that label' do + payload = { 'source' => { 'repo' => 'user/repo', 'no_label' => 'feature' } } + filter = described_class.new(pull_requests: pull_requests, input: Input.instance(payload: payload)) + + expect(filter.pull_requests).to eq [pr] + end end end