datamappify 0.20.1 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +10 -4
- data/README.md +28 -33
- data/datamappify.gemspec +3 -1
- data/lib/datamappify/data/criteria/active_record/count.rb +12 -0
- data/lib/datamappify/data/criteria/active_record/destroy.rb +17 -0
- data/lib/datamappify/data/criteria/active_record/exists.rb +13 -0
- data/lib/datamappify/data/criteria/active_record/find.rb +12 -0
- data/lib/datamappify/data/criteria/active_record/find_by_key.rb +12 -0
- data/lib/datamappify/data/criteria/active_record/save.rb +23 -0
- data/lib/datamappify/data/criteria/active_record/save_by_key.rb +14 -0
- data/lib/datamappify/data/criteria/active_record/transaction.rb +13 -0
- data/lib/datamappify/data/criteria/common.rb +96 -0
- data/lib/datamappify/data/criteria/relational/count.rb +13 -0
- data/lib/datamappify/data/criteria/relational/find.rb +23 -0
- data/lib/datamappify/data/criteria/relational/find_by_key.rb +17 -0
- data/lib/datamappify/data/criteria/relational/save.rb +26 -0
- data/lib/datamappify/data/criteria/relational/save_by_key.rb +15 -0
- data/lib/datamappify/data/criteria/sequel/count.rb +12 -0
- data/lib/datamappify/data/criteria/sequel/destroy.rb +17 -0
- data/lib/datamappify/data/criteria/sequel/exists.rb +13 -0
- data/lib/datamappify/data/criteria/sequel/find.rb +12 -0
- data/lib/datamappify/data/criteria/sequel/find_by_key.rb +12 -0
- data/lib/datamappify/data/criteria/sequel/save.rb +23 -0
- data/lib/datamappify/data/criteria/sequel/save_by_key.rb +14 -0
- data/lib/datamappify/data/criteria/sequel/transaction.rb +13 -0
- data/lib/datamappify/data/criteria.rb +8 -0
- data/lib/datamappify/data/errors.rb +1 -0
- data/lib/datamappify/data/mapper/attribute.rb +52 -0
- data/lib/datamappify/data/mapper.rb +95 -0
- data/lib/datamappify/data/provider/active_record.rb +7 -7
- data/lib/datamappify/data/provider/common_provider.rb +67 -0
- data/lib/datamappify/data/provider/sequel.rb +9 -9
- data/lib/datamappify/data/provider.rb +12 -0
- data/lib/datamappify/data/record.rb +13 -0
- data/lib/datamappify/data.rb +4 -0
- data/lib/datamappify/repository/mapping_dsl.rb +28 -0
- data/lib/datamappify/repository/query_method/count.rb +12 -0
- data/lib/datamappify/repository/query_method/destroy.rb +25 -0
- data/lib/datamappify/repository/query_method/find.rb +41 -0
- data/lib/datamappify/repository/query_method/method.rb +73 -0
- data/lib/datamappify/repository/query_method/save.rb +42 -0
- data/lib/datamappify/repository/query_method/transaction.rb +18 -0
- data/lib/datamappify/repository/query_method.rb +3 -0
- data/lib/datamappify/repository.rb +58 -92
- data/lib/datamappify/version.rb +1 -1
- data/lib/datamappify.rb +10 -5
- data/spec/repository/persistence_spec.rb +15 -23
- data/spec/repository_spec.rb +9 -5
- metadata +70 -15
- data/lib/datamappify/data/provider/active_record/persistence.rb +0 -31
- data/lib/datamappify/data/provider/common/persistence.rb +0 -57
- data/lib/datamappify/data/provider/common/relational/persistence.rb +0 -85
- data/lib/datamappify/data/provider/common/relational/record/mapper.rb +0 -24
- data/lib/datamappify/data/provider/common/relational/record/writer.rb +0 -67
- data/lib/datamappify/data/provider/sequel/persistence.rb +0 -31
- data/lib/datamappify/repository/attribute_source_data_class_builder.rb +0 -28
- data/lib/datamappify/repository/attributes_mapper.rb +0 -55
- data/lib/datamappify/repository/dsl.rb +0 -22
- data/lib/datamappify/repository/mapping_hash.rb +0 -8
- data/lib/datamappify/util.rb +0 -13
@@ -1,67 +0,0 @@
|
|
1
|
-
module Datamappify
|
2
|
-
module Data
|
3
|
-
module Provider
|
4
|
-
module Common
|
5
|
-
module Relational
|
6
|
-
class RecordWriter
|
7
|
-
def initialize(entity, data_class, key_field_name)
|
8
|
-
@entity = entity
|
9
|
-
@data_class = data_class
|
10
|
-
@key_field_name = key_field_name
|
11
|
-
end
|
12
|
-
|
13
|
-
def insert_record(data_fields_mapping)
|
14
|
-
if is_foreign_record?
|
15
|
-
insert_foreign_record(data_fields_mapping)
|
16
|
-
else
|
17
|
-
new_record = insert_primary_record(data_fields_mapping)
|
18
|
-
update_entity_with_new_record_id(new_record.id)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def update_record(record, data_fields_mapping)
|
23
|
-
update_record_with_fields(record, data_fields_mapping)
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def is_foreign_record?
|
29
|
-
@key_field_name != :id
|
30
|
-
end
|
31
|
-
|
32
|
-
def is_an_empty_primary_key?(attribute_name)
|
33
|
-
(attribute_name == :id) && @entity.attributes[attribute_name].nil?
|
34
|
-
end
|
35
|
-
|
36
|
-
def insert_foreign_record(data_fields_mapping)
|
37
|
-
new_record = @data_class.new
|
38
|
-
new_record.send "#{@key_field_name}=", @entity.id
|
39
|
-
update_record_with_fields(new_record, data_fields_mapping)
|
40
|
-
end
|
41
|
-
|
42
|
-
def insert_primary_record(data_fields_mapping)
|
43
|
-
update_record_with_fields(@data_class.new, data_fields_mapping)
|
44
|
-
end
|
45
|
-
|
46
|
-
def update_record_with_fields(record, data_fields_mapping)
|
47
|
-
data_fields_mapping.field_names.each do |field_name|
|
48
|
-
attribute_name = data_fields_mapping[field_name]
|
49
|
-
|
50
|
-
unless is_an_empty_primary_key?(attribute_name)
|
51
|
-
record.send "#{field_name}=", @entity.attributes[attribute_name]
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
record.save
|
56
|
-
record
|
57
|
-
end
|
58
|
-
|
59
|
-
def update_entity_with_new_record_id(id)
|
60
|
-
@entity.id = id
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'datamappify/data/provider/common/relational/persistence'
|
2
|
-
require 'datamappify/data/provider/common/relational/record/mapper'
|
3
|
-
require 'datamappify/data/provider/common/relational/record/writer'
|
4
|
-
|
5
|
-
module Datamappify
|
6
|
-
module Data
|
7
|
-
module Provider
|
8
|
-
module Sequel
|
9
|
-
class Persistence < Data::Provider::Common::Relational::Persistence
|
10
|
-
def destroy(ids)
|
11
|
-
data_class.where(:id => ids).destroy
|
12
|
-
end
|
13
|
-
|
14
|
-
def exists?(id)
|
15
|
-
data_class.where(:id => id).any?
|
16
|
-
end
|
17
|
-
|
18
|
-
def transaction(&block)
|
19
|
-
data_class.db.transaction(&block)
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def record_attributes_method
|
25
|
-
:values
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Datamappify
|
2
|
-
module Repository
|
3
|
-
class AttributeSourceDataClassBuilder
|
4
|
-
def initialize(provider_class_name, data_class_name)
|
5
|
-
@provider_class_name = provider_class_name
|
6
|
-
@data_class_name = data_class_name
|
7
|
-
end
|
8
|
-
|
9
|
-
def build(data_fields_mapping)
|
10
|
-
require "datamappify/data/provider/#{@provider_class_name.underscore}"
|
11
|
-
|
12
|
-
unless data_class_is_defined?
|
13
|
-
provider_module.build_data_class(@data_class_name)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def provider_module
|
20
|
-
@provider_module ||= "Datamappify::Data::Provider::#{@provider_class_name}".constantize
|
21
|
-
end
|
22
|
-
|
23
|
-
def data_class_is_defined?
|
24
|
-
provider_module.const_defined?(@data_class_name, false)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'datamappify/repository/attribute_source_data_class_builder'
|
2
|
-
|
3
|
-
module Datamappify
|
4
|
-
module Repository
|
5
|
-
class AttributesMapper
|
6
|
-
def initialize(repository)
|
7
|
-
@repository = repository
|
8
|
-
|
9
|
-
map_non_custom_entity_attributes
|
10
|
-
map_custom_entity_attributes
|
11
|
-
end
|
12
|
-
|
13
|
-
def build_data_classes
|
14
|
-
@repository.data_mapping.each do |provider_class_name, data_class_mapping|
|
15
|
-
data_class_mapping.each do |data_class_name, data_fields_mapping|
|
16
|
-
AttributeSourceDataClassBuilder.new(provider_class_name, data_class_name).build(data_fields_mapping)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def map_non_custom_entity_attributes
|
24
|
-
provider_name = @repository.default_provider_class_name
|
25
|
-
data_class_name = @repository.entity_class.name
|
26
|
-
|
27
|
-
@repository.data_mapping[provider_name] ||= {}
|
28
|
-
@repository.data_mapping[provider_name][data_class_name] ||= MappingHash.new
|
29
|
-
|
30
|
-
non_custom_attributes.each do |attribute_name|
|
31
|
-
@repository.data_mapping[provider_name][data_class_name][attribute_name] = attribute_name
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def non_custom_attributes
|
36
|
-
@repository.entity_class.attribute_set.entries.map(&:name) - @repository.custom_attributes_mapping.keys
|
37
|
-
end
|
38
|
-
|
39
|
-
def map_custom_entity_attributes
|
40
|
-
@repository.custom_attributes_mapping.each do |attribute_name, source|
|
41
|
-
map_custom_entity_attribute(attribute_name, source)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def map_custom_entity_attribute(attribute_name, source)
|
46
|
-
namespaced_data_class_name, data_field_name = source.split('#')
|
47
|
-
provider_name, data_class_name = namespaced_data_class_name.split('::')
|
48
|
-
|
49
|
-
@repository.data_mapping[provider_name] ||= {}
|
50
|
-
@repository.data_mapping[provider_name][data_class_name] ||= MappingHash.new
|
51
|
-
@repository.data_mapping[provider_name][data_class_name][data_field_name.to_sym] = attribute_name
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module Datamappify
|
2
|
-
module Repository
|
3
|
-
module DSL
|
4
|
-
def for_entity(entity_class)
|
5
|
-
self.entity_class = entity_class
|
6
|
-
end
|
7
|
-
|
8
|
-
def default_provider(provider_name)
|
9
|
-
self.class_eval { require "datamappify/data/provider/#{provider_name.to_s.underscore}" }
|
10
|
-
|
11
|
-
provider_namespace = "Datamappify::Data::#{provider_name}"
|
12
|
-
|
13
|
-
self.default_provider_class_name = provider_name.to_s
|
14
|
-
self.default_data_class_name = self.entity_class.name
|
15
|
-
end
|
16
|
-
|
17
|
-
def map_attribute(attribute, source)
|
18
|
-
self.custom_attributes_mapping[attribute] = source
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/lib/datamappify/util.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
module Datamappify
|
2
|
-
class Util
|
3
|
-
class << self
|
4
|
-
def attributes_filtered_by(entity, attribute_names)
|
5
|
-
entity.attributes.select { |attr| attribute_names.include?(attr) }
|
6
|
-
end
|
7
|
-
|
8
|
-
def extract_entity_id(id_or_entity)
|
9
|
-
id_or_entity.is_a?(Integer) ? id_or_entity : id_or_entity.id
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|