labelizer 0.1.0 → 0.1.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 +8 -8
- data/README.md +68 -0
- data/lib/labelizer.rb +31 -25
- data/lib/labelizer/container.rb +20 -1
- data/lib/labelizer/version.rb +1 -1
- data/version.txt +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YmEzYmNmYTdjZmQ5MjBmZTg0NDQ5NzA5YTM2MzQwZTViODU0OTg1NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmZlZmE4MWRmOWU1MTk5NTg0MzRiNzZkN2E3OWU3NzIzNDk3NWQyZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTA0M2Y4OTY3ZTRmYjdjYWRmNjM0ZGViOGVjMmZhM2I2MDJhMDk1OWUzNWIy
|
10
|
+
YTYxNDU3Y2NjMjU4M2EwZjdiNWZmYmE2MTEwNjA5MDhjNTE5NjgwZThlNTk1
|
11
|
+
ZTlmMDdmMWEyNDc4NjIyNjFiZjU5N2IwYzRlZTlkZjg4NWJmZGE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YWE5YWIwNmNhM2I5MGNjNmMyNTUzZDg3YzgyZjgwOTAyNmQwZDNiNDIyZWI0
|
14
|
+
ODFmZmFiYjZjYzE5NmQ4YWY3ZTNmYTc1YmI3NWEwMTdmZTllY2Y3NWM1Nzdl
|
15
|
+
MDdkNmZjZTgzMGM4NDM3YmI0ZDdkNzQxZTI5ZWU4OTdjOWE1ZWE=
|
data/README.md
CHANGED
@@ -160,6 +160,74 @@ end
|
|
160
160
|
```
|
161
161
|
|
162
162
|
|
163
|
+
## array value
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
class Customer < ApplicationModel
|
167
|
+
include Labelizer
|
168
|
+
|
169
|
+
def self.roles
|
170
|
+
{
|
171
|
+
"all" => 0,
|
172
|
+
"admin" => 1,
|
173
|
+
"user" => 2,
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
labelize :roles, %w(label)
|
178
|
+
|
179
|
+
serialize :roles
|
180
|
+
end
|
181
|
+
```
|
182
|
+
|
183
|
+
```yaml
|
184
|
+
ja:
|
185
|
+
labelizer:
|
186
|
+
customer:
|
187
|
+
roles:
|
188
|
+
all:
|
189
|
+
label: full access
|
190
|
+
admin:
|
191
|
+
label: admin access
|
192
|
+
user:
|
193
|
+
label: user access
|
194
|
+
```
|
195
|
+
|
196
|
+
```ruby
|
197
|
+
customer = Customer.find id
|
198
|
+
customer.roles #=> ["admin","user"]
|
199
|
+
|
200
|
+
customer.roles_label #=> ["admin access", "user access"]
|
201
|
+
|
202
|
+
Customer.labelizes.roles.admin.label #=> "admin access"
|
203
|
+
Customer.labelizes.roles[["admin","user"]].label #=> ["admin access", "user access"]
|
204
|
+
```
|
205
|
+
|
206
|
+
|
207
|
+
## nested class
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
class Namespace::Customer < ApplicationModel
|
211
|
+
include Labelizer
|
212
|
+
|
213
|
+
enum state: {
|
214
|
+
starting: 0,
|
215
|
+
}
|
216
|
+
|
217
|
+
labelize :state, %w(label)
|
218
|
+
end
|
219
|
+
```
|
220
|
+
|
221
|
+
```yaml
|
222
|
+
ja:
|
223
|
+
labelizer:
|
224
|
+
namespace/customer:
|
225
|
+
state:
|
226
|
+
starting:
|
227
|
+
label: start
|
228
|
+
```
|
229
|
+
|
230
|
+
|
163
231
|
## Development
|
164
232
|
|
165
233
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/labelizer.rb
CHANGED
@@ -22,44 +22,50 @@ module Labelizer
|
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
-
def labelize(
|
25
|
+
def labelize(attr_name, label_types, converter: {})
|
26
26
|
label_types = label_types.map(&:to_sym)
|
27
27
|
|
28
|
-
define_method :"#{
|
29
|
-
labelized[
|
28
|
+
define_method :"#{attr_name}_labelized" do
|
29
|
+
labelized[attr_name]
|
30
30
|
end
|
31
31
|
|
32
32
|
label_types.each do |label_type|
|
33
|
-
define_method :"#{
|
34
|
-
labelized[
|
33
|
+
define_method :"#{attr_name}_#{label_type}" do
|
34
|
+
labelized[attr_name][label_type]
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
model = self.to_s.underscore
|
39
|
-
@labelized ||= Container.new([]){|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
"",
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
39
|
+
@labelized ||= Container.new([]){|attr_labelized,attr|
|
40
|
+
attr_labelized[attr] = Container.new(__send__(attr.to_s.pluralize), accept_array_key: true){|value_labelized,value|
|
41
|
+
unless attr_labelized[attr].has_key?(value)
|
42
|
+
Container.new(label_types){|h,label_type|
|
43
|
+
h[label_type] = value.map{|val| value_labelized[val][label_type]}
|
44
|
+
}
|
45
|
+
else
|
46
|
+
value_labelized[value] = Container.new(label_types){|h,label_type|
|
47
|
+
result = ::I18n.translate(
|
48
|
+
"labelizer.#{model}.#{attr}.#{value}.#{label_type}",
|
49
|
+
default: [
|
50
|
+
:"labelizer.#{model}.#{attr}.#{label_type}",
|
51
|
+
:"labelizer.#{model}.#{label_type}",
|
52
|
+
:"labelizer.#{label_type}",
|
53
|
+
"",
|
54
|
+
],
|
55
|
+
)
|
56
|
+
if c = converter[label_type]
|
57
|
+
result = c[result]
|
58
|
+
end
|
59
|
+
h[label_type] = result
|
60
|
+
}
|
61
|
+
end
|
56
62
|
}
|
57
63
|
}
|
58
64
|
|
59
|
-
@labelized.instance_variable_get(:@keys) <<
|
65
|
+
@labelized.instance_variable_get(:@keys) << attr_name
|
60
66
|
@labelized.singleton_class.class_eval do
|
61
|
-
define_method
|
62
|
-
@hash[
|
67
|
+
define_method attr_name do
|
68
|
+
@hash[attr_name]
|
63
69
|
end
|
64
70
|
end
|
65
71
|
end
|
data/lib/labelizer/container.rb
CHANGED
@@ -2,7 +2,11 @@ module Labelizer
|
|
2
2
|
class Container
|
3
3
|
include Enumerable
|
4
4
|
|
5
|
-
def initialize(keys
|
5
|
+
def initialize(keys, accept_array_key: false, &block)
|
6
|
+
@data = {
|
7
|
+
is_accept_array_key: accept_array_key,
|
8
|
+
}
|
9
|
+
|
6
10
|
case keys
|
7
11
|
when Hash
|
8
12
|
@keys = keys.keys
|
@@ -28,8 +32,23 @@ module Labelizer
|
|
28
32
|
def [](key)
|
29
33
|
return @hash[key] if @keys.include?(key)
|
30
34
|
return @hash[@map[key]] if @values.include?(key)
|
35
|
+
|
36
|
+
if @data[:is_accept_array_key]
|
37
|
+
if key.respond_to?(:each)
|
38
|
+
if key.all?{|k| @keys.include?(k)}
|
39
|
+
return @hash[key]
|
40
|
+
end
|
41
|
+
if key.all?{|k| @values.include?(k)}
|
42
|
+
return @hash[key.map{|k| @map[k]}]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
31
47
|
raise KeyError, "key: #{key.inspect} not found"
|
32
48
|
end
|
49
|
+
def has_key?(key)
|
50
|
+
@keys.include?(key) || @values.include?(key)
|
51
|
+
end
|
33
52
|
|
34
53
|
def each
|
35
54
|
@keys.each do |key|
|
data/lib/labelizer/version.rb
CHANGED
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: labelizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- shun
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|