Class: BoatSerializer

Inherits:
AbstractSerializer show all
Defined in:
app/serializers/boat_serializer.rb

Class Method Summary collapse

Methods inherited from AbstractSerializer

opts

Class Method Details

.available_attributesObject



4
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
38
39
40
41
42
43
44
45
46
47
# File 'app/serializers/boat_serializer.rb', line 4

def available_attributes
  %i[
    boat_beam
    boat_beam_metrics
    boat_beam_metrics_ft
    boat_beam_metrics_meters
    boat_contacts
    boat_draft
    boat_draft_metrics
    boat_draft_metrics_ft
    boat_draft_metrics_meters
    boat_hull_id
    boat_length
    boat_length_metrics
    boat_length_metrics_ft
    boat_length_metrics_meters
    boat_model
    boat_photos
    boat_type
    boat_type_id
    builder
    built_year
    crew_total
    guest_cabins
    guests_total
    hull_material
    id
    interior_designer
    latitude
    location_address
    longitude
    main_boat_photo_id
    motor
    name
    naval_architect
    picture_medium_url
    prices
    refit_year
    short_description
    state
    visits_today
    visits_total
  ].freeze
end

.boat_contacts(boat) ⇒ Object

Контакты владельцев: то, что приходит в boat_users_attributes из админской формы



453
454
455
456
457
458
459
460
# File 'app/serializers/boat_serializer.rb', line 453

def boat_contacts(boat)
  boat_contacts = boat.boat_users.map do |user|
    {
      user_id: user.user_id
    }
  end
  { boat_contacts: boat_contacts }
end

.boat_hull_id(boat) ⇒ Object

TODO
bcff00da

УДАЛИТЬ

def boat_draft_metrics_meters(boat)

{ boat_draft_metrics_meters: boat.boat_draft_metrics_meters }

end



258
259
260
# File 'app/serializers/boat_serializer.rb', line 258

def boat_hull_id(boat)
  { boat_hull_id: boat.boat_hull_id }
end

.boat_length(boat) ⇒ Object



199
200
201
202
203
204
205
206
# File 'app/serializers/boat_serializer.rb', line 199

def boat_length(boat)
  {
      boat_length: {
          value: boat.send('boat_length_metrics_%s' % @opts[:uol]),
          uol:   @opts[:uol]
      }
  }
end

.boat_length_metrics_ft(boat) ⇒ Object

TODO
bcff00da

УДАЛИТЬ - пока используется при обновлении/создании лодки в админке



222
223
224
# File 'app/serializers/boat_serializer.rb', line 222

def boat_length_metrics_ft(boat)
  { boat_length_metrics_ft: boat.boat_length_metrics_ft }
end

.boat_length_metrics_meters(boat) ⇒ Object

TODO
bcff00da

УДАЛИТЬ - пока используется при обновлении/создании лодки в админке



217
218
219
# File 'app/serializers/boat_serializer.rb', line 217

def boat_length_metrics_meters(boat)
  { boat_length_metrics_meters: boat.boat_length_metrics_meters }
end

.boat_model(boat) ⇒ Object



170
171
172
# File 'app/serializers/boat_serializer.rb', line 170

def boat_model(boat)
  { boat_model: boat.boat_model }
end

.boat_photos(boat) ⇒ Object



439
440
441
442
443
444
445
446
447
448
449
450
# File 'app/serializers/boat_serializer.rb', line 439

def boat_photos(boat)
  # FIXME:: выяснить, нужно ли всётаки использовать .gsub('\'', ''') для строк с путями к фоткам?
  boat_photos = boat.boat_photos.map do |boat_photo|
    {
      id:           boat_photo.id,
      gallery_path: boat_photo.picture.url(:gallery),
      medium_path:  boat_photo.picture.url(:medium),
      thumb_path:   boat_photo.picture.url(:thumb)
    }
  end
  { boat_photos: boat_photos }
end

.boat_type(boat) ⇒ Object



190
191
192
193
194
195
196
197
# File 'app/serializers/boat_serializer.rb', line 190

def boat_type(boat)
  {
      boat_type: {
          id:     boat.boat_type_id,
          title:  boat.boat_type&.name&.strip
      }
  }
end

.boat_type_id(boat) ⇒ Object



186
187
188
# File 'app/serializers/boat_serializer.rb', line 186

def boat_type_id(boat)
  { boat_type_id: boat.boat_type_id }
end

.builder(boat) ⇒ Object



104
105
106
# File 'app/serializers/boat_serializer.rb', line 104

def builder(boat)
  { builder: boat.builder&.strip }
end

.built_year(boat) ⇒ Object



161
162
163
# File 'app/serializers/boat_serializer.rb', line 161

def built_year(boat)
  { built_year: boat.built_year }
end

.crew_total(boat) ⇒ Object



157
158
159
# File 'app/serializers/boat_serializer.rb', line 157

def crew_total(boat)
  { crew_total: boat.crew_total }
end

.default_optsObject



49
50
51
52
53
54
55
56
57
# File 'app/serializers/boat_serializer.rb', line 49

def default_opts
  {
    uol:         'ft',
    currency:    ::Dicts::Currency::USD.index,
    locale:      'en',
    is_for_rent: true,  # TODO:: [bcff00da] УДАЛИТЬ
    business:    ::Dicts::Business::RENT.index
  }
end

.guest_cabins(boat) ⇒ Object



149
150
151
# File 'app/serializers/boat_serializer.rb', line 149

def guest_cabins(boat)
  { guest_cabins: boat.guest_cabins }
end

.guests_total(boat) ⇒ Object

12% def price_discount(boat)

value = if @opts[:is_for_rent]
          ::Lib::Boats::RentPricePerSeason.price_discount(boat, @opts[:currency])
        else
          ::Lib::Boats::SalePrice.price_discount(boat)
        end
{ price_discount: value }

end



145
146
147
# File 'app/serializers/boat_serializer.rb', line 145

def guests_total(boat)
  { guests_total: boat.guests_total }
end

.hull_material(boat) ⇒ Object



153
154
155
# File 'app/serializers/boat_serializer.rb', line 153

def hull_material(boat)
  { hull_material: boat.hull_material }
end

.id(boat) ⇒ Object



65
66
67
# File 'app/serializers/boat_serializer.rb', line 65

def id(boat)
  { id: boat.id }
end

.interior_designer(boat) ⇒ Object



69
70
71
# File 'app/serializers/boat_serializer.rb', line 69

def interior_designer(boat)
  { interior_designer: boat.interior_designer }
end

.latitude(boat) ⇒ Object



178
179
180
# File 'app/serializers/boat_serializer.rb', line 178

def latitude(boat)
  { latitude: boat.latitude }
end

.location_address(boat) ⇒ Object



174
175
176
# File 'app/serializers/boat_serializer.rb', line 174

def location_address(boat)
  { location_address: boat.location_address }
end

.longitude(boat) ⇒ Object



182
183
184
# File 'app/serializers/boat_serializer.rb', line 182

def longitude(boat)
  { longitude: boat.longitude }
end

.main_boat_photo_id(boat) ⇒ Object



96
97
98
99
100
101
102
# File 'app/serializers/boat_serializer.rb', line 96

def main_boat_photo_id(boat)
  boat_photo_id = if boat.boat_photo.present?
                    boat.boat_photo.id
                  end

  { main_boat_photo_id: boat_photo_id }
end

.motor(boat) ⇒ Object



92
93
94
# File 'app/serializers/boat_serializer.rb', line 92

def motor(boat)
  { motor: boat.motor }
end

.name(boat) ⇒ Object



88
89
90
# File 'app/serializers/boat_serializer.rb', line 88

def name(boat)
  { name: boat.name }
end


73
74
75
# File 'app/serializers/boat_serializer.rb', line 73

def naval_architect(boat)
  { naval_architect: boat.naval_architect }
end

.picture_medium_url(boat) ⇒ Object

noinspection RubyResolve



78
79
80
81
82
83
84
85
86
# File 'app/serializers/boat_serializer.rb', line 78

def picture_medium_url(boat)
  url = if boat.boat_photo.present?
          boat.boat_photo.picture.url(:medium)
        else
          ''
        end

  { picture_medium_url: url }
end

.prices(boat) ⇒ Object



262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# File 'app/serializers/boat_serializer.rb', line 262

def prices(boat)
  currency_id  = ::Dicts::Currency.find_by_index(@opts[:currency]).id
  business     = ::Dicts::Business.find_by_index @opts[:business]

  prices       = if business.index == ::Dicts::Business::RENT.index
                   boat.boat_prices.select { |bp| bp.currency_id == currency_id }.map { |bp| ::BoatPriceSerializer.serialize bp }
                 else
                   # noinspection RubyResolve
                   boat.boat_sale_prices.select { |bp| bp.currency_id == currency_id }.map { |bps| ::BoatSalePriceSerializer.serialize bps }
                 end
  {
      prices:   {
          list:     prices,
          business: {
              index: business.index,
              id:    business.id
          }
      }
  }
end

.refit_year(boat) ⇒ Object



165
166
167
168
# File 'app/serializers/boat_serializer.rb', line 165

def refit_year(boat)
  value = boat.refit_year
  { refit_year: value }
end

.serialize(model, attributes: available_attributes, opts: {}) ⇒ Object



59
60
61
62
63
# File 'app/serializers/boat_serializer.rb', line 59

def serialize(model, attributes: available_attributes, opts: {})
  result = super(model, attributes: attributes, opts: default_opts.merge(opts))
  result[:opts] = serialize_opts
  result
end

.serialize_optsObject



470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
# File 'app/serializers/boat_serializer.rb', line 470

def serialize_opts
  locale   = ::Dicts::Locale.find_by_index   @opts[:locale]
  uol      = ::Dicts::Length.find_by_index   @opts[:uol]
  business = ::Dicts::Business.find_by_index @opts[:business]
  currency = ::Dicts::Currency.find_by_index @opts[:currency]

  {
      locale: {
          index: locale.index,
          id:    locale.id
      },
      uol: {
          index: uol.index,
          id:    uol.id
      },
      business: {
          index: business.index,
          id:    business.id
      },
      currency: {
          index:  currency.index,
          id:     currency.id,
          symbol: currency.symbol
      }
  }
end

.short_description(boat) ⇒ Object



108
109
110
111
112
# File 'app/serializers/boat_serializer.rb', line 108

def short_description(boat)
  attr  = 'short_description_%s' % @opts[:locale]
  value = boat.send(attr.to_sym)
  { short_description: value }
end

.state(boat) ⇒ Object

def sale_price_discount(boat)

{ sale_price_discount: boat.sale_price_discount }

end



435
436
437
# File 'app/serializers/boat_serializer.rb', line 435

def state(boat)
  { state: boat.state }
end

.visits_today(boat) ⇒ Object



462
463
464
# File 'app/serializers/boat_serializer.rb', line 462

def visits_today(boat)
  { visits_today: boat.visits_today }
end

.visits_total(boat) ⇒ Object



466
467
468
# File 'app/serializers/boat_serializer.rb', line 466

def visits_total(boat)
  { visits_total: boat.visits_total }
end