class RestfulResource::Base

Constants

Deprecator

Public Class Methods

action(action_name) click to toggle source
# File lib/restful_resource/base.rb, line 104
def self.action(action_name)
  clone = self.clone
  clone.action_prefix = action_name
  clone
end
action_prefix=(action_prefix) click to toggle source
# File lib/restful_resource/base.rb, line 110
def self.action_prefix=(action_prefix)
  @action_prefix = action_prefix.to_s
end
all(**params) click to toggle source
# File lib/restful_resource/base.rb, line 100
def self.all(**params)
  where(**params)
end
base_url() click to toggle source
# File lib/restful_resource/base.rb, line 131
def self.base_url
  result = @base_url
  result = superclass.base_url if result.nil? && superclass.respond_to?(:base_url)
  raise 'Base url missing' if result.nil?

  result
end
collection_url(**params) click to toggle source
# File lib/restful_resource/base.rb, line 139
def self.collection_url(**params)
  url = merge_url_paths(base_url, @resource_path, @action_prefix)
  replace_parameters(url, **params)
end
configure(base_url: nil, username: nil, password: nil, auth_token: nil, logger: nil, cache_store: nil, instrumentation: {}, timeout: nil, open_timeout: nil, faraday_config: nil, faraday_options: {}, default_headers: {} ) click to toggle source
# File lib/restful_resource/base.rb, line 7
def self.configure(base_url: nil,
  username: nil,
  password: nil,
  auth_token: nil,
  logger: nil,
  cache_store: nil,
  instrumentation: {},
  timeout: nil,
  open_timeout: nil,
  faraday_config: nil,
  faraday_options: {},
  default_headers: {}
)

  @base_url = URI.parse(base_url)

  @http = RestfulResource::HttpClient.new(username: username,
                                          password: password,
                                          auth_token: auth_token,
                                          logger: logger,
                                          cache_store: cache_store,
                                          timeout: timeout,
                                          open_timeout: open_timeout,
                                          instrumentation: instrumentation,
                                          faraday_config: faraday_config,
                                          faraday_options: faraday_options,
                                          default_headers: default_headers
                                         )
end
delete(id, **params) click to toggle source
# File lib/restful_resource/base.rb, line 63
def self.delete(id, **params)
  params_without_options, options = format_params(**params)
  response = http.delete(member_url(id, **params_without_options), **options)
  new(parse_json(response.body))
end
fetch_all!(conditions = {}) click to toggle source
# File lib/restful_resource/base.rb, line 114
def self.fetch_all!(conditions = {})
  Enumerator.new do |y|
    next_page = 1
    begin
      resources = where(**conditions.merge(page: next_page))
      resources.each do |resource|
        y << resource
      end
      next_page = resources.next_page
    end while !next_page.nil?
  end
end
find(id, **params) click to toggle source
# File lib/restful_resource/base.rb, line 41
def self.find(id, **params)
  params_without_options, options = format_params(**params)

  response = http.get(member_url(id, **params_without_options), **options)
  new(parse_json(response.body))
end
format_params(**params) click to toggle source
# File lib/restful_resource/base.rb, line 144
def self.format_params(**params)
  headers = params.delete(:headers) || {}

  headers[:cache_control] = 'no-cache' if params.delete(:no_cache)
  open_timeout = params.delete(:open_timeout)
  timeout = params.delete(:timeout)

  [params, { headers: headers, open_timeout: open_timeout, timeout: timeout }]
end
get(**params) click to toggle source
# File lib/restful_resource/base.rb, line 56
def self.get(**params)
  params_without_options, options = format_params(**params)

  response = http.get(collection_url(**params_without_options), **options)
  new(parse_json(response.body))
end
http() click to toggle source
# File lib/restful_resource/base.rb, line 127
def self.http
  @http || superclass.http
end
member_url(id, **params) click to toggle source
# File lib/restful_resource/base.rb, line 158
def self.member_url(id, **params)
  raise ResourceIdMissingError if id.blank?

  url = merge_url_paths(base_url, @resource_path, CGI.escape(id.to_s), @action_prefix)
  replace_parameters(url, **params)
end
merge_url_paths(uri, *paths) click to toggle source
# File lib/restful_resource/base.rb, line 154
def self.merge_url_paths(uri, *paths)
  uri.merge(paths.compact.join('/')).to_s
end
new_collection(json) click to toggle source
# File lib/restful_resource/base.rb, line 165
def self.new_collection(json)
  json.map do |element|
    new(element)
  end
end
paginate_response(response) click to toggle source
# File lib/restful_resource/base.rb, line 197
def self.paginate_response(response)
  links_header =  response.headers[:links]
  links = LinkHeader.parse(links_header)

  prev_url = links.find_link(%w[rel prev]).try(:href)
  next_url = links.find_link(%w[rel next]).try(:href)

  array = parse_json(response.body).map { |attributes| new(attributes) }
  PaginatedArray.new(array, previous_page_url: prev_url, next_page_url: next_url, total_count: response.headers[:x_total_count])
end
parse_json(json) click to toggle source
# File lib/restful_resource/base.rb, line 171
def self.parse_json(json)
  return nil if json.strip.empty?

  ActiveSupport::JSON.decode(json)
end
patch(id, data: {}, headers: {}, **params) click to toggle source
# File lib/restful_resource/base.rb, line 69
def self.patch(id, data: {}, headers: {}, **params)
  params_without_options, options = format_params(**params)
  options.delete(:headers)

  url = member_url(id, **params_without_options)

  response = http.patch(url, data: data, headers: headers, **options)
  new(parse_json(response.body))
end
post(data: {}, headers: {}, **params) click to toggle source
# File lib/restful_resource/base.rb, line 89
def self.post(data: {}, headers: {}, **params)
  params_without_options, options = format_params(**params)
  options.delete(:headers)

  url = collection_url(**params_without_options)

  response = http.post(url, data: data, headers: headers, **options)

  new(parse_json(response.body))
end
put(id, data: {}, headers: {}, **params) click to toggle source
# File lib/restful_resource/base.rb, line 79
def self.put(id, data: {}, headers: {}, **params)
  params_without_options, options = format_params(**params)
  options.delete(:headers)

  url = member_url(id, **params_without_options)

  response = http.put(url, data: data, headers: headers, **options)
  new(parse_json(response.body))
end
replace_parameters(url, **params) click to toggle source
# File lib/restful_resource/base.rb, line 177
def self.replace_parameters(url, **params)
  missing_params = []
  params = params.with_indifferent_access

  url_params = url.scan(%r{:([A-Za-z][^/]*)}).flatten
  url_params.each do |key|
    value = params.delete(key)
    if value.nil?
      missing_params << key
    else
      url = url.gsub(':' + key, CGI.escape(value.to_s))
    end
  end

  raise ParameterMissingError, missing_params if missing_params.any?

  url += "?#{params.to_query}" unless params.empty?
  url
end
resource_path(url) click to toggle source
# File lib/restful_resource/base.rb, line 37
def self.resource_path(url)
  @resource_path = url
end
where(**params) click to toggle source
# File lib/restful_resource/base.rb, line 48
def self.where(**params)
  params_without_options, options = format_params(**params)

  url = collection_url(**params_without_options)
  response = http.get(url, **options)
  paginate_response(response)
end