class SP::Duh::JSONAPI::Adapters::Base

Public Class Methods

new(service) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 10
def initialize(service)
  @service = service
end

Public Instance Methods

delete(path) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 23
def delete(path)
  request('DELETE', path, nil)
end
delete!(path) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 36
def delete!(path)
  request!('DELETE', path, nil)
end
delete_explicit!(exp_accounting_schema, exp_accounting_prefix, path) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 49
def delete_explicit!(exp_accounting_schema, exp_accounting_prefix, path)
  explicit_request!(exp_accounting_schema, exp_accounting_prefix, 'DELETE', path, nil)
end
do_request(method, path, params) click to toggle source

do_request MUST be implemented by each specialized adapter, and returns a tuple: the request status and a JSONAPI string or hash with the result

# File lib/sp/duh/jsonapi/adapters/base.rb, line 62
def do_request(method, path, params) ; ; end
explicit_do_request(exp_accounting_schema, exp_accounting_prefix, method, path, params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 63
def explicit_do_request(exp_accounting_schema, exp_accounting_prefix, method, path, params) ; ; end
explicit_request!(exp_accounting_schema, exp_accounting_prefix, method, path, params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 93
def explicit_request!(exp_accounting_schema, exp_accounting_prefix, method, path, params)
  unwrap_request do
    explicit_do_request(exp_accounting_schema, exp_accounting_prefix, method, path, params)
  end
end
get(path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 14
def get(path, params = {})
  request('GET', path, params)
end
get!(path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 27
def get!(path, params = {})
  request!('GET', path, params)
end
get_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 40
def get_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {})
  explicit_request!(exp_accounting_schema, exp_accounting_prefix, 'GET', path, params)
end
patch(path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 20
def patch(path, params = {})
  request('PATCH', path, params)
end
Also aliased as: put
patch!(path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 33
def patch!(path, params = {})
  request!('PATCH', path, params)
end
Also aliased as: put!
patch_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 46
def patch_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {})
  explicit_request!(exp_accounting_schema, exp_accounting_prefix, 'PATCH', path, params)
end
Also aliased as: put_explicit!
post(path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 17
def post(path, params = {})
  request('POST', path, params)
end
post!(path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 30
def post!(path, params = {})
  request!('POST', path, params)
end
post_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {}) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 43
def post_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {})
  explicit_request!(exp_accounting_schema, exp_accounting_prefix, 'POST', path, params)
end
put(path, params = {})
Alias for: patch
put!(path, params = {})
Alias for: patch!
put_explicit!(exp_accounting_schema, exp_accounting_prefix, path, params = {})
Alias for: patch_explicit!
request(method, path, params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 65
def request(method, path, params)
  # As it is now, this method is EXACTLY the same as request!()
  # And it cannot be reverted without affecting lots of changes already made in the app's controllers.
  # TODO: end it, or end the !() version
  # begin
    unwrap_request do
      do_request(method, path, params)
    end
  # THIS CAN'T BE DONE, because the same method cannot return both a single result (in case there is NOT an error) and a pair (in case there IS an error)
  # rescue SP::Duh::JSONAPI::Exceptions::GenericModelError => e
  #   [
  #     e.status,
  #     e.result
  #   ]
  # rescue Exception => e
  #   [
  #     SP::Duh::JSONAPI::Status::ERROR,
  #     get_error_response(path, e)
  #   ]
  # end
end
request!(method, path, params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 87
def request!(method, path, params)
  unwrap_request do
    do_request(method, path, params)
  end
end
service() click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 8
def service ; @service ; end
unwrap_request() { || ... } click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 57
def unwrap_request
  unwrap_response(yield)
end

Protected Instance Methods

error_response(path, error) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 147
def error_response(path, error)
  {
    errors: [
      {
        status: "#{SP::Duh::JSONAPI::Status::ERROR}",
        code: error.message
      }
    ],
    links: { self: url(path) },
    jsonapi: { version: SP::Duh::JSONAPI::VERSION }
  }
end
get_error_response(path, error) click to toggle source

get_error_response MUST be implemented by each specialized adapter, and returns a JSONAPI error result as a string or hash

# File lib/sp/duh/jsonapi/adapters/base.rb, line 161
def get_error_response(path, error) ; ; end
params_for_body(params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 130
def params_for_body(params)
  params.blank? ?  '' : params.to_json.gsub("'","''")
end
params_for_query(params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 108
def params_for_query(params)
  query = ""
  if !params.blank?
    case
      when params.is_a?(Array)
        # query = params.join('&')
        query = params.map{ |v| URI.encode(URI.encode(v).gsub("'","''"), "&") }.join('&')
      when params.is_a?(Hash)
        query = params.map do |k,v|
          if v.is_a?(String)
            "#{k}=\"#{URI.encode(URI.encode(v).gsub("'","''"), "&")}\""
          else
            "#{k}=#{v}"
          end
        end.join('&')
      else
        query = params.to_s
    end
  end
  query
end
unwrap_response(response) click to toggle source

unwrap_response SHOULD be implemented by each specialized adapter, and returns the request result as a JSONAPI string or hash and raises an exception if there was an error

# File lib/sp/duh/jsonapi/adapters/base.rb, line 135
def unwrap_response(response)
  # As the method request() is EXACTLY the same as request!(), and it cannot be reverted without affecting lots of changes already made in the app's controllers...
  # Allow for response being both a [ status, result ] pair (as of old) OR a single result (as of now)
  if response.is_a?(Array)
    status = response[0].to_i
    result = response[1]
    result
  else
    response
  end
end
url(path) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 101
def url(path) ; File.join(service.url, path) ; end
url_with_params_for_query(path, params) click to toggle source
# File lib/sp/duh/jsonapi/adapters/base.rb, line 103
def url_with_params_for_query(path, params)
  query = params_for_query(params)
  query.blank? ? url(path) : url(path) + "?" + query
end