enumerize 0.8.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,342 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ require 'sequel'
5
+ require 'logger'
6
+ require 'jdbc/sqlite3' if RUBY_PLATFORM == 'java'
7
+
8
+ class SequelTest < MiniTest::Spec
9
+ silence_warnings do
10
+ DB = if RUBY_PLATFORM == 'java'
11
+ Sequel.connect('jdbc:sqlite::memory:')
12
+ else
13
+ Sequel.sqlite
14
+ end
15
+ DB.loggers << Logger.new(nil)
16
+ end
17
+
18
+ DB.create_table :users do
19
+ primary_key :id
20
+ String :sex
21
+ String :role
22
+ String :lambda_role
23
+ String :name
24
+ String :interests
25
+ String :status
26
+ Integer :skill
27
+ String :account_type, default: "basic"
28
+ String :foo
29
+ end
30
+
31
+ DB.create_table :documents do
32
+ primary_key :id
33
+ String :visibility
34
+ Time :created_at
35
+ Time :updated_at
36
+ end
37
+
38
+ class Document < Sequel::Model
39
+ plugin :enumerize
40
+ enumerize :visibility, :in => [:public, :private, :protected], :scope => true, :default => :public
41
+ end
42
+
43
+ module RoleEnum
44
+ extend Enumerize
45
+ enumerize :role, :in => [:user, :admin], :default => :user, scope: :having_role
46
+ enumerize :lambda_role, :in => [:user, :admin], :default => lambda { :admin }
47
+ end
48
+
49
+ class User < Sequel::Model
50
+ plugin :serialization, :json, :interests
51
+ plugin :dirty
52
+ plugin :defaults_setter
53
+ plugin :validation_helpers
54
+ plugin :enumerize
55
+ include RoleEnum
56
+
57
+ enumerize :sex, :in => [:male, :female], scope: :shallow
58
+
59
+ enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true
60
+
61
+ enumerize :status, :in => { active: 1, blocked: 2 }, scope: true
62
+
63
+ enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
64
+
65
+ enumerize :account_type, :in => [:basic, :premium]
66
+ end
67
+
68
+ class UniqStatusUser < User
69
+ def validate
70
+ super
71
+ validates_unique :status
72
+ validates_presence :sex
73
+ end
74
+ end
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
+
92
+ it 'sets nil if invalid value is passed' do
93
+ user = User.new
94
+ user.sex = :invalid
95
+ expect(user.sex).must_be_nil
96
+ end
97
+
98
+ it 'saves value' do
99
+ User.filter{ true }.delete
100
+ user = User.new
101
+ user.sex = :female
102
+ user.save
103
+ expect(user.sex).must_equal 'female'
104
+ end
105
+
106
+ it 'loads value' do
107
+ User.filter{ true }.delete
108
+ User.create(:sex => :male)
109
+ store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
110
+ user = User.first
111
+ expect(user.sex).must_equal 'male'
112
+ expect(user.sex_text).must_equal 'Male'
113
+ end
114
+ end
115
+
116
+ it 'has default value' do
117
+ expect(User.new.role).must_equal 'user'
118
+ expect(User.new.values[:role]).must_equal 'user'
119
+ end
120
+
121
+ it 'does not set default value for not selected attributes' do
122
+ User.filter{ true }.delete
123
+ User.create(:sex => :male)
124
+
125
+ assert_equal [:id], User.select(:id).first.values.keys
126
+ end
127
+
128
+ it 'has default value with lambda' do
129
+ expect(User.new.lambda_role).must_equal 'admin'
130
+ expect(User.new.values[:lambda_role]).must_equal 'admin'
131
+ end
132
+ it 'uses after_initialize callback to set default value' do
133
+ User.filter{ true }.delete
134
+ User.create(sex: 'male', lambda_role: nil)
135
+
136
+ user = User.where(:sex => 'male').first
137
+ expect(user.lambda_role).must_equal 'admin'
138
+ end
139
+
140
+ it 'uses default value from db column' do
141
+ expect(User.new.account_type).must_equal 'basic'
142
+ end
143
+
144
+ it 'validates inclusion' do
145
+ user = User.new
146
+ user.role = 'wrong'
147
+ expect(user).wont_be :valid?
148
+ expect(user.errors[:role]).must_include 'is not included in the list'
149
+ end
150
+
151
+ it 'validates inclusion on mass assignment' do
152
+ assert_raises Sequel::ValidationFailed do
153
+ User.create(role: 'wrong')
154
+ end
155
+ end
156
+
157
+ it "uses persisted value for validation if it hasn't been set" do
158
+ user = User.create :sex => :male
159
+ expect(User[user.id].read_attribute_for_validation(:sex)).must_equal 'male'
160
+ end
161
+
162
+ it 'is valid with empty string assigned' do
163
+ user = User.new
164
+ user.role = ''
165
+ expect(user).must_be :valid?
166
+ end
167
+
168
+ it 'stores nil when empty string assigned' do
169
+ user = User.new
170
+ user.role = ''
171
+ expect(user.values[:role]).must_be_nil
172
+ end
173
+
174
+ it 'validates inclusion when :skip_validations = false' do
175
+ user = DoNotSkipValidationsUser.new
176
+ user.foo = 'wrong'
177
+ expect(user).wont_be :valid?
178
+ expect(user.errors[:foo]).must_include 'is not included in the list'
179
+ end
180
+
181
+ it 'does not validate inclusion when :skip_validations = true' do
182
+ user = SkipValidationsUser.new
183
+ user.foo = 'wrong'
184
+ expect(user).must_be :valid?
185
+ end
186
+
187
+ it 'supports :skip_validations option as lambda' do
188
+ user = SkipValidationsLambdaUser.new
189
+ user.foo = 'wrong'
190
+ expect(user).must_be :valid?
191
+ end
192
+
193
+ it 'supports :skip_validations option as lambda with a parameter' do
194
+ user = SkipValidationsLambdaWithParamUser.new
195
+ user.foo = 'wrong'
196
+ expect(user).must_be :valid?
197
+ end
198
+
199
+ it 'supports multiple attributes' do
200
+ user = User.new
201
+ user.interests ||= []
202
+ expect(user.interests).must_be_empty
203
+ user.interests << "music"
204
+ expect(user.interests).must_equal %w(music)
205
+ user.save
206
+
207
+ user = User[user.id]
208
+ expect(user.interests).must_be_instance_of Enumerize::Set
209
+ expect(user.interests).must_equal %w(music)
210
+ user.interests << "sports"
211
+ expect(user.interests).must_equal %w(music sports)
212
+
213
+ user.interests = []
214
+ interests = user.interests
215
+ interests << "music"
216
+ expect(interests).must_equal %w(music)
217
+ interests << "dancing"
218
+ expect(interests).must_equal %w(music dancing)
219
+ end
220
+
221
+ it 'returns invalid multiple value for validation' do
222
+ user = User.new
223
+ user.interests << :music
224
+ user.interests << :invalid
225
+ values = user.read_attribute_for_validation(:interests)
226
+ expect(values).must_equal %w(music invalid)
227
+ end
228
+
229
+ it 'validates multiple attributes' do
230
+ user = User.new
231
+ user.interests << :invalid
232
+ expect(user).wont_be :valid?
233
+
234
+ user.interests = Object.new
235
+ expect(user).wont_be :valid?
236
+
237
+ user.interests = ['music', '']
238
+ expect(user).must_be :valid?
239
+ end
240
+
241
+ it 'stores custom values for multiple attributes' do
242
+ User.filter{ true }.delete
243
+
244
+ klass = Class.new(User)
245
+ klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
246
+
247
+ user = klass.new
248
+ user.interests << :music
249
+ expect(user.interests).must_equal %w(music)
250
+ user.save
251
+
252
+ user = klass[user.id]
253
+ expect(user.interests).must_equal %w(music)
254
+ end
255
+
256
+ it 'adds scope' do
257
+ User.filter{ true }.delete
258
+
259
+ user_1 = User.create(sex: :female, skill: :noob, status: :active, role: :admin)
260
+ user_2 = User.create(sex: :female, skill: :casual, status: :blocked)
261
+ user_3 = User.create(sex: :male, skill: :pro)
262
+
263
+ expect(User.with_status(:active).to_a).must_equal [user_1]
264
+ expect(User.with_status(:blocked).to_a).must_equal [user_2]
265
+ expect(User.with_status(:active, :blocked).to_set).must_equal [user_1, user_2].to_set
266
+
267
+ expect(User.without_status(:active).to_a).must_equal [user_2]
268
+ expect(User.without_status(:active, :blocked).to_a).must_equal []
269
+
270
+ expect(User.having_role(:admin).to_a).must_equal [user_1]
271
+ expect(User.male.to_a).must_equal [user_3]
272
+ expect(User.pro.to_a).must_equal [user_3]
273
+
274
+ expect(User.not_male.to_set).must_equal [user_1, user_2].to_set
275
+ expect(User.not_pro.to_set).must_equal [user_1, user_2].to_set
276
+ end
277
+
278
+ it 'allows either key or value as valid' do
279
+ user_1 = User.new(status: :active)
280
+ user_2 = User.new(status: 1)
281
+ user_3 = User.new(status: '1')
282
+
283
+ expect(user_1.status).must_equal 'active'
284
+ expect(user_2.status).must_equal 'active'
285
+ expect(user_3.status).must_equal 'active'
286
+
287
+ expect(user_1).must_be :valid?
288
+ expect(user_2).must_be :valid?
289
+ expect(user_3).must_be :valid?
290
+ end
291
+
292
+ it 'supports defining enumerized attributes on abstract class' do
293
+ Document.filter{ true }.delete
294
+
295
+ document = Document.new
296
+ document.visibility = :protected
297
+ expect(document.visibility).must_equal 'protected'
298
+ end
299
+
300
+ it 'supports defining enumerized scopes on abstract class' do
301
+ Document.filter{ true }.delete
302
+
303
+ document_1 = Document.create(visibility: :public)
304
+ document_2 = Document.create(visibility: :private)
305
+
306
+ expect(Document.with_visibility(:public).to_a).must_equal [document_1]
307
+ end
308
+
309
+ it 'validates uniqueness' do
310
+ user = User.create(status: :active, sex: "male")
311
+
312
+ user = UniqStatusUser.new
313
+ user.sex = "male"
314
+ user.status = :active
315
+ expect(user.valid?).must_equal false
316
+
317
+ expect(user.errors[:status]).wont_be :empty?
318
+ end
319
+
320
+ it "doesn't update record" do
321
+ Document.filter{ true }.delete
322
+
323
+ expected = Time.new(2010, 10, 10)
324
+
325
+ document = Document.new
326
+ document.updated_at = expected
327
+ document.save
328
+
329
+ document = Document.last
330
+ document.save
331
+
332
+ assert_equal expected, document.updated_at
333
+ end
334
+
335
+ it 'changes from dirty should be serialized as scalar values' do
336
+ user = User.create(:status => :active)
337
+ user.status = :blocked
338
+
339
+ expected = { status: [1, 2] }.to_yaml
340
+ assert_equal expected, user.column_changes.to_yaml
341
+ end
342
+ end
data/test/set_test.rb CHANGED
@@ -1,17 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
4
+ require 'yaml'
2
5
 
3
- describe Enumerize::Set do
4
- let(:klass) do
6
+ class SetTest < MiniTest::Spec
7
+ let(:kklass) do
5
8
  Class.new do
6
9
  extend Enumerize
7
10
  enumerize :foo, :in => %w(a b c), :multiple => true
8
11
  end
9
12
  end
10
13
 
11
- let(:object) { klass.new }
14
+ let(:object) { kklass.new }
12
15
 
13
16
  def build_set(values)
14
- @set = Enumerize::Set.new(object, klass.foo, values)
17
+ @set = Enumerize::Set.new(object, kklass.foo, values)
15
18
  end
16
19
 
17
20
  def set
@@ -38,36 +41,36 @@ describe Enumerize::Set do
38
41
  end
39
42
 
40
43
  it 'equals to other set' do
41
- set.must_equal Enumerize::Set.new(nil, klass.foo, %w(a))
44
+ expect(set).must_equal Enumerize::Set.new(nil, kklass.foo, %w(a))
42
45
  end
43
46
 
44
47
  it 'equals to array' do
45
- set.must_equal %w(a)
48
+ expect(set).must_equal %w(a)
46
49
  end
47
50
 
48
51
  it 'equals to array of symbols' do
49
- set.must_equal [:a]
52
+ expect(set).must_equal [:a]
50
53
  end
51
54
 
52
55
  it 'has unique values' do
53
56
  set << :a
54
- set.must_equal %w(a)
57
+ expect(set).must_equal %w(a)
55
58
  end
56
59
 
57
60
  it 'equals to array with different value order' do
58
61
  set << :b
59
- set.must_equal %w(b a)
62
+ expect(set).must_equal %w(b a)
60
63
  end
61
64
 
62
65
  it "isn't equal to a part of values" do
63
66
  set << :b
64
- set.wont_equal %w(a)
67
+ expect(set).wont_equal %w(a)
65
68
  end
66
69
 
67
70
  describe '#push' do
68
71
  it 'appends values' do
69
72
  set.push :b
70
- set.must_include :b
73
+ expect(set).must_include :b
71
74
  end
72
75
 
73
76
  it 'reassigns attribute' do
@@ -80,7 +83,7 @@ describe Enumerize::Set do
80
83
  describe '#delete' do
81
84
  it 'deletes value' do
82
85
  set.delete :a
83
- set.wont_include :a
86
+ expect(set).wont_include :a
84
87
  end
85
88
 
86
89
  it 'reassigns attribute' do
@@ -93,58 +96,71 @@ describe Enumerize::Set do
93
96
  describe '#inspect' do
94
97
  it 'returns custom string' do
95
98
  set << :b
96
- set.inspect.must_equal '#<Enumerize::Set {a, b}>'
99
+ expect(set.inspect).must_equal '#<Enumerize::Set {a, b}>'
97
100
  end
98
101
  end
99
102
 
100
103
  describe '#to_ary' do
101
104
  it 'returns array' do
102
- set.to_ary.must_be_instance_of Array
105
+ expect(set.to_ary).must_be_instance_of Array
106
+ end
107
+ end
108
+
109
+ describe '#texts' do
110
+ it 'returns array of text values' do
111
+ expect(set.texts).must_equal ['A']
103
112
  end
104
113
  end
105
114
 
106
115
  describe '#join' do
107
116
  it 'joins values' do
108
117
  set << :b
109
- set.join(', ').must_equal 'a, b'
118
+ expect(set.join(', ')).must_equal 'a, b'
110
119
  end
111
120
  end
112
121
 
113
122
  describe 'boolean methods comparison' do
114
123
  it 'returns true if value equals method' do
115
124
  set << :a
116
- set.a?.must_equal true
125
+ expect(set.a?).must_equal true
117
126
  end
118
127
 
119
128
  it 'returns false if value does not equal method' do
120
129
  set << :a
121
- set.b?.must_equal false
130
+ expect(set.b?).must_equal false
122
131
  end
123
132
 
124
133
  it 'raises NoMethodError if there are no values like boolean method' do
125
- proc {
134
+ expect(proc {
126
135
  set.some_method?
127
- }.must_raise NoMethodError
136
+ }).must_raise NoMethodError
128
137
  end
129
138
 
130
139
  it 'raises ArgumentError if arguments are passed' do
131
- proc {
140
+ expect(proc {
132
141
  set.a?('<3')
133
- }.must_raise ArgumentError
142
+ }).must_raise ArgumentError
134
143
  end
135
144
 
136
145
  it 'responds to methods for existing values' do
137
- set.must_respond_to :a?
138
- set.must_respond_to :b?
139
- set.must_respond_to :c?
146
+ expect(set).must_respond_to :a?
147
+ expect(set).must_respond_to :b?
148
+ expect(set).must_respond_to :c?
140
149
  end
141
150
 
142
151
  it 'returns a method object' do
143
- set.method(:a?).must_be_instance_of Method
152
+ expect(set.method(:a?)).must_be_instance_of Method
144
153
  end
145
154
 
146
155
  it 'does not respond to a method for not existing value' do
147
- set.wont_respond_to :some_method?
156
+ expect(set).wont_respond_to :some_method?
157
+ end
158
+ end
159
+
160
+ describe 'serialization' do
161
+ it 'is serialized to yaml as array' do
162
+ set << :a
163
+ assert_equal YAML.dump(%w(a)), YAML.dump(set)
148
164
  end
149
165
  end
150
166
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'simple_form/version'
3
- require 'rails'
4
5
 
5
6
  class SimpleFormSpec < MiniTest::Spec
6
7
  include ViewTestHelper
@@ -41,6 +42,12 @@ class SimpleFormSpec < MiniTest::Spec
41
42
  end
42
43
  end
43
44
 
45
+ class Registration < Struct.new(:sex)
46
+ extend Enumerize
47
+
48
+ enumerize :sex, in: [:male, :female]
49
+ end
50
+
44
51
  let(:user) { User.new }
45
52
  let(:post) { Post.new }
46
53
 
@@ -129,4 +136,21 @@ class SimpleFormSpec < MiniTest::Spec
129
136
 
130
137
  assert_select 'input.string'
131
138
  end
139
+
140
+ it 'renders select with enumerized values for non-ActiveModel object' do
141
+ concat(simple_form_for(Registration.new, as: 'registration', url: '/') do |f|
142
+ f.input(:sex)
143
+ end)
144
+
145
+ assert_select 'select option[value=male]'
146
+ assert_select 'select option[value=female]'
147
+ end
148
+
149
+ it 'does not affect forms without object' do
150
+ concat(simple_form_for('') do |f|
151
+ f.input(:name)
152
+ end)
153
+
154
+ assert_select 'input.string'
155
+ end
132
156
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class MockController
2
4
  attr_writer :action_name
3
5
 
@@ -22,4 +24,8 @@ class MockController
22
24
  end
23
25
 
24
26
  def hash_for_users_path(*); end
27
+
28
+ def polymorphic_mappings
29
+ {}
30
+ end
25
31
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_record'
4
+ require 'sequel'
5
+
6
+ module EnumerizeExtention
7
+ def self.included(base)
8
+ case
9
+ when base < ActiveRecord::Base
10
+ base.extend Enumerize
11
+ when base < Sequel::Model
12
+ base.plugin :enumerize
13
+ end
14
+ end
15
+ end
16
+
17
+ module SkipValidationsEnum
18
+ def self.included(base)
19
+ base.include EnumerizeExtention
20
+ base.enumerize :foo, :in => [:bar, :baz], :skip_validations => true
21
+ end
22
+ end
23
+
24
+ module DoNotSkipValidationsEnum
25
+ def self.included(base)
26
+ base.include EnumerizeExtention
27
+ base.enumerize :foo, :in => [:bar, :baz], :skip_validations => false
28
+ end
29
+ end
30
+
31
+ module SkipValidationsLambdaEnum
32
+ def self.included(base)
33
+ base.include EnumerizeExtention
34
+ base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { true }
35
+ end
36
+ end
37
+
38
+ module SkipValidationsLambdaWithParamEnum
39
+ def self.included(base)
40
+ base.include EnumerizeExtention
41
+ base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { |record| true }
42
+ end
43
+ end
@@ -1,10 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
  require 'active_support/testing/setup_and_teardown'
3
5
 
4
- module ViewTestHelper
6
+ if defined?(ActionView::RoutingUrlFor)
7
+ ActionView::RoutingUrlFor.send(:include, ActionDispatch::Routing::UrlFor)
8
+ end
9
+
10
+ module SetupAndTeardownHelper
5
11
  extend ActiveSupport::Concern
6
12
 
7
13
  include ActiveSupport::Testing::SetupAndTeardown
14
+
15
+ included do
16
+ include ActiveSupport::Callbacks
17
+ define_callbacks :setup, :teardown
18
+ end
19
+ end
20
+
21
+ module ViewTestHelper
22
+ extend ActiveSupport::Concern
23
+
24
+ include SetupAndTeardownHelper
8
25
  include ActionView::TestCase::Behavior
9
26
 
10
27
  included do
data/test/test_helper.rb CHANGED
@@ -1,13 +1,36 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'minitest/autorun'
2
4
  require 'minitest/spec'
3
5
  require 'active_support/core_ext/kernel/reporting'
4
6
  require 'active_model'
5
-
6
- $VERBOSE=true
7
+ require 'rails'
8
+ begin
9
+ require 'mongoid'
10
+ rescue LoadError
11
+ end
7
12
 
8
13
  module RailsAdmin
9
14
  end
10
15
 
16
+ require 'simple_form'
17
+ SimpleForm.setup {}
18
+
19
+ require 'formtastic'
20
+
21
+ module EnumerizeTest
22
+ class Application < Rails::Application
23
+ config.active_support.deprecation = :stderr
24
+ config.active_support.test_order = :random
25
+ config.eager_load = false
26
+ config.secret_key_base = 'secret'
27
+ end
28
+ end
29
+
30
+ EnumerizeTest::Application.initialize!
31
+
32
+ $VERBOSE=true
33
+
11
34
  require 'enumerize'
12
35
 
13
36
  Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
@@ -23,6 +46,14 @@ module MiscHelpers
23
46
  I18n.reload!
24
47
  end
25
48
  end
49
+
50
+ def unsafe_yaml_load(yaml)
51
+ if YAML.respond_to?(:unsafe_load)
52
+ YAML.unsafe_load(yaml)
53
+ else
54
+ YAML.load(yaml)
55
+ end
56
+ end
26
57
  end
27
58
 
28
59
  class MiniTest::Spec