enum_ext 0.3.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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.