labelizer 0.0.3 → 0.0.4

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
- NmI4ZjY1MmFiMmQ4YTU5Njk5OGE5ZjI1YjgzOTUxOTBiNWQ3YTE4Ng==
4
+ YWE1OGVlYTVjMjk0ZjdiOGM0YTg0ZDA0ZGFhNTk4ZWYxMmI0NzMwOA==
5
5
  data.tar.gz: !binary |-
6
- ZTRmMTE4YjVkODBhYjAyMjAzZTMxZDJiOWQxYWRlNmE1OWUxNjY4OQ==
6
+ OTJmY2E0ZmU2NWNlNDc3OThkNGY0ZmE4NDkzOTRkZTNiN2NhMTMwZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWI3MmQ0OTYwYmNiNTU4YjhiNjcyYmJkNGEyZWMyMDA3ODgxNzA5MzRmMWJh
10
- OTM5YmU4NjEzODNkNmJkNzUxZDM3YjA0YTlmY2RjYjVlODY5NzA2N2JmYWY3
11
- MzY2N2Y3NzZkNGQ3ZjU5MjBhMzhjNjhlMTU0YjlmNGNkZjJmOGQ=
9
+ Mjg5NmM2MWZhOTM0ZGZhMmM1NWY4NWYxYzAzNGFjNDVlZGMxYWExODMwOTNl
10
+ ZGUwMDQzMDM3NmZhNTU2MGFkMWQ1ZjNkNGVkYWI3YTk5NjE3ZmU2MTc2M2Q3
11
+ YTE2ZWIzMjhlZDZhZGE0N2EwMGRkZjg3MjdjODYyODgzNWNjODc=
12
12
  data.tar.gz: !binary |-
13
- NGY5NzljMDUyNDU2ZGVmOGYxOWY5YmI0MDkwMWU1ZGZkMTA0Y2Q1YjM3MTZh
14
- MjIxZDJiNmIyMjdmZDc0NTc1MmIzNjk3MDY2MDIzOGQ3ZDdiMDEzMDc4MWUw
15
- NmMzMWJiZDRjMmZiMTZmZTZhMjFhZDg3YmExZGVlYjA4MDk4ZDU=
13
+ MDRhYWM2NGZiNjg0NmI2MzBmNWRjZjgwZDM2ZTIyZjA4NDU2ODdjZjA3MjMw
14
+ OThjMTkyNzViMGE5Yzg0MWViYTE2MTVkYjgzZGUzNzFhZDZkNDA0YjI2Yjkz
15
+ M2I0NDg1OWNhYmVhNjkzODU3N2ZlZjM0ZTJjMzIyYWJiODExOGM=
data/README.md CHANGED
@@ -66,21 +66,40 @@ ja:
66
66
  <span class="<%= customer.registration_state_color %>"><%= customer.registration_state_label %></span>
67
67
 
68
68
  <% labels = customer.registration_state_labelized %>
69
- <span class="<%= labels[:color] %>"><%= labels[:label] %></span>
69
+ <span class="<%= labels.color %>"><%= labels.label %></span>
70
+
71
+ <% labels = customer.labelized.registration_state %>
72
+ <span class="<%= labels.color %>"><%= labels.label %></span>
70
73
 
71
74
  <% labels = customer.labelized[:registration_state] %>
72
75
  <span class="<%= labels[:color] %>"><%= labels[:label] %></span>
73
76
 
74
77
  <%# description %>
75
78
  <ul>
76
- <%# Customer.registration_states # => define by enum %>
77
- <% Customer.registration_states.each do |state,value| %>
78
- <% labels = Customer.labelized[:registration_state][state] %>
79
+ <% Customer.registration_state_labelized.each do |state,labels| %>
80
+ <li><%= labels.label %> : <%= labels.description %></li>
81
+ <% end %>
82
+ </ul>
83
+
84
+ <ul>
85
+ <% Customer.labelized.registration_state.each do |state,labels| %>
86
+ <li><%= labels.label %> : <%= labels.description %></li>
87
+ <% end %>
88
+ </ul>
89
+
90
+ <ul>
91
+ <% Customer.labelized[:registration_state].each do |state,labels| %>
79
92
  <li><%= labels[:label] %> : <%= labels[:description] %></li>
80
93
  <% end %>
81
94
  </ul>
82
95
  ```
83
96
 
97
+ ```ruby
98
+ Customer.labelized[:unknown_attr] #=> KeyError
99
+ Customer.labelized[:registration_state]["unknown_state"] #=> KeyError
100
+ Customer.labelized[:registration_state]["starting"][:unknown_label_type] #=> KeyError
101
+ ```
102
+
84
103
  ## Converters
85
104
 
86
105
  Convert label:
@@ -121,17 +140,22 @@ ja:
121
140
  color: ...
122
141
  ```
123
142
 
124
- ## outside rails
143
+
144
+ ## without enum
125
145
 
126
146
  ```ruby
127
- class Customer
147
+ class Customer < ApplicationModel
128
148
  include Labelizer
129
149
 
130
- def self.model_name
131
- OpenStruct.new i18n_key: :customer
150
+ def self.registration_states
151
+ {
152
+ "starting" => 0,
153
+ "confirming" => 1,
154
+ "completed" => 2,
155
+ }
132
156
  end
133
157
 
134
- labelize ...
158
+ labelize :registration_state, %w(label description color)
135
159
  end
136
160
  ```
137
161
 
data/labelizer.gemspec CHANGED
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "travis"
37
37
 
38
38
  spec.add_dependency "i18n"
39
+ spec.add_dependency "activesupport"
39
40
  end
data/lib/labelizer.rb CHANGED
@@ -1,49 +1,64 @@
1
1
  require "i18n"
2
+ require "active_support/inflector"
2
3
 
3
4
  require "labelizer/version"
5
+ require "labelizer/container"
4
6
 
5
7
  module Labelizer
6
8
  def self.included(base)
7
9
  base.send :extend, ClassMethods
8
10
  end
9
11
 
12
+ def labelized
13
+ @labelized ||= Container.new(self.class.labelized.instance_variable_get(:@keys)){|h,attr|
14
+ h[attr] = self.class.labelized[attr][__send__(attr)]
15
+ }
16
+ end
17
+
10
18
  module ClassMethods
11
- def labelize(attr, labels, converter: {})
12
- @labelizer_converters ||= {}
13
- @labelizer_converters[attr.to_sym] = converter
19
+ def labelize(attr, label_types, converter: {})
20
+ label_types = label_types.map(&:to_sym)
14
21
 
15
22
  define_method :"#{attr}_labelized" do
16
- self.class.labelized[attr][__send__(attr)]
23
+ labelized[attr]
17
24
  end
18
25
 
19
- labels.each do |label|
20
- define_method :"#{attr}_#{label}" do
21
- self.class.labelized[attr][__send__(attr)][label]
26
+ label_types.each do |label_type|
27
+ define_method :"#{attr}_#{label_type}" do
28
+ labelized[attr][label_type]
22
29
  end
23
30
  end
24
- end
25
- def labelized
26
- model = model_name.i18n_key
27
- @labelized ||= Hash.new{|h,attr|
28
- converters = @labelizer_converters && @labelizer_converters[attr.to_sym]
29
- h[attr] = Hash.new{|h,value|
30
- h[value] = Hash.new{|h,label|
31
+
32
+ model = self.to_s.underscore
33
+ @labelized ||= Container.new([]){|h,attr|
34
+ h[attr] = Container.new(__send__(attr.to_s.pluralize)){|h,value|
35
+ h[value] = Container.new(label_types){|h,label_type|
31
36
  result = ::I18n.translate(
32
- "labelizer.#{model}.#{attr}.#{value}.#{label}",
37
+ "labelizer.#{model}.#{attr}.#{value}.#{label_type}",
33
38
  default: [
34
- :"labelizer.#{model}.#{attr}.#{label}",
35
- :"labelizer.#{model}.#{label}",
36
- :"labelizer.#{label}",
39
+ :"labelizer.#{model}.#{attr}.#{label_type}",
40
+ :"labelizer.#{model}.#{label_type}",
41
+ :"labelizer.#{label_type}",
37
42
  "",
38
43
  ],
39
44
  )
40
- if converter = converters && converters[label.to_sym]
41
- result = converter[result]
45
+ if c = converter[label_type]
46
+ result = c[result]
42
47
  end
43
- h[value] = result
48
+ h[label_type] = result
44
49
  }
45
50
  }
46
51
  }
52
+
53
+ @labelized.instance_variable_get(:@keys) << attr
54
+ @labelized.singleton_class.class_eval do
55
+ define_method attr do
56
+ @hash[attr]
57
+ end
58
+ end
59
+ end
60
+ def labelized
61
+ @labelized
47
62
  end
48
63
  end
49
64
  end
@@ -0,0 +1,40 @@
1
+ module Labelizer
2
+ class Container
3
+ include Enumerable
4
+
5
+ def initialize(keys,&block)
6
+ case keys
7
+ when Hash
8
+ @keys = keys.keys
9
+ @values = keys.values
10
+ @map = keys.invert
11
+ else
12
+ @keys = keys
13
+ @values = []
14
+ @map = {}
15
+ end
16
+ @hash = Hash.new(&block)
17
+
18
+ normalized_keys = @keys
19
+ self.singleton_class.class_eval do
20
+ normalized_keys.each do |key|
21
+ define_method key do
22
+ @hash[key]
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def [](key)
29
+ return @hash[key] if @keys.include?(key)
30
+ return @hash[@map[key]] if @values.include?(key)
31
+ raise KeyError, "key: #{key.inspect} not found"
32
+ end
33
+
34
+ def each
35
+ @keys.each do |key|
36
+ yield key, @hash[key]
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Labelizer
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: labelizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - shun
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ! '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activesupport
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: add labels to attribute. label, color, or description, etc.
84
98
  email:
85
99
  - shun@getto.systems
@@ -97,6 +111,7 @@ files:
97
111
  - bin/setup
98
112
  - labelizer.gemspec
99
113
  - lib/labelizer.rb
114
+ - lib/labelizer/container.rb
100
115
  - lib/labelizer/version.rb
101
116
  - release.sh
102
117
  - version-dump.sh