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
search(params = {})
click to toggle source
# File lib/geo_names/base.rb, line 10 def self.search(params = {}) new(params).call 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