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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.yardopts +1 -0
  4. data/CHANGELOG.md +10 -4
  5. data/README.md +28 -33
  6. data/datamappify.gemspec +3 -1
  7. data/lib/datamappify/data/criteria/active_record/count.rb +12 -0
  8. data/lib/datamappify/data/criteria/active_record/destroy.rb +17 -0
  9. data/lib/datamappify/data/criteria/active_record/exists.rb +13 -0
  10. data/lib/datamappify/data/criteria/active_record/find.rb +12 -0
  11. data/lib/datamappify/data/criteria/active_record/find_by_key.rb +12 -0
  12. data/lib/datamappify/data/criteria/active_record/save.rb +23 -0
  13. data/lib/datamappify/data/criteria/active_record/save_by_key.rb +14 -0
  14. data/lib/datamappify/data/criteria/active_record/transaction.rb +13 -0
  15. data/lib/datamappify/data/criteria/common.rb +96 -0
  16. data/lib/datamappify/data/criteria/relational/count.rb +13 -0
  17. data/lib/datamappify/data/criteria/relational/find.rb +23 -0
  18. data/lib/datamappify/data/criteria/relational/find_by_key.rb +17 -0
  19. data/lib/datamappify/data/criteria/relational/save.rb +26 -0
  20. data/lib/datamappify/data/criteria/relational/save_by_key.rb +15 -0
  21. data/lib/datamappify/data/criteria/sequel/count.rb +12 -0
  22. data/lib/datamappify/data/criteria/sequel/destroy.rb +17 -0
  23. data/lib/datamappify/data/criteria/sequel/exists.rb +13 -0
  24. data/lib/datamappify/data/criteria/sequel/find.rb +12 -0
  25. data/lib/datamappify/data/criteria/sequel/find_by_key.rb +12 -0
  26. data/lib/datamappify/data/criteria/sequel/save.rb +23 -0
  27. data/lib/datamappify/data/criteria/sequel/save_by_key.rb +14 -0
  28. data/lib/datamappify/data/criteria/sequel/transaction.rb +13 -0
  29. data/lib/datamappify/data/criteria.rb +8 -0
  30. data/lib/datamappify/data/errors.rb +1 -0
  31. data/lib/datamappify/data/mapper/attribute.rb +52 -0
  32. data/lib/datamappify/data/mapper.rb +95 -0
  33. data/lib/datamappify/data/provider/active_record.rb +7 -7
  34. data/lib/datamappify/data/provider/common_provider.rb +67 -0
  35. data/lib/datamappify/data/provider/sequel.rb +9 -9
  36. data/lib/datamappify/data/provider.rb +12 -0
  37. data/lib/datamappify/data/record.rb +13 -0
  38. data/lib/datamappify/data.rb +4 -0
  39. data/lib/datamappify/repository/mapping_dsl.rb +28 -0
  40. data/lib/datamappify/repository/query_method/count.rb +12 -0
  41. data/lib/datamappify/repository/query_method/destroy.rb +25 -0
  42. data/lib/datamappify/repository/query_method/find.rb +41 -0
  43. data/lib/datamappify/repository/query_method/method.rb +73 -0
  44. data/lib/datamappify/repository/query_method/save.rb +42 -0
  45. data/lib/datamappify/repository/query_method/transaction.rb +18 -0
  46. data/lib/datamappify/repository/query_method.rb +3 -0
  47. data/lib/datamappify/repository.rb +58 -92
  48. data/lib/datamappify/version.rb +1 -1
  49. data/lib/datamappify.rb +10 -5
  50. data/spec/repository/persistence_spec.rb +15 -23
  51. data/spec/repository_spec.rb +9 -5
  52. metadata +70 -15
  53. data/lib/datamappify/data/provider/active_record/persistence.rb +0 -31
  54. data/lib/datamappify/data/provider/common/persistence.rb +0 -57
  55. data/lib/datamappify/data/provider/common/relational/persistence.rb +0 -85
  56. data/lib/datamappify/data/provider/common/relational/record/mapper.rb +0 -24
  57. data/lib/datamappify/data/provider/common/relational/record/writer.rb +0 -67
  58. data/lib/datamappify/data/provider/sequel/persistence.rb +0 -31
  59. data/lib/datamappify/repository/attribute_source_data_class_builder.rb +0 -28
  60. data/lib/datamappify/repository/attributes_mapper.rb +0 -55
  61. data/lib/datamappify/repository/dsl.rb +0 -22
  62. data/lib/datamappify/repository/mapping_hash.rb +0 -8
  63. 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
@@ -1,8 +0,0 @@
1
- module Datamappify
2
- module Repository
3
- class MappingHash < Hash
4
- alias :field_names :keys
5
- alias :attribute_names :values
6
- end
7
- end
8
- end
@@ -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