Class: AlgoliaPlaces

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Singleton
Defined in:
lib/algolia_places.rb,
lib/algolia_places/version.rb

Constant Summary collapse

URL =
'https://places-dsn.algolia.net/1/places/query'
VERSION =
"0.1.0"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#api_keyObject


83
84
85
# File 'lib/algolia_places.rb', line 83

def api_key
  @api_key||= ENV['ALGOLIA_API_KEY']
end

#app_idObject


79
80
81
# File 'lib/algolia_places.rb', line 79

def app_id
  @app_id ||= ENV['ALGOLIA_APP_ID']
end

#loggerObject


87
88
89
# File 'lib/algolia_places.rb', line 87

def logger
  @logger||= setup_logger
end

#rest_exceptionObject Also known as: rest_exception?

Returns the value of attribute rest_exception.


25
26
27
# File 'lib/algolia_places.rb', line 25

def rest_exception
  @rest_exception
end

Class Method Details

.rootObject


17
18
19
# File 'lib/algolia_places.rb', line 17

def root
  File.expand_path '../..', __FILE__
end

Instance Method Details

#configuration(opts = {}) ⇒ Object

Configure AlgoliaPlaces

Parameters:

  • opts (Hash) (defaults to: {})

    the options to configure AlgoliaPlaces

Options Hash (opts):

  • :app_id (String)

    Algolia App Id for PLACES

  • :api_key (String)

    Algolia Api key

  • :rest_exception (Boolean) — default: false

    launch exception on REST errors

  • :logger (Logger)

    by default STDOUT


35
36
37
38
39
40
# File 'lib/algolia_places.rb', line 35

def configuration(opts = {})
  self.app_id = opts.fetch :app_id
  self.api_key = opts.fetch :api_key
  self.rest_exception = opts.fetch :rest_exception, false
  self.logger = opts[:logger] if opts[:logger]
end

#coordinates(query) ⇒ Object


42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/algolia_places.rb', line 42

def coordinates(query)
  begin
    resp = retrieve_query(query)
    validate_response(resp)
  rescue RestClient::ExceptionWithResponse => err
    if self.rest_exception?
      raise err
    else
      self.logger.fatal("#{err}\n#{err.backtrace.inspect}")
      default_coords
    end
  end
end

#default_coordsObject


66
67
68
# File 'lib/algolia_places.rb', line 66

def default_coords
  [0,0]
end

#retrieve_query(query) ⇒ Object


70
71
72
73
74
75
76
77
# File 'lib/algolia_places.rb', line 70

def retrieve_query(query)
  RestClient.post(URL,
                  { query: query }.to_json,
                  {
                    'X-Algolia-Application-Id' => self.app_id,
                    'X-Algolia-API-Key' => self.api_key,
                  })
end

#validate_response(resp) ⇒ Object


56
57
58
59
60
61
62
63
64
# File 'lib/algolia_places.rb', line 56

def validate_response(resp)
  results = JsonPath.new('$.hits[0]._geoloc').on resp.body
  geo_loc = results.first
  if geo_loc.nil?
    default_coords
  else
    [geo_loc['lat'], geo_loc['lng']]
  end
end