Class: SpreeCmCommissioner::VendorNearbyPlaceBuilder

Inherits:
BaseInteractor show all
Defined in:
app/interactors/spree_cm_commissioner/vendor_nearby_place_builder.rb

Instance Method Summary collapse

Instance Method Details

#callObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/interactors/spree_cm_commissioner/vendor_nearby_place_builder.rb', line 5

def call
  context.nearby_places = []

  json_response = fetch_nearby_places
  json_response['results'].each_with_index do |json, _|
    place = SpreeCmCommissioner::Place.find_or_initialize_by(reference: json['reference'])
    place.assign_attributes(
      reference: json['reference'],
      types: json['types'].blank? ? '' : json['types'][0],
      name: json['name'],
      vicinity: json['vicinity'],
      lat: json['geometry']['location']['lat'],
      lon: json['geometry']['location']['lng'],
      icon: json['icon'],
      rating: json['rating']
    )

    distance = SpreeCmCommissioner::NearbyPlaceDistanceFinder.call(
      vendor: vendor,
      place: place
    ).distance

    nearby_place = if place.persisted?
                     SpreeCmCommissioner::VendorPlace.find_or_initialize_by(vendor_id: vendor.id, place_id: place.id)
                   else
                     SpreeCmCommissioner::VendorPlace.new(vendor: vendor, place: place)
                   end

    nearby_place.distance = distance

    context.nearby_places << nearby_place
  end
end