Class: GeoNamesAPI::Entity

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/geonames_api/entity.rb

Direct Known Subclasses

Base, GeoName

Instance Attribute Summary collapse

Instance Method Summary collapse

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_paramsObject (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_dumpObject



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_responseObject



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