datamappify 0.20.1 → 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|