menuizer 0.2.0 → 0.2.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 +8 -8
- data/README.md +32 -2
- data/lib/menuizer/menu.rb +49 -34
- data/lib/menuizer.rb +5 -13
- data/version.txt +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
MDZjZGE1ZjIzOWNlYTg4OTAwODg3YjExNzNkZjFiNmVjY2JlMTgyZg==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
NTMzMTczNDhiOTc4OTA2MTBkNmE5MWUzZDRhYTRjMjllYjM4YzFhYQ==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
MWU1NjM5OWViMGY0MDkwYTMyNzVlMzlkZWFjOWViZDhlZjA4MTFlNmZkOGZj
|
|
10
|
+
YzM2ODVlYjJhMzdlMTVlMTE3OTExYzM1NzdlZjIwZjA4YWZmZjdmMWNhMDMz
|
|
11
|
+
OWIwMTVhMGM2NmFkZjU2N2Q1YmVhZDA3MmYzNTljNGNmNjJhOGE=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
MmY1OWEwYmFhNjE5NGQ2ZjZjNWFkZmIxNTNjNGUwZjQyYWFjYWFjNDI2YWU1
|
|
14
|
+
OTNhOTE0NjJlNjI5ZDcwNGE4YmVjYmE4N2U4ODFlNjEyOGIxYjdjYjM2NmMy
|
|
15
|
+
NTRlM2FhOTc0ZmU1YmNkZDk4ODNlNTEyYjBmZDFjZDY4N2E4Yzg=
|
data/README.md
CHANGED
|
@@ -139,8 +139,38 @@ end
|
|
|
139
139
|
<% end %>
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
## Generators
|
|
143
|
+
|
|
144
|
+
Generate menu items by ruby code:
|
|
145
|
+
|
|
146
|
+
```ruby
|
|
147
|
+
# config/initializers/menuizer.rb
|
|
148
|
+
Menuizer.configure do |config|
|
|
149
|
+
...
|
|
150
|
+
config.generator = {
|
|
151
|
+
generate_items: ->{
|
|
152
|
+
[
|
|
153
|
+
{item: "generate item1"},
|
|
154
|
+
{item: "generate item2"},
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
}
|
|
158
|
+
end
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
# config/menuizer.yml
|
|
163
|
+
- header: MAIN NAVIGATION
|
|
164
|
+
- items: :generate_items
|
|
165
|
+
# =>
|
|
166
|
+
# - item: generate item1
|
|
167
|
+
# - item: generate item2
|
|
168
|
+
```
|
|
169
|
+
|
|
142
170
|
## Converters
|
|
143
171
|
|
|
172
|
+
Convert menu item's property:
|
|
173
|
+
|
|
144
174
|
```ruby
|
|
145
175
|
# config/initializers/menuizer.rb
|
|
146
176
|
Menuizer.configure do |config|
|
|
@@ -159,7 +189,7 @@ end
|
|
|
159
189
|
|
|
160
190
|
```ruby
|
|
161
191
|
menuizer.items.each do |item|
|
|
162
|
-
item.icon #=>
|
|
192
|
+
item.icon #=> "fa fa-circle-o" <= converter[:icon].call(icon,opts)
|
|
163
193
|
end
|
|
164
194
|
```
|
|
165
195
|
|
|
@@ -184,7 +214,7 @@ opts: all key-value hash
|
|
|
184
214
|
* convert `:"#{namespace}#{model.model_name.plural}"` if title respond to `model_name.plural`
|
|
185
215
|
* or, leave `nil`
|
|
186
216
|
|
|
187
|
-
**what namespace
|
|
217
|
+
**what is namespace?**
|
|
188
218
|
|
|
189
219
|
↓↓↓
|
|
190
220
|
|
data/lib/menuizer/menu.rb
CHANGED
|
@@ -1,16 +1,35 @@
|
|
|
1
1
|
class Menuizer::Menu
|
|
2
|
-
def initialize(namespace)
|
|
3
|
-
|
|
2
|
+
def initialize(namespace,config)
|
|
3
|
+
@config = config
|
|
4
|
+
@parent = nil
|
|
5
|
+
|
|
6
|
+
@namespace = namespace
|
|
7
|
+
if @namespace
|
|
4
8
|
@namespace = "#{namespace}_"
|
|
5
9
|
item_class = :"Item_#{namespace}"
|
|
6
|
-
if self.class.const_defined?(item_class)
|
|
7
|
-
@item_class = self.class.const_get(item_class)
|
|
8
|
-
else
|
|
9
|
-
@item_class = self.class.const_set(item_class, Class.new(Item))
|
|
10
|
-
end
|
|
11
10
|
else
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
item_class = :ItemDefault
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
if self.class.const_defined?(item_class)
|
|
15
|
+
@item_class = self.class.const_get(item_class)
|
|
16
|
+
else
|
|
17
|
+
@item_class = self.class.const_set(item_class, Class.new(Item))
|
|
18
|
+
|
|
19
|
+
if converter = @config.converter
|
|
20
|
+
@item_class.instance_eval do
|
|
21
|
+
converter.each do |key,block|
|
|
22
|
+
define_method key do
|
|
23
|
+
block.call @opts[key], @opts
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
if path = @config.file_path
|
|
31
|
+
require "yaml"
|
|
32
|
+
load_data YAML.load_file(path)
|
|
14
33
|
end
|
|
15
34
|
end
|
|
16
35
|
|
|
@@ -26,11 +45,11 @@ class Menuizer::Menu
|
|
|
26
45
|
end
|
|
27
46
|
end
|
|
28
47
|
def active_item
|
|
29
|
-
@active_item
|
|
48
|
+
@active_item ||= nil
|
|
30
49
|
end
|
|
31
50
|
def active_items
|
|
32
51
|
result = []
|
|
33
|
-
item =
|
|
52
|
+
item = active_item
|
|
34
53
|
while item
|
|
35
54
|
result << item
|
|
36
55
|
item = item.parent
|
|
@@ -38,34 +57,30 @@ class Menuizer::Menu
|
|
|
38
57
|
result.reverse
|
|
39
58
|
end
|
|
40
59
|
|
|
41
|
-
def set_converter(key,&block)
|
|
42
|
-
@item_class.class_eval do
|
|
43
|
-
define_method key do
|
|
44
|
-
block.call @opts[key], @opts
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def load(data)
|
|
50
|
-
return unless data.respond_to?(:each)
|
|
51
|
-
data.each do |item|
|
|
52
|
-
if item.respond_to?(:map) && item.respond_to?(:delete)
|
|
53
|
-
item = item.map{|k,v| [k.to_sym,v]}.to_h
|
|
54
|
-
if title = item.delete(:header)
|
|
55
|
-
add_header title
|
|
56
|
-
else
|
|
57
|
-
add_item item.delete(:item), item
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
60
|
def items
|
|
64
61
|
@items ||= []
|
|
65
62
|
end
|
|
66
63
|
|
|
67
64
|
private
|
|
68
65
|
|
|
66
|
+
def load_data(data)
|
|
67
|
+
return unless data.respond_to?(:each)
|
|
68
|
+
data.each do |item|
|
|
69
|
+
if item.respond_to?(:map)
|
|
70
|
+
item = item.map{|k,v| [k.to_sym,v]}.to_h
|
|
71
|
+
if title = item.delete(:header)
|
|
72
|
+
add_header title
|
|
73
|
+
elsif items = item.delete(:items)
|
|
74
|
+
if generator = @config.generator[items]
|
|
75
|
+
load_data generator.call
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
add_item item.delete(:item), item
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
69
84
|
def add_header(title)
|
|
70
85
|
current << @item_class.new(
|
|
71
86
|
type: :header,
|
|
@@ -100,7 +115,7 @@ class Menuizer::Menu
|
|
|
100
115
|
**opts,
|
|
101
116
|
)
|
|
102
117
|
@current = item.children
|
|
103
|
-
|
|
118
|
+
load_data children
|
|
104
119
|
@current, @parent = parents, owner
|
|
105
120
|
current << item
|
|
106
121
|
end
|
data/lib/menuizer.rb
CHANGED
|
@@ -5,21 +5,10 @@ require "menuizer/menu/item"
|
|
|
5
5
|
module Menuizer
|
|
6
6
|
class << self
|
|
7
7
|
def configure(namespace=nil)
|
|
8
|
-
yield (
|
|
8
|
+
yield config_for_namespace(namespace)
|
|
9
9
|
end
|
|
10
10
|
def menu(namespace=nil)
|
|
11
|
-
Menu.new(namespace)
|
|
12
|
-
c = config[namespace]
|
|
13
|
-
if c.respond_to?(:converter)
|
|
14
|
-
c.converter.each do |key,block|
|
|
15
|
-
menu.set_converter key, &block
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
if c.respond_to?(:file_path) && path = c.file_path
|
|
19
|
-
require "yaml"
|
|
20
|
-
menu.load YAML.load_file(path)
|
|
21
|
-
end
|
|
22
|
-
}
|
|
11
|
+
Menu.new namespace, config_for_namespace(namespace)
|
|
23
12
|
end
|
|
24
13
|
|
|
25
14
|
private
|
|
@@ -27,5 +16,8 @@ module Menuizer
|
|
|
27
16
|
def config
|
|
28
17
|
@config ||= {}
|
|
29
18
|
end
|
|
19
|
+
def config_for_namespace(namespace)
|
|
20
|
+
config[namespace] ||= OpenStruct.new
|
|
21
|
+
end
|
|
30
22
|
end
|
|
31
23
|
end
|
data/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.2.
|
|
1
|
+
0.2.1
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: menuizer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.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-
|
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|