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
@@ -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