class Jsonism::Request

Public Class Methods

call(*args) click to toggle source

Utility wrapper

# File lib/jsonism/request.rb, line 4
def self.call(*args)
  new(*args).call
end
new(client: nil, headers: {}, link: nil, params: {}, **options) click to toggle source

@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

call() click to toggle source

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

configured_to_ignore_request_params?() click to toggle source
# File lib/jsonism/request.rb, line 111
def configured_to_ignore_request_params?
  !!@options[:ignore_request_params]
end
has_valid_params?() click to toggle source

@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
method() click to toggle source

@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
missing_params() click to toggle source

@return [Array<Stirng>] Missing parameter names

# File lib/jsonism/request.rb, line 51
def missing_params
  @missing_params ||= path_keys - @params.keys
end
path() click to toggle source

@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
path_keys() click to toggle source

@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
path_params() click to toggle source

@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
path_with_template() click to toggle source

@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
read_only_params() click to toggle source

@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
request_params() click to toggle source

@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
resource_class() click to toggle source

@return [Class] Auto-defined resource class

# File lib/jsonism/request.rb, line 37
def resource_class
  Resources.const_get(resource_class_name)
end
resource_class_name() click to toggle source
# File lib/jsonism/request.rb, line 41
def resource_class_name
  @link.schema_title.camelize
end