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 +8 -8
- data/README.md +33 -9
- data/labelizer.gemspec +1 -0
- data/lib/labelizer.rb +36 -21
- data/lib/labelizer/container.rb +40 -0
- data/lib/labelizer/version.rb +1 -1
- data/version.txt +1 -1
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YWE1OGVlYTVjMjk0ZjdiOGM0YTg0ZDA0ZGFhNTk4ZWYxMmI0NzMwOA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTJmY2E0ZmU2NWNlNDc3OThkNGY0ZmE4NDkzOTRkZTNiN2NhMTMwZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Mjg5NmM2MWZhOTM0ZGZhMmM1NWY4NWYxYzAzNGFjNDVlZGMxYWExODMwOTNl
|
10
|
+
ZGUwMDQzMDM3NmZhNTU2MGFkMWQ1ZjNkNGVkYWI3YTk5NjE3ZmU2MTc2M2Q3
|
11
|
+
YTE2ZWIzMjhlZDZhZGE0N2EwMGRkZjg3MjdjODYyODgzNWNjODc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
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
|
-
|
77
|
-
|
78
|
-
|
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
|
-
|
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.
|
131
|
-
|
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
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,
|
12
|
-
|
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
|
-
|
23
|
+
labelized[attr]
|
17
24
|
end
|
18
25
|
|
19
|
-
|
20
|
-
define_method :"#{attr}_#{
|
21
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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}.#{
|
37
|
+
"labelizer.#{model}.#{attr}.#{value}.#{label_type}",
|
33
38
|
default: [
|
34
|
-
:"labelizer.#{model}.#{attr}.#{
|
35
|
-
:"labelizer.#{model}.#{
|
36
|
-
:"labelizer.#{
|
39
|
+
:"labelizer.#{model}.#{attr}.#{label_type}",
|
40
|
+
:"labelizer.#{model}.#{label_type}",
|
41
|
+
:"labelizer.#{label_type}",
|
37
42
|
"",
|
38
43
|
],
|
39
44
|
)
|
40
|
-
if
|
41
|
-
result =
|
45
|
+
if c = converter[label_type]
|
46
|
+
result = c[result]
|
42
47
|
end
|
43
|
-
h[
|
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
|
data/lib/labelizer/version.rb
CHANGED
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
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.
|
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
|