enum_ext 0.3.1 → 0.4.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 +5 -5
- data/.travis.yml +6 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +58 -53
- data/README.md +7 -4
- data/enum_ext.gemspec +4 -3
- data/lib/enum_ext.rb +37 -19
- data/lib/enum_ext/version.rb +1 -1
- metadata +28 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 2fb6aee80ce2daab446b5670b4e241cdf7c3628696be8c391280eda35c5370bf
|
|
4
|
+
data.tar.gz: dfc6d38cfe49d9335e167f02b8a9af72d825f74913302a7dec028faea6af9836
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c46755afcf16127058c21af572d54845c7c4dc8c87190ef086d1a2df80af3a74f249704fdf9939ac90316dc7019cb8198864d20f10a5a91dddcbc124a70462f0
|
|
7
|
+
data.tar.gz: cadb8ecb8fa5ea4a6be810ce8579dfd200bbc680e69c75f860a986bccadf9e66b8f9fdef10c5c3dff28c6cc7559d0e2b485fddc1316bc335c9153f5be5b68736
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile.lock
CHANGED
|
@@ -1,82 +1,87 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
enum_ext (0.
|
|
5
|
-
activerecord (>= 4.
|
|
4
|
+
enum_ext (0.4.1)
|
|
5
|
+
activerecord (>= 5.2.4.3)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
actionpack (
|
|
11
|
-
actionview (=
|
|
12
|
-
activesupport (=
|
|
13
|
-
rack (~> 2.0)
|
|
14
|
-
rack-test (
|
|
10
|
+
actionpack (6.0.3.4)
|
|
11
|
+
actionview (= 6.0.3.4)
|
|
12
|
+
activesupport (= 6.0.3.4)
|
|
13
|
+
rack (~> 2.0, >= 2.0.8)
|
|
14
|
+
rack-test (>= 0.6.3)
|
|
15
15
|
rails-dom-testing (~> 2.0)
|
|
16
|
-
rails-html-sanitizer (~> 1.0, >= 1.0
|
|
17
|
-
actionview (
|
|
18
|
-
activesupport (=
|
|
16
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
17
|
+
actionview (6.0.3.4)
|
|
18
|
+
activesupport (= 6.0.3.4)
|
|
19
19
|
builder (~> 3.1)
|
|
20
|
-
|
|
20
|
+
erubi (~> 1.4)
|
|
21
21
|
rails-dom-testing (~> 2.0)
|
|
22
|
-
rails-html-sanitizer (~> 1.
|
|
23
|
-
activemodel (
|
|
24
|
-
activesupport (=
|
|
25
|
-
activerecord (
|
|
26
|
-
activemodel (=
|
|
27
|
-
activesupport (=
|
|
28
|
-
|
|
29
|
-
activesupport (5.0.2)
|
|
22
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
23
|
+
activemodel (6.0.3.4)
|
|
24
|
+
activesupport (= 6.0.3.4)
|
|
25
|
+
activerecord (6.0.3.4)
|
|
26
|
+
activemodel (= 6.0.3.4)
|
|
27
|
+
activesupport (= 6.0.3.4)
|
|
28
|
+
activesupport (6.0.3.4)
|
|
30
29
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
31
|
-
i18n (
|
|
30
|
+
i18n (>= 0.7, < 2)
|
|
32
31
|
minitest (~> 5.1)
|
|
33
32
|
tzinfo (~> 1.1)
|
|
34
|
-
|
|
35
|
-
builder (3.2.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
|
34
|
+
builder (3.2.4)
|
|
35
|
+
byebug (11.1.3)
|
|
36
|
+
concurrent-ruby (1.1.7)
|
|
37
|
+
crass (1.0.6)
|
|
38
|
+
erubi (1.10.0)
|
|
39
|
+
i18n (1.8.5)
|
|
40
|
+
concurrent-ruby (~> 1.0)
|
|
41
|
+
loofah (2.8.0)
|
|
42
|
+
crass (~> 1.0.2)
|
|
40
43
|
nokogiri (>= 1.5.9)
|
|
41
|
-
method_source (0.
|
|
42
|
-
mini_portile2 (2.
|
|
43
|
-
minitest (5.
|
|
44
|
-
nokogiri (1.
|
|
45
|
-
mini_portile2 (~> 2.
|
|
46
|
-
rack (2.
|
|
47
|
-
rack-test (
|
|
48
|
-
rack (>= 1.0)
|
|
49
|
-
rails-dom-testing (2.0.
|
|
50
|
-
activesupport (>= 4.2.0
|
|
51
|
-
nokogiri (
|
|
52
|
-
rails-html-sanitizer (1.0
|
|
53
|
-
loofah (~> 2.
|
|
54
|
-
rails-i18n (
|
|
55
|
-
i18n (
|
|
56
|
-
railties (
|
|
57
|
-
railties (
|
|
58
|
-
actionpack (=
|
|
59
|
-
activesupport (=
|
|
44
|
+
method_source (1.0.0)
|
|
45
|
+
mini_portile2 (2.4.0)
|
|
46
|
+
minitest (5.14.2)
|
|
47
|
+
nokogiri (1.10.10)
|
|
48
|
+
mini_portile2 (~> 2.4.0)
|
|
49
|
+
rack (2.2.3)
|
|
50
|
+
rack-test (1.1.0)
|
|
51
|
+
rack (>= 1.0, < 3)
|
|
52
|
+
rails-dom-testing (2.0.3)
|
|
53
|
+
activesupport (>= 4.2.0)
|
|
54
|
+
nokogiri (>= 1.6)
|
|
55
|
+
rails-html-sanitizer (1.3.0)
|
|
56
|
+
loofah (~> 2.3)
|
|
57
|
+
rails-i18n (6.0.0)
|
|
58
|
+
i18n (>= 0.7, < 2)
|
|
59
|
+
railties (>= 6.0.0, < 7)
|
|
60
|
+
railties (6.0.3.4)
|
|
61
|
+
actionpack (= 6.0.3.4)
|
|
62
|
+
activesupport (= 6.0.3.4)
|
|
60
63
|
method_source
|
|
61
64
|
rake (>= 0.8.7)
|
|
62
|
-
thor (>= 0.
|
|
63
|
-
rake (
|
|
64
|
-
sqlite3 (1.
|
|
65
|
-
thor (0.
|
|
65
|
+
thor (>= 0.20.3, < 2.0)
|
|
66
|
+
rake (13.0.1)
|
|
67
|
+
sqlite3 (1.4.2)
|
|
68
|
+
thor (1.0.1)
|
|
66
69
|
thread_safe (0.3.6)
|
|
67
|
-
tzinfo (1.2.
|
|
70
|
+
tzinfo (1.2.8)
|
|
68
71
|
thread_safe (~> 0.1)
|
|
72
|
+
zeitwerk (2.4.2)
|
|
69
73
|
|
|
70
74
|
PLATFORMS
|
|
71
75
|
ruby
|
|
72
76
|
|
|
73
77
|
DEPENDENCIES
|
|
74
|
-
bundler (
|
|
78
|
+
bundler (>= 1.11)
|
|
79
|
+
byebug
|
|
75
80
|
enum_ext!
|
|
76
81
|
minitest
|
|
77
82
|
rails-i18n (>= 4)
|
|
78
|
-
rake (
|
|
83
|
+
rake (>= 10.0)
|
|
79
84
|
sqlite3
|
|
80
85
|
|
|
81
86
|
BUNDLED WITH
|
|
82
|
-
1.
|
|
87
|
+
2.1.4
|
data/README.md
CHANGED
|
@@ -19,7 +19,8 @@ Or install it yourself as:
|
|
|
19
19
|
$ gem install enum_ext
|
|
20
20
|
|
|
21
21
|
## Usage
|
|
22
|
-
To use enum extension extend main model class with EnumExt module,
|
|
22
|
+
To use enum extension extend main model class with EnumExt module,
|
|
23
|
+
and customize your enums the way you need:
|
|
23
24
|
|
|
24
25
|
class SomeModel
|
|
25
26
|
extend EnumExt
|
|
@@ -64,10 +65,10 @@ Or install it yourself as:
|
|
|
64
65
|
end
|
|
65
66
|
```
|
|
66
67
|
|
|
67
|
-
This
|
|
68
|
+
This humanize_enum adds to instance:
|
|
68
69
|
- t_in_cart, t_paid, t_ready_for_shipment
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
and to class:
|
|
71
72
|
- t_statuses - as given or generated values
|
|
72
73
|
- t_statuses_options - translated enum values options for select input
|
|
73
74
|
- t_statuses_options_i - same as above but use int values with translations works for ActiveAdmin filters for instance
|
|
@@ -103,6 +104,8 @@ Or install it yourself as:
|
|
|
103
104
|
request.t_status # >> "paid 3 dollars"
|
|
104
105
|
Request.t_statuses # >> { in_cart: -> { I18n.t("request.status.in_cart") }, .... }
|
|
105
106
|
```
|
|
107
|
+
|
|
108
|
+
Could be called multiple times, all humanization definitions will be merged under the hood.
|
|
106
109
|
|
|
107
110
|
### Translate (translate_enum)
|
|
108
111
|
|
|
@@ -191,7 +194,7 @@ class:
|
|
|
191
194
|
some_scope.update_all(status: Request.statuses[:new_status], update_at: Time.now)
|
|
192
195
|
```
|
|
193
196
|
If you need callbacks you can do like this: some_scope.each(&:new_stat!) but if you don't need callbacks and you
|
|
194
|
-
|
|
197
|
+
have hundreds and thousands of records to change at once you need update_all
|
|
195
198
|
|
|
196
199
|
```
|
|
197
200
|
mass_assign_enum( :status )
|
data/enum_ext.gemspec
CHANGED
|
@@ -19,11 +19,12 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
21
|
|
|
22
|
-
spec.add_dependency 'activerecord',
|
|
22
|
+
spec.add_dependency 'activerecord', ">= 5.2.4.3"
|
|
23
23
|
|
|
24
24
|
spec.add_development_dependency 'minitest'
|
|
25
|
-
spec.add_development_dependency 'bundler', '
|
|
26
|
-
spec.add_development_dependency 'rake', '
|
|
25
|
+
spec.add_development_dependency 'bundler', '>= 1.11'
|
|
26
|
+
spec.add_development_dependency 'rake', '>= 10.0'
|
|
27
27
|
spec.add_development_dependency 'rails-i18n', '>=4'
|
|
28
28
|
spec.add_development_dependency 'sqlite3'
|
|
29
|
+
spec.add_development_dependency 'byebug'
|
|
29
30
|
end
|
data/lib/enum_ext.rb
CHANGED
|
@@ -14,7 +14,7 @@ require 'enum_ext/version'
|
|
|
14
14
|
module EnumExt
|
|
15
15
|
|
|
16
16
|
# defines shortcut for getting integer value of enum.
|
|
17
|
-
# for enum named status will generate:
|
|
17
|
+
# for enum named 'status' will generate:
|
|
18
18
|
# instance.status_i
|
|
19
19
|
def enum_i( enum_name )
|
|
20
20
|
define_method "#{enum_name}_i" do
|
|
@@ -32,7 +32,7 @@ module EnumExt
|
|
|
32
32
|
# For this call:
|
|
33
33
|
# ext_enum_sets :status, {
|
|
34
34
|
# delivery_set: [:ready_for_shipment, :on_delivery, :delivered] # for shipping department for example
|
|
35
|
-
# in_warehouse: [:ready_for_shipment]
|
|
35
|
+
# in_warehouse: [:ready_for_shipment] # this scope is just for superposition example below
|
|
36
36
|
# }
|
|
37
37
|
#
|
|
38
38
|
# it will generate:
|
|
@@ -181,13 +181,22 @@ module EnumExt
|
|
|
181
181
|
# }
|
|
182
182
|
# end
|
|
183
183
|
#
|
|
184
|
+
# Could be called multiple times, all humanization definitions will be merged under the hood:
|
|
185
|
+
# humanize_enum :status, {
|
|
186
|
+
# payed: I18n.t("scope.#{status}")
|
|
187
|
+
# }
|
|
188
|
+
# humanize_enum :status, {
|
|
189
|
+
# billed: I18n.t("scope.#{status}")
|
|
190
|
+
# }
|
|
191
|
+
#
|
|
192
|
+
#
|
|
184
193
|
# Example with block:
|
|
185
194
|
#
|
|
186
195
|
# humanize_enum :status do
|
|
187
196
|
# I18n.t("scope.#{status}")
|
|
188
197
|
# end
|
|
189
198
|
#
|
|
190
|
-
# in select:
|
|
199
|
+
# in views select:
|
|
191
200
|
# f.select :status, Request.t_statuses_options
|
|
192
201
|
#
|
|
193
202
|
# in select in Active Admin filter
|
|
@@ -208,11 +217,28 @@ module EnumExt
|
|
|
208
217
|
|
|
209
218
|
self.instance_eval do
|
|
210
219
|
|
|
220
|
+
#t_enum
|
|
221
|
+
define_method "t_#{enum_name}" do
|
|
222
|
+
t = block || localizations.try(:with_indifferent_access)[send(enum_name)]
|
|
223
|
+
if t.try(:lambda?)
|
|
224
|
+
t.try(:arity) == 1 && t.call( self ) || t.try(:call)
|
|
225
|
+
elsif t.is_a?(Proc)
|
|
226
|
+
instance_eval(&t)
|
|
227
|
+
else
|
|
228
|
+
t
|
|
229
|
+
end.to_s
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
@@localizations ||= {}.with_indifferent_access
|
|
233
|
+
# if localization is abscent than block must be given
|
|
234
|
+
@@localizations.merge!(
|
|
235
|
+
localizations.try(:with_indifferent_access) ||
|
|
236
|
+
localizations ||
|
|
237
|
+
send(enum_plural).keys.map{|en| [en, Proc.new{ self.new({ enum_name => en }).send("t_#{enum_name}") }] }.to_h.with_indifferent_access
|
|
238
|
+
)
|
|
211
239
|
#t_enums
|
|
212
240
|
define_singleton_method( "t_#{enum_plural}" ) do
|
|
213
|
-
|
|
214
|
-
localizations.try(:with_indifferent_access) || localizations ||
|
|
215
|
-
send(enum_plural).keys.map {|en| [en, self.new( {enum_name => en} ).send("t_#{enum_name}")] }.to_h.with_indifferent_access
|
|
241
|
+
@@localizations
|
|
216
242
|
end
|
|
217
243
|
|
|
218
244
|
#t_enums_options
|
|
@@ -225,16 +251,8 @@ module EnumExt
|
|
|
225
251
|
send("t_#{enum_plural}_options_raw_i", send("t_#{enum_plural}") )
|
|
226
252
|
end
|
|
227
253
|
|
|
228
|
-
#
|
|
229
|
-
|
|
230
|
-
t = block || localizations.try(:with_indifferent_access)[send(enum_name)]
|
|
231
|
-
if t.try(:lambda?)
|
|
232
|
-
t.try(:arity) == 1 && t.call( self ) || t.try(:call)
|
|
233
|
-
elsif t.is_a?(Proc)
|
|
234
|
-
instance_eval(&t)
|
|
235
|
-
else
|
|
236
|
-
t
|
|
237
|
-
end.to_s
|
|
254
|
+
define_method "t_#{enum_name}=" do |new_val|
|
|
255
|
+
send("#{enum_name}=", new_val)
|
|
238
256
|
end
|
|
239
257
|
|
|
240
258
|
#protected?
|
|
@@ -258,7 +276,6 @@ module EnumExt
|
|
|
258
276
|
key_val
|
|
259
277
|
end
|
|
260
278
|
end
|
|
261
|
-
|
|
262
279
|
end
|
|
263
280
|
end
|
|
264
281
|
alias localize_enum humanize_enum
|
|
@@ -278,10 +295,11 @@ module EnumExt
|
|
|
278
295
|
end
|
|
279
296
|
end
|
|
280
297
|
|
|
281
|
-
# human_attribute_name is redefined for
|
|
298
|
+
# human_attribute_name is redefined for automation like this:
|
|
282
299
|
# p #{object.class.human_attribute_name( attr_name )}:
|
|
283
|
-
# p
|
|
300
|
+
# p object.send(attr_name)
|
|
284
301
|
def human_attribute_name( name, options = {} )
|
|
302
|
+
# if name starts from t_ and there is a column with the last part then ...
|
|
285
303
|
name[0..1] == 't_' && column_names.include?(name[2..-1]) ? super( name[2..-1], options ) : super( name, options )
|
|
286
304
|
end
|
|
287
305
|
|
data/lib/enum_ext/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: enum_ext
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- alekseyl
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-12-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 5.2.4.3
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: 5.2.4.3
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: minitest
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -42,28 +42,28 @@ dependencies:
|
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '1.11'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '1.11'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rake
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '10.0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '10.0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
@@ -94,6 +94,20 @@ dependencies:
|
|
|
94
94
|
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: byebug
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
97
111
|
description: Enum extension, ads enum sets, mass-assign, localization, and some sugar
|
|
98
112
|
helpers.
|
|
99
113
|
email:
|
|
@@ -103,6 +117,8 @@ extensions: []
|
|
|
103
117
|
extra_rdoc_files: []
|
|
104
118
|
files:
|
|
105
119
|
- ".gitignore"
|
|
120
|
+
- ".travis.yml"
|
|
121
|
+
- CHANGELOG.md
|
|
106
122
|
- Gemfile
|
|
107
123
|
- Gemfile.lock
|
|
108
124
|
- LICENSE.txt
|
|
@@ -117,7 +133,7 @@ homepage: https://github.com/alekseyl/enum_ext
|
|
|
117
133
|
licenses:
|
|
118
134
|
- MIT
|
|
119
135
|
metadata: {}
|
|
120
|
-
post_install_message:
|
|
136
|
+
post_install_message:
|
|
121
137
|
rdoc_options: []
|
|
122
138
|
require_paths:
|
|
123
139
|
- lib
|
|
@@ -132,9 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
132
148
|
- !ruby/object:Gem::Version
|
|
133
149
|
version: '0'
|
|
134
150
|
requirements: []
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
signing_key:
|
|
151
|
+
rubygems_version: 3.1.2
|
|
152
|
+
signing_key:
|
|
138
153
|
specification_version: 4
|
|
139
154
|
summary: Enum extension, ads enum sets, mass-assign, localization, and some sugar
|
|
140
155
|
helpers.
|