class GeoNames::Base

Attributes

params[R]
url[R]

Public Class Methods

new(params = {}) click to toggle source
# File lib/geo_names/base.rb, line 14
def initialize(params = {})
  @url = "#{configuration.api_base}#{controller_name_for(self.class)}"
  @params = {
    username: configuration.username
  }.merge(params)
end

Public Instance Methods

call() click to toggle source
# File lib/geo_names/base.rb, line 21
def call
  result = make_request
  parse(result)
end

Private Instance Methods

configuration() click to toggle source
# File lib/geo_names/base.rb, line 28
def configuration
  @configuration ||= GeoNames.configuration
end
controller_name_for(klass) click to toggle source
# File lib/geo_names/base.rb, line 47
def controller_name_for(klass)
  name = klass.to_s.sub('GeoNames::', '')
  name_camelized = name.chars.map.with_index do |char, index|
    index.zero? ? char.downcase : char
  end.join
  "#{name_camelized}JSON"
end
make_request() click to toggle source
# File lib/geo_names/base.rb, line 32
def make_request
  RestClient.get(url, params: params)
rescue RestClient::Unauthorized => e
  e.response.to_s
end
parse(json_string) click to toggle source
# File lib/geo_names/base.rb, line 38
def parse(json_string)
  hash = JSON.parse(json_string)
  return hash unless hash['status']

  status_code = hash.dig('status', 'value')
  message     = hash.dig('status', 'message')
  raise_error_according_to!(status_code, message)
end
raise_error_according_to!(status_code, message) click to toggle source
# File lib/geo_names/base.rb, line 55
def raise_error_according_to!(status_code, message)
  case status_code
  when 10
    raise(AuthorizationExceptionError, message)
  when 11
    raise(RecordDoesNotExistError, message)
  when 12
    raise(OtherError, message)
  when 13
    raise(DatabaseTimeoutError, message)
  when 14
    raise(MissingOrInvalidParameterError, message)
  when 15
    raise(NoResultFoundError, message)
  when 16
    raise(DuplicateExceptionError, message)
  when 17
    raise(PostalCodeNotFoundError, message)
  when 18
    raise(DailyLimitOfCreditsExceededError, message)
  when 19
    raise(HourlyLimitOfCreditsExceededError, message)
  when 20
    raise(WeeklyLimitOfCreditsExceededError, message)
  when 21
    raise(InvalidInputError, message)
  when 22
    raise(ServerOverloadedExceptionError, message)
  when 23
    raise(ServiceNotImplementedError, message)
  when 24
    raise(RadiusTooLargeError, message)
  when 25
    raise(MaxRowsTooLargeError, message)
  else
    raise(StatusCodeNotImplementedError, 'please report it in github.com/wakematta/geo_names')
  end
end