Class: Datamappify::Data::Mapper
- Inherits:
-
Object
- Object
- Datamappify::Data::Mapper
- Defined in:
- lib/datamappify/data/mapper.rb,
lib/datamappify/data/mapper/attribute.rb
Defined Under Namespace
Classes: Attribute
Instance Attribute Summary collapse
-
#custom_mapping ⇒ Hash
Attribute name to source mapping as specified in Repository::MappingDSL#map_attribute.
- #default_provider_name ⇒ String
- #entity_class ⇒ Class
Instance Method Summary collapse
- #all_attribute_names ⇒ Array<Symbol> private
- #attributes ⇒ Set<Attribute>
- #attributes_from_default_source ⇒ Array<Attribute>
-
#classified_attributes ⇒ Hash<Set>
Attribute sets classified by the names of their data provider.
- #custom_attribute_names ⇒ Array<Symbol> private
- #custom_attributes ⇒ Array<Attribute> private
- #default_attribute_names ⇒ Array<Symbol> private
- #default_attributes ⇒ Array<Attribute> private
- #default_provider ⇒ Module
- #default_source_class ⇒ Class
- #default_source_class_name ⇒ String
- #default_source_for(attribute) ⇒ String private
-
#initialize ⇒ Mapper
constructor
A new instance of Mapper.
- #map_attribute(name, source) ⇒ Attribute private
- #provider(provider_name) ⇒ Module
Constructor Details
#initialize ⇒ Mapper
17 18 19 20 |
# File 'lib/datamappify/data/mapper.rb', line 17 def initialize @custom_mapping = {} @custom_attribute_names = [] end |
Instance Attribute Details
#custom_mapping ⇒ Hash
15 16 17 |
# File 'lib/datamappify/data/mapper.rb', line 15 def custom_mapping @custom_mapping end |
#default_provider_name ⇒ String
11 12 13 |
# File 'lib/datamappify/data/mapper.rb', line 11 def default_provider_name @default_provider_name end |
#entity_class ⇒ Class
8 9 10 |
# File 'lib/datamappify/data/mapper.rb', line 8 def entity_class @entity_class end |
Instance Method Details
#all_attribute_names ⇒ Array<Symbol> (private)
61 62 63 |
# File 'lib/datamappify/data/mapper.rb', line 61 def all_attribute_names entity_class.attribute_set.entries.collect(&:name) end |
#attributes ⇒ Set<Attribute>
43 44 45 |
# File 'lib/datamappify/data/mapper.rb', line 43 def attributes @attributes ||= Set.new(default_attributes + custom_attributes) end |
#attributes_from_default_source ⇒ Array<Attribute>
54 55 56 |
# File 'lib/datamappify/data/mapper.rb', line 54 def attributes_from_default_source classified_attributes[default_provider_name].classify(&:source_class_name)[default_source_class_name] end |
#classified_attributes ⇒ Hash<Set>
49 50 51 |
# File 'lib/datamappify/data/mapper.rb', line 49 def classified_attributes @classified_attributes ||= Set.new(attributes).classify(&:provider_name) end |
#custom_attribute_names ⇒ Array<Symbol> (private)
71 72 73 74 75 76 |
# File 'lib/datamappify/data/mapper.rb', line 71 def custom_attribute_names # make sure custom attributes are always processed custom_attributes @custom_attribute_names end |
#custom_attributes ⇒ Array<Attribute> (private)
86 87 88 89 90 |
# File 'lib/datamappify/data/mapper.rb', line 86 def custom_attributes @custom_attributes ||= custom_mapping.collect do |attribute, source| map_attribute(attribute, source) end end |
#default_attribute_names ⇒ Array<Symbol> (private)
66 67 68 |
# File 'lib/datamappify/data/mapper.rb', line 66 def default_attribute_names all_attribute_names - custom_attribute_names end |
#default_attributes ⇒ Array<Attribute> (private)
79 80 81 82 83 |
# File 'lib/datamappify/data/mapper.rb', line 79 def default_attributes @default_attributes ||= default_attribute_names.collect do |attribute| Attribute.new(attribute, default_source_for(attribute)) end end |
#default_provider ⇒ Module
23 24 25 |
# File 'lib/datamappify/data/mapper.rb', line 23 def default_provider @default_provider ||= Provider.const_get(default_provider_name) end |
#default_source_class ⇒ Class
33 34 35 |
# File 'lib/datamappify/data/mapper.rb', line 33 def default_source_class @default_source_class ||= default_provider.find_or_build_record_class(entity_class.name) end |
#default_source_class_name ⇒ String
38 39 40 |
# File 'lib/datamappify/data/mapper.rb', line 38 def default_source_class_name entity_class.name end |
#default_source_for(attribute) ⇒ String (private)
105 106 107 |
# File 'lib/datamappify/data/mapper.rb', line 105 def default_source_for(attribute) "#{default_provider_name}::#{entity_class.name}##{attribute}" end |
#map_attribute(name, source) ⇒ Attribute (private)
95 96 97 98 99 |
# File 'lib/datamappify/data/mapper.rb', line 95 def map_attribute(name, source) @custom_attribute_names << name Attribute.new(name, source) end |
#provider(provider_name) ⇒ Module
28 29 30 |
# File 'lib/datamappify/data/mapper.rb', line 28 def provider(provider_name) Provider.const_get(provider_name) end |