Class: Edi::Wayfair::ListingGenerator::Attributes::AttributeFactory
- Inherits:
-
Object
- Object
- Edi::Wayfair::ListingGenerator::Attributes::AttributeFactory
- Defined in:
- app/services/edi/wayfair/listing_generator/attributes/attribute_factory.rb
Overview
Factory for creating Wayfair attribute mappers
Similar to Amazon's AttributeFactory, dynamically loads attribute classes
Class Method Summary collapse
-
.attributes_available ⇒ Array<String>
Get all available attribute mapper names.
-
.attributes_by_taxonomy_id ⇒ Hash<String, Class>
Get all attribute classes with their taxonomy IDs.
-
.build(attribute_name, catalog_item:, wayfair_schema: nil) ⇒ BaseAttribute
Build an attribute mapper by name.
-
.build_by_id(taxonomy_attribute_id, catalog_item:, wayfair_schema: nil) ⇒ BaseAttribute?
Build an attribute mapper by taxonomy attribute ID.
-
.reset_cache! ⇒ Object
Clear the cached mapping (useful after loading new attributes).
Class Method Details
.attributes_available ⇒ Array<String>
Get all available attribute mapper names
37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/services/edi/wayfair/listing_generator/attributes/attribute_factory.rb', line 37 def attributes_available Edi::Wayfair::ListingGenerator::Attributes.constants.filter_map do |const| klass = Edi::Wayfair::ListingGenerator::Attributes.const_get(const) next unless klass.is_a?(Class) && klass < BaseAttribute attribute_name = const.to_s.underscore next if attribute_name.start_with?('base_') attribute_name end.sort end |
.attributes_by_taxonomy_id ⇒ Hash<String, Class>
Get all attribute classes with their taxonomy IDs
51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/services/edi/wayfair/listing_generator/attributes/attribute_factory.rb', line 51 def attributes_by_taxonomy_id @attributes_by_taxonomy_id ||= begin Edi::Wayfair::ListingGenerator::Attributes.constants.each_with_object({}) do |const, hash| klass = Edi::Wayfair::ListingGenerator::Attributes.const_get(const) next unless klass.is_a?(Class) && klass < BaseAttribute id = klass.taxonomy_attribute_id hash[id.to_s] = klass if id.present? end end end |
.build(attribute_name, catalog_item:, wayfair_schema: nil) ⇒ BaseAttribute
Build an attribute mapper by name
13 14 15 16 17 18 19 |
# File 'app/services/edi/wayfair/listing_generator/attributes/attribute_factory.rb', line 13 def build(attribute_name, catalog_item:, wayfair_schema: nil) attribute_class = constantize_attribute(attribute_name) attribute_class.new( catalog_item: catalog_item, wayfair_schema: wayfair_schema ) end |
.build_by_id(taxonomy_attribute_id, catalog_item:, wayfair_schema: nil) ⇒ BaseAttribute?
Build an attribute mapper by taxonomy attribute ID
26 27 28 29 30 31 32 33 |
# File 'app/services/edi/wayfair/listing_generator/attributes/attribute_factory.rb', line 26 def build_by_id(taxonomy_attribute_id, catalog_item:, wayfair_schema: nil) attribute_name = id_to_attribute_name(taxonomy_attribute_id.to_s) return nil unless attribute_name build(attribute_name, catalog_item: catalog_item, wayfair_schema: wayfair_schema) rescue NameError nil end |
.reset_cache! ⇒ Object
Clear the cached mapping (useful after loading new attributes)
64 65 66 |
# File 'app/services/edi/wayfair/listing_generator/attributes/attribute_factory.rb', line 64 def reset_cache! @attributes_by_taxonomy_id = nil end |