enumerize 0.8.0 → 1.1.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +8 -2
  5. data/CHANGELOG.md +91 -0
  6. data/Gemfile +4 -22
  7. data/{Gemfile.rails4 → Gemfile.global} +2 -5
  8. data/Gemfile.mongo_mapper +5 -0
  9. data/Gemfile.rails40 +5 -0
  10. data/README.md +171 -8
  11. data/Rakefile +2 -4
  12. data/lib/enumerize/activerecord.rb +3 -29
  13. data/lib/enumerize/attribute.rb +41 -9
  14. data/lib/enumerize/base.rb +25 -10
  15. data/lib/enumerize/hooks/sequel_dataset.rb +19 -0
  16. data/lib/enumerize/integrations/rspec/matcher.rb +107 -26
  17. data/lib/enumerize/mongoid.rb +13 -0
  18. data/lib/enumerize/predicatable.rb +7 -16
  19. data/lib/enumerize/predicates.rb +3 -1
  20. data/lib/enumerize/scope/activerecord.rb +37 -0
  21. data/lib/enumerize/scope/mongoid.rb +35 -0
  22. data/lib/enumerize/scope/sequel.rb +40 -0
  23. data/lib/enumerize/sequel.rb +57 -0
  24. data/lib/enumerize/set.rb +18 -8
  25. data/lib/enumerize/value.rb +8 -7
  26. data/lib/enumerize/version.rb +1 -1
  27. data/lib/enumerize.rb +23 -1
  28. data/spec/enumerize/integrations/rspec/matcher_spec.rb +258 -0
  29. data/spec/spec_helper.rb +28 -0
  30. data/test/activerecord_test.rb +58 -7
  31. data/test/attribute_test.rb +22 -0
  32. data/test/formtastic_test.rb +3 -12
  33. data/test/mongo_mapper_test.rb +6 -0
  34. data/test/mongoid_test.rb +55 -6
  35. data/test/multiple_test.rb +21 -0
  36. data/test/predicates_test.rb +6 -0
  37. data/test/sequel_test.rb +291 -0
  38. data/test/set_test.rb +14 -0
  39. data/test/simple_form_test.rb +0 -1
  40. data/test/support/view_test_helper.rb +4 -0
  41. data/test/test_helper.rb +23 -2
  42. data/test/value_test.rb +51 -21
  43. metadata +37 -8
  44. data/lib/enumerize/form_helper.rb +0 -23
  45. data/test/rspec_matcher_test.rb +0 -76
  46. data/test/rspec_spec.rb +0 -13
@@ -0,0 +1,258 @@
1
+ require 'active_record'
2
+
3
+ silence_warnings do
4
+ ActiveRecord::Migration.verbose = false
5
+ ActiveRecord::Base.logger = Logger.new(nil)
6
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
7
+ end
8
+
9
+ ActiveRecord::Base.connection.instance_eval do
10
+ create_table :users do |t|
11
+ t.string :sex
12
+ t.string :role
13
+ t.string :account_type
14
+ end
15
+ end
16
+
17
+ class User < ActiveRecord::Base
18
+ extend Enumerize
19
+
20
+ enumerize :sex, :in => [:male, :female], scope: true
21
+ enumerize :role, :in => [:user, :admin], scope: :having_role
22
+ enumerize :account_type, :in => [:basic, :premium]
23
+ end
24
+
25
+ RSpec.describe Enumerize::Integrations::RSpec::Matcher do
26
+
27
+ let(:model) do
28
+ Class.new do
29
+ extend Enumerize
30
+
31
+ def self.name
32
+ 'Model'
33
+ end
34
+ end
35
+ end
36
+
37
+ subject do
38
+ model.new
39
+ end
40
+
41
+ describe 'without qualifier' do
42
+
43
+ it 'accepts when has defined a enumerize' do
44
+ model.enumerize(:sex, :in => [:male, :female])
45
+ expect(subject).to enumerize(:sex)
46
+ end
47
+
48
+ it 'rejects when has not defined a enumerize' do
49
+ message = 'Expected Model to define enumerize :sex'
50
+ expect do
51
+ expect(subject).to enumerize(:sex)
52
+ end.to fail_with(message)
53
+ end
54
+ end
55
+
56
+ describe '#in' do
57
+
58
+ context 'defined as array' do
59
+
60
+ before do
61
+ model.enumerize(:sex, :in => [:male, :female])
62
+ end
63
+
64
+ it 'accepts the right params as an array' do
65
+ expect(subject).to enumerize(:sex).in([:male, :female])
66
+ end
67
+
68
+ it 'accepts the right params as regular params' do
69
+ expect(subject).to enumerize(:sex).in(:male, :female)
70
+ end
71
+
72
+ it 'accepts the the right params in a different order' do
73
+ expect(subject).to enumerize(:sex).in(:female, :male)
74
+ end
75
+
76
+ it 'rejects wrong params' do
77
+ message = 'Expected Model to define enumerize :sex in: "boy", "girl"'
78
+ expect do
79
+ expect(subject).to enumerize(:sex).in(:boy, :girl)
80
+ end.to fail_with(message)
81
+ end
82
+
83
+ it 'has the right message when negated' do
84
+ message = 'Did not expect Model to define enumerize :sex in: "female", "male"'
85
+ expect do
86
+ expect(subject).to_not enumerize(:sex).in(:male, :female)
87
+ end.to fail_with(message)
88
+ end
89
+ end
90
+
91
+ context 'defined as hash' do
92
+
93
+ before do
94
+ model.enumerize(:sex, :in => { male: 0, female: 1 })
95
+ end
96
+
97
+ it 'accepts the right params as an array' do
98
+ expect(subject).to enumerize(:sex).in(:male, :female)
99
+ end
100
+
101
+ it 'accepts the right params as a hash' do
102
+ expect(subject).to enumerize(:sex).in(male: 0, female: 1)
103
+ end
104
+
105
+ it 'accepts the right params as a hash in a different order' do
106
+ expect(subject).to enumerize(:sex).in(female: 1, male: 0)
107
+ end
108
+
109
+ it 'rejects wrong keys' do
110
+ message = 'Expected Model to define enumerize :sex in: "{:boy=>0, :girl=>1}"'
111
+ expect do
112
+ expect(subject).to enumerize(:sex).in(boy: 0, girl: 1)
113
+ end.to fail_with(message)
114
+ end
115
+
116
+ it 'rejects wrong values' do
117
+ message = 'Expected Model to define enumerize :sex in: "{:male=>2, :female=>3}"'
118
+ expect do
119
+ expect(subject).to enumerize(:sex).in(male: 2, female: 3)
120
+ end.to fail_with(message)
121
+ end
122
+ end
123
+
124
+ it 'has the right description' do
125
+ matcher = enumerize(:sex).in(:male, :female)
126
+ expect(matcher.description).to eq('define enumerize :sex in: "female", "male"')
127
+ end
128
+ end
129
+
130
+ describe '#with_default' do
131
+
132
+ before do
133
+ model.enumerize(:sex, :in => [:male, :female], default: :female)
134
+ end
135
+
136
+ it 'accepts the right default value' do
137
+ expect(subject).to enumerize(:sex).in(:male, :female).with_default(:female)
138
+ end
139
+
140
+ it 'rejects the wrong default value' do
141
+ message = 'Expected Model to define enumerize :sex in: "female", "male" with "male" as default value'
142
+ expect do
143
+ expect(subject).to enumerize(:sex).in(:male, :female).with_default(:male)
144
+ end.to fail_with(message)
145
+ end
146
+
147
+ it 'rejects if the `in` is wrong with a correct default value' do
148
+ message = 'Expected Model to define enumerize :sex in: "boy", "girl" with "female" as default value'
149
+ expect do
150
+ expect(subject).to enumerize(:sex).in(:boy, :girl).with_default(:female)
151
+ end.to fail_with(message)
152
+ end
153
+
154
+ it 'has the right description' do
155
+ matcher = enumerize(:sex).in(:male, :female).with_default(:female)
156
+ message = 'define enumerize :sex in: "female", "male" with "female" as default value'
157
+ expect(matcher.description).to eq(message)
158
+ end
159
+ end
160
+
161
+ describe '#with_i18n_scope' do
162
+
163
+ context 'defined as string' do
164
+
165
+ before do
166
+ model.enumerize(:sex, :in => [:male, :female], i18n_scope: 'sex')
167
+ end
168
+
169
+ it 'accepts the right i18n_scope' do
170
+ expect(subject).to enumerize(:sex).in(:male, :female).with_i18n_scope('sex')
171
+ end
172
+
173
+ it 'rejects the wrong i18n_scope' do
174
+ message = 'Expected Model to define enumerize :sex in: "female", "male" i18n_scope: "gender"'
175
+ expect do
176
+ expect(subject).to enumerize(:sex).in(:male, :female).with_i18n_scope('gender')
177
+ end.to fail_with(message)
178
+ end
179
+ end
180
+
181
+ context 'defined as array' do
182
+
183
+ before do
184
+ model.enumerize(:sex, :in => [:male, :female], i18n_scope: ['sex', 'more.sex'])
185
+ end
186
+
187
+ it 'accepts the wrong i18n_scope' do
188
+ expect(subject).to enumerize(:sex).in(:male, :female).with_i18n_scope(['sex', 'more.sex'])
189
+ end
190
+
191
+ it 'rejects the wrong i18n_scope' do
192
+ message = 'Expected Model to define enumerize :sex in: "female", "male" i18n_scope: ["sex"]'
193
+ expect do
194
+ expect(subject).to enumerize(:sex).in(:male, :female).with_i18n_scope(['sex'])
195
+ end.to fail_with(message)
196
+ end
197
+ end
198
+ end
199
+
200
+ describe '#with_predicates' do
201
+
202
+ it 'accepts when predicates is defined as a boolean' do
203
+ model.enumerize(:sex, :in => [:male, :female], predicates: true)
204
+ expect(subject).to enumerize(:sex).in(:male, :female).with_predicates(true)
205
+ end
206
+
207
+ it 'accepts when predicates is defined as a hash' do
208
+ model.enumerize(:sex, :in => [:male, :female], predicates: { prefix: true })
209
+ expect(subject).to enumerize(:sex).in(:male, :female).with_predicates(prefix: true)
210
+ end
211
+
212
+ it 'rejects when predicates is not defined' do
213
+ model.enumerize(:sex, :in => [:male, :female])
214
+ message = 'Expected Model to define enumerize :sex in: "female", "male" predicates: true'
215
+ expect do
216
+ expect(subject).to enumerize(:sex).in(:male, :female).with_predicates(true)
217
+ end.to fail_with(message)
218
+ end
219
+ end
220
+
221
+ describe '#with_multiple' do
222
+
223
+ it 'accepts when has defined the multiple' do
224
+ model.enumerize(:sex, :in => [:male, :female], multiple: true)
225
+ expect(subject).to enumerize(:sex).in(:male, :female).with_multiple(true)
226
+ end
227
+
228
+ it 'rejects when has not defined the multiple' do
229
+ model.enumerize(:sex, :in => [:male, :female])
230
+ message = 'Expected Model to define enumerize :sex in: "female", "male" multiple: true'
231
+ expect do
232
+ expect(subject).to enumerize(:sex).in(:male, :female).with_multiple(true)
233
+ end.to fail_with(message)
234
+ end
235
+ end
236
+
237
+ describe '#with_scope' do
238
+
239
+ subject do
240
+ User.new
241
+ end
242
+
243
+ it 'accepts when scope is defined as a boolean' do
244
+ expect(subject).to enumerize(:sex).in(:male, :female).with_scope(true)
245
+ end
246
+
247
+ it 'accepts when scope is defined as a hash' do
248
+ expect(subject).to enumerize(:role).in(:user, :admin).with_scope(scope: :having_role)
249
+ end
250
+
251
+ it 'rejects when scope is not defined' do
252
+ message = 'Expected User to define enumerize :account_type in: "basic", "premium" scope: true'
253
+ expect do
254
+ expect(subject).to enumerize(:account_type).in(:basic, :premium).with_scope(true)
255
+ end.to fail_with(message)
256
+ end
257
+ end
258
+ end
@@ -0,0 +1,28 @@
1
+ require 'rails'
2
+ require 'enumerize'
3
+ require 'rspec/matchers/fail_matchers'
4
+
5
+ RSpec.configure do |config|
6
+ config.disable_monkey_patching!
7
+ config.order = :random
8
+ Kernel.srand config.seed
9
+ config.filter_run focus: true
10
+ config.run_all_when_everything_filtered = true
11
+
12
+ config.expect_with :rspec do |expectations|
13
+ expectations.syntax = :expect
14
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
15
+ end
16
+
17
+ config.mock_with :rspec do |mocks|
18
+ mocks.syntax = :expect
19
+ mocks.verify_partial_doubles = true
20
+ end
21
+
22
+ if config.files_to_run.one?
23
+ config.default_formatter = 'doc'
24
+ end
25
+
26
+ config.warnings = true
27
+ config.include RSpec::Matchers::FailMatchers
28
+ end
@@ -15,13 +15,13 @@ ActiveRecord::Base.connection.instance_eval do
15
15
  t.string :lambda_role
16
16
  t.string :name
17
17
  t.string :interests
18
- t.string :status
18
+ t.integer :status
19
19
  t.string :account_type, :default => :basic
20
20
  end
21
21
 
22
22
  create_table :documents do |t|
23
23
  t.string :visibility
24
- t.timestamps
24
+ t.timestamps null: true
25
25
  end
26
26
  end
27
27
 
@@ -57,6 +57,7 @@ end
57
57
 
58
58
  class UniqStatusUser < User
59
59
  validates :status, uniqueness: true
60
+ validates :sex, presence: true
60
61
  end
61
62
 
62
63
  describe Enumerize::ActiveRecordSupport do
@@ -92,7 +93,8 @@ describe Enumerize::ActiveRecordSupport do
92
93
  it 'does not set default value for not selected attributes' do
93
94
  User.delete_all
94
95
  User.create!(:sex => :male)
95
- User.select(:id).collect(&:id)
96
+
97
+ assert_equal ['id'], User.select(:id).first.attributes.keys
96
98
  end
97
99
 
98
100
  it 'has default value with lambda' do
@@ -128,9 +130,18 @@ describe Enumerize::ActiveRecordSupport do
128
130
  user.errors[:role].must_include 'is not included in the list'
129
131
  end
130
132
 
131
- it 'validates inclusion when using write_attribute' do
133
+ it 'validates inclusion when using write_attribute with string attribute' do
134
+ user = User.new
135
+ user.send(:write_attribute, 'role', 'wrong')
136
+ user.read_attribute_for_validation(:role).must_equal 'wrong'
137
+ user.wont_be :valid?
138
+ user.errors[:role].must_include 'is not included in the list'
139
+ end
140
+
141
+ it 'validates inclusion when using write_attribute with symbol attribute' do
132
142
  user = User.new
133
143
  user.send(:write_attribute, :role, 'wrong')
144
+ user.read_attribute_for_validation(:role).must_equal 'wrong'
134
145
  user.wont_be :valid?
135
146
  user.errors[:role].must_include 'is not included in the list'
136
147
  end
@@ -143,7 +154,7 @@ describe Enumerize::ActiveRecordSupport do
143
154
 
144
155
  it "uses persisted value for validation if it hasn't been set" do
145
156
  user = User.create! :sex => :male
146
- User.find(user).read_attribute_for_validation(:sex).must_equal 'male'
157
+ User.find(user.id).read_attribute_for_validation(:sex).must_equal 'male'
147
158
  end
148
159
 
149
160
  it 'is valid with empty string assigned' do
@@ -179,6 +190,13 @@ describe Enumerize::ActiveRecordSupport do
179
190
  interests.must_equal %w(music dancing)
180
191
  end
181
192
 
193
+ it 'stores multiple value passed passed to new' do
194
+ user = User.new(interests: [:music, :dancing])
195
+ user.save!
196
+ user.interests.must_equal %w(music dancing)
197
+ User.find(user.id).interests.must_equal %w(music dancing)
198
+ end
199
+
182
200
  it 'returns invalid multiple value for validation' do
183
201
  user = User.new
184
202
  user.interests << :music
@@ -199,6 +217,22 @@ describe Enumerize::ActiveRecordSupport do
199
217
  user.must_be :valid?
200
218
  end
201
219
 
220
+ it 'stores custom values for multiple attributes' do
221
+ User.delete_all
222
+
223
+ klass = Class.new(User)
224
+ klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
225
+
226
+ user = klass.new
227
+ user.interests << :music
228
+ user.read_attribute(:interests).must_equal [0]
229
+ user.interests.must_equal %w(music)
230
+ user.save
231
+
232
+ user = klass.find(user.id)
233
+ user.interests.must_equal %w(music)
234
+ end
235
+
202
236
  it 'adds scope' do
203
237
  User.delete_all
204
238
 
@@ -215,6 +249,12 @@ describe Enumerize::ActiveRecordSupport do
215
249
  User.having_role(:admin).must_equal [user_1]
216
250
  end
217
251
 
252
+ it 'ignores not enumerized values that passed to the scope method' do
253
+ User.delete_all
254
+
255
+ User.with_status(:foo).must_equal []
256
+ end
257
+
218
258
  it 'allows either key or value as valid' do
219
259
  user_1 = User.new(status: :active)
220
260
  user_2 = User.new(status: 1)
@@ -258,6 +298,18 @@ describe Enumerize::ActiveRecordSupport do
258
298
  user.errors[:status].wont_be :empty?
259
299
  end
260
300
 
301
+ it 'is valid after #becomes' do
302
+ User.delete_all
303
+ user = User.new
304
+ user.sex = :male
305
+ user.save!
306
+
307
+ uniq_user = User.find(user.id).becomes(UniqStatusUser)
308
+ uniq_user.valid?
309
+
310
+ uniq_user.errors.must_be_empty
311
+ end
312
+
261
313
  it 'supports multiple attributes in #becomes' do
262
314
  User.delete_all
263
315
 
@@ -291,7 +343,6 @@ describe Enumerize::ActiveRecordSupport do
291
343
  user = User.create(:status => :active)
292
344
  user.status = :blocked
293
345
 
294
- expected = ActiveSupport::HashWithIndifferentAccess.new(status: [1, 2]).to_yaml
295
- assert_equal expected, user.changes.to_yaml
346
+ assert_equal [1, 2], YAML.load(user.changes.to_yaml)[:status]
296
347
  end
297
348
  end
@@ -19,6 +19,12 @@ describe Enumerize::Attribute do
19
19
  attr.name.must_equal :foo
20
20
  end
21
21
 
22
+ it 'uses custom value class' do
23
+ value_class = Class.new(Enumerize::Value)
24
+ build_attr nil, 'foo', :in => %w[a b], :value_class => value_class
25
+ attr.values.first.must_be_instance_of value_class
26
+ end
27
+
22
28
  describe 'i18n scopes' do
23
29
  it 'returns scopes from options' do
24
30
  build_attr nil, 'foo', :in => %w[a b], :i18n_scope => %w[bar buzz]
@@ -79,6 +85,18 @@ describe Enumerize::Attribute do
79
85
  end
80
86
  end
81
87
 
88
+ it 'sets up shortcut methods for each value' do
89
+ build_attr nil, :foo, :in => {:a => 1, :b => 2}
90
+
91
+ attr.must_respond_to :a
92
+ attr.must_respond_to :b
93
+
94
+ attr.a.value.must_equal 1
95
+ attr.b.value.must_equal 2
96
+ attr.a.text.must_equal 'A'
97
+ attr.b.text.must_equal 'B'
98
+ end
99
+
82
100
  describe 'values hash with zero' do
83
101
  before do
84
102
  build_attr nil, :foo, :in => {:a => 1, :b => 2, :c => 0}
@@ -93,6 +111,10 @@ describe Enumerize::Attribute do
93
111
  attr.find_value(2).must_equal 'b'
94
112
  attr.find_value(0).must_equal 'c'
95
113
  end
114
+
115
+ it 'finds all values by hash values' do
116
+ attr.find_values(1, 2, 0).must_equal ['a', 'b', 'c']
117
+ end
96
118
  end
97
119
 
98
120
  describe 'boolean values hash' do
@@ -1,16 +1,7 @@
1
1
  require 'test_helper'
2
- require 'rails'
3
-
4
- module Formtastic
5
- module Helpers
6
- module InputHelper
7
- remove_method :input_class
8
- def input_class(as)
9
- input_class_with_const_defined(as)
10
- end
11
- end
12
- end
13
- end
2
+
3
+ Formtastic::FormBuilder.action_class_finder = Formtastic::ActionClassFinder
4
+ Formtastic::FormBuilder.input_class_finder = Formtastic::InputClassFinder
14
5
 
15
6
  class FormtasticSpec < MiniTest::Spec
16
7
  include ViewTestHelper
@@ -1,5 +1,7 @@
1
1
  require 'test_helper'
2
2
 
3
+ begin
4
+
3
5
  silence_warnings do
4
6
  require 'mongo_mapper'
5
7
  end
@@ -66,3 +68,7 @@ describe Enumerize do
66
68
  user.sex.must_equal 'female'
67
69
  end
68
70
  end
71
+
72
+ rescue LoadError
73
+ # Skip
74
+ end
data/test/mongoid_test.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  require 'test_helper'
2
2
 
3
+ begin
4
+
3
5
  silence_warnings do
4
6
  require 'mongoid'
5
7
  end
6
8
 
7
9
  Mongoid.configure do |config|
8
- config.sessions = { :default => { :database => 'enumerize-test-suite', hosts: ['127.0.0.1:27017'] } }
9
- config.use_utc = true
10
- config.include_root_in_json = true
10
+ config.connect_to('enumerize-test-suite')
11
+ config.options = { use_utc: true, include_root_in_json: true }
11
12
  end
12
13
 
13
14
  describe Enumerize do
@@ -17,9 +18,10 @@ describe Enumerize do
17
18
 
18
19
  field :sex
19
20
  field :role
20
- enumerize :sex, :in => %w[male female]
21
- enumerize :role, :in => %w[admin user], :default => 'user'
22
- enumerize :mult, :in => %w[one two three four], :multiple => true
21
+ enumerize :sex, :in => %w[male female], scope: true
22
+ enumerize :status, :in => %w[notice warning error], scope: true
23
+ enumerize :role, :in => %w[admin user], :default => 'user', scope: :having_role
24
+ enumerize :mult, :in => %w[one two three four], :multiple => true
23
25
  end
24
26
 
25
27
  before { $VERBOSE = nil }
@@ -55,6 +57,14 @@ describe Enumerize do
55
57
  model.new.role.must_equal 'user'
56
58
  end
57
59
 
60
+ it 'uses after_initialize callback to set default value' do
61
+ model.delete_all
62
+ model.create!(sex: 'male', role: nil)
63
+
64
+ user = model.where(sex: 'male').first
65
+ user.role.must_equal 'user'
66
+ end
67
+
58
68
  it 'validates inclusion' do
59
69
  user = model.new
60
70
  user.role = 'wrong'
@@ -76,4 +86,43 @@ describe Enumerize do
76
86
  user = model.first
77
87
  user.mult.to_a.must_equal ['one', 'two']
78
88
  end
89
+
90
+ it 'adds scope' do
91
+ model.delete_all
92
+
93
+ user_1 = model.create!(sex: :male, role: :admin)
94
+ user_2 = model.create!(sex: :female, role: :user)
95
+
96
+ model.with_sex(:male).to_a.must_equal [user_1]
97
+ model.with_sex(:female).to_a.must_equal [user_2]
98
+ model.with_sex(:male, :female).to_set.must_equal [user_1, user_2].to_set
99
+
100
+ model.without_sex(:male).to_a.must_equal [user_2]
101
+ model.without_sex(:female).to_a.must_equal [user_1]
102
+ model.without_sex(:male, :female).to_a.must_equal []
103
+
104
+ model.having_role(:admin).to_a.must_equal [user_1]
105
+ model.having_role(:user).to_a.must_equal [user_2]
106
+ end
107
+
108
+ it 'chains scopes' do
109
+ model.delete_all
110
+
111
+ user_1 = model.create!(status: :notice)
112
+ user_2 = model.create!(status: :warning)
113
+ user_3 = model.create!(status: :error)
114
+
115
+ model.with_status(:notice, :warning).with_status(:notice, :error).to_a.must_equal [user_1]
116
+ model.with_status(:notice, :warning).union.with_status(:notice, :error).to_a.must_equal [user_1, user_2, user_3]
117
+ end
118
+
119
+ it 'ignores not enumerized values that passed to the scope method' do
120
+ model.delete_all
121
+
122
+ model.with_sex(:foo).must_equal []
123
+ end
124
+ end
125
+
126
+ rescue LoadError
127
+ # Skip
79
128
  end
@@ -24,6 +24,21 @@ describe Enumerize::Base do
24
24
  object.foos.must_equal %w(a c)
25
25
  end
26
26
 
27
+ it 'sets default value as single value' do
28
+ klass.enumerize :foos, in: %w(a b c), default: 'b', multiple: true
29
+ object.foos.must_equal %w(b)
30
+ end
31
+
32
+ it 'sets default value as array of one element' do
33
+ klass.enumerize :foos, in: %w(a b c), default: %w(b), multiple: true
34
+ object.foos.must_equal %w(b)
35
+ end
36
+
37
+ it 'sets default value as array of several elements' do
38
+ klass.enumerize :foos, in: %w(a b c), default: %w(b c), multiple: true
39
+ object.foos.must_equal %w(b c)
40
+ end
41
+
27
42
  it "doesn't define _text method" do
28
43
  klass.enumerize :foos, in: %w(a b c), multiple: true
29
44
  object.wont_respond_to :foos_text
@@ -33,4 +48,10 @@ describe Enumerize::Base do
33
48
  klass.enumerize :foos, in: %w(a b c), multiple: true
34
49
  object.wont_respond_to :foos_value
35
50
  end
51
+
52
+ it "cannot define multiple with scope" do
53
+ assert_raises ArgumentError do
54
+ klass.enumerize :foos, in: %w(a b c), multiple: true, scope: true
55
+ end
56
+ end
36
57
  end
@@ -15,6 +15,12 @@ describe Enumerize::Predicates do
15
15
  object.must_respond_to :b?
16
16
  end
17
17
 
18
+ it 'creates predicate methods when enumerized values have dash in it' do
19
+ klass.enumerize(:foo, in: %w(foo-bar bar-foo), predicates: true)
20
+ object.must_respond_to :foo_bar?
21
+ object.must_respond_to :bar_foo?
22
+ end
23
+
18
24
  it 'creates predicate methods on multiple attribute' do
19
25
  klass.enumerize(:foo, in: %w(a b), predicates: true, multiple: true)
20
26
  object.must_respond_to :a?