class Jsonism::Request
Public Class Methods
Utility wrapper
# File lib/jsonism/request.rb, line 4 def self.call(*args) new(*args).call end
@param client [Jsonism::Client] @param headers [Hash] @param link [Jsonism::Link] @param params [Hash] @param options [Hash] Options to change the default behavior
# File lib/jsonism/request.rb, line 13 def initialize(client: nil, headers: {}, link: nil, params: {}, **options) @client = client @headers = headers @link = link @params = params.with_indifferent_access @options = options end
Public Instance Methods
Sends HTTP request
# File lib/jsonism/request.rb, line 22 def call if has_valid_params? Response.new( client: @client, resource_class: resource_class, response: @client.connection.send(method, path, request_params, @headers), ) else raise MissingParams, missing_params end end
Private Instance Methods
# File lib/jsonism/request.rb, line 111 def configured_to_ignore_request_params? !!@options[:ignore_request_params] end
@return [true, false] False if any keys in path template are missing
# File lib/jsonism/request.rb, line 46 def has_valid_params? missing_params.empty? end
@return [String] Method name to call connection's methods @example
method #=> "get"
# File lib/jsonism/request.rb, line 65 def method @link.method.downcase end
@return [Array<Stirng>] Missing parameter names
# File lib/jsonism/request.rb, line 51 def missing_params @missing_params ||= path_keys - @params.keys end
@return [String] Path whose URI template is resolved @example
path #=> "/apps/1"
# File lib/jsonism/request.rb, line 72 def path path_with_template % path_params.symbolize_keys end
@return [Array<String>] Parameter names required for path @exmaple
path_keys #=> ["id"]
# File lib/jsonism/request.rb, line 89 def path_keys @link.href.scan(/{(.+)}/).map do |str| CGI.unescape($1).gsub(/[()]/, "").split("/").last end end
@return [ActiveSupport::HashWithIndifferentAccess] Params to be embedded into path @example
path_params #=> { id: 1 }
# File lib/jsonism/request.rb, line 98 def path_params @params.slice(*path_keys) end
@return [String] @example
path_with_template #=> "/apps/%{id}"
# File lib/jsonism/request.rb, line 79 def path_with_template @link.href.gsub(/{(.+)}/) do |matched| key = CGI.unescape($1).gsub(/[()]/, "").split("/").last "%{#{key}}" end end
@return [Array<String>] Parameter names marked as readonly
# File lib/jsonism/request.rb, line 56 def read_only_params @read_only_params ||= @link.schema.properties.map do |name, property| name if property.read_only end.compact end
@return [ActiveSupport::HashWithIndifferentAccess] Params to be used for request body or query string @example
request_params #=> { name: "example" }
# File lib/jsonism/request.rb, line 105 def request_params unless configured_to_ignore_request_params? @params.except(*path_keys, *read_only_params) end end
@return [Class] Auto-defined resource class
# File lib/jsonism/request.rb, line 37 def resource_class Resources.const_get(resource_class_name) end
# File lib/jsonism/request.rb, line 41 def resource_class_name @link.schema_title.camelize end