Class: Elibri::XmlVariant
- Inherits:
-
Object
- Object
- Elibri::XmlVariant
- Defined in:
- lib/elibri_onix_mocks/xml_variant.rb
Overview
Klasa implementująca logikę wariantów XML produktów. Gdy klient zapłaci za pełne informacje o produkcie, to dostaje bogatszy XML. Poniższa klasa jest tylko helperem, który upraszcza i redukuje kod w innych miejscach aplikacji.
Defined Under Namespace
Classes: InvalidFeature
Constant Summary collapse
- FEATURES_SEPARATOR =
':'
- FEATURES =
Dostępne elementy XML produktu. Gdy nic nie będzie wybrane, XML będzie zawierał tylko RecordReference.
ActiveSupport::OrderedHash.new
- ALL_FEATURES_COMBINATIONS =
Wszystkie możliwe kombinacje wariantów XML - zbiór uzupełniany na końcu klasy. Upraszcza kod odświeżacza XML. W celu odświeżenia wszystkich możliwych wariantów XML dla produktu, po prostu iteruję po tej kolekcji.
Set.new
- FULL_VARIANT =
Wariant zawierający wszystkie możliwe dane:
self.new(FEATURES.keys)
Instance Attribute Summary collapse
-
#features ⇒ Object
readonly
Returns the value of attribute features.
Class Method Summary collapse
-
.deserialize(features_str, ignore_unknow_combinations = false) ⇒ Object
Fabryka budująca instancę XmlVariant ze stringu ‘basic_meta:media_files:other_texts:stocks’.
Instance Method Summary collapse
- #==(other_xml_variant) ⇒ Object
- #eql?(other_xml_variant) ⇒ Boolean
- #equal?(other_xml_variant) ⇒ Boolean
- #except(*features) ⇒ Object
- #feature_included?(feature) ⇒ Boolean
-
#hash ⇒ Object
Żeby działało porównywanie w Set`ach.
-
#initialize(*features) ⇒ XmlVariant
constructor
jeśli ostatni argument to true, to nie waliduj, czy kobinacja jest prawidłowa, a więc jest jedną z ALL_FEATURES_COMBINATIONS.
-
#serialize ⇒ Object
Wykorzystywane do utworzenia nazwy pliku XML oraz serializacji wariantu w MySQL.
- #to_s ⇒ Object
Constructor Details
#initialize(*features) ⇒ XmlVariant
jeśli ostatni argument to true, to nie waliduj, czy kobinacja jest prawidłowa, a więc jest jedną z ALL_FEATURES_COMBINATIONS
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 27 def initialize(*features) @features = Array(features).flatten if @features[-1] === true ignore_unknow_combinations = true @features.pop else ignore_unknow_combinations = false end @features = @features.reject(&:blank?).map(&:to_sym).to_set unless (@features - FEATURES.keys).empty? raise InvalidFeature.new("Unknown xml features #{@features.inspect}") end unless ignore_unknow_combinations if @features.present? and !ALL_FEATURES_COMBINATIONS.map(&:features).include?(@features) raise InvalidFeature.new("Unknow combination of xml features #{@features.inspect}") end end end |
Instance Attribute Details
#features ⇒ Object (readonly)
Returns the value of attribute features.
10 11 12 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 10 def features @features end |
Class Method Details
.deserialize(features_str, ignore_unknow_combinations = false) ⇒ Object
Fabryka budująca instancę XmlVariant ze stringu ‘basic_meta:media_files:other_texts:stocks’
57 58 59 60 61 62 63 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 57 def self.deserialize(features_str, ignore_unknow_combinations = false) if ignore_unknow_combinations XmlVariant.new(features_str.to_s.split(FEATURES_SEPARATOR), true) else XmlVariant.new(features_str.to_s.split(FEATURES_SEPARATOR)) end end |
Instance Method Details
#==(other_xml_variant) ⇒ Object
71 72 73 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 71 def ==(other_xml_variant) self.features == other_xml_variant.features end |
#eql?(other_xml_variant) ⇒ Boolean
76 77 78 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 76 def eql?(other_xml_variant) self == other_xml_variant end |
#equal?(other_xml_variant) ⇒ Boolean
81 82 83 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 81 def equal?(other_xml_variant) self == other_xml_variant end |
#except(*features) ⇒ Object
65 66 67 68 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 65 def except(*features) excluded_features = Array(features).flatten.map(&:to_sym) XmlVariant.new( (self.features - excluded_features).to_a ) end |
#feature_included?(feature) ⇒ Boolean
92 93 94 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 92 def feature_included?(feature) self.features.include?(feature.to_sym) end |
#hash ⇒ Object
Żeby działało porównywanie w Set`ach
87 88 89 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 87 def hash self.features.hash end |
#serialize ⇒ Object
Wykorzystywane do utworzenia nazwy pliku XML oraz serializacji wariantu w MySQL. Zwraca np. ‘basic_meta:media_files:other_texts:stocks’
108 109 110 111 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 108 def serialize # features muszą być posortowane, aby za każdym razem generować tę samą nazwę - Set nie gwarantuje kolejności. self.features.map(&:to_s).sort.join(FEATURES_SEPARATOR) end |
#to_s ⇒ Object
114 115 116 |
# File 'lib/elibri_onix_mocks/xml_variant.rb', line 114 def to_s "#<Elibri::XmlVariant: features=#{self.features.inspect}>" end |