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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6c0c895459eb23da1ea81308bd6cead21058ff99
4
- data.tar.gz: efb68bd41923b82dcc0a4bfe60251e7aac981fef
2
+ SHA256:
3
+ metadata.gz: 2fb6aee80ce2daab446b5670b4e241cdf7c3628696be8c391280eda35c5370bf
4
+ data.tar.gz: dfc6d38cfe49d9335e167f02b8a9af72d825f74913302a7dec028faea6af9836
5
5
  SHA512:
6
- metadata.gz: e271d917b46919ee2e17b389e639abe15e26e0091432abb9292af9e23621dfbf9be905d34415f88e14d0e504735fe3ea9afa5d5ca3cc219c6dfa497e24c9c7b6
7
- data.tar.gz: e05c955ffcd2a83ce290086e4c3d917a42994766aecf66cd36ab68edd752dbbba7a7de0cd79a6e27020c48ffdffee5a36e2b5a073bd42bffdddab47659b3b338
6
+ metadata.gz: c46755afcf16127058c21af572d54845c7c4dc8c87190ef086d1a2df80af3a74f249704fdf9939ac90316dc7019cb8198864d20f10a5a91dddcbc124a70462f0
7
+ data.tar.gz: cadb8ecb8fa5ea4a6be810ce8579dfd200bbc680e69c75f860a986bccadf9e66b8f9fdef10c5c3dff28c6cc7559d0e2b485fddc1316bc335c9153f5be5b68736
@@ -0,0 +1,6 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.4.4
5
+ - 2.5.1
6
+ - 2.3.7
@@ -0,0 +1,4 @@
1
+ # 0.4.1
2
+ * security dependency issues resolved
3
+ * activerecord version raised
4
+ * humanize_enum could be called multiple times all definitions will be merged, i.e. there is no need to define all localizations in one place at once
@@ -1,82 +1,87 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enum_ext (0.3.1)
5
- activerecord (>= 4.1)
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 (5.0.2)
11
- actionview (= 5.0.2)
12
- activesupport (= 5.0.2)
13
- rack (~> 2.0)
14
- rack-test (~> 0.6.3)
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.2)
17
- actionview (5.0.2)
18
- activesupport (= 5.0.2)
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
- erubis (~> 2.7.0)
20
+ erubi (~> 1.4)
21
21
  rails-dom-testing (~> 2.0)
22
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
23
- activemodel (5.0.2)
24
- activesupport (= 5.0.2)
25
- activerecord (5.0.2)
26
- activemodel (= 5.0.2)
27
- activesupport (= 5.0.2)
28
- arel (~> 7.0)
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 (~> 0.7)
30
+ i18n (>= 0.7, < 2)
32
31
  minitest (~> 5.1)
33
32
  tzinfo (~> 1.1)
34
- arel (7.1.4)
35
- builder (3.2.3)
36
- concurrent-ruby (1.0.5)
37
- erubis (2.7.0)
38
- i18n (0.8.1)
39
- loofah (2.0.3)
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.8.2)
42
- mini_portile2 (2.1.0)
43
- minitest (5.8.3)
44
- nokogiri (1.7.1)
45
- mini_portile2 (~> 2.1.0)
46
- rack (2.0.1)
47
- rack-test (0.6.3)
48
- rack (>= 1.0)
49
- rails-dom-testing (2.0.2)
50
- activesupport (>= 4.2.0, < 6.0)
51
- nokogiri (~> 1.6)
52
- rails-html-sanitizer (1.0.3)
53
- loofah (~> 2.0)
54
- rails-i18n (5.0.3)
55
- i18n (~> 0.7)
56
- railties (~> 5.0)
57
- railties (5.0.2)
58
- actionpack (= 5.0.2)
59
- activesupport (= 5.0.2)
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.18.1, < 2.0)
63
- rake (10.4.2)
64
- sqlite3 (1.3.13)
65
- thor (0.19.4)
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.3)
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 (~> 1.11)
78
+ bundler (>= 1.11)
79
+ byebug
75
80
  enum_ext!
76
81
  minitest
77
82
  rails-i18n (>= 4)
78
- rake (~> 10.0)
83
+ rake (>= 10.0)
79
84
  sqlite3
80
85
 
81
86
  BUNDLED WITH
82
- 1.14.6
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, and make your own extantion to your enums the way you need:
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 call adds to instance:
68
+ This humanize_enum adds to instance:
68
69
  - t_in_cart, t_paid, t_ready_for_shipment
69
70
 
70
- adds to class:
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
- has hundreds and thousands of records to change at once you need update_all
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 )
@@ -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', '>=4.1'
22
+ spec.add_dependency 'activerecord', ">= 5.2.4.3"
23
23
 
24
24
  spec.add_development_dependency 'minitest'
25
- spec.add_development_dependency 'bundler', '~> 1.11'
26
- spec.add_development_dependency 'rake', '~> 10.0'
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
@@ -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] # this just for superposition example below
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
- # if localization is abscent than block must be given
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
- #t_enum
229
- define_method "t_#{enum_name}" do
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 automatization like this:
298
+ # human_attribute_name is redefined for automation like this:
282
299
  # p #{object.class.human_attribute_name( attr_name )}:
283
- # p =object.send(attr_name)
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
 
@@ -1,3 +1,3 @@
1
1
  module EnumExt
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.1"
3
3
  end
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.3.1
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: 2017-05-25 00:00:00.000000000 Z
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: '4.1'
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: '4.1'
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
- rubyforge_project:
136
- rubygems_version: 2.5.1
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.