class Gillbus class TripOptions extend Fields include UpdateAttrs # услуги на рейсе (Wi-Fi, розетки и т.п.) field :services, [TripService], root: 'TRIP_SERVICES', key: 'TRIP_SERVICE' # условия по багажу на рейсе field :luggage, [:string], root: 'LUGGAGE', key: 'ITEM' # условия рассадки на рейсе field :seating, [:string], root: 'SEATING', key: 'ITEM' # информация о технических остановках field :technical_stops, [:string], root: 'TECHNICAL_STOP', key: 'ITEM' # критичная информация о рейсе field :critical_info, [:string], root: 'CRITICAL_INFO', key: 'ITEM' # опции полученные от внешних ресурсов field :resource_options, [:string], root: 'RESOURCE_TRIP_OPTION', key: 'ITEM' # информация, отмеченная как "прочее" field :other, [:string], root: 'OTHER', key: 'ITEM' # признак рекламируемого рейса, передается как ADVERTISING field :advertising, :adertising_bool, root: 'PROMO', key: 'ITEM' # признак рекомендованого рейса, передается как BUSFOR_RECOMMEND field :busfor_recommend, :recommend_bool, root: 'PROMO', key: 'ITEM' # опции, связанные с билетами # элемент с ID="7" означает электронный билет field :tickets, [TicketsOption], root: 'TICKETS', key: 'TICKET' parser do # better not to let flag value out of this gem def adertising_bool(vals) vals.include?('ADVERTISING') end def recommend_bool(vals) vals.include?('BUSFOR_RECOMMEND') end end def self.build_blank options = new field_definitions.each do |name:, type:, key:, root:| options.send(:"#{name}=", []) if type.is_a?(Array) end options end end end