simple_enum 2.3.0 → 2.3.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.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +39 -7
- data/lib/simple_enum.rb +3 -0
- data/lib/simple_enum/attribute.rb +19 -7
- data/lib/simple_enum/version.rb +1 -1
- data/spec/simple_enum/attribute_spec.rb +32 -0
- data/spec/spec_helper.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc6b8efefb2a56dd5cca3e9f9751a2dc63dbf026
|
4
|
+
data.tar.gz: 973c2ac8568b97a5c384ef150cbd4721a42a606b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f618673f56b4777f5c7320eb16276a54ecfcca341925ce21bca89d89f162ba331110b6f4df2669f6407ea448c8af7ab66baa80e6afc64cfdfa24d81009fc5dc
|
7
|
+
data.tar.gz: d5cbba0c10de4983a916282b803e11b6acdf6146fce6f2aa5e7f7f28640eda2cb3a48e18e5f8c0c248c88c5c2213ddc8a792497ee9a56f7d70f295796a407414
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@ SimpleEnum
|
|
2
2
|
==========
|
3
3
|
|
4
4
|
[](https://travis-ci.org/lwe/simple_enum)
|
5
|
-
[](https://codeclimate.com/github/lwe/simple_enum)
|
6
6
|
|
7
7
|
Unobtrusive enum-like fields for ActiveRecord and Ruby, brings enums functionality
|
8
8
|
to ActiveRecord and Mongoid models (built for Rails 4+).
|
@@ -50,7 +50,7 @@ to use simple_enum with another version of mongoid, use version 1.6 instead.
|
|
50
50
|
Load mongoid support in the `Gemfile`:
|
51
51
|
|
52
52
|
```ruby
|
53
|
-
gem 'simple_enum', '~> 2.
|
53
|
+
gem 'simple_enum', '~> 2.3.0' , require: 'simple_enum/mongoid'
|
54
54
|
```
|
55
55
|
|
56
56
|
Add this to a model:
|
@@ -98,10 +98,40 @@ Accessing actual enum values is possible at the class level:
|
|
98
98
|
```ruby
|
99
99
|
User.genders # => #<SimpleEnum::Enum:0x0....>
|
100
100
|
User.genders[:male] # => 0
|
101
|
-
User.genders.values_at(:male, :female) # => [0, 1]
|
101
|
+
User.genders.values_at(:male, :female) # => [0, 1] (since 2.1.0)
|
102
102
|
User.females # => #<ActiveRecord::Relation:0x0.....> (WHERE gender_cd = 1)
|
103
103
|
```
|
104
104
|
|
105
|
+
By default, scope names are generated as pluralized forms of the defined enum values e.g.
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
class Booking < ActiveRecord::Base
|
109
|
+
as_enum :status, active: 1, cancelled: 2, pending: 3
|
110
|
+
end
|
111
|
+
```
|
112
|
+
|
113
|
+
would generate the following:
|
114
|
+
```ruby
|
115
|
+
Booking.actives # => #<ActiveRecord::Relation:0x0.....> (WHERE status_cd = 1)
|
116
|
+
Booking.cancelleds # => #<ActiveRecord::Relation:0x0.....> (WHERE status_cd = 2)
|
117
|
+
Booking.pendings # => #<ActiveRecord::Relation:0x0.....> (WHERE status_cd = 3)
|
118
|
+
```
|
119
|
+
|
120
|
+
By setting `pluralize_scopes: false` will not generate pluralized versions of scopes e.g.
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
class Booking < ActiveRecord::Base
|
124
|
+
as_enum :status, active: 1, cancelled: 2, pending: 3, pluralize_scopes: false
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
would generate the following:
|
129
|
+
```ruby
|
130
|
+
Booking.active # => #<ActiveRecord::Relation:0x0.....> (WHERE status_cd = 1)
|
131
|
+
Booking.cancelled # => #<ActiveRecord::Relation:0x0.....> (WHERE status_cd = 2)
|
132
|
+
Booking.pending # => #<ActiveRecord::Relation:0x0.....> (WHERE status_cd = 3)
|
133
|
+
```
|
134
|
+
|
105
135
|
### Wait, there's more!
|
106
136
|
|
107
137
|
- Too tired of always adding the integer values? Try:
|
@@ -223,9 +253,9 @@ so expect them to change in future versions of SimpleEnum.
|
|
223
253
|
translate_enum user, :gender # => "Frau" # assuming :de and translations exist
|
224
254
|
te user, :gender # translate_enum is also aliased to te
|
225
255
|
```
|
226
|
-
|
256
|
+
|
227
257
|
Provide translations in the i18n yaml file like:
|
228
|
-
|
258
|
+
|
229
259
|
```ruby
|
230
260
|
de:
|
231
261
|
enums:
|
@@ -233,13 +263,13 @@ so expect them to change in future versions of SimpleEnum.
|
|
233
263
|
female: 'Frau'
|
234
264
|
male: 'Mann'
|
235
265
|
```
|
236
|
-
|
266
|
+
|
237
267
|
- Build a select tag with a translated dropdown and symbol as value:
|
238
268
|
|
239
269
|
```ruby
|
240
270
|
select :user, :gender, enum_option_pairs(User, :gender)
|
241
271
|
```
|
242
|
-
|
272
|
+
|
243
273
|
- ...and one with the index as value:
|
244
274
|
|
245
275
|
```ruby
|
@@ -255,6 +285,8 @@ the following extensions can be used:
|
|
255
285
|
[simple_enum-multiple](https://github.com/bbtfr/simple_enum-multiple)
|
256
286
|
- **Persistence values**, i.e. store values in the DB:
|
257
287
|
[simple_enum-persistence](https://github.com/bbtfr/simple_enum-persistence)
|
288
|
+
- **Scopes**, scopes helper for ActiveRecord enum attributes:
|
289
|
+
[simple_enum-scopes](https://github.com/aovertus/simple_enum-scopes)
|
258
290
|
|
259
291
|
## Best practices
|
260
292
|
|
data/lib/simple_enum.rb
CHANGED
@@ -17,7 +17,7 @@ module SimpleEnum
|
|
17
17
|
EXTENSIONS = []
|
18
18
|
|
19
19
|
def as_enum(name, values, options = {})
|
20
|
-
options.assert_valid_keys(:source, :prefix, :with, :accessor, :map)
|
20
|
+
options.assert_valid_keys(:source, :prefix, :with, :accessor, :map, :pluralize_scopes)
|
21
21
|
|
22
22
|
hash = SimpleEnum::Hasher.map(values, options)
|
23
23
|
enum = SimpleEnum::Enum.new(name, hash)
|
@@ -25,10 +25,7 @@ module SimpleEnum
|
|
25
25
|
|
26
26
|
generate_enum_class_accessors_for(enum, accessor)
|
27
27
|
generate_enum_instance_accessors_for(enum, accessor)
|
28
|
-
|
29
|
-
Array.wrap(options.fetch(:with, SimpleEnum.with)).each do |feature|
|
30
|
-
send "generate_enum_#{feature}_methods_for", enum, accessor
|
31
|
-
end
|
28
|
+
generate_additional_enum_methods_for(enum, accessor, options)
|
32
29
|
|
33
30
|
EXTENSIONS.uniq.each do |extension|
|
34
31
|
send "generate_enum_#{extension}_extension_for", enum, accessor
|
@@ -57,6 +54,20 @@ module SimpleEnum
|
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
57
|
+
def generate_additional_enum_methods_for(enum, accessor, options)
|
58
|
+
with_options = Array.wrap(options.fetch(:with, SimpleEnum.with))
|
59
|
+
scope_option = with_options.delete(:scope)
|
60
|
+
|
61
|
+
with_options.each do |feature|
|
62
|
+
send "generate_enum_#{feature}_methods_for", enum, accessor
|
63
|
+
end
|
64
|
+
|
65
|
+
if scope_option
|
66
|
+
pluralize_scopes = options.fetch(:pluralize_scopes, SimpleEnum.pluralize_scopes)
|
67
|
+
generate_enum_scope_methods_for(enum, accessor, pluralize_scopes)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
60
71
|
def generate_enum_dirty_methods_for(enum, accessor)
|
61
72
|
simple_enum_module.module_eval do
|
62
73
|
define_method("#{accessor}_changed?") { accessor.changed?(self) }
|
@@ -73,11 +84,12 @@ module SimpleEnum
|
|
73
84
|
end
|
74
85
|
end
|
75
86
|
|
76
|
-
def generate_enum_scope_methods_for(enum, accessor)
|
87
|
+
def generate_enum_scope_methods_for(enum, accessor, pluralize_scopes)
|
77
88
|
return unless respond_to?(:scope)
|
78
89
|
|
79
90
|
enum.each_pair do |key, value|
|
80
|
-
|
91
|
+
scope_key = pluralize_scopes ? key.pluralize : key
|
92
|
+
scope "#{accessor.prefix}#{scope_key}", -> { accessor.scope(self, value) }
|
81
93
|
end
|
82
94
|
end
|
83
95
|
end
|
data/lib/simple_enum/version.rb
CHANGED
@@ -223,6 +223,38 @@ describe SimpleEnum::Attribute do
|
|
223
223
|
subject { klass.gender_females }
|
224
224
|
it_behaves_like 'delegates to accessor#scope', 1
|
225
225
|
end
|
226
|
+
|
227
|
+
context 'and pluralize scopes option is set to false' do
|
228
|
+
fake_active_record(:klass) {
|
229
|
+
as_enum :gender, [:male, :female], with: [:scope], prefix: true, pluralize_scopes: false
|
230
|
+
}
|
231
|
+
|
232
|
+
context '.gender_male' do
|
233
|
+
subject { klass.gender_male }
|
234
|
+
it_behaves_like 'delegates to accessor#scope', 0
|
235
|
+
end
|
236
|
+
|
237
|
+
context '.gender_female' do
|
238
|
+
subject { klass.gender_female }
|
239
|
+
it_behaves_like 'delegates to accessor#scope', 1
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
context 'when pluralize scopes option is set to false' do
|
245
|
+
fake_active_record(:klass) {
|
246
|
+
as_enum :gender, [:male, :female], with: [:scope], pluralize_scopes: false
|
247
|
+
}
|
248
|
+
|
249
|
+
context '.male' do
|
250
|
+
subject { klass.male }
|
251
|
+
it_behaves_like 'delegates to accessor#scope', 0
|
252
|
+
end
|
253
|
+
|
254
|
+
context '.female' do
|
255
|
+
subject { klass.female }
|
256
|
+
it_behaves_like 'delegates to accessor#scope', 1
|
257
|
+
end
|
226
258
|
end
|
227
259
|
|
228
260
|
context 'without scope method' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Westermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: 2.0.0
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.6.13
|
142
142
|
signing_key:
|
143
143
|
specification_version: 4
|
144
144
|
summary: Simple enum-like field support for models.
|