axle_attributes 1.13.2

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 (119) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.travis.yml +16 -0
  4. data/Gemfile +15 -0
  5. data/README.md +10 -0
  6. data/Rakefile +18 -0
  7. data/app/models/attribute_customization.rb +7 -0
  8. data/app/models/attribute_customization/local_cache.rb +28 -0
  9. data/app/models/attribute_mapping.rb +15 -0
  10. data/app/models/attribute_mapping/local_cache.rb +40 -0
  11. data/axle_attributes.gemspec +22 -0
  12. data/bin/rails +8 -0
  13. data/db/migrate/20131118042651_create_attribute_customizations.rb +16 -0
  14. data/db/migrate/20131121013237_create_attribute_mappings.rb +17 -0
  15. data/db/migrate/20151120160522_add_editable_to_attribute_customizations.rb +7 -0
  16. data/lib/axle_attributes.rb +30 -0
  17. data/lib/axle_attributes/child_definition.rb +42 -0
  18. data/lib/axle_attributes/conversions.rb +36 -0
  19. data/lib/axle_attributes/definition.rb +118 -0
  20. data/lib/axle_attributes/definition/callbacks.rb +34 -0
  21. data/lib/axle_attributes/definition/customization.rb +51 -0
  22. data/lib/axle_attributes/definition/formatted.rb +57 -0
  23. data/lib/axle_attributes/definition/indexed.rb +41 -0
  24. data/lib/axle_attributes/definition/mappings.rb +48 -0
  25. data/lib/axle_attributes/dumper.rb +54 -0
  26. data/lib/axle_attributes/engine.rb +4 -0
  27. data/lib/axle_attributes/format.rb +74 -0
  28. data/lib/axle_attributes/has_attributes.rb +104 -0
  29. data/lib/axle_attributes/has_attributes/json_reader.rb +87 -0
  30. data/lib/axle_attributes/model.rb +34 -0
  31. data/lib/axle_attributes/null_definition.rb +11 -0
  32. data/lib/axle_attributes/parent_definition.rb +37 -0
  33. data/lib/axle_attributes/provided.rb +67 -0
  34. data/lib/axle_attributes/regex.rb +4 -0
  35. data/lib/axle_attributes/segmented.rb +30 -0
  36. data/lib/axle_attributes/serializations.rb +147 -0
  37. data/lib/axle_attributes/serializations/builder/serialization.rb +83 -0
  38. data/lib/axle_attributes/serializations/builder/serialize_many.rb +17 -0
  39. data/lib/axle_attributes/serializations/builder/serialize_one.rb +7 -0
  40. data/lib/axle_attributes/serializations/reflection.rb +40 -0
  41. data/lib/axle_attributes/serializations/serialization.rb +88 -0
  42. data/lib/axle_attributes/serializations/serialize_many.rb +88 -0
  43. data/lib/axle_attributes/serializations/serialize_one.rb +34 -0
  44. data/lib/axle_attributes/serialized_child.rb +58 -0
  45. data/lib/axle_attributes/validations.rb +29 -0
  46. data/lib/axle_attributes/versioned.rb +21 -0
  47. data/test/dummy/README.rdoc +6 -0
  48. data/test/dummy/Rakefile +6 -0
  49. data/test/dummy/app/assets/images/.keep +0 -0
  50. data/test/dummy/app/assets/javascripts/application.js +13 -0
  51. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  52. data/test/dummy/app/controllers/application_controller.rb +5 -0
  53. data/test/dummy/app/controllers/concerns/.keep +0 -0
  54. data/test/dummy/app/helpers/application_helper.rb +2 -0
  55. data/test/dummy/app/mailers/.keep +0 -0
  56. data/test/dummy/app/models/.keep +0 -0
  57. data/test/dummy/app/models/concerns/.keep +0 -0
  58. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  59. data/test/dummy/bin/bundle +3 -0
  60. data/test/dummy/bin/rails +4 -0
  61. data/test/dummy/bin/rake +4 -0
  62. data/test/dummy/config.ru +4 -0
  63. data/test/dummy/config/application.rb +12 -0
  64. data/test/dummy/config/boot.rb +5 -0
  65. data/test/dummy/config/database.yml +13 -0
  66. data/test/dummy/config/environment.rb +5 -0
  67. data/test/dummy/config/environments/development.rb +29 -0
  68. data/test/dummy/config/environments/production.rb +80 -0
  69. data/test/dummy/config/environments/test.rb +38 -0
  70. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  71. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  72. data/test/dummy/config/initializers/inflections.rb +16 -0
  73. data/test/dummy/config/initializers/mime_types.rb +5 -0
  74. data/test/dummy/config/initializers/secret_token.rb +12 -0
  75. data/test/dummy/config/initializers/session_store.rb +3 -0
  76. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  77. data/test/dummy/config/locales/en.yml +23 -0
  78. data/test/dummy/config/routes.rb +56 -0
  79. data/test/dummy/db/schema.rb +50 -0
  80. data/test/dummy/lib/assets/.keep +0 -0
  81. data/test/dummy/log/.keep +0 -0
  82. data/test/dummy/public/404.html +58 -0
  83. data/test/dummy/public/422.html +58 -0
  84. data/test/dummy/public/500.html +57 -0
  85. data/test/dummy/public/favicon.ico +0 -0
  86. data/test/factories/all.rb +14 -0
  87. data/test/helper.rb +25 -0
  88. data/test/lib/child_definition_test.rb +43 -0
  89. data/test/lib/conversions_test.rb +39 -0
  90. data/test/lib/definition/customization_test.rb +36 -0
  91. data/test/lib/definition/formatted_test.rb +75 -0
  92. data/test/lib/definition/indexed_test.rb +57 -0
  93. data/test/lib/definition/mappings_test.rb +26 -0
  94. data/test/lib/definition_test.rb +84 -0
  95. data/test/lib/dumper_test.rb +38 -0
  96. data/test/lib/format_test.rb +64 -0
  97. data/test/lib/has_attributes/json_reader_test.rb +46 -0
  98. data/test/lib/has_attributes_test.rb +69 -0
  99. data/test/lib/model_test.rb +44 -0
  100. data/test/lib/null_definition_test.rb +27 -0
  101. data/test/lib/parent_definition_test.rb +75 -0
  102. data/test/lib/provided_test.rb +46 -0
  103. data/test/lib/segmented_test.rb +27 -0
  104. data/test/lib/serializations/reflection_test.rb +24 -0
  105. data/test/lib/serializations/serialize_many_test.rb +194 -0
  106. data/test/lib/serializations/serialize_one_test.rb +122 -0
  107. data/test/lib/serializations_test.rb +24 -0
  108. data/test/lib/serialized_child_test.rb +91 -0
  109. data/test/lib/timestamp_attributes_test.rb +14 -0
  110. data/test/lib/validations_test.rb +8 -0
  111. data/test/lib/versioned_test.rb +35 -0
  112. data/test/models/attribute_customization/local_cache_test.rb +16 -0
  113. data/test/models/attribute_customization_test.rb +8 -0
  114. data/test/models/attribute_mapping/local_cache_test.rb +31 -0
  115. data/test/models/attribute_mapping_test.rb +20 -0
  116. data/test/support/business.rb +22 -0
  117. data/test/support/pg.rb +9 -0
  118. data/test/support/vegetable.rb +8 -0
  119. metadata +215 -0
@@ -0,0 +1,14 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::TimestampAttributesTest < ActiveSupport::TestCase
4
+ class Product < Superstore::Base
5
+ include AxleAttributes::Model
6
+ end
7
+
8
+ test 'timestamps' do
9
+ assert_not_nil Product.attributes['created_at']
10
+ assert_not_nil Product.attributes['updated_at']
11
+ assert Product.attributes['created_at'].readonly?
12
+ assert Product.attributes['updated_at'].readonly?
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::ValidationsTest < ActiveSupport::TestCase
4
+ test 'validate formats' do
5
+ refute Business.new(structure: 'poo').valid?
6
+ assert Business.new(structure: 'llc').valid?
7
+ end
8
+ end
@@ -0,0 +1,35 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::VersionedTest < ActiveSupport::TestCase
4
+ class Joke < Superstore::Base
5
+ include AxleAttributes::SerializedChild
6
+
7
+ has_attribute :text, type: :text, version: true
8
+ has_attribute :lol_factor, type: :integer, version: false
9
+ end
10
+
11
+ class ParentRecord < Superstore::Base
12
+ include AxleAttributes::Model
13
+ end
14
+
15
+ class TestRecord < ParentRecord
16
+ has_attribute :name, type: :string, version: true
17
+ has_attribute :price, type: :integer, version: true
18
+ has_attribute :weight, type: :float, version: true
19
+ has_attribute :is_cool, type: :boolean, version: true
20
+ has_attribute :color, type: :string
21
+
22
+ serialize_many :jokes, class_name: 'AxleAttributes::VersionedTest::Joke'
23
+
24
+ self.add_versioned_attribute :name, :price, :weight
25
+ end
26
+
27
+ def test_class_versioned_attributes
28
+ assert_equal Set.new(['name', 'price', 'weight', 'is_cool', 'jokes']), TestRecord.versioned_attributes
29
+ end
30
+
31
+ def test_versioned_attributes
32
+ assert ParentRecord.versioned_attributes.exclude?('weight')
33
+ assert TestRecord.versioned_attributes.include?('weight')
34
+ end
35
+ end
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+
3
+ class AttributeCustomization::LocalCacheTest < ActiveSupport::TestCase
4
+ test "cached_list_for" do
5
+ attribute_customization = create :attribute_customization, namespace: 'Foo', name: 'bar'
6
+ expected = {'bar' => attribute_customization}
7
+ assert_equal expected, AttributeCustomization.namespace_cache_for('Foo').read
8
+
9
+ attribute_customization.destroy
10
+ assert_equal({}, AttributeCustomization.namespace_cache_for('Foo').read)
11
+ end
12
+
13
+ test "cached_mapping_name" do
14
+ assert_equal 'attribute_customizations_Place', AttributeCustomization.namespace_cache_for('Place').cache_name
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ require 'helper'
2
+
3
+ class AttributeCustomizationTest < ActiveSupport::TestCase
4
+ test 'aliases' do
5
+ assert_equal [], build(:attribute_customization, aliases_csv: nil).aliases
6
+ assert_equal ['foo', 'bar'], build(:attribute_customization, aliases_csv: 'foo,bar').aliases
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ require 'helper'
2
+
3
+ class AttributeMapping::LocalCacheTest < ActiveSupport::TestCase
4
+ setup do
5
+ AxleAttributes::Definition.reset_caches
6
+ end
7
+
8
+ test "cached_mapping_for" do
9
+ assert_equal({}, AttributeMapping.cached_mapping_for('Foo').read)
10
+
11
+ attribute_mapping = create :attribute_mapping, namespace: 'Foo', attribute_name: 'bar', value: 'omgz', label: 'Rofl'
12
+ expected = {'omgz' => 'Rofl'}
13
+ assert_equal expected, AttributeMapping.cached_mapping_for('Foo').read['bar']
14
+
15
+ attribute_mapping.destroy
16
+ assert_equal({}, AttributeMapping.cached_mapping_for('Foo').read)
17
+ end
18
+
19
+ test "alphanumeric ordering" do
20
+ attribute_mapping = create :attribute_mapping, namespace: 'Foo', attribute_name: 'baz', value: 'b', label: '10'
21
+ attribute_mapping = create :attribute_mapping, namespace: 'Foo', attribute_name: 'baz', value: 'c', label: '2'
22
+ attribute_mapping = create :attribute_mapping, namespace: 'Foo', attribute_name: 'baz', value: 'a', label: 'a'
23
+
24
+ expected = {"a" => "a", "b" => "10", "c" => "2"}.to_a
25
+ assert_equal expected, AttributeMapping.cached_mapping_for('Foo').read['baz'].to_a
26
+ end
27
+
28
+ test "cache_name" do
29
+ assert_equal 'attribute_mapping_Foo', AttributeMapping.cached_mapping_for('Foo').cache_name
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ class AttributeMappingTest < ActiveSupport::TestCase
4
+ test "definition" do
5
+ attribute_mapping = build :attribute_mapping, namespace: 'Business', attribute_name: 'status'
6
+
7
+ assert_equal Business.attributes['status'], attribute_mapping.definition
8
+ end
9
+
10
+ test "target_class" do
11
+ attribute_mapping = build :attribute_mapping, namespace: 'Business'
12
+ assert_equal Business, attribute_mapping.target_class
13
+ end
14
+
15
+ test "to_option" do
16
+ attribute_mapping = build :attribute_mapping, label: 'Foo', value: 'bar'
17
+
18
+ assert_equal ['Foo', 'bar'], attribute_mapping.to_option
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ class BusinessStructureFormat
2
+ def standardize(definition, value)
3
+ value.upcase
4
+ end
5
+
6
+ def validate(definition, value)
7
+ unless ['LLC', 'LLP'].include?(value)
8
+ 'is not valid'
9
+ end
10
+ end
11
+ end
12
+
13
+ AxleAttributes::Definition.formatters[:business_structure] = BusinessStructureFormat.new
14
+
15
+ class Business < Superstore::Base
16
+ include AxleAttributes::Model
17
+ elastic_index.disable!
18
+
19
+ has_attribute :name, type: :string
20
+ has_attribute :street, type: :string
21
+ has_attribute :structure, type: :string, format: :business_structure
22
+ end
@@ -0,0 +1,9 @@
1
+ class PGInitializer
2
+ def self.initialize!
3
+ Superstore::Base.config = {'adapter' => 'jsonb'}
4
+ ActiveRecord::Migration.drop_table('businesses') if ActiveRecord::Migration.table_exists?('businesses')
5
+ Superstore::Base.adapter.create_table('businesses')
6
+ end
7
+ end
8
+
9
+ PGInitializer.initialize!
@@ -0,0 +1,8 @@
1
+ class Vegetable
2
+ def self.cached_mapping
3
+ {
4
+ 'lett' => 'Lettuce',
5
+ 'potato' => 'Potato'
6
+ }
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,215 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: axle_attributes
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.13.2
5
+ platform: ruby
6
+ authors:
7
+ - Matthew Higgins
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: elastic_record
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: axle_traveller
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: superstore
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.10
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.10
69
+ description: Why
70
+ email: developer@matthewhiggins.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - ".gitignore"
76
+ - ".travis.yml"
77
+ - Gemfile
78
+ - README.md
79
+ - Rakefile
80
+ - app/models/attribute_customization.rb
81
+ - app/models/attribute_customization/local_cache.rb
82
+ - app/models/attribute_mapping.rb
83
+ - app/models/attribute_mapping/local_cache.rb
84
+ - axle_attributes.gemspec
85
+ - bin/rails
86
+ - db/migrate/20131118042651_create_attribute_customizations.rb
87
+ - db/migrate/20131121013237_create_attribute_mappings.rb
88
+ - db/migrate/20151120160522_add_editable_to_attribute_customizations.rb
89
+ - lib/axle_attributes.rb
90
+ - lib/axle_attributes/child_definition.rb
91
+ - lib/axle_attributes/conversions.rb
92
+ - lib/axle_attributes/definition.rb
93
+ - lib/axle_attributes/definition/callbacks.rb
94
+ - lib/axle_attributes/definition/customization.rb
95
+ - lib/axle_attributes/definition/formatted.rb
96
+ - lib/axle_attributes/definition/indexed.rb
97
+ - lib/axle_attributes/definition/mappings.rb
98
+ - lib/axle_attributes/dumper.rb
99
+ - lib/axle_attributes/engine.rb
100
+ - lib/axle_attributes/format.rb
101
+ - lib/axle_attributes/has_attributes.rb
102
+ - lib/axle_attributes/has_attributes/json_reader.rb
103
+ - lib/axle_attributes/model.rb
104
+ - lib/axle_attributes/null_definition.rb
105
+ - lib/axle_attributes/parent_definition.rb
106
+ - lib/axle_attributes/provided.rb
107
+ - lib/axle_attributes/regex.rb
108
+ - lib/axle_attributes/segmented.rb
109
+ - lib/axle_attributes/serializations.rb
110
+ - lib/axle_attributes/serializations/builder/serialization.rb
111
+ - lib/axle_attributes/serializations/builder/serialize_many.rb
112
+ - lib/axle_attributes/serializations/builder/serialize_one.rb
113
+ - lib/axle_attributes/serializations/reflection.rb
114
+ - lib/axle_attributes/serializations/serialization.rb
115
+ - lib/axle_attributes/serializations/serialize_many.rb
116
+ - lib/axle_attributes/serializations/serialize_one.rb
117
+ - lib/axle_attributes/serialized_child.rb
118
+ - lib/axle_attributes/validations.rb
119
+ - lib/axle_attributes/versioned.rb
120
+ - test/dummy/README.rdoc
121
+ - test/dummy/Rakefile
122
+ - test/dummy/app/assets/images/.keep
123
+ - test/dummy/app/assets/javascripts/application.js
124
+ - test/dummy/app/assets/stylesheets/application.css
125
+ - test/dummy/app/controllers/application_controller.rb
126
+ - test/dummy/app/controllers/concerns/.keep
127
+ - test/dummy/app/helpers/application_helper.rb
128
+ - test/dummy/app/mailers/.keep
129
+ - test/dummy/app/models/.keep
130
+ - test/dummy/app/models/concerns/.keep
131
+ - test/dummy/app/views/layouts/application.html.erb
132
+ - test/dummy/bin/bundle
133
+ - test/dummy/bin/rails
134
+ - test/dummy/bin/rake
135
+ - test/dummy/config.ru
136
+ - test/dummy/config/application.rb
137
+ - test/dummy/config/boot.rb
138
+ - test/dummy/config/database.yml
139
+ - test/dummy/config/environment.rb
140
+ - test/dummy/config/environments/development.rb
141
+ - test/dummy/config/environments/production.rb
142
+ - test/dummy/config/environments/test.rb
143
+ - test/dummy/config/initializers/backtrace_silencers.rb
144
+ - test/dummy/config/initializers/filter_parameter_logging.rb
145
+ - test/dummy/config/initializers/inflections.rb
146
+ - test/dummy/config/initializers/mime_types.rb
147
+ - test/dummy/config/initializers/secret_token.rb
148
+ - test/dummy/config/initializers/session_store.rb
149
+ - test/dummy/config/initializers/wrap_parameters.rb
150
+ - test/dummy/config/locales/en.yml
151
+ - test/dummy/config/routes.rb
152
+ - test/dummy/db/schema.rb
153
+ - test/dummy/lib/assets/.keep
154
+ - test/dummy/log/.keep
155
+ - test/dummy/public/404.html
156
+ - test/dummy/public/422.html
157
+ - test/dummy/public/500.html
158
+ - test/dummy/public/favicon.ico
159
+ - test/factories/all.rb
160
+ - test/helper.rb
161
+ - test/lib/child_definition_test.rb
162
+ - test/lib/conversions_test.rb
163
+ - test/lib/definition/customization_test.rb
164
+ - test/lib/definition/formatted_test.rb
165
+ - test/lib/definition/indexed_test.rb
166
+ - test/lib/definition/mappings_test.rb
167
+ - test/lib/definition_test.rb
168
+ - test/lib/dumper_test.rb
169
+ - test/lib/format_test.rb
170
+ - test/lib/has_attributes/json_reader_test.rb
171
+ - test/lib/has_attributes_test.rb
172
+ - test/lib/model_test.rb
173
+ - test/lib/null_definition_test.rb
174
+ - test/lib/parent_definition_test.rb
175
+ - test/lib/provided_test.rb
176
+ - test/lib/segmented_test.rb
177
+ - test/lib/serializations/reflection_test.rb
178
+ - test/lib/serializations/serialize_many_test.rb
179
+ - test/lib/serializations/serialize_one_test.rb
180
+ - test/lib/serializations_test.rb
181
+ - test/lib/serialized_child_test.rb
182
+ - test/lib/timestamp_attributes_test.rb
183
+ - test/lib/validations_test.rb
184
+ - test/lib/versioned_test.rb
185
+ - test/models/attribute_customization/local_cache_test.rb
186
+ - test/models/attribute_customization_test.rb
187
+ - test/models/attribute_mapping/local_cache_test.rb
188
+ - test/models/attribute_mapping_test.rb
189
+ - test/support/business.rb
190
+ - test/support/pg.rb
191
+ - test/support/vegetable.rb
192
+ homepage: http://github.com/data-axle/axle_attributes
193
+ licenses: []
194
+ metadata: {}
195
+ post_install_message:
196
+ rdoc_options: []
197
+ require_paths:
198
+ - lib
199
+ required_ruby_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: 2.0.0
204
+ required_rubygems_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: 1.8.0
209
+ requirements: []
210
+ rubyforge_project:
211
+ rubygems_version: 2.4.5.1
212
+ signing_key:
213
+ specification_version: 4
214
+ summary: Attribute framework for Data Axle
215
+ test_files: []