enumerize 0.10.1 → 0.11.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 +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -2
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -3
- data/Gemfile.mongo_mapper +22 -0
- data/Gemfile.rails32 +23 -0
- data/{Gemfile.rails4 → Gemfile.rails40} +2 -3
- data/lib/enumerize.rb +11 -3
- data/lib/enumerize/activerecord.rb +1 -1
- data/lib/enumerize/attribute.rb +8 -0
- data/lib/enumerize/base.rb +5 -2
- data/lib/enumerize/form_helper.rb +4 -2
- data/lib/enumerize/mongoid.rb +13 -0
- data/lib/enumerize/scope/mongoid.rb +1 -6
- data/lib/enumerize/set.rb +4 -0
- data/lib/enumerize/version.rb +1 -1
- data/test/activerecord_test.rb +4 -5
- data/test/formtastic_test.rb +3 -12
- data/test/mongo_mapper_test.rb +6 -0
- data/test/mongoid_test.rb +29 -3
- data/test/multiple_test.rb +15 -0
- data/test/rspec_spec.rb +1 -0
- data/test/set_test.rb +8 -0
- data/test/simple_form_test.rb +0 -1
- data/test/support/view_test_helper.rb +4 -0
- data/test/test_helper.rb +19 -2
- data/test/value_test.rb +1 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4e3454dcf7faa010477afaa0c7de0b49e3e7e7e
|
4
|
+
data.tar.gz: fe8517318865f32bfe0421493e2431f90ca568dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e54b9a844cf53b5570f82b4da4fbf509e4f62ef0b947ee16776b0608d2dfdde6b49d56c401abc7a16ed242bf57c64bf51450279513e70c7b577a2cbf67a4c87
|
7
|
+
data.tar.gz: 0a607cef37922a25e47df3fa99b03ae4e86e06ced6b58d77c4faa91cce771ac373bdbad30244da1d052488bac2c7bfb6ab497669581430fa2253ac16e821e470
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.5
|
data/.travis.yml
CHANGED
@@ -5,7 +5,7 @@ before_install:
|
|
5
5
|
- gem install bundler
|
6
6
|
gemfile:
|
7
7
|
- Gemfile
|
8
|
-
- Gemfile.
|
8
|
+
- Gemfile.rails32
|
9
9
|
rvm:
|
10
10
|
- 1.9.3
|
11
11
|
- 2.0.0
|
@@ -15,7 +15,12 @@ rvm:
|
|
15
15
|
matrix:
|
16
16
|
exclude:
|
17
17
|
- rvm: 2.2
|
18
|
-
gemfile: Gemfile
|
18
|
+
gemfile: Gemfile.rails32
|
19
|
+
include:
|
20
|
+
- rvm: 2.2
|
21
|
+
gemfile: Gemfile.rails40
|
22
|
+
- rvm: 2.2
|
23
|
+
gemfile: Gemfile.mongo_mapper
|
19
24
|
notifications:
|
20
25
|
email:
|
21
26
|
recipients:
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,16 @@
|
|
4
4
|
|
5
5
|
### bug fix
|
6
6
|
|
7
|
+
## 0.11.0 (March 29, 2015) ##
|
8
|
+
|
9
|
+
### enhancements
|
10
|
+
* Add ability to set default value for enumerized field with multiple type. (by [@nashby](https://github.com/nashby))
|
11
|
+
* Support Rails 4.2. (by [@lest](https://github.com/lest))
|
12
|
+
|
13
|
+
### bug fix
|
14
|
+
* Use Mongoid's `:in` method for generated scopes, fix chained scopes. (by [@nashby](https://github.com/nashby))
|
15
|
+
* Use `after_initialize` callback to set default value in Mongoid documents. (by [@nashby](https://github.com/nashby))
|
16
|
+
|
7
17
|
## 0.10.1 (March 4, 2015) ##
|
8
18
|
|
9
19
|
### bug fix
|
data/Gemfile
CHANGED
@@ -3,10 +3,10 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
gem 'rake'
|
6
|
-
gem 'minitest', '~>
|
6
|
+
gem 'minitest', '~> 5.5.1'
|
7
7
|
gem 'rspec', :require => false
|
8
8
|
|
9
|
-
gem 'rails', '
|
9
|
+
gem 'rails', '4.2.0', :require => false
|
10
10
|
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
|
11
11
|
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
12
12
|
|
@@ -18,6 +18,5 @@ platforms :rbx do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
gem 'mongoid'
|
21
|
-
gem 'mongo_mapper'
|
22
21
|
gem 'simple_form'
|
23
22
|
gem 'formtastic'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
gem 'rake'
|
6
|
+
gem 'minitest', '~> 5.5.1'
|
7
|
+
gem 'rspec', :require => false
|
8
|
+
|
9
|
+
gem 'rails', '4.2.0', :require => false
|
10
|
+
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
|
11
|
+
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
12
|
+
|
13
|
+
platforms :rbx do
|
14
|
+
gem 'rubysl', '~> 2.0'
|
15
|
+
gem 'psych'
|
16
|
+
gem 'rubinius-developer_tools'
|
17
|
+
gem 'rubysl-test-unit'
|
18
|
+
end
|
19
|
+
|
20
|
+
gem 'mongo_mapper'
|
21
|
+
gem 'simple_form'
|
22
|
+
gem 'formtastic'
|
data/Gemfile.rails32
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
gem 'rake'
|
6
|
+
gem 'minitest', '~> 4.1'
|
7
|
+
gem 'rspec', :require => false
|
8
|
+
|
9
|
+
gem 'rails', '~> 3.2.0', :require => false
|
10
|
+
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
|
11
|
+
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
12
|
+
|
13
|
+
platforms :rbx do
|
14
|
+
gem 'rubysl', '~> 2.0'
|
15
|
+
gem 'psych'
|
16
|
+
gem 'rubinius-developer_tools'
|
17
|
+
gem 'rubysl-test-unit'
|
18
|
+
end
|
19
|
+
|
20
|
+
gem 'mongoid'
|
21
|
+
gem 'mongo_mapper'
|
22
|
+
gem 'simple_form'
|
23
|
+
gem 'formtastic'
|
@@ -17,7 +17,6 @@ platforms :rbx do
|
|
17
17
|
gem 'rubysl-test-unit'
|
18
18
|
end
|
19
19
|
|
20
|
-
gem 'mongoid'
|
21
|
-
gem 'mongo_mapper', github: 'jnunemaker/mongomapper'
|
20
|
+
gem 'mongoid'
|
22
21
|
gem 'simple_form'
|
23
|
-
gem 'formtastic'
|
22
|
+
gem 'formtastic'
|
data/lib/enumerize.rb
CHANGED
@@ -13,6 +13,7 @@ module Enumerize
|
|
13
13
|
autoload :ModuleAttributes, 'enumerize/module_attributes'
|
14
14
|
|
15
15
|
autoload :ActiveRecordSupport, 'enumerize/activerecord'
|
16
|
+
autoload :MongoidSupport, 'enumerize/mongoid'
|
16
17
|
|
17
18
|
module Scope
|
18
19
|
autoload :ActiveRecord, 'enumerize/scope/activerecord'
|
@@ -27,9 +28,16 @@ module Enumerize
|
|
27
28
|
def self.extended(base)
|
28
29
|
base.send :include, Enumerize::Base
|
29
30
|
base.extend Enumerize::Predicates
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
|
32
|
+
if defined?(::ActiveRecord::Base)
|
33
|
+
base.extend Enumerize::ActiveRecordSupport
|
34
|
+
base.extend Enumerize::Scope::ActiveRecord
|
35
|
+
end
|
36
|
+
|
37
|
+
if defined?(::Mongoid::Document)
|
38
|
+
base.extend Enumerize::MongoidSupport
|
39
|
+
base.extend Enumerize::Scope::Mongoid
|
40
|
+
end
|
33
41
|
|
34
42
|
if defined?(::RailsAdmin)
|
35
43
|
require 'enumerize/integrations/rails_admin'
|
@@ -4,7 +4,7 @@ module Enumerize
|
|
4
4
|
super
|
5
5
|
|
6
6
|
_enumerize_module.dependent_eval do
|
7
|
-
if
|
7
|
+
if self < ::ActiveRecord::Base
|
8
8
|
include InstanceMethods
|
9
9
|
|
10
10
|
# Since Rails use `allocate` method on models and initializes them with `init_with` method.
|
data/lib/enumerize/attribute.rb
CHANGED
@@ -134,6 +134,14 @@ module Enumerize
|
|
134
134
|
end
|
135
135
|
|
136
136
|
module Multiple
|
137
|
+
def find_default_value(value)
|
138
|
+
if value.respond_to?(:call)
|
139
|
+
value
|
140
|
+
else
|
141
|
+
find_values(*value)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
137
145
|
def define_methods!(mod)
|
138
146
|
mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
|
139
147
|
def #{name}
|
data/lib/enumerize/base.rb
CHANGED
@@ -8,8 +8,9 @@ module Enumerize
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class << base
|
11
|
-
if (method_defined?(:inherited) || private_method_defined?(:inherited)) && (
|
11
|
+
if (method_defined?(:inherited) || private_method_defined?(:inherited)) && !private_method_defined?(:inherited_without_enumerized)
|
12
12
|
alias_method :inherited_without_enumerized, :inherited
|
13
|
+
private :inherited_without_enumerized
|
13
14
|
end
|
14
15
|
|
15
16
|
alias_method :inherited, :inherited_with_enumerized
|
@@ -98,7 +99,9 @@ module Enumerize
|
|
98
99
|
next
|
99
100
|
end
|
100
101
|
|
101
|
-
|
102
|
+
value_for_validation = _enumerized_values_for_validation[attr.name.to_s]
|
103
|
+
|
104
|
+
if (!attr_value || attr_value.empty?) && (!value_for_validation || value_for_validation.empty?)
|
102
105
|
value = attr.default_value
|
103
106
|
|
104
107
|
if value.respond_to?(:call)
|
@@ -1,7 +1,9 @@
|
|
1
1
|
# backport of https://github.com/rails/rails/commit/3be9e8a0c2187744b6c9879ca2836cef5ebed693
|
2
2
|
if defined?(ActionView::Helpers::InstanceTag)
|
3
|
-
ActionView::Helpers::InstanceTag.class_eval do
|
4
|
-
|
3
|
+
ActionView::Helpers::InstanceTag.singleton_class.class_eval do
|
4
|
+
remove_method :check_box_checked?
|
5
|
+
|
6
|
+
def check_box_checked?(value, checked_value)
|
5
7
|
case value
|
6
8
|
when TrueClass, FalseClass
|
7
9
|
value
|
@@ -20,12 +20,7 @@ module Enumerize
|
|
20
20
|
|
21
21
|
define_singleton_method scope_name do |*values|
|
22
22
|
values = enumerized_attributes[name].find_values(*values).map(&:value)
|
23
|
-
|
24
|
-
if values.size == 1
|
25
|
-
where(name => values.first)
|
26
|
-
else
|
27
|
-
where(name.in => values)
|
28
|
-
end
|
23
|
+
self.in(name => values)
|
29
24
|
end
|
30
25
|
|
31
26
|
if options[:scope] == true
|
data/lib/enumerize/set.rb
CHANGED
data/lib/enumerize/version.rb
CHANGED
data/test/activerecord_test.rb
CHANGED
@@ -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.
|
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
|
|
@@ -154,7 +154,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
154
154
|
|
155
155
|
it "uses persisted value for validation if it hasn't been set" do
|
156
156
|
user = User.create! :sex => :male
|
157
|
-
User.find(user).read_attribute_for_validation(:sex).must_equal 'male'
|
157
|
+
User.find(user.id).read_attribute_for_validation(:sex).must_equal 'male'
|
158
158
|
end
|
159
159
|
|
160
160
|
it 'is valid with empty string assigned' do
|
@@ -336,7 +336,6 @@ describe Enumerize::ActiveRecordSupport do
|
|
336
336
|
user = User.create(:status => :active)
|
337
337
|
user.status = :blocked
|
338
338
|
|
339
|
-
|
340
|
-
assert_equal expected, user.changes.to_yaml
|
339
|
+
assert_equal [1, 2], YAML.load(user.changes.to_yaml)[:status]
|
341
340
|
end
|
342
341
|
end
|
data/test/formtastic_test.rb
CHANGED
@@ -1,16 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
|
3
|
-
|
4
|
-
|
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
|
data/test/mongo_mapper_test.rb
CHANGED
data/test/mongoid_test.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
+
begin
|
4
|
+
|
3
5
|
silence_warnings do
|
4
6
|
require 'mongoid'
|
5
7
|
end
|
@@ -17,9 +19,10 @@ describe Enumerize do
|
|
17
19
|
|
18
20
|
field :sex
|
19
21
|
field :role
|
20
|
-
enumerize :sex,
|
21
|
-
enumerize :
|
22
|
-
enumerize :
|
22
|
+
enumerize :sex, :in => %w[male female], scope: true
|
23
|
+
enumerize :status, :in => %w[notice warning error], scope: true
|
24
|
+
enumerize :role, :in => %w[admin user], :default => 'user', scope: :having_role
|
25
|
+
enumerize :mult, :in => %w[one two three four], :multiple => true
|
23
26
|
end
|
24
27
|
|
25
28
|
before { $VERBOSE = nil }
|
@@ -55,6 +58,14 @@ describe Enumerize do
|
|
55
58
|
model.new.role.must_equal 'user'
|
56
59
|
end
|
57
60
|
|
61
|
+
it 'uses after_initialize callback to set default value' do
|
62
|
+
model.delete_all
|
63
|
+
model.create!(sex: 'male', role: nil)
|
64
|
+
|
65
|
+
user = model.where(sex: 'male').first
|
66
|
+
user.role.must_equal 'user'
|
67
|
+
end
|
68
|
+
|
58
69
|
it 'validates inclusion' do
|
59
70
|
user = model.new
|
60
71
|
user.role = 'wrong'
|
@@ -95,9 +106,24 @@ describe Enumerize do
|
|
95
106
|
model.having_role(:user).to_a.must_equal [user_2]
|
96
107
|
end
|
97
108
|
|
109
|
+
it 'chains scopes' do
|
110
|
+
model.delete_all
|
111
|
+
|
112
|
+
user_1 = model.create!(status: :notice)
|
113
|
+
user_2 = model.create!(status: :warning)
|
114
|
+
user_3 = model.create!(status: :error)
|
115
|
+
|
116
|
+
model.with_status(:notice, :warning).with_status(:notice, :error).to_a.must_equal [user_1]
|
117
|
+
model.with_status(:notice, :warning).union.with_status(:notice, :error).to_a.must_equal [user_1, user_2, user_3]
|
118
|
+
end
|
119
|
+
|
98
120
|
it 'ignores not enumerized values that passed to the scope method' do
|
99
121
|
model.delete_all
|
100
122
|
|
101
123
|
model.with_sex(:foo).must_equal []
|
102
124
|
end
|
103
125
|
end
|
126
|
+
|
127
|
+
rescue LoadError
|
128
|
+
# Skip
|
129
|
+
end
|
data/test/multiple_test.rb
CHANGED
@@ -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
|
data/test/rspec_spec.rb
CHANGED
data/test/set_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'yaml'
|
2
3
|
|
3
4
|
describe Enumerize::Set do
|
4
5
|
let(:klass) do
|
@@ -147,4 +148,11 @@ describe Enumerize::Set do
|
|
147
148
|
set.wont_respond_to :some_method?
|
148
149
|
end
|
149
150
|
end
|
151
|
+
|
152
|
+
describe 'serialization' do
|
153
|
+
it 'is serialized to yaml as array' do
|
154
|
+
set << :a
|
155
|
+
assert_equal YAML.dump(%w(a)), YAML.dump(set)
|
156
|
+
end
|
157
|
+
end
|
150
158
|
end
|
data/test/simple_form_test.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'active_support/concern'
|
2
2
|
require 'active_support/testing/setup_and_teardown'
|
3
3
|
|
4
|
+
if defined?(ActionView::RoutingUrlFor)
|
5
|
+
ActionView::RoutingUrlFor.send(:include, ActionDispatch::Routing::UrlFor)
|
6
|
+
end
|
7
|
+
|
4
8
|
module ViewTestHelper
|
5
9
|
extend ActiveSupport::Concern
|
6
10
|
|
data/test/test_helper.rb
CHANGED
@@ -2,12 +2,29 @@ require 'minitest/autorun'
|
|
2
2
|
require 'minitest/spec'
|
3
3
|
require 'active_support/core_ext/kernel/reporting'
|
4
4
|
require 'active_model'
|
5
|
-
|
6
|
-
$VERBOSE=true
|
5
|
+
require 'rails'
|
7
6
|
|
8
7
|
module RailsAdmin
|
9
8
|
end
|
10
9
|
|
10
|
+
require 'simple_form'
|
11
|
+
SimpleForm.setup {}
|
12
|
+
|
13
|
+
require 'formtastic'
|
14
|
+
|
15
|
+
module EnumerizeTest
|
16
|
+
class Application < Rails::Application
|
17
|
+
config.active_support.deprecation = :stderr
|
18
|
+
config.active_support.test_order = :random
|
19
|
+
config.eager_load = false
|
20
|
+
config.secret_key_base = 'secret'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
EnumerizeTest::Application.initialize!
|
25
|
+
|
26
|
+
$VERBOSE=true
|
27
|
+
|
11
28
|
require 'enumerize'
|
12
29
|
|
13
30
|
Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
|
data/test/value_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumerize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Nartimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -32,10 +32,13 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- ".gitignore"
|
35
|
+
- ".ruby-version"
|
35
36
|
- ".travis.yml"
|
36
37
|
- CHANGELOG.md
|
37
38
|
- Gemfile
|
38
|
-
- Gemfile.
|
39
|
+
- Gemfile.mongo_mapper
|
40
|
+
- Gemfile.rails32
|
41
|
+
- Gemfile.rails40
|
39
42
|
- MIT-LICENSE
|
40
43
|
- README.md
|
41
44
|
- Rakefile
|
@@ -54,6 +57,7 @@ files:
|
|
54
57
|
- lib/enumerize/integrations/rspec/matcher.rb
|
55
58
|
- lib/enumerize/module.rb
|
56
59
|
- lib/enumerize/module_attributes.rb
|
60
|
+
- lib/enumerize/mongoid.rb
|
57
61
|
- lib/enumerize/predicatable.rb
|
58
62
|
- lib/enumerize/predicates.rb
|
59
63
|
- lib/enumerize/scope/activerecord.rb
|