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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  module Enumerize
@@ -9,12 +11,12 @@ module Enumerize
9
11
  end
10
12
 
11
13
  it 'empty when no attrs' do
12
- subject.must_be_empty
14
+ expect(subject).must_be_empty
13
15
  end
14
16
 
15
17
  it 'not empty when attr added' do
16
18
  subject << make_attr(:a)
17
- subject.wont_be_empty
19
+ expect(subject).wont_be_empty
18
20
  end
19
21
 
20
22
  it 'iterates over added attrs' do
@@ -32,20 +34,20 @@ module Enumerize
32
34
  actual << element
33
35
  end
34
36
 
35
- count.must_equal 2
36
- actual.must_equal [attr_1, attr_2]
37
+ expect(count).must_equal 2
38
+ expect(actual).must_equal [attr_1, attr_2]
37
39
  end
38
40
 
39
41
  it 'reads attribute by name' do
40
42
  attr = make_attr(:a)
41
43
  subject << attr
42
- subject[:a].must_equal attr
44
+ expect(subject[:a]).must_equal attr
43
45
  end
44
46
 
45
47
  it 'reads attribute by name using string' do
46
48
  attr = make_attr(:a)
47
49
  subject << attr
48
- subject['a'].must_equal attr
50
+ expect(subject['a']).must_equal attr
49
51
  end
50
52
 
51
53
  it 'updates dependants' do
@@ -62,7 +64,7 @@ module Enumerize
62
64
  subject << attr
63
65
  dependant = AttributeMap.new
64
66
  subject.add_dependant dependant
65
- dependant[:a].must_equal attr
67
+ expect(dependant[:a]).must_equal attr
66
68
  end
67
69
  end
68
70
  end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
- describe Enumerize::Attribute do
5
+ class AttributeTest < MiniTest::Spec
4
6
  def attr
5
7
  @attr ||= nil
6
8
  end
@@ -11,22 +13,33 @@ describe Enumerize::Attribute do
11
13
 
12
14
  it 'returns values' do
13
15
  build_attr nil, :foo, :in => [:a, :b]
14
- attr.values.must_equal %w[a b]
16
+ expect(attr.values).must_equal %w[a b]
17
+ end
18
+
19
+ it 'returns frozen values' do
20
+ build_attr nil, :foo, :in => [:a, :b]
21
+ expect(attr.values.map(&:frozen?)).must_equal [true, true]
15
22
  end
16
23
 
17
24
  it 'converts name to symbol' do
18
25
  build_attr nil, 'foo', :in => %w[a b]
19
- attr.name.must_equal :foo
26
+ expect(attr.name).must_equal :foo
27
+ end
28
+
29
+ it 'uses custom value class' do
30
+ value_class = Class.new(Enumerize::Value)
31
+ build_attr nil, 'foo', :in => %w[a b], :value_class => value_class
32
+ expect(attr.values.first).must_be_instance_of value_class
20
33
  end
21
34
 
22
35
  describe 'i18n scopes' do
23
36
  it 'returns scopes from options' do
24
37
  build_attr nil, 'foo', :in => %w[a b], :i18n_scope => %w[bar buzz]
25
- attr.i18n_scopes.must_equal %w[bar buzz]
38
+ expect(attr.i18n_scopes).must_equal %w[bar buzz]
26
39
  end
27
40
 
28
41
  it 'accepts only string scopes' do
29
- proc { build_attr nil, 'foo', :in => %w[a b], :i18n_scope => [%w[bar buzz], "bar.buzz"] }.must_raise ArgumentError
42
+ expect(proc { build_attr nil, 'foo', :in => %w[a b], :i18n_scope => [%w[bar buzz], "bar.buzz"] }).must_raise ArgumentError
30
43
  end
31
44
  end
32
45
 
@@ -34,32 +47,32 @@ describe Enumerize::Attribute do
34
47
  it 'returns all options for select' do
35
48
  store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
36
49
  build_attr nil, :foo, :in => %w[a b]
37
- attr.options.must_equal [['a text', 'a'], ['b text', 'b']]
50
+ expect(attr.options).must_equal [['a text', 'a'], ['b text', 'b']]
38
51
  end
39
52
  end
40
53
 
41
54
  it 'returns requested options for select via :only' do
42
55
  store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
43
56
  build_attr nil, :foo, :in => %w[a b]
44
- attr.options(:only => :a).must_equal [['a text', 'a']]
45
- attr.options(:only => [:b]).must_equal [['b text', 'b']]
46
- attr.options(:only => []).must_equal []
57
+ expect(attr.options(:only => :a)).must_equal [['a text', 'a']]
58
+ expect(attr.options(:only => [:b])).must_equal [['b text', 'b']]
59
+ expect(attr.options(:only => [])).must_equal []
47
60
  end
48
61
  end
49
62
 
50
63
  it 'returns requested options for select via :except' do
51
64
  store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
52
65
  build_attr nil, :foo, :in => %w[a b]
53
- attr.options(:except => :a).must_equal [['b text', 'b']]
54
- attr.options(:except => :b).must_equal [['a text', 'a']]
55
- attr.options(:except => []).must_equal [['a text', 'a'], ['b text', 'b']]
66
+ expect(attr.options(:except => :a)).must_equal [['b text', 'b']]
67
+ expect(attr.options(:except => :b)).must_equal [['a text', 'a']]
68
+ expect(attr.options(:except => [])).must_equal [['a text', 'a'], ['b text', 'b']]
56
69
  end
57
70
  end
58
71
 
59
72
  it 'does not work with both :only and :except' do
60
73
  store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
61
74
  build_attr nil, :foo, :in => %w[a b]
62
- proc { attr.options(:except => [], :only => []) }.must_raise ArgumentError
75
+ expect(proc { attr.options(:except => [], :only => []) }).must_raise ArgumentError
63
76
  end
64
77
  end
65
78
  end
@@ -70,28 +83,44 @@ describe Enumerize::Attribute do
70
83
  end
71
84
 
72
85
  it 'returns hash keys as values' do
73
- attr.values.must_equal %w[a b]
86
+ expect(attr.values).must_equal %w[a b]
74
87
  end
75
88
 
76
89
  it 'finds values by hash values' do
77
- attr.find_value(1).must_equal 'a'
78
- attr.find_value(2).must_equal 'b'
90
+ expect(attr.find_value(1)).must_equal 'a'
91
+ expect(attr.find_value(2)).must_equal 'b'
79
92
  end
80
93
  end
81
94
 
95
+ it 'sets up shortcut methods for each value' do
96
+ build_attr nil, :foo, :in => {:a => 1, :b => 2}
97
+
98
+ expect(attr).must_respond_to :a
99
+ expect(attr).must_respond_to :b
100
+
101
+ expect(attr.a.value).must_equal 1
102
+ expect(attr.b.value).must_equal 2
103
+ expect(attr.a.text).must_equal 'A'
104
+ expect(attr.b.text).must_equal 'B'
105
+ end
106
+
82
107
  describe 'values hash with zero' do
83
108
  before do
84
109
  build_attr nil, :foo, :in => {:a => 1, :b => 2, :c => 0}
85
110
  end
86
111
 
87
112
  it 'returns hash keys as values' do
88
- attr.values.must_equal %w[a b c]
113
+ expect(attr.values).must_equal %w[a b c]
89
114
  end
90
115
 
91
116
  it 'finds values by hash values' do
92
- attr.find_value(1).must_equal 'a'
93
- attr.find_value(2).must_equal 'b'
94
- attr.find_value(0).must_equal 'c'
117
+ expect(attr.find_value(1)).must_equal 'a'
118
+ expect(attr.find_value(2)).must_equal 'b'
119
+ expect(attr.find_value(0)).must_equal 'c'
120
+ end
121
+
122
+ it 'finds all values by hash values' do
123
+ expect(attr.find_values(1, 2, 0)).must_equal ['a', 'b', 'c']
95
124
  end
96
125
  end
97
126
 
@@ -101,12 +130,12 @@ describe Enumerize::Attribute do
101
130
  end
102
131
 
103
132
  it 'returns hash keys as values' do
104
- attr.values.must_equal %w[a b]
133
+ expect(attr.values).must_equal %w[a b]
105
134
  end
106
135
 
107
136
  it 'finds values by hash values' do
108
- attr.find_value(true).must_equal 'a'
109
- attr.find_value(false).must_equal 'b'
137
+ expect(attr.find_value(true)).must_equal 'a'
138
+ expect(attr.find_value(false)).must_equal 'b'
110
139
  end
111
140
  end
112
141
  end
data/test/base_test.rb CHANGED
@@ -1,49 +1,51 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
- describe Enumerize::Base do
4
- let(:klass) do
5
+ class BaseTest < MiniTest::Spec
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(klass)
13
+ Class.new(kklass)
12
14
  end
13
15
 
14
- let(:object) { klass.new }
16
+ let(:object) { kklass.new }
15
17
 
16
18
  it 'returns nil when not set' do
17
- klass.enumerize(:foo, :in => [:a, :b])
18
- object.foo.must_equal nil
19
+ kklass.enumerize(:foo, :in => [:a, :b])
20
+ expect(object.foo).must_be_nil
19
21
  end
20
22
 
21
23
  it 'returns value that was set' do
22
- klass.enumerize(:foo, :in => [:a, :b])
24
+ kklass.enumerize(:foo, :in => [:a, :b])
23
25
  object.foo = :a
24
- object.foo.must_equal 'a'
26
+ expect(object.foo).must_equal 'a'
25
27
  end
26
28
 
27
29
  it 'returns translation' do
28
30
  store_translations(:en, :enumerize => {:foo => {:a => 'a text'}}) do
29
- klass.enumerize(:foo, :in => [:a, :b])
31
+ kklass.enumerize(:foo, :in => [:a, :b])
30
32
  object.foo = :a
31
- object.foo.text.must_equal 'a text'
32
- object.foo_text.must_equal 'a text'
33
- object.foo_text.must_equal 'a text'
33
+ expect(object.foo.text).must_equal 'a text'
34
+ expect(object.foo_text).must_equal 'a text'
35
+ expect(object.foo_text).must_equal 'a text'
34
36
  end
35
37
  end
36
38
 
37
39
  it 'returns nil as translation when value is nil' do
38
40
  store_translations(:en, :enumerize => {:foo => {:a => 'a text'}}) do
39
- klass.enumerize(:foo, :in => [:a, :b])
40
- object.foo_text.must_equal nil
41
+ kklass.enumerize(:foo, :in => [:a, :b])
42
+ expect(object.foo_text).must_be_nil
41
43
  end
42
44
  end
43
45
 
44
- it 'scopes translation by i18 key' do
45
- def klass.model_name
46
- name = "ExampleClass"
46
+ it 'scopes translation by i18n key' do
47
+ def kklass.model_name
48
+ name = String.new("ExampleClass")
47
49
  def name.i18n_key
48
50
  'example_class'
49
51
  end
@@ -52,99 +54,99 @@ describe Enumerize::Base do
52
54
  end
53
55
 
54
56
  store_translations(:en, :enumerize => {:example_class => {:foo => {:a => 'a text scoped'}}}) do
55
- klass.enumerize(:foo, :in => [:a, :b])
57
+ kklass.enumerize(:foo, :in => [:a, :b])
56
58
  object.foo = :a
57
- object.foo.text.must_equal 'a text scoped'
58
- object.foo_text.must_equal 'a text scoped'
59
+ expect(object.foo.text).must_equal 'a text scoped'
60
+ expect(object.foo_text).must_equal 'a text scoped'
59
61
  end
60
62
  end
61
63
 
62
64
  it 'returns humanized value if there are no translations' do
63
65
  store_translations(:en, :enumerize => {}) do
64
- klass.enumerize(:foo, :in => [:a, :b])
66
+ kklass.enumerize(:foo, :in => [:a, :b])
65
67
  object.foo = :a
66
- object.foo_text.must_equal 'A'
68
+ expect(object.foo_text).must_equal 'A'
67
69
  end
68
70
  end
69
71
 
70
72
  it 'stores value as string' do
71
- klass.enumerize(:foo, :in => [:a, :b])
73
+ kklass.enumerize(:foo, :in => [:a, :b])
72
74
  object.foo = :a
73
- object.instance_variable_get(:@foo).must_be_instance_of String
75
+ expect(object.instance_variable_get(:@foo)).must_be_instance_of String
74
76
  end
75
77
 
76
78
  it 'handles default value' do
77
- klass.enumerize(:foo, :in => [:a, :b], :default => :b)
78
- object.foo.must_equal 'b'
79
+ kklass.enumerize(:foo, :in => [:a, :b], :default => :b)
80
+ expect(object.foo).must_equal 'b'
79
81
  end
80
82
 
81
83
  it 'handles default value with lambda' do
82
- klass.enumerize(:foo, :in => [:a, :b], :default => lambda { :b })
83
- object.foo.must_equal 'b'
84
+ kklass.enumerize(:foo, :in => [:a, :b], :default => lambda { :b })
85
+ expect(object.foo).must_equal 'b'
84
86
  end
85
87
 
86
88
  it 'injects object instance into lamda default value' do
87
- klass.enumerize(:foo, :in => [:a, :b], :default => lambda { |obj| :b if obj.is_a? klass })
88
- object.foo.must_equal 'b'
89
+ kklass.enumerize(:foo, :in => [:a, :b], :default => lambda { |obj| :b if obj.is_a? kklass })
90
+ expect(object.foo).must_equal 'b'
89
91
  end
90
92
 
91
93
  it 'raises exception on invalid default value' do
92
- proc {
93
- klass.enumerize(:foo, :in => [:a, :b], :default => :c)
94
- }.must_raise ArgumentError
94
+ expect(proc {
95
+ kklass.enumerize(:foo, :in => [:a, :b], :default => :c)
96
+ }).must_raise ArgumentError
95
97
  end
96
98
 
97
99
  it 'has enumerized attributes' do
98
- klass.enumerized_attributes.must_be_empty
99
- klass.enumerize(:foo, :in => %w[a b])
100
- klass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
100
+ expect(kklass.enumerized_attributes).must_be_empty
101
+ kklass.enumerize(:foo, :in => %w[a b])
102
+ expect(kklass.enumerized_attributes[:foo]).must_be_instance_of Enumerize::Attribute
101
103
  end
102
104
 
103
105
  it "doesn't override existing method" do
104
- method = klass.method(:name)
105
- klass.enumerize(:name, :in => %w[a b], :default => 'a')
106
- klass.method(:name).must_equal method
106
+ method = kklass.method(:name)
107
+ kklass.enumerize(:name, :in => %w[a b], :default => 'a')
108
+ expect(kklass.method(:name)).must_equal method
107
109
  end
108
110
 
109
111
  it "inherits enumerized attributes from a parent class" do
110
- klass.enumerize(:foo, :in => %w[a b])
111
- subklass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
112
+ kklass.enumerize(:foo, :in => %w[a b])
113
+ expect(subklass.enumerized_attributes[:foo]).must_be_instance_of Enumerize::Attribute
112
114
  end
113
115
 
114
116
  it "inherits enumerized attributes from a grandparent class" do
115
- klass.enumerize(:foo, :in => %w[a b])
116
- Class.new(subklass).enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
117
+ kklass.enumerize(:foo, :in => %w[a b])
118
+ expect(Class.new(subklass).enumerized_attributes[:foo]).must_be_instance_of Enumerize::Attribute
117
119
  end
118
120
 
119
121
  it "doesn't add enumerized attributes to parent class" do
120
- klass.enumerize(:foo, :in => %w[a b])
122
+ kklass.enumerize(:foo, :in => %w[a b])
121
123
  subklass.enumerize(:bar, :in => %w[c d])
122
124
 
123
- klass.enumerized_attributes[:bar].must_equal nil
125
+ expect(kklass.enumerized_attributes[:bar]).must_be_nil
124
126
  end
125
127
 
126
128
  it 'adds new parent class attributes to subclass' do
127
- subklass = Class.new(klass)
128
- klass.enumerize :foo, :in => %w[a b]
129
- subklass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
129
+ subklass = Class.new(kklass)
130
+ kklass.enumerize :foo, :in => %w[a b]
131
+ expect(subklass.enumerized_attributes[:foo]).must_be_instance_of Enumerize::Attribute
130
132
  end
131
133
 
132
134
  it 'stores nil value' do
133
- klass.enumerize(:foo, :in => [:a, :b])
135
+ kklass.enumerize(:foo, :in => [:a, :b])
134
136
  object.foo = nil
135
- object.instance_variable_get(:@foo).must_equal nil
137
+ expect(object.instance_variable_get(:@foo)).must_be_nil
136
138
  end
137
139
 
138
140
  it 'casts value to string for validation' do
139
- klass.enumerize(:foo, :in => [:a, :b])
141
+ kklass.enumerize(:foo, :in => [:a, :b])
140
142
  object.foo = :c
141
- object.read_attribute_for_validation(:foo).must_equal 'c'
143
+ expect(object.read_attribute_for_validation(:foo)).must_equal 'c'
142
144
  end
143
145
 
144
146
  it "doesn't cast nil to string for validation" do
145
- klass.enumerize(:foo, :in => [:a, :b])
147
+ kklass.enumerize(:foo, :in => [:a, :b])
146
148
  object.foo = nil
147
- object.read_attribute_for_validation(:foo).must_equal nil
149
+ expect(object.read_attribute_for_validation(:foo)).must_be_nil
148
150
  end
149
151
 
150
152
  it 'calls super in the accessor method' do
@@ -170,33 +172,83 @@ describe Enumerize::Base do
170
172
  end
171
173
 
172
174
  object = klass.new
173
- object.foo.must_be_nil
174
- object.attributes.must_equal({:foo => nil})
175
+ expect(object.foo).must_be_nil
176
+ expect(object.attributes).must_equal({})
175
177
 
176
178
  object.foo = 'test'
177
- object.foo.must_equal 'test'
178
- object.attributes.must_equal(:foo => 'test')
179
+ expect(object.foo).must_equal 'test'
180
+ expect(object.attributes).must_equal(:foo => 'test')
179
181
  end
180
182
 
181
183
  it 'stores hash values' do
182
- klass.enumerize(:foo, :in => {:a => 1, :b => 2})
184
+ kklass.enumerize(:foo, :in => {:a => 1, :b => 2})
183
185
 
184
186
  object.foo = :a
185
- object.instance_variable_get(:@foo).must_equal 1
186
- object.foo.must_equal 'a'
187
+ expect(object.instance_variable_get(:@foo)).must_equal 1
188
+ expect(object.foo).must_equal 'a'
187
189
 
188
190
  object.foo = :b
189
- object.instance_variable_get(:@foo).must_equal 2
190
- object.foo.must_equal 'b'
191
+ expect(object.instance_variable_get(:@foo)).must_equal 2
192
+ expect(object.foo).must_equal 'b'
191
193
  end
192
194
 
193
195
  it 'returns custom value' do
194
- klass.enumerize(:foo, :in => {:a => 1, :b => 2})
196
+ kklass.enumerize(:foo, :in => {:a => 1, :b => 2})
195
197
 
196
198
  object.foo = :a
197
- object.foo_value.must_equal 1
199
+ expect(object.foo_value).must_equal 1
198
200
 
199
201
  object.foo = :b
200
- object.foo_value.must_equal 2
202
+ expect(object.foo_value).must_equal 2
203
+ end
204
+
205
+ it 'allows initialize method with arguments' do
206
+ klass = Class.new do
207
+ extend Enumerize
208
+
209
+ def initialize(argument, key_word_argument: nil); end
210
+ end
211
+
212
+ klass.new('arg1', key_word_argument: 'kwargs1')
213
+ end
214
+
215
+ it 'allows initialize method with arguments for inherited classes' do
216
+ parent_klass = Class.new do
217
+ def initialize(argument, key_word_argument: nil); end
218
+ end
219
+
220
+ klass = Class.new(parent_klass) do
221
+ extend Enumerize
222
+
223
+ def initialize(argument, key_word_argument: nil)
224
+ super
225
+ end
226
+ end
227
+
228
+ klass.new('arg1', key_word_argument: 'kwargs1')
229
+ end
230
+
231
+ it 'allows initializing object without keyword arguments' do
232
+ parent_klass = Class.new do
233
+ attr_reader :arguments
234
+
235
+ def initialize(arguments)
236
+ @arguments = arguments
237
+ end
238
+ end
239
+
240
+ klass = Class.new(parent_klass) do
241
+ extend Enumerize
242
+
243
+ def initialize(arguments)
244
+ super
245
+ end
246
+ end
247
+
248
+ params = { 'string_key' => 1, symbol_key: 2 }
249
+
250
+ object = klass.new(params)
251
+
252
+ expect(object.arguments).must_equal params
201
253
  end
202
254
  end
@@ -1,16 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  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
4
+
5
+ Formtastic::FormBuilder.action_class_finder = Formtastic::ActionClassFinder
6
+ Formtastic::FormBuilder.input_class_finder = Formtastic::InputClassFinder
14
7
 
15
8
  class FormtasticSpec < MiniTest::Spec
16
9
  include ViewTestHelper
@@ -51,6 +44,12 @@ class FormtasticSpec < MiniTest::Spec
51
44
  end
52
45
  end
53
46
 
47
+ class Registration < Struct.new(:sex)
48
+ extend Enumerize
49
+
50
+ enumerize :sex, in: [:male, :female]
51
+ end
52
+
54
53
  before { $VERBOSE = nil }
55
54
  after { $VERBOSE = true }
56
55
 
@@ -133,4 +132,21 @@ class FormtasticSpec < MiniTest::Spec
133
132
 
134
133
  assert_select 'input[type=text]'
135
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
136
152
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class ModuleAttributesSpec < MiniTest::Spec
@@ -9,9 +11,9 @@ class ModuleAttributesSpec < MiniTest::Spec
9
11
 
10
12
  klass = Class.new
11
13
  klass.send :include, mod
12
- klass.enumerized_attributes[:sex].must_be_instance_of Enumerize::Attribute
13
- klass.new.sex.must_equal 'male'
14
- klass.sex.must_be_instance_of Enumerize::Attribute
14
+ expect(klass.enumerized_attributes[:sex]).must_be_instance_of Enumerize::Attribute
15
+ expect(klass.new.sex).must_equal 'male'
16
+ expect(klass.sex).must_be_instance_of Enumerize::Attribute
15
17
  end
16
18
 
17
19
  it 'uses new attributes from the module' do
@@ -22,9 +24,9 @@ class ModuleAttributesSpec < MiniTest::Spec
22
24
  klass = Class.new
23
25
  klass.send :include, mod
24
26
  mod.enumerize :sex, :in => %w[male female], :default => 'male'
25
- klass.enumerized_attributes[:sex].must_be_instance_of Enumerize::Attribute
26
- klass.new.sex.must_equal 'male'
27
- klass.sex.must_be_instance_of Enumerize::Attribute
27
+ expect(klass.enumerized_attributes[:sex]).must_be_instance_of Enumerize::Attribute
28
+ expect(klass.new.sex).must_equal 'male'
29
+ expect(klass.sex).must_be_instance_of Enumerize::Attribute
28
30
  end
29
31
 
30
32
  it 'validates attributes' do
@@ -44,7 +46,7 @@ class ModuleAttributesSpec < MiniTest::Spec
44
46
 
45
47
  object = klass.new
46
48
  object.sex = 'wrong'
47
- object.wont_be :valid?
48
- object.errors[:sex].must_include 'is not included in the list'
49
+ expect(object).wont_be :valid?
50
+ expect(object.errors[:sex]).must_include 'is not included in the list'
49
51
  end
50
52
  end