enumerize 2.1.2 → 2.4.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.
- checksums.yaml +5 -5
- data/.travis.yml +10 -9
- data/CHANGELOG.md +50 -3
- data/Gemfile +2 -3
- data/Gemfile.global +1 -2
- data/Gemfile.mongo_mapper +2 -3
- data/Gemfile.rails60 +6 -0
- data/Gemfile.rails61 +6 -0
- data/README.md +37 -1
- data/Rakefile +2 -0
- data/lib/enumerize.rb +9 -0
- data/lib/enumerize/activemodel.rb +47 -0
- data/lib/enumerize/activerecord.rb +33 -3
- data/lib/enumerize/attribute.rb +19 -11
- data/lib/enumerize/attribute_map.rb +2 -0
- data/lib/enumerize/base.rb +6 -6
- data/lib/enumerize/hooks/formtastic.rb +4 -1
- data/lib/enumerize/hooks/sequel_dataset.rb +2 -0
- data/lib/enumerize/hooks/simple_form.rb +4 -1
- data/lib/enumerize/hooks/uniqueness.rb +5 -1
- data/lib/enumerize/integrations/rails_admin.rb +3 -1
- data/lib/enumerize/integrations/rspec.rb +2 -0
- data/lib/enumerize/integrations/rspec/matcher.rb +7 -2
- data/lib/enumerize/module.rb +2 -0
- data/lib/enumerize/module_attributes.rb +2 -0
- data/lib/enumerize/mongoid.rb +16 -0
- data/lib/enumerize/predicatable.rb +3 -1
- data/lib/enumerize/predicates.rb +2 -0
- data/lib/enumerize/scope/activerecord.rb +12 -0
- data/lib/enumerize/scope/mongoid.rb +11 -0
- data/lib/enumerize/scope/sequel.rb +12 -0
- data/lib/enumerize/sequel.rb +9 -4
- data/lib/enumerize/set.rb +2 -0
- data/lib/enumerize/utils.rb +12 -0
- data/lib/enumerize/value.rb +14 -15
- data/lib/enumerize/version.rb +1 -1
- data/lib/sequel/plugins/enumerize.rb +18 -0
- data/spec/enumerize/integrations/rspec/matcher_spec.rb +13 -10
- data/spec/spec_helper.rb +2 -0
- data/test/activemodel_test.rb +114 -0
- data/test/activerecord_test.rb +127 -5
- data/test/attribute_map_test.rb +2 -0
- data/test/attribute_test.rb +7 -0
- data/test/base_test.rb +35 -33
- data/test/formtastic_test.rb +25 -0
- data/test/module_attributes_test.rb +2 -0
- data/test/mongo_mapper_test.rb +12 -3
- data/test/mongoid_test.rb +30 -4
- data/test/multiple_test.rb +19 -11
- data/test/predicates_test.rb +12 -10
- data/test/rails_admin_test.rb +7 -5
- data/test/sequel_test.rb +62 -12
- data/test/set_test.rb +6 -4
- data/test/simple_form_test.rb +25 -0
- data/test/support/mock_controller.rb +2 -0
- data/test/support/shared_enums.rb +43 -0
- data/test/support/view_test_helper.rb +14 -1
- data/test/test_helper.rb +2 -0
- data/test/value_test.rb +33 -5
- metadata +15 -9
- data/Gemfile.rails42 +0 -7
- data/Gemfile.rails51 +0 -7
data/test/formtastic_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
Formtastic::FormBuilder.action_class_finder = Formtastic::ActionClassFinder
|
|
@@ -42,6 +44,12 @@ class FormtasticSpec < MiniTest::Spec
|
|
|
42
44
|
end
|
|
43
45
|
end
|
|
44
46
|
|
|
47
|
+
class Registration < Struct.new(:sex)
|
|
48
|
+
extend Enumerize
|
|
49
|
+
|
|
50
|
+
enumerize :sex, in: [:male, :female]
|
|
51
|
+
end
|
|
52
|
+
|
|
45
53
|
before { $VERBOSE = nil }
|
|
46
54
|
after { $VERBOSE = true }
|
|
47
55
|
|
|
@@ -124,4 +132,21 @@ class FormtasticSpec < MiniTest::Spec
|
|
|
124
132
|
|
|
125
133
|
assert_select 'input[type=text]'
|
|
126
134
|
end
|
|
135
|
+
|
|
136
|
+
it 'renders select with enumerized values for non-ActiveModel object' do
|
|
137
|
+
concat(semantic_form_for(Registration.new, as: 'registration', url: '/') do |f|
|
|
138
|
+
f.input(:sex)
|
|
139
|
+
end)
|
|
140
|
+
|
|
141
|
+
assert_select 'select option[value=male]'
|
|
142
|
+
assert_select 'select option[value=female]'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it 'does not affect forms without object' do
|
|
146
|
+
concat(semantic_form_for('') do |f|
|
|
147
|
+
f.input(:name)
|
|
148
|
+
end)
|
|
149
|
+
|
|
150
|
+
assert_select 'input[type=text]'
|
|
151
|
+
end
|
|
127
152
|
end
|
data/test/mongo_mapper_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
begin
|
|
@@ -6,8 +8,7 @@ silence_warnings do
|
|
|
6
8
|
require 'mongo_mapper'
|
|
7
9
|
end
|
|
8
10
|
|
|
9
|
-
MongoMapper.connection = Mongo::
|
|
10
|
-
MongoMapper.database = 'enumerize-test-suite-of-mongomapper'
|
|
11
|
+
MongoMapper.connection = Mongo::Client.new(['localhost:27017'], database: 'enumerize-test-suite-of-mongomapper')
|
|
11
12
|
|
|
12
13
|
describe Enumerize do
|
|
13
14
|
class MongoMapperUser
|
|
@@ -16,9 +17,11 @@ describe Enumerize do
|
|
|
16
17
|
|
|
17
18
|
key :sex
|
|
18
19
|
key :role
|
|
20
|
+
key :foo
|
|
19
21
|
|
|
20
|
-
enumerize :sex,
|
|
22
|
+
enumerize :sex, :in => %w[male female]
|
|
21
23
|
enumerize :role, :in => %w[admin user], :default => 'user'
|
|
24
|
+
enumerize :foo, :in => %w[bar baz], :skip_validations => true
|
|
22
25
|
end
|
|
23
26
|
|
|
24
27
|
before { $VERBOSE = nil }
|
|
@@ -60,6 +63,12 @@ describe Enumerize do
|
|
|
60
63
|
user.wont_be :valid?
|
|
61
64
|
end
|
|
62
65
|
|
|
66
|
+
it 'does not validate inclusion when :skip_validations option passed' do
|
|
67
|
+
user = model.new
|
|
68
|
+
user.foo = 'wrong'
|
|
69
|
+
user.must_be :valid?
|
|
70
|
+
end
|
|
71
|
+
|
|
63
72
|
it 'assigns value on loaded record' do
|
|
64
73
|
model.delete_all
|
|
65
74
|
model.create!(:sex => :male)
|
data/test/mongoid_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
begin
|
|
@@ -18,10 +20,16 @@ describe Enumerize do
|
|
|
18
20
|
|
|
19
21
|
field :sex
|
|
20
22
|
field :role
|
|
23
|
+
field :foo
|
|
24
|
+
field :skill
|
|
25
|
+
|
|
21
26
|
enumerize :sex, :in => %w[male female], scope: true
|
|
22
27
|
enumerize :status, :in => %w[notice warning error], scope: true
|
|
23
28
|
enumerize :role, :in => %w[admin user], :default => 'user', scope: :having_role
|
|
24
29
|
enumerize :mult, :in => %w[one two three four], :multiple => true
|
|
30
|
+
enumerize :foo, :in => %w[bar baz], :skip_validations => true
|
|
31
|
+
enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
|
|
32
|
+
enumerize :account_type, :in => %w[basic premium], scope: :shallow
|
|
25
33
|
end
|
|
26
34
|
|
|
27
35
|
before { $VERBOSE = nil }
|
|
@@ -78,6 +86,20 @@ describe Enumerize do
|
|
|
78
86
|
user.wont_be :valid?
|
|
79
87
|
end
|
|
80
88
|
|
|
89
|
+
it 'does not validate inclusion when :skip_validations option passed' do
|
|
90
|
+
user = model.new
|
|
91
|
+
user.foo = 'wrong'
|
|
92
|
+
user.must_be :valid?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'sets value to enumerized field from db when record is reloaded' do
|
|
96
|
+
user = model.create!(mult: [:one])
|
|
97
|
+
model.find(user.id).update(mult: %i[two three])
|
|
98
|
+
user.mult.must_equal %w[one]
|
|
99
|
+
user.reload
|
|
100
|
+
user.mult.must_equal %w[two three]
|
|
101
|
+
end
|
|
102
|
+
|
|
81
103
|
it 'assigns value on loaded record' do
|
|
82
104
|
model.delete_all
|
|
83
105
|
model.create!(:sex => :male)
|
|
@@ -99,17 +121,21 @@ describe Enumerize do
|
|
|
99
121
|
|
|
100
122
|
user_1 = model.create!(sex: :male, role: :admin)
|
|
101
123
|
user_2 = model.create!(sex: :female, role: :user)
|
|
124
|
+
user_3 = model.create!(skill: :pro, account_type: :premium)
|
|
102
125
|
|
|
103
126
|
model.with_sex(:male).to_a.must_equal [user_1]
|
|
104
127
|
model.with_sex(:female).to_a.must_equal [user_2]
|
|
105
128
|
model.with_sex(:male, :female).to_set.must_equal [user_1, user_2].to_set
|
|
106
129
|
|
|
107
|
-
model.without_sex(:male).
|
|
108
|
-
model.without_sex(:female).
|
|
109
|
-
model.without_sex(:male, :female).to_a.must_equal []
|
|
130
|
+
model.without_sex(:male).to_set.must_equal [user_2, user_3].to_set
|
|
131
|
+
model.without_sex(:female).to_set.must_equal [user_1, user_3].to_set
|
|
132
|
+
model.without_sex(:male, :female).to_a.must_equal [user_3]
|
|
110
133
|
|
|
111
134
|
model.having_role(:admin).to_a.must_equal [user_1]
|
|
112
|
-
model.having_role(:user).to_a.must_equal [user_2]
|
|
135
|
+
model.having_role(:user).to_a.must_equal [user_2, user_3]
|
|
136
|
+
|
|
137
|
+
model.pro.to_a.must_equal [user_3]
|
|
138
|
+
model.premium.to_a.must_equal [user_3]
|
|
113
139
|
end
|
|
114
140
|
|
|
115
141
|
it 'chains scopes' do
|
data/test/multiple_test.rb
CHANGED
|
@@ -1,57 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
describe Enumerize::Base do
|
|
4
|
-
let(:
|
|
6
|
+
let(:kklass) do
|
|
5
7
|
Class.new do
|
|
6
8
|
extend Enumerize
|
|
7
9
|
end
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
let(:subklass) do
|
|
11
|
-
Class.new(
|
|
13
|
+
Class.new(kklass)
|
|
12
14
|
end
|
|
13
15
|
|
|
14
|
-
let(:object) {
|
|
16
|
+
let(:object) { kklass.new }
|
|
15
17
|
|
|
16
18
|
it 'returns [] when not set' do
|
|
17
|
-
|
|
19
|
+
kklass.enumerize :foos, in: %w(a b), multiple: true
|
|
18
20
|
object.foos.must_equal []
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
it 'returns setted array' do
|
|
22
|
-
|
|
24
|
+
kklass.enumerize :foos, in: %w(a b c), multiple: true
|
|
23
25
|
object.foos = %w(a c)
|
|
24
26
|
object.foos.must_equal %w(a c)
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
it 'sets default value as single value' do
|
|
28
|
-
|
|
30
|
+
kklass.enumerize :foos, in: %w(a b c), default: 'b', multiple: true
|
|
29
31
|
object.foos.must_equal %w(b)
|
|
30
32
|
end
|
|
31
33
|
|
|
32
34
|
it 'sets default value as array of one element' do
|
|
33
|
-
|
|
35
|
+
kklass.enumerize :foos, in: %w(a b c), default: %w(b), multiple: true
|
|
34
36
|
object.foos.must_equal %w(b)
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
it 'sets default value as array of several elements' do
|
|
38
|
-
|
|
40
|
+
kklass.enumerize :foos, in: %w(a b c), default: %w(b c), multiple: true
|
|
39
41
|
object.foos.must_equal %w(b c)
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
it "doesn't define _text method" do
|
|
43
|
-
|
|
45
|
+
kklass.enumerize :foos, in: %w(a b c), multiple: true
|
|
44
46
|
object.wont_respond_to :foos_text
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
it "doesn't define _value method" do
|
|
48
|
-
|
|
50
|
+
kklass.enumerize :foos, in: %w(a b c), multiple: true
|
|
49
51
|
object.wont_respond_to :foos_value
|
|
50
52
|
end
|
|
51
53
|
|
|
52
54
|
it "cannot define multiple with scope" do
|
|
53
55
|
assert_raises ArgumentError do
|
|
54
|
-
|
|
56
|
+
kklass.enumerize :foos, in: %w(a b c), multiple: true, scope: true
|
|
55
57
|
end
|
|
56
58
|
end
|
|
59
|
+
|
|
60
|
+
it 'assign a name with the first letter capitalized' do
|
|
61
|
+
kklass.enumerize :Foos, in: %w(a b c), multiple: true
|
|
62
|
+
object.Foos = %w(a c)
|
|
63
|
+
object.Foos.must_equal %w(a c)
|
|
64
|
+
end
|
|
57
65
|
end
|
data/test/predicates_test.rb
CHANGED
|
@@ -1,48 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
describe Enumerize::Predicates do
|
|
4
|
-
let(:
|
|
6
|
+
let(:kklass) do
|
|
5
7
|
Class.new do
|
|
6
8
|
extend Enumerize
|
|
7
9
|
end
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
let(:object) {
|
|
12
|
+
let(:object) { kklass.new }
|
|
11
13
|
|
|
12
14
|
it 'creates predicate methods' do
|
|
13
|
-
|
|
15
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: true)
|
|
14
16
|
object.must_respond_to :a?
|
|
15
17
|
object.must_respond_to :b?
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
it 'creates predicate methods when enumerized values have dash in it' do
|
|
19
|
-
|
|
21
|
+
kklass.enumerize(:foo, in: %w(foo-bar bar-foo), predicates: true)
|
|
20
22
|
object.must_respond_to :foo_bar?
|
|
21
23
|
object.must_respond_to :bar_foo?
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
it 'creates predicate methods on multiple attribute' do
|
|
25
|
-
|
|
27
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: true, multiple: true)
|
|
26
28
|
object.must_respond_to :a?
|
|
27
29
|
object.must_respond_to :b?
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
it 'checks values' do
|
|
31
|
-
|
|
33
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: true)
|
|
32
34
|
object.foo = 'a'
|
|
33
35
|
object.a?.must_equal true
|
|
34
36
|
object.b?.must_equal false
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
it 'checks values on multiple attribute' do
|
|
38
|
-
|
|
40
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: true, multiple: true)
|
|
39
41
|
object.foo << :a
|
|
40
42
|
object.a?.must_equal true
|
|
41
43
|
object.b?.must_equal false
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
it 'prefixes methods' do
|
|
45
|
-
|
|
47
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: { prefix: 'bar' })
|
|
46
48
|
object.wont_respond_to :a?
|
|
47
49
|
object.wont_respond_to :b?
|
|
48
50
|
object.must_respond_to :bar_a?
|
|
@@ -50,13 +52,13 @@ describe Enumerize::Predicates do
|
|
|
50
52
|
end
|
|
51
53
|
|
|
52
54
|
it 'accepts only option' do
|
|
53
|
-
|
|
55
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: { only: :a })
|
|
54
56
|
object.must_respond_to :a?
|
|
55
57
|
object.wont_respond_to :b?
|
|
56
58
|
end
|
|
57
59
|
|
|
58
60
|
it 'accepts except option' do
|
|
59
|
-
|
|
61
|
+
kklass.enumerize(:foo, in: %w(a b), predicates: { except: :a })
|
|
60
62
|
object.wont_respond_to :a?
|
|
61
63
|
object.must_respond_to :b?
|
|
62
64
|
end
|
data/test/rails_admin_test.rb
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
class RailsAdminSpec < MiniTest::Spec
|
|
4
|
-
let(:
|
|
6
|
+
let(:kklass) do
|
|
5
7
|
Class.new do
|
|
6
8
|
extend Enumerize
|
|
7
9
|
end
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
let(:object) {
|
|
12
|
+
let(:object) { kklass.new }
|
|
11
13
|
|
|
12
14
|
it 'defines enum method' do
|
|
13
15
|
store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
|
|
14
|
-
|
|
16
|
+
kklass.enumerize(:foo, in: [:a, :b])
|
|
15
17
|
object.foo_enum.must_equal [['a text', 'a'], ['b text', 'b']]
|
|
16
18
|
end
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
it 'defines enum properly for custom values enumerations' do
|
|
20
22
|
store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
|
|
21
|
-
|
|
22
|
-
object.foo_enum.must_equal [['a text',
|
|
23
|
+
kklass.enumerize(:foo, in: {:a => 1, :b => 2})
|
|
24
|
+
object.foo_enum.must_equal [['a text', 'a'], ['b text', 'b']]
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
end
|
data/test/sequel_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
require 'sequel'
|
|
3
5
|
require 'logger'
|
|
@@ -21,7 +23,9 @@ module SequelTest
|
|
|
21
23
|
String :name
|
|
22
24
|
String :interests
|
|
23
25
|
String :status
|
|
26
|
+
Integer :skill
|
|
24
27
|
String :account_type, default: "basic"
|
|
28
|
+
String :foo
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
DB.create_table :documents do
|
|
@@ -32,7 +36,7 @@ module SequelTest
|
|
|
32
36
|
end
|
|
33
37
|
|
|
34
38
|
class Document < Sequel::Model
|
|
35
|
-
|
|
39
|
+
plugin :enumerize
|
|
36
40
|
enumerize :visibility, :in => [:public, :private, :protected], :scope => true, :default => :public
|
|
37
41
|
end
|
|
38
42
|
|
|
@@ -47,15 +51,17 @@ module SequelTest
|
|
|
47
51
|
plugin :dirty
|
|
48
52
|
plugin :defaults_setter
|
|
49
53
|
plugin :validation_helpers
|
|
50
|
-
|
|
54
|
+
plugin :enumerize
|
|
51
55
|
include RoleEnum
|
|
52
56
|
|
|
53
|
-
enumerize :sex, :in => [:male, :female]
|
|
57
|
+
enumerize :sex, :in => [:male, :female], scope: :shallow
|
|
54
58
|
|
|
55
59
|
enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true
|
|
56
60
|
|
|
57
61
|
enumerize :status, :in => { active: 1, blocked: 2 }, scope: true
|
|
58
62
|
|
|
63
|
+
enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
|
|
64
|
+
|
|
59
65
|
enumerize :account_type, :in => [:basic, :premium]
|
|
60
66
|
end
|
|
61
67
|
|
|
@@ -67,6 +73,22 @@ module SequelTest
|
|
|
67
73
|
end
|
|
68
74
|
end
|
|
69
75
|
|
|
76
|
+
class SkipValidationsUser < Sequel::Model(:users)
|
|
77
|
+
include SkipValidationsEnum
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
class DoNotSkipValidationsUser < Sequel::Model(:users)
|
|
81
|
+
include DoNotSkipValidationsEnum
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
class SkipValidationsLambdaUser < Sequel::Model(:users)
|
|
85
|
+
include SkipValidationsLambdaEnum
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class SkipValidationsLambdaWithParamUser < Sequel::Model(:users)
|
|
89
|
+
include SkipValidationsLambdaWithParamEnum
|
|
90
|
+
end
|
|
91
|
+
|
|
70
92
|
describe Enumerize::SequelSupport do
|
|
71
93
|
it 'sets nil if invalid value is passed' do
|
|
72
94
|
user = User.new
|
|
@@ -75,7 +97,7 @@ module SequelTest
|
|
|
75
97
|
end
|
|
76
98
|
|
|
77
99
|
it 'saves value' do
|
|
78
|
-
User.filter.delete
|
|
100
|
+
User.filter{ true }.delete
|
|
79
101
|
user = User.new
|
|
80
102
|
user.sex = :female
|
|
81
103
|
user.save
|
|
@@ -83,7 +105,7 @@ module SequelTest
|
|
|
83
105
|
end
|
|
84
106
|
|
|
85
107
|
it 'loads value' do
|
|
86
|
-
User.filter.delete
|
|
108
|
+
User.filter{ true }.delete
|
|
87
109
|
User.create(:sex => :male)
|
|
88
110
|
store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
|
|
89
111
|
user = User.first
|
|
@@ -98,7 +120,7 @@ module SequelTest
|
|
|
98
120
|
end
|
|
99
121
|
|
|
100
122
|
it 'does not set default value for not selected attributes' do
|
|
101
|
-
User.filter.delete
|
|
123
|
+
User.filter{ true }.delete
|
|
102
124
|
User.create(:sex => :male)
|
|
103
125
|
|
|
104
126
|
assert_equal [:id], User.select(:id).first.values.keys
|
|
@@ -109,7 +131,7 @@ module SequelTest
|
|
|
109
131
|
User.new.values[:lambda_role].must_equal 'admin'
|
|
110
132
|
end
|
|
111
133
|
it 'uses after_initialize callback to set default value' do
|
|
112
|
-
User.filter.delete
|
|
134
|
+
User.filter{ true }.delete
|
|
113
135
|
User.create(sex: 'male', lambda_role: nil)
|
|
114
136
|
|
|
115
137
|
user = User.where(:sex => 'male').first
|
|
@@ -150,6 +172,31 @@ module SequelTest
|
|
|
150
172
|
user.values[:role].must_be_nil
|
|
151
173
|
end
|
|
152
174
|
|
|
175
|
+
it 'validates inclusion when :skip_validations = false' do
|
|
176
|
+
user = DoNotSkipValidationsUser.new
|
|
177
|
+
user.foo = 'wrong'
|
|
178
|
+
user.wont_be :valid?
|
|
179
|
+
user.errors[:foo].must_include 'is not included in the list'
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it 'does not validate inclusion when :skip_validations = true' do
|
|
183
|
+
user = SkipValidationsUser.new
|
|
184
|
+
user.foo = 'wrong'
|
|
185
|
+
user.must_be :valid?
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it 'supports :skip_validations option as lambda' do
|
|
189
|
+
user = SkipValidationsLambdaUser.new
|
|
190
|
+
user.foo = 'wrong'
|
|
191
|
+
user.must_be :valid?
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it 'supports :skip_validations option as lambda with a parameter' do
|
|
195
|
+
user = SkipValidationsLambdaWithParamUser.new
|
|
196
|
+
user.foo = 'wrong'
|
|
197
|
+
user.must_be :valid?
|
|
198
|
+
end
|
|
199
|
+
|
|
153
200
|
it 'supports multiple attributes' do
|
|
154
201
|
user = User.new
|
|
155
202
|
user.interests ||= []
|
|
@@ -193,7 +240,7 @@ module SequelTest
|
|
|
193
240
|
end
|
|
194
241
|
|
|
195
242
|
it 'stores custom values for multiple attributes' do
|
|
196
|
-
User.filter.delete
|
|
243
|
+
User.filter{ true }.delete
|
|
197
244
|
|
|
198
245
|
klass = Class.new(User)
|
|
199
246
|
klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
|
|
@@ -208,10 +255,11 @@ module SequelTest
|
|
|
208
255
|
end
|
|
209
256
|
|
|
210
257
|
it 'adds scope' do
|
|
211
|
-
User.filter.delete
|
|
258
|
+
User.filter{ true }.delete
|
|
212
259
|
|
|
213
260
|
user_1 = User.create(status: :active, role: :admin)
|
|
214
261
|
user_2 = User.create(status: :blocked)
|
|
262
|
+
user_3 = User.create(sex: :male, skill: :pro)
|
|
215
263
|
|
|
216
264
|
User.with_status(:active).to_a.must_equal [user_1]
|
|
217
265
|
User.with_status(:blocked).to_a.must_equal [user_2]
|
|
@@ -221,6 +269,8 @@ module SequelTest
|
|
|
221
269
|
User.without_status(:active, :blocked).to_a.must_equal []
|
|
222
270
|
|
|
223
271
|
User.having_role(:admin).to_a.must_equal [user_1]
|
|
272
|
+
User.male.to_a.must_equal [user_3]
|
|
273
|
+
User.pro.to_a.must_equal [user_3]
|
|
224
274
|
end
|
|
225
275
|
|
|
226
276
|
it 'allows either key or value as valid' do
|
|
@@ -238,7 +288,7 @@ module SequelTest
|
|
|
238
288
|
end
|
|
239
289
|
|
|
240
290
|
it 'supports defining enumerized attributes on abstract class' do
|
|
241
|
-
Document.filter.delete
|
|
291
|
+
Document.filter{ true }.delete
|
|
242
292
|
|
|
243
293
|
document = Document.new
|
|
244
294
|
document.visibility = :protected
|
|
@@ -246,7 +296,7 @@ module SequelTest
|
|
|
246
296
|
end
|
|
247
297
|
|
|
248
298
|
it 'supports defining enumerized scopes on abstract class' do
|
|
249
|
-
Document.filter.delete
|
|
299
|
+
Document.filter{ true }.delete
|
|
250
300
|
|
|
251
301
|
document_1 = Document.create(visibility: :public)
|
|
252
302
|
document_2 = Document.create(visibility: :private)
|
|
@@ -266,7 +316,7 @@ module SequelTest
|
|
|
266
316
|
end
|
|
267
317
|
|
|
268
318
|
it "doesn't update record" do
|
|
269
|
-
Document.filter.delete
|
|
319
|
+
Document.filter{ true }.delete
|
|
270
320
|
|
|
271
321
|
expected = Time.new(2010, 10, 10)
|
|
272
322
|
|