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