class Crowdkit::API::Arguments
Request arguments handler
Constants
- AUTO_PAGINATION
Attributes
The request api
Optional arguments
Parameters passed to request
Required arguments
Public Class Methods
Takes api, filters and required arguments
Parameters¶ ↑
:required - arguments that must be present before request is fired
# File lib/crowdkit/api/arguments.rb, line 31 def initialize(api, options={}) @api = api @required = options.fetch(:required, []).map(&:to_s) @optional = options.fetch(:optional, []).map(&:to_s) end
Public Instance Methods
Check if required keys are present inside parameters hash.
# File lib/crowdkit/api/arguments.rb, line 59 def assert_required(required) assert_required_keys required, params self end
Check if parameters match expected values.
# File lib/crowdkit/api/arguments.rb, line 66 def assert_values(values, key=nil) assert_valid_values values, (key.nil? ? params : params[key]) self end
Parse arguments to allow for flexible api calls. Arguments
can be part of parameters hash or be simple string arguments.
# File lib/crowdkit/api/arguments.rb, line 40 def parse(*args, &block) options = args.extract_options! if !args.empty? && ![File, Array].include?(args.last.class) parse_arguments *args else # Arguments are inside the parameters hash parse_options options end @params = options @remaining = extract_remaining(args) extract_pagination(options) yield_or_eval(&block) self end
Private Instance Methods
Ensure that esential arguments are present before request is made.
Parameters¶ ↑
Hash/Array of arguments to be checked against nil and empty string
Example¶ ↑
assert_presence_of user: '...', repo: '...' assert_presence_of user, repo
# File lib/crowdkit/api/arguments.rb, line 152 def assert_presence_of(*args) hash = args.last.is_a?(::Hash) ? args.pop : {} errors = hash.select { |key, val| val.to_s.empty? } raise Crowdkit::ValidationError.new(errors) unless errors.empty? args.each do |arg| raise ArgumentError, "parameter cannot be nil" if arg.nil? end end
Validate all keys present in a provided hash against required set, on mismatch raise CrowdKit::Error::RequiredParams Note that keys need to be in the same format i.e. symbols or strings, otherwise the comparison will fail.
# File lib/crowdkit/api/arguments.rb, line 168 def assert_required_keys(required, provided) result = required.all? do |key| provided.deep_key? key end if !result raise CrowdKit::RequiredParams.new(provided, required) end result end
Check if required arguments have been set on instance.
# File lib/crowdkit/api/arguments.rb, line 119 def check_assignment!(options) result = required.inject({}) { |hash, arg| if api.respond_to?(:"#{arg}") hash[arg] = api.send(:"#{arg}") else hash[arg] = nil end hash } assert_presence_of result result end
Check if required arguments are present.
# File lib/crowdkit/api/arguments.rb, line 134 def check_requirement!(*args) args_length = args.length required_length = required.length if args_length < required_length ::Kernel.raise ArgumentError, "wrong number of arguments (#{args_length} for #{required_length})" end end
Fine auto_pagination parameter in options hash
# File lib/crowdkit/api/arguments.rb, line 91 def extract_pagination(options) if (value = options.delete(AUTO_PAGINATION)) api.client.auto_pagination = value end end
Find remaining arguments
# File lib/crowdkit/api/arguments.rb, line 85 def extract_remaining(args) args[required.size..-1] end
Check and set all requried arguments.
# File lib/crowdkit/api/arguments.rb, line 75 def parse_arguments(*args) assert_presence_of *args required.each_with_index do |req, indx| api.set req, args[indx] end check_requirement!(*args) end
Remove required arguments from parameters and validate their presence(if not nil or empty string).
# File lib/crowdkit/api/arguments.rb, line 100 def parse_options(options) options.each { |key, val| remove_required(options, key, val) } provided_args = check_assignment!(options) check_requirement!(*provided_args.keys) end
Remove required argument from parameters
# File lib/crowdkit/api/arguments.rb, line 108 def remove_required(options, key, val) key = key.to_s if required.include? key assert_presence_of val options.delete key.intern api.set key, val end end
Evaluate block
# File lib/crowdkit/api/arguments.rb, line 180 def yield_or_eval(&block) return unless block block.arity > 0 ? yield(self) : self.instance_eval(&block) end