enum_ext 0.5.3 → 0.8.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/CHANGELOG.md +24 -0
- data/Dockerfile +22 -0
- data/Dockerfile_rails_7 +25 -0
- data/{Gemfile → Gemfile_rails_6} +1 -0
- data/{Gemfile.lock → Gemfile_rails_6.lock} +2 -2
- data/Gemfile_rails_7 +6 -0
- data/Gemfile_rails_7.lock +102 -0
- data/README.md +141 -54
- data/docker-compose.yml +24 -0
- data/img.png +0 -0
- data/img_1.png +0 -0
- data/img_2.png +0 -0
- data/img_3.png +0 -0
- data/lib/enum_ext/annotated.rb +181 -0
- data/lib/enum_ext/basic_helpers.rb +86 -0
- data/lib/enum_ext/enum_wrapper.rb +78 -0
- data/lib/enum_ext/humanize_helpers.rb +159 -0
- data/lib/enum_ext/superset_helpers.rb +83 -0
- data/lib/enum_ext/version.rb +1 -1
- data/lib/enum_ext.rb +43 -358
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c17ae56d510836b3106e8b1ca84b83f69a6854a0988192e71d7a7a62910dde0
|
4
|
+
data.tar.gz: 870773a5d09b15840695a8ff0ee57823b4bcc4c89753a88840b3daca7a69ae28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd80dfc1f862eb03fbd9065af6f1eee36a95254ce4dd7e708073683ca4d5483163457cb5a8b96da851943d93246436a0897965d11b0f5478d966a4a590c82276
|
7
|
+
data.tar.gz: f07fd0d4869deba68067d29a0e6ac6a8003ae4df28dea658decd66455f12a5cbcdd622e816042f93de452c7186bb7af885b9b0d549b2fe3c40edfccd6b3fadf1
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,30 @@
|
|
1
|
+
# 0.8.1
|
2
|
+
* Fixes issue https://github.com/alekseyl/enum_ext/issues/50
|
3
|
+
* Better describe for supersets.
|
4
|
+
* Multiple readme and comments fixes
|
5
|
+
|
6
|
+
# 0.8.0
|
7
|
+
* Methods annotations added:
|
8
|
+
* Full descriptions: Class.enum.describe(short=true) / Class.enum.describe_short / Class.enum.describe_long / Class.enum.describe_basic
|
9
|
+
* Per-methods: Class.enum.describe_enum_i, describe_mass_assign_enum, describe_multi_enum_scopes e.t.c.
|
10
|
+
* method Class.enum.supersets_raw added, it will return supersets decompositions to basic enum
|
11
|
+
* Class.enum.all method now returns basic enum_values + supersets_raw decomposition to basic enums ( previously was a supersets i.e. high level definition )
|
12
|
+
|
13
|
+
# 0.7.0
|
14
|
+
* rails 7 syntax support added
|
15
|
+
* massive test process refactoring docker with both rails 7 and earlier support
|
16
|
+
* simple translate_enum allowed via `ext: [:translate_enum]`
|
17
|
+
|
18
|
+
# 0.6.0 (BREAKING CHANGES)
|
19
|
+
* fixed issue with non array superset
|
20
|
+
* standard helpers are now private, you should use enum_ext / enum , ext: [] approach to the definitions
|
21
|
+
* class.superset_statuses moved to enum_obj -> class.statuses.superset_statuses
|
22
|
+
* massive ReadMe refactoring
|
23
|
+
|
1
24
|
# 0.5.3
|
2
25
|
* refactored tests
|
3
26
|
* multi_enum_scopes will be chainable with empty params (i.e. will not change the scope)
|
27
|
+
* some development dependencies were added
|
4
28
|
|
5
29
|
# 0.5.2
|
6
30
|
* removed unused require from the upcoming version
|
data/Dockerfile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
FROM ruby:3.0.3-bullseye
|
2
|
+
|
3
|
+
WORKDIR /app
|
4
|
+
#RUN apt-get update && apt-get -y install lsb-release
|
5
|
+
##
|
6
|
+
#RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
|
7
|
+
# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \
|
8
|
+
# apt-get update && apt-get -y install postgresql postgresql-client-12
|
9
|
+
#
|
10
|
+
#RUN sh -c 'echo "local all all trust" > /etc/postgresql/14/main/pg_hba.conf' && \
|
11
|
+
# service postgresql start && \
|
12
|
+
# psql -U postgres -c 'CREATE DATABASE "niceql-test"'
|
13
|
+
|
14
|
+
RUN gem install bundler
|
15
|
+
|
16
|
+
COPY lib/enum_ext/version.rb /app/lib/enum_ext/version.rb
|
17
|
+
COPY enum_ext.gemspec /app/
|
18
|
+
COPY Gemfile_rails_6 /app/Gemfile
|
19
|
+
COPY Gemfile_rails_6.lock /app/Gemfile.lock
|
20
|
+
COPY Rakefile /app/
|
21
|
+
#
|
22
|
+
RUN bundle install
|
data/Dockerfile_rails_7
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
FROM ruby:3.0.3-bullseye
|
2
|
+
|
3
|
+
WORKDIR /app
|
4
|
+
#RUN apt-get update && apt-get -y install lsb-release
|
5
|
+
##
|
6
|
+
#RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
|
7
|
+
# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \
|
8
|
+
# apt-get update && apt-get -y install postgresql postgresql-client-12
|
9
|
+
#
|
10
|
+
#RUN sh -c 'echo "local all all trust" > /etc/postgresql/14/main/pg_hba.conf' && \
|
11
|
+
# service postgresql start && \
|
12
|
+
# psql -U postgres -c 'CREATE DATABASE "niceql-test"'
|
13
|
+
|
14
|
+
RUN gem install bundler
|
15
|
+
|
16
|
+
|
17
|
+
RUN gem install bundler
|
18
|
+
|
19
|
+
COPY lib/enum_ext/version.rb /app/lib/enum_ext/version.rb
|
20
|
+
COPY enum_ext.gemspec /app/
|
21
|
+
COPY Gemfile_rails_7 /app/Gemfile
|
22
|
+
COPY Gemfile_rails_7.lock /app/Gemfile.lock
|
23
|
+
COPY Rakefile /app/
|
24
|
+
|
25
|
+
RUN bundle install
|
data/{Gemfile → Gemfile_rails_6}
RENAMED
data/Gemfile_rails_7
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
enum_ext (0.8.0)
|
5
|
+
activerecord (>= 5.2.4.3)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionpack (7.0.6)
|
11
|
+
actionview (= 7.0.6)
|
12
|
+
activesupport (= 7.0.6)
|
13
|
+
rack (~> 2.0, >= 2.2.4)
|
14
|
+
rack-test (>= 0.6.3)
|
15
|
+
rails-dom-testing (~> 2.0)
|
16
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
17
|
+
actionview (7.0.6)
|
18
|
+
activesupport (= 7.0.6)
|
19
|
+
builder (~> 3.1)
|
20
|
+
erubi (~> 1.4)
|
21
|
+
rails-dom-testing (~> 2.0)
|
22
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
23
|
+
activemodel (7.0.6)
|
24
|
+
activesupport (= 7.0.6)
|
25
|
+
activerecord (7.0.6)
|
26
|
+
activemodel (= 7.0.6)
|
27
|
+
activesupport (= 7.0.6)
|
28
|
+
activesupport (7.0.6)
|
29
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
30
|
+
i18n (>= 1.6, < 2)
|
31
|
+
minitest (>= 5.1)
|
32
|
+
tzinfo (~> 2.0)
|
33
|
+
amazing_print (1.5.0)
|
34
|
+
builder (3.2.4)
|
35
|
+
byebug (11.1.3)
|
36
|
+
concurrent-ruby (1.2.2)
|
37
|
+
crass (1.0.6)
|
38
|
+
erubi (1.12.0)
|
39
|
+
i18n (1.14.1)
|
40
|
+
concurrent-ruby (~> 1.0)
|
41
|
+
loofah (2.21.3)
|
42
|
+
crass (~> 1.0.2)
|
43
|
+
nokogiri (>= 1.12.0)
|
44
|
+
method_source (1.0.0)
|
45
|
+
minitest (5.18.1)
|
46
|
+
niceql (0.6.1)
|
47
|
+
nokogiri (1.15.3-x86_64-darwin)
|
48
|
+
racc (~> 1.4)
|
49
|
+
nokogiri (1.15.3-x86_64-linux)
|
50
|
+
racc (~> 1.4)
|
51
|
+
racc (1.7.1)
|
52
|
+
rack (2.2.7)
|
53
|
+
rack-test (2.1.0)
|
54
|
+
rack (>= 1.3)
|
55
|
+
rails-dom-testing (2.1.1)
|
56
|
+
activesupport (>= 5.0.0)
|
57
|
+
minitest
|
58
|
+
nokogiri (>= 1.6)
|
59
|
+
rails-html-sanitizer (1.6.0)
|
60
|
+
loofah (~> 2.21)
|
61
|
+
nokogiri (~> 1.14)
|
62
|
+
rails-i18n (7.0.7)
|
63
|
+
i18n (>= 0.7, < 2)
|
64
|
+
railties (>= 6.0.0, < 8)
|
65
|
+
rails_sql_prettifier (7.0.4)
|
66
|
+
activerecord (>= 7)
|
67
|
+
niceql (~> 0.6)
|
68
|
+
railties (7.0.6)
|
69
|
+
actionpack (= 7.0.6)
|
70
|
+
activesupport (= 7.0.6)
|
71
|
+
method_source
|
72
|
+
rake (>= 12.2)
|
73
|
+
thor (~> 1.0)
|
74
|
+
zeitwerk (~> 2.5)
|
75
|
+
rake (13.0.6)
|
76
|
+
sqlite3 (1.6.3-x86_64-darwin)
|
77
|
+
sqlite3 (1.6.3-x86_64-linux)
|
78
|
+
stubberry (0.3.0)
|
79
|
+
thor (1.2.2)
|
80
|
+
tzinfo (2.0.6)
|
81
|
+
concurrent-ruby (~> 1.0)
|
82
|
+
zeitwerk (2.6.8)
|
83
|
+
|
84
|
+
PLATFORMS
|
85
|
+
x86_64-darwin-20
|
86
|
+
x86_64-linux
|
87
|
+
|
88
|
+
DEPENDENCIES
|
89
|
+
activerecord (>= 7)
|
90
|
+
amazing_print
|
91
|
+
bundler (>= 1.11)
|
92
|
+
byebug
|
93
|
+
enum_ext!
|
94
|
+
minitest
|
95
|
+
rails-i18n (>= 4)
|
96
|
+
rails_sql_prettifier
|
97
|
+
rake (>= 10.0)
|
98
|
+
sqlite3
|
99
|
+
stubberry
|
100
|
+
|
101
|
+
BUNDLED WITH
|
102
|
+
2.4.17
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ EnumExt extends rails enum with localization/translation and it's helpers, mass-
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem 'enum_ext', '~> 0.
|
10
|
+
gem 'enum_ext', '~> 0.8'
|
11
11
|
```
|
12
12
|
|
13
13
|
And then execute:
|
@@ -26,12 +26,12 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
class SomeModel
|
28
28
|
extend EnumExt
|
29
|
-
|
30
|
-
enum
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
|
30
|
+
enum status: {}, ext: [:enum_i, :enum_mass_assign, enum_supersets: { superset: [:basic_enum] } ]
|
31
|
+
humanize_enum #...
|
32
|
+
translate_enum #...
|
33
|
+
ext_enum_sets # if needed
|
34
|
+
end
|
35
35
|
```
|
36
36
|
|
37
37
|
Let's assume that we have model Request representing some buying requests with enum **status**, and we have model Order with requests,
|
@@ -49,11 +49,45 @@ Or install it yourself as:
|
|
49
49
|
end
|
50
50
|
```
|
51
51
|
|
52
|
-
|
52
|
+
## Inline definitions. Starting 0.5.0!! BREAKING CHANGES!
|
53
|
+
|
54
|
+
Starting version 0.4.6, for concise and clearer code base, you can activate most of the extensions during enum definition, using `ext: [...]` notation.
|
55
|
+
This is a preferable way now, and old helpers are private starting version 0.6!:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
#Instead of three method calls:
|
59
|
+
enum status: {}
|
60
|
+
enum_i :status # will raise an private method error starting ver 0.6
|
61
|
+
enum_mass_assign :status # will raise an private method error starting ver 0.6!!!
|
62
|
+
|
63
|
+
#You should go with ext option instead:
|
64
|
+
enum status: {}, ext: [:enum_i, :enum_mass_assign]
|
65
|
+
|
66
|
+
# OR in case of standalone enum definition:
|
67
|
+
enum status: {} # somewhere where you can't or don't want to reach
|
68
|
+
enum_ext :status, [:enum_i, :enum_mass_assign, enum_supersets: {} ]
|
69
|
+
```
|
70
|
+
Rem: enum_ext could be called multiple times and merge later definitions, though I can't imagine why would you split it to multiple calls.
|
71
|
+
|
72
|
+
Rem: The only exceptions for the new syntax are full translation/humanization helpers definitions.
|
73
|
+
Those will not add any clarity to code, and should be used via standalone helpers.
|
74
|
+
But standard translate_enum without definitions still welcome:
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
# GOOD:
|
78
|
+
enum_ext :status, [:enum_i, :enum_mass_assign, :translate_enum, enum_supersets: {}]
|
79
|
+
|
80
|
+
# BAD (even if correctly defines internationalization):
|
81
|
+
enum_ext :status, [:enum_i, :enum_mass_assign, :translate_enum, enum_supersets: {}] do
|
82
|
+
I18n.t("scope.#{kind}")
|
83
|
+
end
|
84
|
+
```
|
85
|
+
|
86
|
+
## Humanization and localization
|
53
87
|
|
54
88
|
### Humanization (humanize_enum)
|
55
89
|
|
56
|
-
|
90
|
+
If app doesn't need internationalization, it may use humanize_enum to make enum output user friendly
|
57
91
|
|
58
92
|
```ruby
|
59
93
|
humanize_enum :status, {
|
@@ -69,33 +103,31 @@ Or install it yourself as:
|
|
69
103
|
```
|
70
104
|
|
71
105
|
This humanize_enum adds to instance:
|
72
|
-
-
|
106
|
+
- t_status
|
73
107
|
|
74
|
-
and to
|
75
|
-
-
|
76
|
-
-
|
77
|
-
|
108
|
+
and to enum object:
|
109
|
+
- statuses.t_options - translated enum values options for select input
|
110
|
+
- statuses.t_options_i - same as above but use int values with translations works for ActiveAdmin filters for instance
|
111
|
+
|
78
112
|
|
79
|
-
|
80
113
|
Example with block:
|
81
114
|
|
82
115
|
```ruby
|
83
116
|
humanize_enum :status do
|
84
|
-
|
117
|
+
I18n.t("scope.#{status}")
|
85
118
|
end
|
86
119
|
```
|
87
120
|
|
88
121
|
Example for select:
|
89
122
|
|
90
123
|
```ruby
|
91
|
-
f.select :status, Request.
|
124
|
+
f.select :status, Request.statuses.t_options
|
92
125
|
```
|
93
126
|
|
94
127
|
in Active Admin filters
|
95
128
|
```ruby
|
96
|
-
filter :status, as: :select, label: 'Status', collection: Request.
|
129
|
+
filter :status, as: :select, label: 'Status', collection: Request.statuses.t_options_i
|
97
130
|
```
|
98
|
-
|
99
131
|
|
100
132
|
**Rem:** select options may break when using lambda() or proc with instance method, but will survive with block
|
101
133
|
|
@@ -105,7 +137,7 @@ Or install it yourself as:
|
|
105
137
|
request.paid!
|
106
138
|
request.status # >> paid
|
107
139
|
request.t_status # >> "paid 3 dollars"
|
108
|
-
Request.
|
140
|
+
Request.statuses.localizations # >> { in_cart: -> { I18n.t("request.status.in_cart") }, .... }
|
109
141
|
```
|
110
142
|
|
111
143
|
Could be called multiple times, all humanization definitions will be merged under the hood.
|
@@ -113,6 +145,7 @@ Or install it yourself as:
|
|
113
145
|
### Translate (translate_enum)
|
114
146
|
|
115
147
|
Enum is translated using scope 'active_record.attributes.class_name_underscore.enum_plural', or the given one:
|
148
|
+
|
116
149
|
```ruby
|
117
150
|
translate_enum :status, 'active_record.request.enum'
|
118
151
|
```
|
@@ -124,7 +157,12 @@ Or it can be done with block either with translate or humanize:
|
|
124
157
|
end
|
125
158
|
```
|
126
159
|
|
160
|
+
All humanization examples also should work same way as expected.
|
161
|
+
|
162
|
+
## Enum extended functionality
|
163
|
+
|
127
164
|
### Enum to_i shortcut ( enum_i )
|
165
|
+
|
128
166
|
Defines method enum_name_i shortcut for Model.enum_names[elem.enum_name] or enum_name_before_type_cast
|
129
167
|
|
130
168
|
**Ex**
|
@@ -135,66 +173,79 @@ Defines method enum_name_i shortcut for Model.enum_names[elem.enum_name] or enum
|
|
135
173
|
request.paid_i # 10
|
136
174
|
```
|
137
175
|
|
138
|
-
|
176
|
+
Rem: whenever underlying enum is not an integer will refuse to define helper and outputs WARNING
|
177
|
+
|
178
|
+
### Enum SuperSets (enum_supersets)
|
139
179
|
|
140
|
-
**Use-case** whenever you need superset of enums to behave like a enum.
|
180
|
+
**Use-case** whenever you need superset of enums to behave like a super enum.
|
141
181
|
|
142
|
-
You can do this with method **
|
182
|
+
You can do this with method **enum_supersets** it creates:
|
143
183
|
- scopes for subsets,
|
144
184
|
- instance methods with `?`
|
145
|
-
- and some class methods helpers
|
146
185
|
|
147
186
|
For instance:
|
148
187
|
|
149
188
|
```ruby
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
189
|
+
enum status: [:in_cart, :waiting_for_payment, :paid, :packing, :ready_for_shipment, :on_delivery, :delivered],
|
190
|
+
ext: [enum_supersets: {
|
191
|
+
around_delivery: [:ready_for_shipment, :on_delivery], # for shipping department for example
|
192
|
+
in_warehouse: [:packing, :ready_for_shipment], # this scope is just for superposition example below
|
193
|
+
sold: [:paid, :around_delivery, :in_warehouse, :delivered] # also you can define any superposition of already defined supersets or enum values
|
194
|
+
}]
|
195
|
+
|
196
|
+
# supersets will be stored inside enum wrapper object, and can be de-referenced to basic enum values
|
197
|
+
# using wrapper defined methods: "superset_enum_plural", i.e. statuses.sold_statuses -> [:paid, :packing, :ready_for_shipment, :on_delivery, :delivered]
|
198
|
+
# so new supersets could be defined using Array operations against newly defined methods
|
199
|
+
enum_ext :status, enum_supersets: {
|
200
|
+
outside_warehouse: ( statuses.around_delivery - statuses.in_warehouse ) #... any other array operations like &, + and so can be used
|
201
|
+
}
|
154
202
|
```
|
155
203
|
|
156
204
|
it will generate:
|
157
205
|
|
158
206
|
```
|
159
207
|
instance:
|
160
|
-
- methods:
|
208
|
+
- methods: around_delivery?, in_warehouse?
|
161
209
|
|
162
210
|
class:
|
163
|
-
- named scopes:
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
211
|
+
- named scopes: around_delivery, in_warehouse
|
212
|
+
|
213
|
+
enum methods:
|
214
|
+
- Class.statuses.supersets -- will output superset definition hash
|
215
|
+
- Class.statuses.supersets_raw -- will output superset decompositions to basic enum types hash
|
216
|
+
|
217
|
+
- Class.statuses.around_delivery (=[:ready_for_shipment, :on_delivery, :delivered] ), in_warehouse_statuses
|
218
|
+
- around_delivery_statuses_i (= [3,4,5]), in_warehouse_statuses_i (=[3])
|
219
|
+
|
220
|
+
translation helpers grouped for superset ( started with t_... ):
|
221
|
+
- Class.statuses.t_around_delivery_options (= [['translation or humanization', :ready_for_shipment] ...] ) for select inputs purposes
|
222
|
+
- Class.statuses.t_around_delivery_options_i (= [['translation or humanization', 3] ...]) same as above but with integer as value ( for example to use in Active admin filters )
|
172
223
|
```
|
173
224
|
|
174
225
|
```ruby
|
175
226
|
request.on_delivery!
|
176
|
-
request.
|
227
|
+
request.around_delivery? # >> true
|
177
228
|
|
178
|
-
Request.
|
229
|
+
Request.around_delivery.exists?(request) # >> true
|
179
230
|
Request.in_warehouse.exists?(request) # >> false
|
180
231
|
|
181
|
-
Request.
|
232
|
+
Request.statuses.around_delivery # >> ["ready_for_shipment", "on_delivery", "delivered"]
|
182
233
|
```
|
183
234
|
Rem:
|
184
|
-
|
235
|
+
supersets creation could be called multiple times defining a superposition of already defined sets ( considering previous example ):
|
185
236
|
|
186
237
|
```ruby
|
187
|
-
|
188
|
-
outside_wharehouse: (
|
238
|
+
enum_ext :status, enum_supersets: {
|
239
|
+
outside_wharehouse: ( statuses.around_delivery_superset - statuses.in_warehouse_superset )#... any other array operations like &, + and so can be used
|
189
240
|
}
|
190
241
|
```
|
191
242
|
|
192
243
|
Rem: you can refer previously defined set as usual kind in the same method call:
|
193
244
|
|
194
245
|
```ruby
|
195
|
-
|
196
|
-
|
197
|
-
not_in_cart: [:paid, :
|
246
|
+
enum_ext :status, enum_supersets: {
|
247
|
+
around_delivery: [:ready_for_shipment, :on_delivery, :delivered],
|
248
|
+
not_in_cart: [:paid, :around_delivery] #
|
198
249
|
}
|
199
250
|
```
|
200
251
|
|
@@ -205,7 +256,7 @@ Rem: you can refer previously defined set as usual kind in the same method call:
|
|
205
256
|
ext: [:multi_enum_scopes]
|
206
257
|
|
207
258
|
# some place else:
|
208
|
-
Request.with_statuses( :payed, :
|
259
|
+
Request.with_statuses( :payed, :around_delivery ) # >> status IN (:payed, :ready_for_shipment, :on_delivery, :delivered)
|
209
260
|
Request.without_statuses( :payed, :in_warehouse ) # >> status NOT IN (:payed, :ready_for_shipment)
|
210
261
|
```
|
211
262
|
|
@@ -215,7 +266,7 @@ Rem: you can refer previously defined set as usual kind in the same method call:
|
|
215
266
|
|
216
267
|
**Use-case:** it's often case when I need bulk update without callbacks, so it's gets frustrating to repeat:
|
217
268
|
```
|
218
|
-
some_scope.update_all(status:
|
269
|
+
some_scope.update_all(status: :new_status, update_at: Time.now)
|
219
270
|
```
|
220
271
|
If you need callbacks you can do like this: some_scope.each(&:new_stat!) but if you don't need callbacks and you
|
221
272
|
have hundreds and thousands of records to change at once you better call update_all
|
@@ -243,14 +294,50 @@ Rem: you can refer previously defined set as usual kind in the same method call:
|
|
243
294
|
order.requests.delivered.count # >> N + M
|
244
295
|
```
|
245
296
|
|
297
|
+
## Annotations helpers
|
298
|
+
Sometimes under irb console you need a quick tip on whats extension available on a enum, so some describe_* helpers added to enum wrapper
|
299
|
+
|
300
|
+
General description methods (describe/describe_short/describe_long)
|
301
|
+
```
|
302
|
+
Class.enum.describe
|
303
|
+
```
|
304
|
+

|
305
|
+
|
306
|
+
```
|
307
|
+
Class.enum.describe_short
|
308
|
+
```
|
309
|
+

|
310
|
+
|
311
|
+
```
|
312
|
+
Class.enum.describe_long
|
313
|
+
```
|
314
|
+

|
315
|
+
|
316
|
+
And per extension methods (describe_enum_i, e.t.c)
|
317
|
+
|
318
|
+
```ruby
|
319
|
+
EnumAnnotated.test_types.describe_mass_assign_enum
|
320
|
+
```
|
321
|
+

|
322
|
+
|
246
323
|
## Tests
|
247
|
-
|
248
|
-
|
324
|
+
Starting version 0.6 added support for rails 7+ enum definitions, that's making testing a little bit not that easy as running `rake test`.
|
325
|
+
Now testings are done via `docker-compose up`. Look closer to Dockerfiles and `docker-compose.yml`
|
326
|
+
to get the idea how they working simultaneously without interference with each other.
|
327
|
+
|
328
|
+
Rem. I'm always freaking googling everytime I need to run single test so I'll just keep here:
|
329
|
+
|
330
|
+
```ruby
|
331
|
+
rake test TEST=test/test_enum_ext.rb TESTOPTS="--name=/bb/"
|
332
|
+
```
|
333
|
+
|
249
334
|
## Development
|
250
335
|
|
336
|
+
## TODO
|
337
|
+
[] better support for suffix/prefix as enum does
|
338
|
+
[] add global config and allow global extension
|
251
339
|
|
252
340
|
## Contributing
|
253
|
-
|
254
341
|
Bug reports and pull requests are welcome on GitHub at https://github.com/alekseyl/enum_ext or by email: leshchuk@gmail.com
|
255
342
|
|
256
343
|
|
@@ -258,6 +345,6 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/alekse
|
|
258
345
|
|
259
346
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
260
347
|
|
261
|
-
### Thanks
|
262
348
|
|
263
|
-
Thanks
|
349
|
+
### Thanks
|
350
|
+
Thanks for the first star to vzamanillo, it inspires me to do mass refactor and gracefully cover code in this gem by tests.
|
data/docker-compose.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
version: "3.7"
|
2
|
+
|
3
|
+
services:
|
4
|
+
test:
|
5
|
+
build: .
|
6
|
+
image: enum_ext
|
7
|
+
command: rake test
|
8
|
+
volumes:
|
9
|
+
- './lib:/app/lib'
|
10
|
+
- './test:/app/test'
|
11
|
+
- './Gemfile_rails_6:/app/Gemfile'
|
12
|
+
- './Gemfile_rails_6.lock:/app/Gemfile.lock'
|
13
|
+
|
14
|
+
test_7_0:
|
15
|
+
build:
|
16
|
+
context: .
|
17
|
+
dockerfile: Dockerfile_rails_7
|
18
|
+
image: enum_ext_rails_7
|
19
|
+
command: rake test
|
20
|
+
volumes:
|
21
|
+
- './lib:/app/lib'
|
22
|
+
- './test:/app/test'
|
23
|
+
- './Gemfile_rails_7:/app/Gemfile'
|
24
|
+
- './Gemfile_rails_7.lock:/app/Gemfile.lock'
|
data/img.png
ADDED
Binary file
|
data/img_1.png
ADDED
Binary file
|
data/img_2.png
ADDED
Binary file
|
data/img_3.png
ADDED
Binary file
|