Class: ApiSerializer::VariantsStore
- Inherits:
-
Object
- Object
- ApiSerializer::VariantsStore
- Defined in:
- lib/api_serializer/variants_store.rb
Instance Method Summary collapse
- #clone ⇒ Object
- #fetch(type, variant_name, abstract:, raise_error: false) ⇒ Object
- #fetch_with_fallback(type, variant_name, abstract:, raise_error: false) ⇒ Object
-
#initialize(variants = []) ⇒ VariantsStore
constructor
A new instance of VariantsStore.
- #store(variant) ⇒ Object
- #type_key(type, abstract) ⇒ Object
- #variants ⇒ Object
Constructor Details
#initialize(variants = []) ⇒ VariantsStore
Returns a new instance of VariantsStore.
3 4 5 6 |
# File 'lib/api_serializer/variants_store.rb', line 3 def initialize(variants = []) @store = {} variants.each { |variant| store(variant) } end |
Instance Method Details
#clone ⇒ Object
42 43 44 |
# File 'lib/api_serializer/variants_store.rb', line 42 def clone self.class.new(variants) end |
#fetch(type, variant_name, abstract:, raise_error: false) ⇒ Object
12 13 14 15 16 17 |
# File 'lib/api_serializer/variants_store.rb', line 12 def fetch(type, variant_name, abstract:, raise_error: false) type_store = @store[type_key(type, abstract)] variant = type_store[variant_name] if type_store raise Errors::VariantNotFoundError, "Variant #{variant_name} (abstract: #{abstract}, type: #{type}) not found" if raise_error && variant.nil? variant end |
#fetch_with_fallback(type, variant_name, abstract:, raise_error: false) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/api_serializer/variants_store.rb', line 19 def fetch_with_fallback(type, variant_name, abstract:, raise_error: false) if abstract fetch(type, variant_name, abstract: true) || fetch(:base, variant_name, abstract: true) || fetch(:base, variant_name, abstract: true, raise_error:) else fetch(type, variant_name, abstract: false) || fetch(type, variant_name, abstract: true) || fetch(:base, variant_name, abstract: true, raise_error:) end end |
#store(variant) ⇒ Object
31 32 33 34 35 |
# File 'lib/api_serializer/variants_store.rb', line 31 def store(variant) key = type_key(variant.type, variant.abstract?) @store[key] ||= {} @store[key][variant.name] = variant end |
#type_key(type, abstract) ⇒ Object
37 38 39 40 |
# File 'lib/api_serializer/variants_store.rb', line 37 def type_key(type, abstract) prefix = abstract ? :fragment : :full "#{prefix}_#{type}" end |
#variants ⇒ Object
8 9 10 |
# File 'lib/api_serializer/variants_store.rb', line 8 def variants @store.values.flat_map(&:values) end |