Class: BoatSerializer
- Inherits:
-
AbstractSerializer
- Object
- AbstractSerializer
- BoatSerializer
- Defined in:
- app/serializers/boat_serializer.rb
Class Method Summary collapse
- .available_attributes ⇒ Object
-
.boat_contacts(boat) ⇒ Object
Контакты владельцев: то, что приходит в
boat_users_attributesиз админской формы. -
.boat_hull_id(boat) ⇒ Object
- TODO
- bcff00da
-
УДАЛИТЬ def boat_draft_metrics_meters(boat) { boat_draft_metrics_meters: boat.boat_draft_metrics_meters } end.
- .boat_length(boat) ⇒ Object
-
.boat_length_metrics_ft(boat) ⇒ Object
- TODO
- bcff00da
-
УДАЛИТЬ - пока используется при обновлении/создании лодки в админке.
-
.boat_length_metrics_meters(boat) ⇒ Object
- TODO
- bcff00da
-
УДАЛИТЬ - пока используется при обновлении/создании лодки в админке.
- .boat_model(boat) ⇒ Object
- .boat_photos(boat) ⇒ Object
- .boat_type(boat) ⇒ Object
- .boat_type_id(boat) ⇒ Object
- .builder(boat) ⇒ Object
- .built_year(boat) ⇒ Object
- .crew_total(boat) ⇒ Object
- .default_opts ⇒ Object
- .guest_cabins(boat) ⇒ Object
- .guests_total(boat) ⇒ Object
- .hull_material(boat) ⇒ Object
- .id(boat) ⇒ Object
- .interior_designer(boat) ⇒ Object
- .latitude(boat) ⇒ Object
- .location_address(boat) ⇒ Object
- .longitude(boat) ⇒ Object
- .main_boat_photo_id(boat) ⇒ Object
- .motor(boat) ⇒ Object
- .name(boat) ⇒ Object
- .naval_architect(boat) ⇒ Object
-
.picture_medium_url(boat) ⇒ Object
noinspection RubyResolve.
- .prices(boat) ⇒ Object
- .refit_year(boat) ⇒ Object
- .serialize(model, attributes: available_attributes, opts: {}) ⇒ Object
- .serialize_opts ⇒ Object
- .short_description(boat) ⇒ Object
-
.state(boat) ⇒ Object
def sale_price_discount(boat) { sale_price_discount: boat.sale_price_discount } end.
- .visits_today(boat) ⇒ Object
- .visits_total(boat) ⇒ Object
Methods inherited from AbstractSerializer
Class Method Details
.available_attributes ⇒ Object
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_opts ⇒ Object
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 |
.naval_architect(boat) ⇒ Object
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_opts ⇒ Object
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 |