Class: Rlocu::VenueQuery

Inherits:
Object
  • Object
show all
Includes:
QueryBuilder
Defined in:
lib/rlocu/venue_query.rb

Constant Summary collapse

VenueQueryError =
Class.new(StandardError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from QueryBuilder

#base_url

Constructor Details

#initialize(query_conditions:, return_fields:) ⇒ VenueQuery

Returns a new instance of VenueQuery.

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
# File 'lib/rlocu/venue_query.rb', line 11

def initialize(query_conditions:, return_fields:)
  raise ArgumentError, 'Query Conditions Param must be an array of QueryConditions.' if !query_conditions.is_a?(Array) || !query_conditions.first.is_a?(QueryCondition)

  raise ArgumentError, 'Return Fields Param must be an array of fields.' if !return_fields.is_a?(Array) || return_fields.empty?
  @query_conditions = query_conditions
  @return_fields = return_fields
end

Instance Attribute Details

#return_fieldsObject (readonly)

Returns the value of attribute return_fields.



9
10
11
# File 'lib/rlocu/venue_query.rb', line 9

def return_fields
  @return_fields
end

Instance Method Details

#form_dataObject



23
24
25
# File 'lib/rlocu/venue_query.rb', line 23

def form_data
  {api_key: Rlocu.api_key, fields: return_fields, venue_queries: query_conditions }.to_json
end

#queryObject

Raises:



27
28
29
30
31
32
33
# File 'lib/rlocu/venue_query.rb', line 27

def query
  # TODO wrap this in a timeout
  result = JSON.parse(RestClient.post(base_url, form_data))
  status = result['status']
  raise VenueQueryError.new("Query failed with status [#{status}] and http_status [#{result['http_status']}]") unless status == 'success'
  result['venues'].each.reduce([]) { |accum, venue| accum << Rlocu::Venue.new(venue) }
end

#query_conditionsObject



19
20
21
# File 'lib/rlocu/venue_query.rb', line 19

def query_conditions
  @query_conditions.map(&:to_h)
end