Class: GeoNamesAPI::Entity
- Inherits:
-
Object
- Object
- GeoNamesAPI::Entity
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/geonames_api/entity.rb
Instance Attribute Summary collapse
-
#request_params ⇒ Object
readonly
Returns the value of attribute request_params.
Instance Method Summary collapse
- #create_attribute(attribute, *attribute_aliases) ⇒ Object
-
#initialize(response, request_params = nil) ⇒ Entity
constructor
A new instance of Entity.
- #marshal_dump ⇒ Object
- #marshal_load(x) ⇒ Object
- #parse_attr(key) ⇒ Object
- #parse_response ⇒ Object
- #set_default_type(value) ⇒ Object
Constructor Details
#initialize(response, request_params = nil) ⇒ Entity
Returns a new instance of Entity.
11 12 13 |
# File 'lib/geonames_api/entity.rb', line 11 def initialize(response, request_params = nil) marshal_load([response, request_params]) end |
Instance Attribute Details
#request_params ⇒ Object (readonly)
Returns the value of attribute request_params.
9 10 11 |
# File 'lib/geonames_api/entity.rb', line 9 def request_params @request_params end |
Instance Method Details
#create_attribute(attribute, *attribute_aliases) ⇒ Object
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/geonames_api/entity.rb', line 49 def create_attribute(attribute, *attribute_aliases) attr_name = attribute.underscore.to_sym self.class.send(:attr_reader, attr_name) unless respond_to?(attr_name) attribute_aliases.each do |ea| self.class.send(:alias_method, ea, attr_name) unless respond_to?(ea) end "@#{attr_name}".to_sym end |
#marshal_dump ⇒ Object
20 21 22 |
# File 'lib/geonames_api/entity.rb', line 20 def marshal_dump [@response, @request_params] end |
#marshal_load(x) ⇒ Object
15 16 17 18 |
# File 'lib/geonames_api/entity.rb', line 15 def marshal_load(x) @response, @request_params = x parse_response end |
#parse_attr(key) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/geonames_api/entity.rb', line 28 def parse_attr(key) return unless @response.has_key? key aliases = [] value = @response[key] parsed_value = case (key) when 'geonames', 'streetSegment', 'postalcodes' aliases = [:geonames, :results, :postalcodes] value.map { |ea| self.class.new(ea) } when 'alternateNames' AlternateNames.new(value) when 'timezone' TimeZone.new(value) else set_default_type(value) end attr_name = create_attribute(key, *aliases) instance_variable_set(attr_name, parsed_value) end |
#parse_response ⇒ Object
24 25 26 |
# File 'lib/geonames_api/entity.rb', line 24 def parse_response @response.keys.each { |ea| parse_attr(ea) } end |
#set_default_type(value) ⇒ Object
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/geonames_api/entity.rb', line 60 def set_default_type(value) case value when /\A-?\d+\Z/ value.to_i when /\A-?\d*\.\d*\Z/ value.to_f else value end end |