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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTk0MTVmOWY0NmJjNTQ3NjY1MjM1MmNjNDZmZTc3N2QxZjg4Y2FmMA==
4
+ YmEzYmNmYTdjZmQ5MjBmZTg0NDQ5NzA5YTM2MzQwZTViODU0OTg1NA==
5
5
  data.tar.gz: !binary |-
6
- NTc5MjA2MDk4MmYzYmFjYTBlOWVkZDRiNTgwMDEzMTQ5ZjY1NzY3NA==
6
+ ZmZlZmE4MWRmOWU1MTk5NTg0MzRiNzZkN2E3OWU3NzIzNDk3NWQyZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MGMwNTliNDQ3Y2NjOTQ1YjEyYTdmNDIyNWYwNDA0YmQxYjBhM2E3MWMwYzIz
10
- N2Q5NjcwOTAyZTRhYjc4OWMzNmZkY2RmYTJjOTE4ODY0Y2JmMmMzZGY0OTU2
11
- NmVmYzdmYTczYWQ2ZDRmZmIxNzhjMjVmNGRlZjk5M2UzNzFjMzk=
9
+ ZTA0M2Y4OTY3ZTRmYjdjYWRmNjM0ZGViOGVjMmZhM2I2MDJhMDk1OWUzNWIy
10
+ YTYxNDU3Y2NjMjU4M2EwZjdiNWZmYmE2MTEwNjA5MDhjNTE5NjgwZThlNTk1
11
+ ZTlmMDdmMWEyNDc4NjIyNjFiZjU5N2IwYzRlZTlkZjg4NWJmZGE=
12
12
  data.tar.gz: !binary |-
13
- MTQ1YmU2MmY4YmI4OGZjNzliZjBmMTMzNTNjNDlmNmU2MWE4MWFhMDFlZmNm
14
- MmIxZDUwMGQ1NDNlMTFmYWE2NTc1MDQ3ZWI3ZTg5MGM3ZmQ5YmQzMjllYjMx
15
- NzU4YWQ5Y2EwNzhlYTdkNGQ2MTQ2ZThmM2I0Njc1MjBjMmJiZjI=
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(attr, label_types, converter: {})
25
+ def labelize(attr_name, label_types, converter: {})
26
26
  label_types = label_types.map(&:to_sym)
27
27
 
28
- define_method :"#{attr}_labelized" do
29
- labelized[attr]
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 :"#{attr}_#{label_type}" do
34
- labelized[attr][label_type]
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([]){|h,attr|
40
- h[attr] = Container.new(__send__(attr.to_s.pluralize)){|h,value|
41
- h[value] = Container.new(label_types){|h,label_type|
42
- result = ::I18n.translate(
43
- "labelizer.#{model}.#{attr}.#{value}.#{label_type}",
44
- default: [
45
- :"labelizer.#{model}.#{attr}.#{label_type}",
46
- :"labelizer.#{model}.#{label_type}",
47
- :"labelizer.#{label_type}",
48
- "",
49
- ],
50
- )
51
- if c = converter[label_type]
52
- result = c[result]
53
- end
54
- h[label_type] = result
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) << attr
65
+ @labelized.instance_variable_get(:@keys) << attr_name
60
66
  @labelized.singleton_class.class_eval do
61
- define_method attr do
62
- @hash[attr]
67
+ define_method attr_name do
68
+ @hash[attr_name]
63
69
  end
64
70
  end
65
71
  end
@@ -2,7 +2,11 @@ module Labelizer
2
2
  class Container
3
3
  include Enumerable
4
4
 
5
- def initialize(keys,&block)
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|
@@ -1,3 +1,3 @@
1
1
  module Labelizer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.1.0
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.0
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-25 00:00:00.000000000 Z
11
+ date: 2016-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler