class Gdsapi::Methods::BaseMethod

Attributes

requester[R]

Public Class Methods

new(requester) click to toggle source

Constructor method for passing requester instance @param [[Gdsapi::Requester]] - requester instance

# File lib/gdsapi/methods/base_method.rb, line 9
def initialize(requester)
  @requester = requester
end

Public Instance Methods

call(**params) click to toggle source

Generic entry-point for action @param hash_styled `list` and `offset` args used for chunking requests @return - parsed results

# File lib/gdsapi/methods/base_method.rb, line 16
def call(**params)
  response_body = query params
  body = JSON.parse response_body
  parse body
rescue JSON::ParserError
  raise MalformedGdsResponse, "Invalid JSON: #{response_body}"
end

Protected Instance Methods

method() click to toggle source

HTTP verb used to query GDS API for method Defaults to :get @return [Symbol] - symbolic alias for requester method corresponding to HTTP verb (i.e., :get or :post)

# File lib/gdsapi/methods/base_method.rb, line 28
def method
  :get
end
modes() click to toggle source

Editing geodata modes mapping (GDS -> output) Used when dealing with temporal data (i.e. given timestamps) U (upsert) - update or create record D (delete) - delete record

# File lib/gdsapi/methods/base_method.rb, line 92
def modes
  {
    'U' => :upsert,
    'D' => :delete,
  }
end
parse(*args) click to toggle source

GDS API path for method It is required for method to specify path

# File lib/gdsapi/methods/base_method.rb, line 34
def parse(*args)
  raise NotImplementedError, 'Parsing is not allowed for abstract method'
end
path() click to toggle source

GDS API path for method It is required for method to specify path

# File lib/gdsapi/methods/base_method.rb, line 40
def path
  raise NotImplementedError, 'Querying is not allowed for abstract method'
end
permitted_params() click to toggle source

whitelist of permitted params defaults to empty list @return [Array] - params that are permitted for given instance of method

# File lib/gdsapi/methods/base_method.rb, line 84
def permitted_params
  []
end
query(args) click to toggle source

Query routine to be executed while performing action @param [Hash] args - args used for querying @return [String] - response body string

# File lib/gdsapi/methods/base_method.rb, line 47
def query(args)
  params = transform_params(slice_params(args))
  response = requester.public_send(method, path, params: params)
  case response.status
    when (404)
      raise NotFoundError, "Not found on #{response.env.url}"
    when (401)
      raise UnathorizedError, "Invalid auth on #{response.env.url}"
    when (400..499)
      raise BadRequestError, "Bad request on #{response.env.url}: #{response.body.to_s}"
    when (500..599)
      raise GdsInternalError, "#{response.status} #{response.body.to_s}"
    when (300..399)
      raise GdsRedirectError, "#{response.status} #{response.headers['Location'].to_s}"
    else
      response.body
  end
end
slice_params(params) click to toggle source

Select params which are allowed in querying for the method @param [Hash[Symbol => Object]] params - passed params @return [Hash[Symbol => Object]] params filtered using whitelist (see permitted_params) and by presence (!nil?)

# File lib/gdsapi/methods/base_method.rb, line 77
def slice_params(params)
   params.select { |name, value| permitted_params.include?(name) && value }
end
transform_params(filtered_params) click to toggle source

Transform params with accordance to requirements of API @param [Hash[Symbol => Object]] filtered_params - passed params @return [Hash[Symbol => Object]] transformed set of params

# File lib/gdsapi/methods/base_method.rb, line 70
def transform_params(filtered_params)
  filtered_params
end