axle_attributes 1.13.2

Sign up to get free protection for your applications and to get access to all the features.
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
File without changes
File without changes
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :attribute_customization do
3
+ namespace 'Business'
4
+ name 'street'
5
+ display_name 'Street'
6
+ end
7
+
8
+ factory :attribute_mapping do
9
+ namespace 'Business'
10
+ attribute_name 'status'
11
+ label 'Active'
12
+ value 'active'
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require "rails/test_help"
5
+
6
+ Rails.backtrace_cleaner.remove_silencers!
7
+ ActiveSupport.parse_json_times = true
8
+
9
+ FactoryGirl.definition_file_paths << File.expand_path("../factories", __FILE__)
10
+ FactoryGirl.find_definitions
11
+
12
+ require 'support/pg'
13
+ require 'support/business'
14
+ require 'support/vegetable'
15
+
16
+ module ActiveSupport
17
+ class TestCase
18
+ include FactoryGirl::Syntax::Methods
19
+
20
+ setup do
21
+ AxleAttributes::Definition.reset_caches
22
+ Rails.cache.clear
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::ChildDefinitionTest < ActiveSupport::TestCase
4
+ class TestModel < Superstore::Base
5
+ include AxleAttributes::SerializedChild
6
+ end
7
+
8
+ test 'display_name' do
9
+ assert_equal 'Test model: Foo', AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :integer).display_name
10
+ assert_equal 'Test model: Foo', AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :integer).display_name
11
+ end
12
+
13
+ test 'canonical_name' do
14
+ assert_equal 'axle_attributes_child_definition_test_test_model.foo', AxleAttributes::ChildDefinition.new(TestModel, :foo).canonical_name
15
+ end
16
+
17
+ test 'setup types' do
18
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :integer).setup!
19
+ assert_kind_of Superstore::Types::IntegerType, TestModel.attribute_definitions['foo'].type
20
+
21
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :boolean).setup!
22
+ assert_kind_of Superstore::Types::BooleanType, TestModel.attribute_definitions['foo'].type
23
+
24
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :string).setup!
25
+ assert_kind_of Superstore::Types::StringType, TestModel.attribute_definitions['foo'].type
26
+
27
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :text).setup!
28
+ assert_kind_of Superstore::Types::StringType, TestModel.attribute_definitions['foo'].type
29
+
30
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :json).setup!
31
+ assert_kind_of Superstore::Types::JsonType, TestModel.attribute_definitions['foo'].type
32
+ end
33
+
34
+ test 'setup versioned' do
35
+ TestModel.versioned_attributes.clear
36
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :boolean, version: true).setup!
37
+ assert_equal ['foo'].to_set, TestModel.versioned_attributes
38
+
39
+ TestModel.versioned_attributes.clear
40
+ AxleAttributes::ChildDefinition.new(TestModel, :foo, type: :boolean).setup!
41
+ assert_equal [].to_set, TestModel.versioned_attributes
42
+ end
43
+ end
@@ -0,0 +1,39 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::ConversionsTest < ActiveSupport::TestCase
4
+ class TestModel
5
+ include AxleAttributes::HasAttributes
6
+
7
+ has_attribute :color, type: :string
8
+ end
9
+
10
+ include AxleAttributes::Conversions
11
+
12
+ use_target_class TestModel
13
+
14
+ test 'definitions' do
15
+ expected = TestModel.attributes['color']
16
+ assert_equal expected, to_definition(expected)
17
+ end
18
+
19
+ test 'string converted to definition' do
20
+ expected = TestModel.attributes['color']
21
+ assert_equal expected, to_definition('color')
22
+ end
23
+
24
+ test 'null definitions' do
25
+ expected = AxleAttributes::NullDefinition.new(TestModel, 'abc')
26
+ assert_equal expected, to_definition(expected)
27
+ end
28
+
29
+ test 'string converted to null definition' do
30
+ expected = AxleAttributes::NullDefinition.new(TestModel, 'contacts')
31
+ assert_equal expected, to_definition('contacts')
32
+ end
33
+
34
+ test 'unknown conversion' do
35
+ assert_raises ConversionError do
36
+ to_definition(123)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,36 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::Definition::CustomizationTest < ActiveSupport::TestCase
4
+ test 'customization' do
5
+ attribute_customization = create :attribute_customization, name: 'foo', namespace: 'Business'
6
+ foo = AxleAttributes::Definition.new Business, :foo
7
+
8
+ assert_equal attribute_customization, foo.customization
9
+ end
10
+
11
+ test 'display_name' do
12
+ foo = AxleAttributes::Definition.new Business, :foo
13
+ assert_equal 'Foo', foo.display_name
14
+
15
+ foo_bar = AxleAttributes::Definition.new Business, 'foo.bar'
16
+ assert_equal 'Foo Bar', foo_bar.display_name
17
+ end
18
+
19
+ test 'readers' do
20
+ attribute_customization = create :attribute_customization, name: 'foo', namespace: 'Business', description: 'A cool attribute', editable: false, notes: 'We need to remove this', deprecated_on: Date.new(2004, 12, 24)
21
+ foo = AxleAttributes::Definition.new Business, :foo
22
+ bar = AxleAttributes::Definition.new Business, :bar
23
+
24
+ assert_equal 'A cool attribute', foo.description
25
+ assert_equal false, foo.editable_customization
26
+ assert_equal 'We need to remove this', foo.notes
27
+ assert_equal Date.new(2004, 12, 24), foo.deprecated_on
28
+ assert foo.deprecated?
29
+
30
+ assert_nil bar.description
31
+ assert_equal true, bar.editable_customization
32
+ assert_nil bar.notes
33
+ assert_nil bar.deprecated_on
34
+ refute bar.deprecated?
35
+ end
36
+ end
@@ -0,0 +1,75 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::Definition::FormattedTest < ActiveSupport::TestCase
4
+ class PriceFormatter
5
+ # ui_regex: /\$\d+\.\d+/.inspect,
6
+ # ui_regex_error: "Please enter a price. eg. $4.99",
7
+ def setup!(definition)
8
+ end
9
+
10
+ def standardize(definition, value)
11
+ if value.start_with?('$')
12
+ value
13
+ else
14
+ "$#{value}"
15
+ end
16
+ end
17
+
18
+ def validate(definition, value)
19
+ unless value =~ /\$\d+\.\d{2}/
20
+ 'must be in format $31.42'
21
+ end
22
+ end
23
+
24
+ def instructions(definition)
25
+ "ex. $4.99"
26
+ end
27
+
28
+ def analyzer_mapping
29
+ {"lol" => "bar"}
30
+ end
31
+ end
32
+
33
+ class DumbFormatter
34
+ end
35
+
36
+ class TestDefinition < AxleAttributes::Definition
37
+ self.formatters = formatters.update(price: PriceFormatter.new, dumb: DumbFormatter.new)
38
+ end
39
+
40
+ test 'formatter setup with method override' do
41
+ assert_equal 'LLC', Business.new(structure: 'llc').structure
42
+ end
43
+
44
+ test 'instructions without customization' do
45
+ assert_equal "ex. $4.99", TestDefinition.new(Business, :foo, type: :integer, format: :price).instructions
46
+ assert_nil TestDefinition.new(Business, :foo, type: :integer, format: :dumb).instructions
47
+ end
48
+
49
+ test 'instructions with customization' do
50
+ create :attribute_customization, namespace: 'Business', name: 'bar', instructions: "Do it good"
51
+
52
+ assert_equal "Do it good", TestDefinition.new(Business, :bar, type: :integer, format: :price).instructions
53
+ end
54
+
55
+ test 'analyzer_mapping' do
56
+ assert_nil TestDefinition.new(Business, :foo, type: :integer, format: :dumb).analyzer_mapping
57
+ assert_equal({type: "string", analyzer: :snowball}, TestDefinition.new(Business, :foo, type: :integer, format: :dumb, index: :snowball).analyzer_mapping)
58
+
59
+ assert_equal({"lol" => "bar"}, TestDefinition.new(Business, :foo, type: :integer, format: :price).analyzer_mapping)
60
+ end
61
+
62
+ test 'standardize' do
63
+ assert_equal 'lol', TestDefinition.new(Business, :foo, type: :integer, format: :dumb).standardize('lol')
64
+
65
+ assert_equal '$5.43', TestDefinition.new(Business, :foo, type: :integer, format: :price).standardize('5.43')
66
+ assert_equal '$5.43', TestDefinition.new(Business, :foo, type: :integer, format: :price).standardize('$5.43')
67
+ end
68
+
69
+ test 'validate' do
70
+ assert_nil TestDefinition.new(Business, :foo, type: :integer, format: :dumb).validate('lol')
71
+
72
+ assert_nil TestDefinition.new(Business, :foo, type: :integer, format: :price).validate('$5.43')
73
+ assert_equal 'must be in format $31.42', TestDefinition.new(Business, :foo, type: :integer, format: :price).validate('ab12')
74
+ end
75
+ end
@@ -0,0 +1,57 @@
1
+ require 'helper'
2
+
3
+ class AxleAttributes::Definition::IndexedTest < ActiveSupport::TestCase
4
+ class TestModel
5
+ class << self
6
+ def name
7
+ 'TestModel'
8
+ end
9
+ end
10
+ end
11
+
12
+ test 'analyzer_mapping' do
13
+ assert_equal({type: "string", analyzer: :snowball}, AxleAttributes::Definition.new(TestModel, :name, index: :snowball).analyzer_mapping)
14
+ assert_equal({type: "string", analyzer: :simple}, AxleAttributes::Definition.new(TestModel, :name, index: :simple).analyzer_mapping)
15
+ assert_nil AxleAttributes::Definition.new(TestModel, :foo).analyzer_mapping
16
+ end
17
+
18
+ test 'index_mapping' do
19
+ assert_nil build_mapping(type: :string, index: false)
20
+
21
+ assert_equal(
22
+ {type: "geo_point", lat_lon: true},
23
+ build_mapping(type: false, index: {type: "geo_point", lat_lon: true})
24
+ )
25
+
26
+ assert_equal(
27
+ {type: "boolean", doc_values: true},
28
+ build_mapping(type: :boolean, index: true)
29
+ )
30
+
31
+ assert_equal(
32
+ {type: "date", format: "date", doc_values: true},
33
+ build_mapping(type: :date, index: true)
34
+ )
35
+
36
+ assert_equal(
37
+ {type: "string", index_analyzer: "keyword", search_analyzer: "standard"},
38
+ build_mapping(type: :string, index: true)
39
+ )
40
+
41
+ assert_equal(
42
+ {type: "multi_field", fields: {'foo'=> {type: "string", index: "not_analyzed", doc_values: true}, analyzed: {type: "string", analyzer: :snowball}}},
43
+ build_mapping(type: :string, index: :snowball)
44
+ )
45
+
46
+ assert_equal(
47
+ {type: "multi_field", fields: {'foo' => {type: "string", index: "not_analyzed", doc_values: true}, analyzed: {type: "string", analyzer: :simple}}},
48
+ build_mapping(type: :string, index: :simple)
49
+ )
50
+ end
51
+
52
+ private
53
+
54
+ def build_mapping(options)
55
+ AxleAttributes::Definition.new(TestModel, :foo, options).index_mapping
56
+ end
57
+ end