enumerize 2.0.1 → 2.5.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 (64) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +73 -0
  3. data/CHANGELOG.md +80 -3
  4. data/Gemfile +3 -3
  5. data/Gemfile.global +2 -9
  6. data/Gemfile.mongo_mapper +2 -2
  7. data/Gemfile.rails60 +6 -0
  8. data/Gemfile.rails61 +6 -0
  9. data/Gemfile.rails70 +9 -0
  10. data/Gemfile.railsmaster +5 -0
  11. data/README.md +209 -92
  12. data/Rakefile +2 -0
  13. data/lib/enumerize/activemodel.rb +47 -0
  14. data/lib/enumerize/activerecord.rb +79 -0
  15. data/lib/enumerize/attribute.rb +19 -11
  16. data/lib/enumerize/attribute_map.rb +2 -0
  17. data/lib/enumerize/base.rb +6 -6
  18. data/lib/enumerize/hooks/formtastic.rb +4 -1
  19. data/lib/enumerize/hooks/sequel_dataset.rb +2 -0
  20. data/lib/enumerize/hooks/simple_form.rb +4 -1
  21. data/lib/enumerize/hooks/uniqueness.rb +5 -1
  22. data/lib/enumerize/integrations/rails_admin.rb +3 -1
  23. data/lib/enumerize/integrations/rspec/matcher.rb +7 -2
  24. data/lib/enumerize/integrations/rspec.rb +2 -0
  25. data/lib/enumerize/module.rb +2 -0
  26. data/lib/enumerize/module_attributes.rb +2 -0
  27. data/lib/enumerize/mongoid.rb +16 -0
  28. data/lib/enumerize/predicatable.rb +3 -1
  29. data/lib/enumerize/predicates.rb +2 -0
  30. data/lib/enumerize/scope/activerecord.rb +16 -0
  31. data/lib/enumerize/scope/mongoid.rb +15 -0
  32. data/lib/enumerize/scope/sequel.rb +16 -0
  33. data/lib/enumerize/sequel.rb +9 -4
  34. data/lib/enumerize/set.rb +2 -0
  35. data/lib/enumerize/utils.rb +12 -0
  36. data/lib/enumerize/value.rb +14 -15
  37. data/lib/enumerize/version.rb +3 -1
  38. data/lib/enumerize.rb +9 -0
  39. data/lib/sequel/plugins/enumerize.rb +18 -0
  40. data/spec/enumerize/integrations/rspec/matcher_spec.rb +13 -10
  41. data/spec/spec_helper.rb +2 -0
  42. data/test/activemodel_test.rb +114 -0
  43. data/test/activerecord_test.rb +277 -79
  44. data/test/attribute_map_test.rb +9 -7
  45. data/test/attribute_test.rb +37 -30
  46. data/test/base_test.rb +66 -64
  47. data/test/formtastic_test.rb +25 -0
  48. data/test/module_attributes_test.rb +10 -8
  49. data/test/mongo_mapper_test.rb +19 -10
  50. data/test/mongoid_test.rb +51 -22
  51. data/test/multiple_test.rb +26 -18
  52. data/test/predicates_test.rb +30 -28
  53. data/test/rails_admin_test.rb +8 -6
  54. data/test/sequel_test.rb +111 -58
  55. data/test/set_test.rb +28 -26
  56. data/test/simple_form_test.rb +25 -0
  57. data/test/support/mock_controller.rb +6 -0
  58. data/test/support/shared_enums.rb +43 -0
  59. data/test/support/view_test_helper.rb +14 -1
  60. data/test/test_helper.rb +2 -0
  61. data/test/value_test.rb +51 -30
  62. metadata +14 -27
  63. data/.travis.yml +0 -18
  64. data/Gemfile.rails42 +0 -6
data/test/value_test.rb CHANGED
@@ -1,46 +1,49 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'yaml'
3
5
 
4
6
  describe Enumerize::Value do
5
- class Attr < Struct.new(:values)
7
+ class Model
8
+ end
9
+
10
+ class Attr < Struct.new(:values, :name, :i18n_scopes, :klass)
6
11
  end
7
12
 
8
- let(:attr) { Attr.new([]) }
9
- let(:val) { Enumerize::Value.new(attr, 'test_value', 1) }
13
+ let(:attr) { Attr.new([], "attribute_name", [], Model) }
14
+ let(:val) { Enumerize::Value.new(attr, 'test_value', 1) }
10
15
 
11
16
  it 'is a string' do
12
- val.must_be_kind_of String
17
+ expect(val).must_be_kind_of String
13
18
  end
14
19
 
15
20
  describe 'equality' do
16
21
  it 'is compared to string' do
17
- val.must_be :==, 'test_value'
18
- val.wont_be :==, 'not_value'
22
+ expect(val).must_be :==, 'test_value'
23
+ expect(val).wont_be :==, 'not_value'
19
24
  end
20
25
 
21
26
  it 'is compared to symbol' do
22
- val.must_be :==, :test_value
23
- val.wont_be :==, :not_value
27
+ expect(val).must_be :==, :test_value
28
+ expect(val).wont_be :==, :not_value
24
29
  end
25
30
 
26
31
  it 'is compared to integer' do
27
- val.must_be :==, 1
28
- val.wont_be :==, 2
32
+ expect(val).must_be :==, 1
33
+ expect(val).wont_be :==, 2
29
34
  end
30
35
  end
31
36
 
32
37
  describe 'translation' do
33
- let(:attr) { Struct.new(:values, :name, :i18n_scopes).new([], "attribute_name", []) }
34
-
35
38
  it 'uses common translation' do
36
39
  store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}}) do
37
- val.text.must_be :==, "Common translation"
40
+ expect(val.text).must_be :==, "Common translation"
38
41
  end
39
42
  end
40
43
 
41
44
  it 'uses default translation from the "default" section if its present' do
42
45
  store_translations(:en, :enumerize => {:defaults => {:attribute_name => {:test_value => "Common translation"}}}) do
43
- val.text.must_be :==, "Common translation"
46
+ expect(val.text).must_be :==, "Common translation"
44
47
  end
45
48
  end
46
49
 
@@ -48,7 +51,7 @@ describe Enumerize::Value do
48
51
  attr.i18n_scopes = ["enumerize.model_name.attribute_name"]
49
52
 
50
53
  store_translations(:en, :enumerize => {:model_name => {:attribute_name => {:test_value => "Model Specific translation"}}}) do
51
- val.text.must_be :==, "Model Specific translation"
54
+ expect(val.text).must_be :==, "Model Specific translation"
52
55
  end
53
56
  end
54
57
 
@@ -56,13 +59,13 @@ describe Enumerize::Value do
56
59
  attr.i18n_scopes = ["enumerize.model_name.attribute_name"]
57
60
 
58
61
  store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}, :model_name => {:attribute_name => {:test_value => "Model Specific translation"}}}) do
59
- val.text.must_be :==, "Model Specific translation"
62
+ expect(val.text).must_be :==, "Model Specific translation"
60
63
  end
61
64
  end
62
65
 
63
66
  it 'uses simply humanized value when translation is undefined' do
64
67
  store_translations(:en, :enumerize => {}) do
65
- val.text.must_be :==, "Test value"
68
+ expect(val.text).must_be :==, "Test value"
66
69
  end
67
70
  end
68
71
 
@@ -70,7 +73,7 @@ describe Enumerize::Value do
70
73
  attr.i18n_scopes = ["other.scope"]
71
74
 
72
75
  store_translations(:en, :other => {:scope => {:test_value => "Scope specific translation"}}) do
73
- val.text.must_be :==, "Scope specific translation"
76
+ expect(val.text).must_be :==, "Scope specific translation"
74
77
  end
75
78
  end
76
79
 
@@ -78,7 +81,7 @@ describe Enumerize::Value do
78
81
  attr.i18n_scopes = ["nonexistent.scope", "other.scope"]
79
82
 
80
83
  store_translations(:en, :other => {:scope => {:test_value => "Scope specific translation"}}) do
81
- val.text.must_be :==, "Scope specific translation"
84
+ expect(val.text).must_be :==, "Scope specific translation"
82
85
  end
83
86
  end
84
87
  end
@@ -89,36 +92,44 @@ describe Enumerize::Value do
89
92
  end
90
93
 
91
94
  it 'returns true if value equals method' do
92
- val.test_value?.must_equal true
95
+ expect(val.test_value?).must_equal true
93
96
  end
94
97
 
95
98
  it 'returns false if value does not equal method' do
96
- val.other_value?.must_equal false
99
+ expect(val.other_value?).must_equal false
97
100
  end
98
101
 
99
102
  it 'raises NoMethodError if there are no values like boolean method' do
100
- proc {
103
+ expect(proc {
101
104
  val.some_method?
102
- }.must_raise NoMethodError
105
+ }).must_raise NoMethodError
103
106
  end
104
107
 
105
108
  it 'raises ArgumentError if arguments are passed' do
106
- proc {
109
+ expect(proc {
107
110
  val.other_value?('<3')
108
- }.must_raise ArgumentError
111
+ }).must_raise ArgumentError
109
112
  end
110
113
 
111
114
  it 'responds to methods for existing values' do
112
- val.must_respond_to :test_value?
113
- val.must_respond_to :other_value?
115
+ expect(val).must_respond_to :test_value?
116
+ expect(val).must_respond_to :other_value?
114
117
  end
115
118
 
116
119
  it 'returns a method object' do
117
- val.method(:test_value?).must_be_instance_of Method
120
+ expect(val.method(:test_value?)).must_be_instance_of Method
118
121
  end
119
122
 
120
123
  it "doesn't respond to a method for not existing value" do
121
- val.wont_respond_to :some_method?
124
+ expect(val).wont_respond_to :some_method?
125
+ end
126
+
127
+ it "doesn't respond to methods is value was modified" do
128
+ modified_value = val.upcase
129
+
130
+ expect(modified_value.upcase).wont_respond_to :some_method?
131
+ expect(modified_value.upcase).wont_respond_to :test_value?
132
+ expect(modified_value.upcase).wont_respond_to :other_value?
122
133
  end
123
134
  end
124
135
 
@@ -131,7 +142,17 @@ describe Enumerize::Value do
131
142
 
132
143
  it 'serializes with Marshal' do
133
144
  dump_value = Marshal.dump(val)
134
- Marshal.load(dump_value).must_equal 'test_value'
145
+ expect(Marshal.load(dump_value)).must_equal 'test_value'
146
+ end
147
+ end
148
+
149
+ describe 'initialize' do
150
+ it 'no output if undefined boolean method' do
151
+ assert_silent() { Enumerize::Value.new(attr, 'test_value') }
152
+ end
153
+
154
+ it 'error output if defined boolean method' do
155
+ assert_output(nil, /`empty\?` is defined/) { Enumerize::Value.new(attr, 'empty') }
135
156
  end
136
157
  end
137
158
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumerize
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Nartimov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-18 00:00:00.000000000 Z
11
+ date: 2021-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -31,19 +31,23 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - ".github/workflows/ruby.yml"
34
35
  - ".gitignore"
35
36
  - ".rspec"
36
- - ".travis.yml"
37
37
  - CHANGELOG.md
38
38
  - Gemfile
39
39
  - Gemfile.global
40
40
  - Gemfile.mongo_mapper
41
- - Gemfile.rails42
41
+ - Gemfile.rails60
42
+ - Gemfile.rails61
43
+ - Gemfile.rails70
44
+ - Gemfile.railsmaster
42
45
  - MIT-LICENSE
43
46
  - README.md
44
47
  - Rakefile
45
48
  - enumerize.gemspec
46
49
  - lib/enumerize.rb
50
+ - lib/enumerize/activemodel.rb
47
51
  - lib/enumerize/activerecord.rb
48
52
  - lib/enumerize/attribute.rb
49
53
  - lib/enumerize/attribute_map.rb
@@ -65,10 +69,13 @@ files:
65
69
  - lib/enumerize/scope/sequel.rb
66
70
  - lib/enumerize/sequel.rb
67
71
  - lib/enumerize/set.rb
72
+ - lib/enumerize/utils.rb
68
73
  - lib/enumerize/value.rb
69
74
  - lib/enumerize/version.rb
75
+ - lib/sequel/plugins/enumerize.rb
70
76
  - spec/enumerize/integrations/rspec/matcher_spec.rb
71
77
  - spec/spec_helper.rb
78
+ - test/activemodel_test.rb
72
79
  - test/activerecord_test.rb
73
80
  - test/attribute_map_test.rb
74
81
  - test/attribute_test.rb
@@ -84,6 +91,7 @@ files:
84
91
  - test/set_test.rb
85
92
  - test/simple_form_test.rb
86
93
  - test/support/mock_controller.rb
94
+ - test/support/shared_enums.rb
87
95
  - test/support/view_test_helper.rb
88
96
  - test/test_helper.rb
89
97
  - test/value_test.rb
@@ -106,29 +114,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
114
  - !ruby/object:Gem::Version
107
115
  version: '0'
108
116
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.5.1
117
+ rubygems_version: 3.0.9
111
118
  signing_key:
112
119
  specification_version: 4
113
120
  summary: Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper support
114
- test_files:
115
- - spec/enumerize/integrations/rspec/matcher_spec.rb
116
- - spec/spec_helper.rb
117
- - test/activerecord_test.rb
118
- - test/attribute_map_test.rb
119
- - test/attribute_test.rb
120
- - test/base_test.rb
121
- - test/formtastic_test.rb
122
- - test/module_attributes_test.rb
123
- - test/mongo_mapper_test.rb
124
- - test/mongoid_test.rb
125
- - test/multiple_test.rb
126
- - test/predicates_test.rb
127
- - test/rails_admin_test.rb
128
- - test/sequel_test.rb
129
- - test/set_test.rb
130
- - test/simple_form_test.rb
131
- - test/support/mock_controller.rb
132
- - test/support/view_test_helper.rb
133
- - test/test_helper.rb
134
- - test/value_test.rb
121
+ test_files: []
data/.travis.yml DELETED
@@ -1,18 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- services:
4
- - mongodb
5
- gemfile:
6
- - Gemfile
7
- - Gemfile.rails42
8
- - Gemfile.mongo_mapper
9
- rvm:
10
- - 2.2.5
11
- - 2.3.1
12
- - jruby-9.1.2.0
13
- matrix:
14
- allow_failures:
15
- - gemfile: Gemfile
16
- rvm: jruby-9.1.2.0
17
- notifications:
18
- email: false
data/Gemfile.rails42 DELETED
@@ -1,6 +0,0 @@
1
- eval_gemfile('Gemfile.global')
2
-
3
- gem 'minitest', '~> 5.8'
4
- gem 'rails', '4.2.7', :require => false
5
- gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
6
- gem 'mongoid', '~> 5.0'