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 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