labelizer 0.0.3 → 0.0.4

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