diff --git a/lib/travis/api/v3/queries/builds.rb b/lib/travis/api/v3/queries/builds.rb index 286fa347..f45d3daf 100644 --- a/lib/travis/api/v3/queries/builds.rb +++ b/lib/travis/api/v3/queries/builds.rb @@ -1,6 +1,7 @@ module Travis::API::V3 class Queries::Builds < Query params :state, :event_type, :previous_state, prefix: :build + params :name, prefix: :branch, method_name: :branch_name def find(repository) filter(repository.builds) @@ -9,7 +10,8 @@ module Travis::API::V3 def filter(list) list = list.where(state: list(state)) if state list = list.where(previous_state: list(previous_state)) if previous_state - list = list.where(event_type: list(state)) if event_type + list = list.where(event_type: list(event_type)) if event_type + list = list.where(branch: list(branch_name)) if branch_name list = list.includes(:commit).includes(branch: :last_build).includes(:repository) list = list.includes(branch: { last_build: :commit }) if includes? 'build.commit'.freeze diff --git a/lib/travis/api/v3/query.rb b/lib/travis/api/v3/query.rb index b94d865d..84a31da9 100644 --- a/lib/travis/api/v3/query.rb +++ b/lib/travis/api/v3/query.rb @@ -4,26 +4,35 @@ module Travis::API::V3 # generate from eval to avoid additional string allocations on every params access @@params_accessor = <<-RUBY - attr_writer :%s + attr_writer :%s - def %s - return @%s if defined? @%s - return @%s = @params['%s.%s'.freeze] if @params.include? '%s.%s'.freeze - return @%s = @params['%s'.freeze]['%s'.freeze] if @params.include? '%s'.freeze and @params['%s'.freeze].is_a? Hash - return @%s = @params['%s'.freeze] if (@params['@type'.freeze] || @main_type) == '%s'.freeze - return @%s = @params['%s'.freeze] if %p and (@params['@type'.freeze] || @main_type) == '%s'.freeze - @%s = nil + def %s + return @%s if defined? @%s + return @%s = @params['%s.%s'.freeze] if @params.include? '%s.%s'.freeze + return @%s = @params['%s'.freeze]['%s'.freeze] if @params.include? '%s'.freeze and @params['%s'.freeze].is_a? Hash + return @%s = @params['%s'.freeze] if (@params['@type'.freeze] || @main_type) == '%s'.freeze + return @%s = @params['%s'.freeze] if %p and (@params['@type'.freeze] || @main_type) == '%s'.freeze + @%s = nil end - def %s! - %s or raise WrongParams, 'missing %s.%s'.freeze + def %s! + %s or raise WrongParams, 'missing %s.%s'.freeze end RUBY - def self.params(*list, prefix: nil) - type = name[/[^:]+$/].underscore - prefix ||= type.to_s - list.each { |e| class_eval(@@params_accessor % { name: e, prefix: prefix, type: type, check_type: type != prefix }) } + def self.params(*list, prefix: nil, method_name: nil) + type = name[/[^:]+$/].underscore + prefix ||= type.to_s + check_type = method_name.nil? and type != prefix + list.each do |entry| + class_eval(@@params_accessor % { + name: entry, + prefix: prefix, + type: type, + method_name: method_name || entry, + check_type: check_type + }) + end end attr_reader :params, :main_type diff --git a/lib/travis/api/v3/services/builds/find.rb b/lib/travis/api/v3/services/builds/find.rb index 720fe8a1..77d928e1 100644 --- a/lib/travis/api/v3/services/builds/find.rb +++ b/lib/travis/api/v3/services/builds/find.rb @@ -1,6 +1,7 @@ module Travis::API::V3 class Services::Builds::Find < Service params :state, :event_type, :previous_state, prefix: :build + params "branch.name" paginate def run!