enumerize 0.8.0 → 2.6.1

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 (70) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +73 -0
  3. data/.gitignore +2 -0
  4. data/.rspec +2 -0
  5. data/CHANGELOG.md +210 -0
  6. data/Gemfile +4 -21
  7. data/Gemfile.global +12 -0
  8. data/Gemfile.mongo_mapper +6 -0
  9. data/Gemfile.rails60 +6 -0
  10. data/Gemfile.rails61 +6 -0
  11. data/Gemfile.rails70 +9 -0
  12. data/Gemfile.railsmaster +5 -0
  13. data/README.md +366 -73
  14. data/Rakefile +4 -4
  15. data/enumerize.gemspec +2 -1
  16. data/lib/enumerize/activemodel.rb +47 -0
  17. data/lib/enumerize/activerecord.rb +102 -27
  18. data/lib/enumerize/attribute.rb +59 -15
  19. data/lib/enumerize/attribute_map.rb +2 -0
  20. data/lib/enumerize/base.rb +32 -17
  21. data/lib/enumerize/hooks/formtastic.rb +7 -9
  22. data/lib/enumerize/hooks/sequel_dataset.rb +17 -0
  23. data/lib/enumerize/hooks/simple_form.rb +9 -12
  24. data/lib/enumerize/hooks/uniqueness.rb +7 -8
  25. data/lib/enumerize/integrations/rails_admin.rb +3 -1
  26. data/lib/enumerize/integrations/rspec/matcher.rb +112 -26
  27. data/lib/enumerize/integrations/rspec.rb +3 -0
  28. data/lib/enumerize/module.rb +2 -0
  29. data/lib/enumerize/module_attributes.rb +2 -0
  30. data/lib/enumerize/mongoid.rb +36 -0
  31. data/lib/enumerize/predicatable.rb +10 -17
  32. data/lib/enumerize/predicates.rb +5 -1
  33. data/lib/enumerize/scope/activerecord.rb +53 -0
  34. data/lib/enumerize/scope/mongoid.rb +50 -0
  35. data/lib/enumerize/scope/sequel.rb +56 -0
  36. data/lib/enumerize/sequel.rb +62 -0
  37. data/lib/enumerize/set.rb +20 -8
  38. data/lib/enumerize/utils.rb +12 -0
  39. data/lib/enumerize/value.rb +20 -20
  40. data/lib/enumerize/version.rb +3 -1
  41. data/lib/enumerize.rb +33 -2
  42. data/lib/sequel/plugins/enumerize.rb +18 -0
  43. data/spec/enumerize/integrations/rspec/matcher_spec.rb +261 -0
  44. data/spec/spec_helper.rb +30 -0
  45. data/test/activemodel_test.rb +114 -0
  46. data/test/activerecord_test.rb +434 -58
  47. data/test/attribute_map_test.rb +9 -7
  48. data/test/attribute_test.rb +52 -23
  49. data/test/base_test.rb +118 -66
  50. data/test/formtastic_test.rb +28 -12
  51. data/test/module_attributes_test.rb +10 -8
  52. data/test/mongo_mapper_test.rb +26 -11
  53. data/test/mongoid_test.rb +100 -15
  54. data/test/multiple_test.rb +41 -12
  55. data/test/predicates_test.rb +34 -26
  56. data/test/rails_admin_test.rb +8 -6
  57. data/test/sequel_test.rb +342 -0
  58. data/test/set_test.rb +42 -26
  59. data/test/simple_form_test.rb +25 -1
  60. data/test/support/mock_controller.rb +6 -0
  61. data/test/support/shared_enums.rb +43 -0
  62. data/test/support/view_test_helper.rb +18 -1
  63. data/test/test_helper.rb +33 -2
  64. data/test/value_test.rb +79 -28
  65. metadata +51 -12
  66. data/.travis.yml +0 -19
  67. data/Gemfile.rails4 +0 -23
  68. data/lib/enumerize/form_helper.rb +0 -23
  69. data/test/rspec_matcher_test.rb +0 -76
  70. data/test/rspec_spec.rb +0 -13
data/test/value_test.rb CHANGED
@@ -1,23 +1,49 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
4
+ require 'yaml'
5
+
6
+ class ValueTest < MiniTest::Spec
7
+ class Model
8
+ end
2
9
 
3
- describe Enumerize::Value do
4
- let(:attr) { Struct.new(:values).new([]) }
5
- let(:value) { Enumerize::Value.new(attr, 'test_value') }
10
+ class Attr < Struct.new(:values, :name, :i18n_scopes, :klass)
11
+ end
12
+
13
+ let(:attr) { Attr.new([], "attribute_name", [], Model) }
14
+ let(:val) { Enumerize::Value.new(attr, 'test_value', 1) }
6
15
 
7
16
  it 'is a string' do
8
- value.must_be_kind_of String
17
+ expect(val).must_be_kind_of String
9
18
  end
10
19
 
11
- it 'is compared to string' do
12
- value.must_be :==, 'test_value'
20
+ describe 'equality' do
21
+ it 'is compared to string' do
22
+ expect(val).must_be :==, 'test_value'
23
+ expect(val).wont_be :==, 'not_value'
24
+ end
25
+
26
+ it 'is compared to symbol' do
27
+ expect(val).must_be :==, :test_value
28
+ expect(val).wont_be :==, :not_value
29
+ end
30
+
31
+ it 'is compared to integer' do
32
+ expect(val).must_be :==, 1
33
+ expect(val).wont_be :==, 2
34
+ end
13
35
  end
14
36
 
15
37
  describe 'translation' do
16
- let(:attr) { Struct.new(:values, :name, :i18n_scopes).new([], "attribute_name", []) }
17
-
18
38
  it 'uses common translation' do
19
39
  store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}}) do
20
- value.text.must_be :==, "Common translation"
40
+ expect(val.text).must_be :==, "Common translation"
41
+ end
42
+ end
43
+
44
+ it 'uses default translation from the "default" section if its present' do
45
+ store_translations(:en, :enumerize => {:defaults => {:attribute_name => {:test_value => "Common translation"}}}) do
46
+ expect(val.text).must_be :==, "Common translation"
21
47
  end
22
48
  end
23
49
 
@@ -25,7 +51,7 @@ describe Enumerize::Value do
25
51
  attr.i18n_scopes = ["enumerize.model_name.attribute_name"]
26
52
 
27
53
  store_translations(:en, :enumerize => {:model_name => {:attribute_name => {:test_value => "Model Specific translation"}}}) do
28
- value.text.must_be :==, "Model Specific translation"
54
+ expect(val.text).must_be :==, "Model Specific translation"
29
55
  end
30
56
  end
31
57
 
@@ -33,13 +59,13 @@ describe Enumerize::Value do
33
59
  attr.i18n_scopes = ["enumerize.model_name.attribute_name"]
34
60
 
35
61
  store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}, :model_name => {:attribute_name => {:test_value => "Model Specific translation"}}}) do
36
- value.text.must_be :==, "Model Specific translation"
62
+ expect(val.text).must_be :==, "Model Specific translation"
37
63
  end
38
64
  end
39
65
 
40
66
  it 'uses simply humanized value when translation is undefined' do
41
67
  store_translations(:en, :enumerize => {}) do
42
- value.text.must_be :==, "Test value"
68
+ expect(val.text).must_be :==, "Test value"
43
69
  end
44
70
  end
45
71
 
@@ -47,7 +73,7 @@ describe Enumerize::Value do
47
73
  attr.i18n_scopes = ["other.scope"]
48
74
 
49
75
  store_translations(:en, :other => {:scope => {:test_value => "Scope specific translation"}}) do
50
- value.text.must_be :==, "Scope specific translation"
76
+ expect(val.text).must_be :==, "Scope specific translation"
51
77
  end
52
78
  end
53
79
 
@@ -55,53 +81,78 @@ describe Enumerize::Value do
55
81
  attr.i18n_scopes = ["nonexistent.scope", "other.scope"]
56
82
 
57
83
  store_translations(:en, :other => {:scope => {:test_value => "Scope specific translation"}}) do
58
- value.text.must_be :==, "Scope specific translation"
84
+ expect(val.text).must_be :==, "Scope specific translation"
59
85
  end
60
86
  end
61
87
  end
62
88
 
63
89
  describe 'boolean methods comparison' do
64
90
  before do
65
- attr.values = [value, Enumerize::Value.new(attr, 'other_value')]
91
+ attr.values = [val, Enumerize::Value.new(attr, 'other_value')]
66
92
  end
67
93
 
68
94
  it 'returns true if value equals method' do
69
- value.test_value?.must_equal true
95
+ expect(val.test_value?).must_equal true
70
96
  end
71
97
 
72
98
  it 'returns false if value does not equal method' do
73
- value.other_value?.must_equal false
99
+ expect(val.other_value?).must_equal false
74
100
  end
75
101
 
76
102
  it 'raises NoMethodError if there are no values like boolean method' do
77
- proc {
78
- value.some_method?
79
- }.must_raise NoMethodError
103
+ expect(proc {
104
+ val.some_method?
105
+ }).must_raise NoMethodError
80
106
  end
81
107
 
82
108
  it 'raises ArgumentError if arguments are passed' do
83
- proc {
84
- value.other_value?('<3')
85
- }.must_raise ArgumentError
109
+ expect(proc {
110
+ val.other_value?('<3')
111
+ }).must_raise ArgumentError
86
112
  end
87
113
 
88
114
  it 'responds to methods for existing values' do
89
- value.must_respond_to :test_value?
90
- value.must_respond_to :other_value?
115
+ expect(val).must_respond_to :test_value?
116
+ expect(val).must_respond_to :other_value?
91
117
  end
92
118
 
93
119
  it 'returns a method object' do
94
- value.method(:test_value?).must_be_instance_of Method
120
+ expect(val.method(:test_value?)).must_be_instance_of Method
95
121
  end
96
122
 
97
123
  it "doesn't respond to a method for not existing value" do
98
- value.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?
99
133
  end
100
134
  end
101
135
 
102
136
  describe 'serialization' do
137
+ let(:val) { Enumerize::Value.new(attr, 'test_value') }
138
+
103
139
  it 'should be serialized to yaml as string value' do
104
- assert_equal YAML.dump('test_value'), YAML.dump(value)
140
+ assert_equal YAML.dump('test_value'), YAML.dump(val)
141
+ end
142
+
143
+ it 'serializes with Marshal' do
144
+ dump_value = Marshal.dump(val)
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') }
105
156
  end
106
157
  end
107
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: 0.8.0
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Nartimov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-04 00:00:00.000000000 Z
11
+ date: 2023-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -31,22 +31,29 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - ".github/workflows/ruby.yml"
34
35
  - ".gitignore"
35
- - ".travis.yml"
36
+ - ".rspec"
36
37
  - CHANGELOG.md
37
38
  - Gemfile
38
- - Gemfile.rails4
39
+ - Gemfile.global
40
+ - Gemfile.mongo_mapper
41
+ - Gemfile.rails60
42
+ - Gemfile.rails61
43
+ - Gemfile.rails70
44
+ - Gemfile.railsmaster
39
45
  - MIT-LICENSE
40
46
  - README.md
41
47
  - Rakefile
42
48
  - enumerize.gemspec
43
49
  - lib/enumerize.rb
50
+ - lib/enumerize/activemodel.rb
44
51
  - lib/enumerize/activerecord.rb
45
52
  - lib/enumerize/attribute.rb
46
53
  - lib/enumerize/attribute_map.rb
47
54
  - lib/enumerize/base.rb
48
- - lib/enumerize/form_helper.rb
49
55
  - lib/enumerize/hooks/formtastic.rb
56
+ - lib/enumerize/hooks/sequel_dataset.rb
50
57
  - lib/enumerize/hooks/simple_form.rb
51
58
  - lib/enumerize/hooks/uniqueness.rb
52
59
  - lib/enumerize/integrations/rails_admin.rb
@@ -54,11 +61,21 @@ files:
54
61
  - lib/enumerize/integrations/rspec/matcher.rb
55
62
  - lib/enumerize/module.rb
56
63
  - lib/enumerize/module_attributes.rb
64
+ - lib/enumerize/mongoid.rb
57
65
  - lib/enumerize/predicatable.rb
58
66
  - lib/enumerize/predicates.rb
67
+ - lib/enumerize/scope/activerecord.rb
68
+ - lib/enumerize/scope/mongoid.rb
69
+ - lib/enumerize/scope/sequel.rb
70
+ - lib/enumerize/sequel.rb
59
71
  - lib/enumerize/set.rb
72
+ - lib/enumerize/utils.rb
60
73
  - lib/enumerize/value.rb
61
74
  - lib/enumerize/version.rb
75
+ - lib/sequel/plugins/enumerize.rb
76
+ - spec/enumerize/integrations/rspec/matcher_spec.rb
77
+ - spec/spec_helper.rb
78
+ - test/activemodel_test.rb
62
79
  - test/activerecord_test.rb
63
80
  - test/attribute_map_test.rb
64
81
  - test/attribute_test.rb
@@ -70,16 +87,17 @@ files:
70
87
  - test/multiple_test.rb
71
88
  - test/predicates_test.rb
72
89
  - test/rails_admin_test.rb
73
- - test/rspec_matcher_test.rb
74
- - test/rspec_spec.rb
90
+ - test/sequel_test.rb
75
91
  - test/set_test.rb
76
92
  - test/simple_form_test.rb
77
93
  - test/support/mock_controller.rb
94
+ - test/support/shared_enums.rb
78
95
  - test/support/view_test_helper.rb
79
96
  - test/test_helper.rb
80
97
  - test/value_test.rb
81
98
  homepage: https://github.com/brainspec/enumerize
82
- licenses: []
99
+ licenses:
100
+ - MIT
83
101
  metadata: {}
84
102
  post_install_message:
85
103
  rdoc_options: []
@@ -89,16 +107,37 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
107
  requirements:
90
108
  - - ">="
91
109
  - !ruby/object:Gem::Version
92
- version: 1.9.3
110
+ version: '2.7'
93
111
  required_rubygems_version: !ruby/object:Gem::Requirement
94
112
  requirements:
95
113
  - - ">="
96
114
  - !ruby/object:Gem::Version
97
115
  version: '0'
98
116
  requirements: []
99
- rubyforge_project:
100
- rubygems_version: 2.2.0
117
+ rubygems_version: 3.1.6
101
118
  signing_key:
102
119
  specification_version: 4
103
120
  summary: Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper support
104
- test_files: []
121
+ test_files:
122
+ - spec/enumerize/integrations/rspec/matcher_spec.rb
123
+ - spec/spec_helper.rb
124
+ - test/activemodel_test.rb
125
+ - test/activerecord_test.rb
126
+ - test/attribute_map_test.rb
127
+ - test/attribute_test.rb
128
+ - test/base_test.rb
129
+ - test/formtastic_test.rb
130
+ - test/module_attributes_test.rb
131
+ - test/mongo_mapper_test.rb
132
+ - test/mongoid_test.rb
133
+ - test/multiple_test.rb
134
+ - test/predicates_test.rb
135
+ - test/rails_admin_test.rb
136
+ - test/sequel_test.rb
137
+ - test/set_test.rb
138
+ - test/simple_form_test.rb
139
+ - test/support/mock_controller.rb
140
+ - test/support/shared_enums.rb
141
+ - test/support/view_test_helper.rb
142
+ - test/test_helper.rb
143
+ - test/value_test.rb
data/.travis.yml DELETED
@@ -1,19 +0,0 @@
1
- language: ruby
2
- services:
3
- - mongodb
4
- before_install:
5
- - gem install bundler
6
- gemfile:
7
- - Gemfile
8
- - Gemfile.rails4
9
- rvm:
10
- - 1.9.3
11
- - 2.0.0
12
- - 2.1.0
13
- - jruby-19mode
14
- notifications:
15
- email:
16
- recipients:
17
- - lest@brainspec.com
18
- - nashby@brainspec.com
19
- - dreamfall@brainspec.com
data/Gemfile.rails4 DELETED
@@ -1,23 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- gem 'rake'
6
- gem 'minitest', '~> 4.1'
7
- gem 'rspec', :require => false
8
-
9
- gem 'rails', '4.0.1', :require => false
10
- gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
11
- gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
12
-
13
- platforms :rbx do
14
- gem 'rubysl', '~> 2.0'
15
- gem 'psych'
16
- gem 'rubinius-developer_tools'
17
- gem 'rubysl-test-unit'
18
- end
19
-
20
- gem 'mongoid', github: 'mongoid/mongoid', ref: 'f91feef0a0c6b83a1b878e154f1014536aa1c298'
21
- gem 'mongo_mapper', github: 'jnunemaker/mongomapper'
22
- gem 'simple_form'
23
- gem 'formtastic', github: 'justinfrench/formtastic'
@@ -1,23 +0,0 @@
1
- # backport of https://github.com/rails/rails/commit/3be9e8a0c2187744b6c9879ca2836cef5ebed693
2
- if defined?(ActionView::Helpers::InstanceTag)
3
- ActionView::Helpers::InstanceTag.class_eval do
4
- def self.check_box_checked?(value, checked_value)
5
- case value
6
- when TrueClass, FalseClass
7
- value
8
- when NilClass
9
- false
10
- when Integer
11
- value != 0
12
- when String
13
- value == checked_value
14
- else
15
- if value.respond_to?(:include?)
16
- value.include?(checked_value)
17
- else
18
- value.to_i != 0
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,76 +0,0 @@
1
- require 'test_helper'
2
- require 'enumerize/integrations/rspec'
3
-
4
- describe Enumerize::Integrations::RSpec do
5
- class Should
6
- include Enumerize::Integrations::RSpec
7
- end
8
-
9
- let(:klass) do
10
- Class.new do
11
- extend Enumerize
12
- end
13
- end
14
-
15
- let(:should) { Should.new }
16
- let(:object) { klass.new }
17
-
18
- describe '#description' do
19
- before do
20
- klass.enumerize(:sex, :in => [:male, :female])
21
- end
22
-
23
- it 'returns description without default value' do
24
- matcher = should.enumerize(:sex).in(:male, :female)
25
- matcher.description.must_equal 'enumerize :sex in: "female", "male"'
26
- end
27
-
28
- it 'returns description with default value' do
29
- matcher = should.enumerize(:sex).in(:male, :female).with_default(:male)
30
- matcher.description.must_equal 'enumerize :sex in: "female", "male" with "male" as default value'
31
- end
32
- end
33
-
34
- describe '#matches?' do
35
- before do
36
- klass.enumerize(:sex, :in => [:male, :female])
37
- end
38
-
39
- it 'returns true' do
40
- matcher = should.enumerize(:sex).in(:male, :female)
41
- matcher.matches?(object).must_equal true
42
- end
43
-
44
- it 'returns false' do
45
- matcher = should.enumerize(:sex).in(:bar)
46
- matcher.matches?(object).must_equal false
47
- end
48
- end
49
-
50
- describe '#failure_message' do
51
- before do
52
- klass.enumerize(:sex, :in => [:male, :female], :default => :male)
53
- end
54
-
55
- it 'returns failure message for invalid :in option' do
56
- matcher = should.enumerize(:sex).in(:bar)
57
- matcher.subject = object
58
- expected = ' expected :sex to allow value: "bar", but it allows "female", "male" instead'
59
- matcher.failure_message.must_equal expected
60
- end
61
-
62
- it 'returns failure message for invalid :with_default option' do
63
- matcher = should.enumerize(:sex).in(:male, :female).with_default(:foo)
64
- matcher.subject = object
65
- expected = ' expected :sex to have "foo" as default value, but it sets "male" instead'
66
- matcher.failure_message.must_equal expected
67
- end
68
-
69
- it 'returns failure message for ivalid :in option with default value' do
70
- matcher = should.enumerize(:sex).in(:bar).with_default(:male)
71
- matcher.subject = object
72
- expected = ' expected :sex to allow value: "bar", but it allows "female", "male" instead'
73
- matcher.failure_message.must_equal expected
74
- end
75
- end
76
- end
data/test/rspec_spec.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'enumerize'
2
- require 'rspec'
3
-
4
- class RSpecUser
5
- extend Enumerize
6
-
7
- enumerize :sex, in: [:male, :female], default: :male
8
- end
9
-
10
- describe RSpecUser do
11
- it { should enumerize(:sex).in(:male, :female) }
12
- it { should enumerize(:sex).in(:male, :female).with_default(:male) }
13
- end