class ApipieBindings::Action

Attributes

name[R]

Public Class Methods

new(resource, name, api) click to toggle source
# File lib/apipie_bindings/action.rb, line 9
def initialize(resource, name, api)
  @resource = resource
  @name = name.to_sym
  @api = api
end

Public Instance Methods

api_params_tree(&block) click to toggle source
# File lib/apipie_bindings/action.rb, line 65
def api_params_tree(&block)
  ApipieBindings::Utilities.params_hash_tree(self.params, &block)
end
apidoc() click to toggle source
# File lib/apipie_bindings/action.rb, line 19
def apidoc
  methods = @api.apidoc[:docs][:resources][@resource][:methods].select do |action|
    action[:name].to_sym == @name
  end
  methods.first
end
call(params={}, headers={}, options={}) click to toggle source
# File lib/apipie_bindings/action.rb, line 15
def call(params={}, headers={}, options={})
  @api.call(@resource, @name, params, headers, options)
end
examples() click to toggle source
# File lib/apipie_bindings/action.rb, line 43
def examples
  apidoc[:examples].map do |example|
    ApipieBindings::Example.parse(example)
  end
end
find_route(params={}) click to toggle source
# File lib/apipie_bindings/action.rb, line 49
def find_route(params={})
  sorted_routes = routes.sort_by { |r| [-1 * r.params_in_path.count, r.path] }

  suitable_route = sorted_routes.find do |route|
    route.params_in_path.all? { |path_param| params.keys.map(&:to_s).include?(path_param) }
  end

  suitable_route ||= sorted_routes.last
  return suitable_route
end
inspect() click to toggle source
# File lib/apipie_bindings/action.rb, line 95
def inspect
  to_s
end
missing_params(master, slave) click to toggle source
# File lib/apipie_bindings/action.rb, line 77
def missing_params(master, slave)
  missing = []
  master.each do |required_param|
    if required_param.is_a?(Hash)
      key = required_param.keys.first
      slave_hash = slave.select { |p| p.is_a?(Hash) && p[key] }
      missing << missing_params(required_param[key], slave_hash.first ? slave_hash.first[key] : [])
    else
      missing << required_param unless slave.include?(required_param)
    end
  end
  missing.flatten.sort
end
params() click to toggle source
# File lib/apipie_bindings/action.rb, line 33
def params
  if apidoc
    apidoc[:params].map do |param|
      ApipieBindings::Param.new(param)
    end
  else
    []
  end
end
params_tree(params) click to toggle source
# File lib/apipie_bindings/action.rb, line 69
def params_tree(params)
  params.inject([]) do |tree, (key, val)|
    subtree = val.is_a?(Hash) ? { key.to_s => params_tree(val) } : key.to_s
    tree << subtree
    tree
  end
end
routes() click to toggle source
# File lib/apipie_bindings/action.rb, line 26
def routes
  apidoc[:apis].map do |api|
    ApipieBindings::Route.new(
      api[:api_url], api[:http_method], api[:short_description])
  end
end
to_s() click to toggle source
# File lib/apipie_bindings/action.rb, line 91
def to_s
  "<Action :#{@name}>"
end
validate!(params) click to toggle source
# File lib/apipie_bindings/action.rb, line 60
def validate!(params)
  missing_params = missing_params(api_params_tree { |par| par.required? }, params_tree(params))
  raise ApipieBindings::MissingArgumentsError.new(missing_params) unless missing_params.empty?
end