datamappify 0.20.1 → 0.30.0

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