module Signaling::Base::Http::ClassMethods
Public Instance Methods
define_action(action_name, options)
click to toggle source
# File lib/signaling/base/http.rb, line 29 def define_action(action_name, options) unless options[:method] && options[:path] raise ArgumentError, ':method and :path options are required' end actions = self._defined_actions || {} self._defined_actions = actions.merge(action_name.to_sym => options) end
request(action, params = {}, &block)
click to toggle source
# File lib/signaling/base/http.rb, line 17 def request(action, params = {}, &block) params = params.with_indifferent_access http_method = http_method_for(action) path_params, body_params = split_params(action, params) path = path_for(action, path_params) response = connection.send(http_method, path, body_params) block ? block.call(response.body) : response.body end
to_params(value, set_param_names_first = false)
click to toggle source
convert value to params-friendly hash/array this also sets parameter names for Signaling
models
# File lib/signaling/base/http.rb, line 40 def to_params(value, set_param_names_first = false) case value when Signaling::Base value.class.set_param_names(value.to_params) when Array value.map {|e| to_params(e, set_param_names_first) } when Hash value = set_param_names(value) if set_param_names_first Hash[value.map {|k,v| [k, to_params(v)]}] else value end end
Protected Instance Methods
defined_action(action)
click to toggle source
# File lib/signaling/base/http.rb, line 56 def defined_action(action) _defined_actions.try(:[], action) or raise(UndefinedAction, action) end
http_method_for(action)
click to toggle source
# File lib/signaling/base/http.rb, line 85 def http_method_for(action) method = _defined_actions.try(:[], action).try(:[], :method) method || raise(UndefinedAction, action) end
path_for(action, parameters = {})
click to toggle source
# File lib/signaling/base/http.rb, line 73 def path_for(action, parameters = {}) path = defined_action(action)[:path] parameters = parameters.merge(route_key: route_key) path_parameters(path).each do |parameter| path = path.gsub(":#{parameter}", parameters[parameter].to_s) end path end
path_parameters(path)
click to toggle source
# File lib/signaling/base/http.rb, line 69 def path_parameters(path) path.scan(/:([^\/.]*)/).flatten end
route_key()
click to toggle source
# File lib/signaling/base/http.rb, line 91 def route_key ActiveModel::Naming.route_key(self).pluralize end
set_param_names(params)
click to toggle source
changes attribtue names to param names (defined by “:param_name”)
# File lib/signaling/base/http.rb, line 96 def set_param_names(params) HashWithIndifferentAccess.new.tap do |result| params.each do |k, v| attribute = attribute_set[k.to_sym] name = attribute.try(:options).try(:[], :param_name) || k result[name] = v end end end
split_params(action, params)
click to toggle source
# File lib/signaling/base/http.rb, line 60 def split_params(action, params) path = defined_action(action)[:path] path_params = params.slice(*path_parameters(path)) body_params = params.except(*path_parameters(path)) return path_params, body_params end