class Gdsapi::Methods::BaseMethod
Attributes
Public Class Methods
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
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
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
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
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
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
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 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
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 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