class Crowdkit::API::Arguments

Request arguments handler

Constants

AUTO_PAGINATION

Attributes

api[R]

The request api

optional[R]

Optional arguments

params[R]

Parameters passed to request

remaining[R]
required[R]

Required arguments

Public Class Methods

new(api, options={}) click to toggle source

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

assert_required(required) click to toggle source

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
assert_values(values, key=nil) click to toggle source

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(*args, &block) click to toggle source

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

assert_presence_of(*args) click to toggle source

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
assert_required_keys(required, provided) click to toggle source

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_assignment!(options) click to toggle source

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_requirement!(*args) click to toggle source

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
extract_pagination(options) click to toggle source

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
extract_remaining(args) click to toggle source

Find remaining arguments

# File lib/crowdkit/api/arguments.rb, line 85
def extract_remaining(args)
  args[required.size..-1]
end
parse_arguments(*args) click to toggle source

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
parse_options(options) click to toggle source

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(options, key, val) click to toggle source

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
yield_or_eval() { |self| ... } click to toggle source

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