menuizer 0.2.7 → 0.3.0
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 +21 -27
- data/lib/menuizer/menu/item.rb +14 -10
- data/lib/menuizer/menu.rb +19 -28
- data/lib/menuizer.rb +2 -0
- data/menuizer.gemspec +2 -0
- data/version.txt +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTFkZWI1NDljM2M1MmE2ZjZkODRmMGU1NzM1NzYzMmZiYTc4NjE4NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWM3YTUxZjFlMGRlYTRlNmY1MTA5Zjg3ODM3MTg5Y2VjNzIxMmQ1ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Y2UxOTUzNmNlNzViOTk1YzA4YmEwNmJkNjFjOGRkYjNiN2NiNmJkN2Q5YjRk
|
10
|
+
Y2ZiOTY4MzkzOWRhNDA2M2YwNWMwOWJmOTQzYzc1YTRkNDVkYmMzOGQ4MjU4
|
11
|
+
ZDNjYmU0OTFmMGIwMzc5NjdiMjNlMDY4MmMwZjNjZTg2YTM1ZmM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDY1NWNkNjEyZjE1YTNiZjI3NjNjMWJjNTI1Y2IxN2EyMjc3MTQyZjJmZWNi
|
14
|
+
ZjlkNmIyMDMwOWI2YWU0ZWQyNzkzMzU3NGYwNWU2MzliOGI2NGY4Y2Q5ZDA2
|
15
|
+
MDQ5NzA2ZGIyYjAzNzg4NDUwZGRkZjIwZmQyMGVmMDAzYjNkYjU=
|
data/README.md
CHANGED
@@ -27,6 +27,7 @@ Or install it yourself as:
|
|
27
27
|
# config/initializers/menuizer.rb
|
28
28
|
Menuizer.configure do |config|
|
29
29
|
config.file_path = Rails.root.join("config/menuizer.yml")
|
30
|
+
config.cache = Rails.env.production? # cache yml
|
30
31
|
end
|
31
32
|
```
|
32
33
|
|
@@ -34,31 +35,33 @@ end
|
|
34
35
|
# config/menuizer.yml
|
35
36
|
- header: MAIN NAVIGATION
|
36
37
|
- item: Dashboard
|
38
|
+
path:
|
39
|
+
- :root
|
37
40
|
icon: fa fa-dashboard
|
38
41
|
children:
|
39
42
|
- item: Dashboard v1
|
40
43
|
icon: fa fa-circle-o
|
44
|
+
path:
|
45
|
+
- :dashboard1
|
41
46
|
- item: Dashboard v2
|
42
47
|
icon: fa fa-circle-o
|
48
|
+
path:
|
49
|
+
- :dashboard2
|
43
50
|
|
44
|
-
- item: :
|
51
|
+
- item: :widgets
|
45
52
|
icon: fa fa-th
|
46
53
|
|
47
54
|
- item: Settings
|
48
55
|
icon: fa fa-cog
|
49
56
|
children:
|
50
|
-
- item: :
|
57
|
+
- item: :admins
|
51
58
|
icon: fa fa-circle-o
|
52
|
-
- item: :
|
59
|
+
- item: :users
|
53
60
|
icon: fa fa-circle-o
|
54
|
-
notice:
|
55
|
-
class: :User
|
56
|
-
method: :main_menu_notices
|
57
61
|
|
58
62
|
- item: nested
|
59
63
|
children:
|
60
64
|
- item: nested item
|
61
|
-
path: :path_to_somewhere
|
62
65
|
icon: fa fa-circle-o
|
63
66
|
```
|
64
67
|
|
@@ -83,7 +86,7 @@ end
|
|
83
86
|
|
84
87
|
```erb
|
85
88
|
<%# app/views/admins/index.html.erb %>
|
86
|
-
<% menuizer.activate :
|
89
|
+
<% menuizer.activate :admins # item's value %>
|
87
90
|
<% content_for :title do %><%= menuizer.active_item.try(:title) %><% end %>
|
88
91
|
|
89
92
|
...
|
@@ -117,12 +120,6 @@ end
|
|
117
120
|
<li class="<% if item.is_active %>active<% end %>">
|
118
121
|
<%= link_to item.path || "#" do %>
|
119
122
|
<i class="<%= item.icon %>"></i> <span><%= item.title %></span>
|
120
|
-
<% if item.notices.present? %>
|
121
|
-
<% item.notices.each do |notice| %>
|
122
|
-
<% type, text = notice.call %>
|
123
|
-
<span class="label label-<%= type %> pull-right"><%= text %></span>
|
124
|
-
<% end %>
|
125
|
-
<% end %>
|
126
123
|
<% end %>
|
127
124
|
</li>
|
128
125
|
<% else %>
|
@@ -145,7 +142,7 @@ end
|
|
145
142
|
### get item
|
146
143
|
|
147
144
|
```ruby
|
148
|
-
menuizer.item(:
|
145
|
+
menuizer.item(:widgets) #=> menu item
|
149
146
|
```
|
150
147
|
|
151
148
|
## Generators
|
@@ -206,22 +203,19 @@ icon, opts is yaml's original value
|
|
206
203
|
opts: all key-value hash
|
207
204
|
|
208
205
|
|
209
|
-
###
|
210
|
-
|
211
|
-
* set `:model` key if title is `Symbol` and respond to `model_name` ( ActiveRecord )
|
212
|
-
|
206
|
+
### auto converters
|
213
207
|
|
214
|
-
|
208
|
+
**title**
|
215
209
|
|
216
|
-
|
217
|
-
* or, leave `title`
|
210
|
+
if not specified, translate by i18n:
|
218
211
|
|
212
|
+
```ruby
|
213
|
+
I18n.translate "menuizer.#{item}", defaults: ["activerecord.models.#{item}","#{item}"
|
214
|
+
```
|
219
215
|
|
220
|
-
|
216
|
+
**path**
|
221
217
|
|
222
|
-
|
223
|
-
* convert `:"#{namespace}#{model.model_name.plural}"` if title respond to `model_name.plural`
|
224
|
-
* or, leave `nil`
|
218
|
+
if not specified, and item is symbol: `[namespace,item]`
|
225
219
|
|
226
220
|
**what is namespace?**
|
227
221
|
|
@@ -241,7 +235,7 @@ end
|
|
241
235
|
```yaml
|
242
236
|
# config/menuizer/namespace.yml
|
243
237
|
- header: NAMESPACE MENU
|
244
|
-
- item: :
|
238
|
+
- item: :admins
|
245
239
|
```
|
246
240
|
|
247
241
|
```ruby
|
data/lib/menuizer/menu/item.rb
CHANGED
@@ -5,23 +5,27 @@ class Menuizer::Menu::Item < OpenStruct
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def title
|
8
|
-
if
|
9
|
-
model.model_name.human
|
10
|
-
else
|
8
|
+
if title = @opts[:title]
|
11
9
|
@opts[:title]
|
10
|
+
else
|
11
|
+
I18n.translate :"menuizer.#{item}", default: [:"activerecord.models.#{item}", "#{item}"]
|
12
12
|
end
|
13
13
|
end
|
14
14
|
def path
|
15
15
|
if path = @opts[:path]
|
16
|
-
if
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
if namespace
|
17
|
+
[namespace[0..-2].to_sym,*path]
|
18
|
+
else
|
19
|
+
path
|
20
20
|
end
|
21
|
-
path
|
22
21
|
else
|
23
|
-
|
24
|
-
|
22
|
+
case item
|
23
|
+
when Symbol
|
24
|
+
if namespace
|
25
|
+
[namespace[0..-2].to_sym,item]
|
26
|
+
else
|
27
|
+
[item]
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
data/lib/menuizer/menu.rb
CHANGED
@@ -32,7 +32,12 @@ class Menuizer::Menu
|
|
32
32
|
|
33
33
|
if path = @config.file_path
|
34
34
|
require "yaml"
|
35
|
-
|
35
|
+
if @config.cache
|
36
|
+
yml = @config.yml ||= YAML.load_file(path)
|
37
|
+
else
|
38
|
+
yml = YAML.load_file(path)
|
39
|
+
end
|
40
|
+
load_data yml
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
@@ -75,8 +80,8 @@ class Menuizer::Menu
|
|
75
80
|
data.each do |item|
|
76
81
|
if item.respond_to?(:map)
|
77
82
|
item = item.map{|k,v| [k.to_sym,v]}.to_h
|
78
|
-
if
|
79
|
-
add_header
|
83
|
+
if header = item.delete(:header)
|
84
|
+
add_header header
|
80
85
|
elsif items = item.delete(:items)
|
81
86
|
if generator = @config.generator[items]
|
82
87
|
load_data generator.call(self)
|
@@ -88,55 +93,41 @@ class Menuizer::Menu
|
|
88
93
|
end
|
89
94
|
end
|
90
95
|
|
91
|
-
def add_header(
|
96
|
+
def add_header(header)
|
92
97
|
current << @item_class.new(
|
93
98
|
type: :header,
|
94
99
|
namespace: @namespace,
|
95
|
-
title:
|
100
|
+
title: header,
|
96
101
|
)
|
97
102
|
end
|
98
|
-
def add_item(
|
99
|
-
model = to_model title
|
100
|
-
|
103
|
+
def add_item(item, opts)
|
101
104
|
props = {
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
model: model,
|
105
|
+
parent: @parent,
|
106
|
+
namespace: @namespace,
|
107
|
+
item: item,
|
106
108
|
}
|
107
109
|
|
108
110
|
unless children = opts.delete(:children)
|
109
|
-
|
111
|
+
instance = @item_class.new(
|
110
112
|
**opts,
|
111
113
|
type: :item,
|
112
114
|
**props,
|
113
115
|
)
|
114
116
|
else
|
115
|
-
|
117
|
+
instance = @item_class.new(
|
116
118
|
**opts,
|
117
119
|
type: :tree,
|
118
120
|
children: [],
|
119
121
|
**props,
|
120
122
|
)
|
121
123
|
parents, owner = @current, @parent
|
122
|
-
@current, @parent =
|
124
|
+
@current, @parent = instance.children, instance
|
123
125
|
load_data children
|
124
126
|
@current, @parent = parents, owner
|
125
127
|
end
|
126
128
|
|
127
|
-
current <<
|
128
|
-
map[
|
129
|
-
end
|
130
|
-
def to_model(title)
|
131
|
-
return unless title.is_a?(Symbol)
|
132
|
-
parent = Object
|
133
|
-
title.to_s.split("::").each do |tip|
|
134
|
-
return unless parent.const_defined?(tip)
|
135
|
-
parent = parent.const_get(tip)
|
136
|
-
end
|
137
|
-
if parent.respond_to?(:model_name)
|
138
|
-
parent
|
139
|
-
end
|
129
|
+
current << instance
|
130
|
+
map[item] = instance
|
140
131
|
end
|
141
132
|
|
142
133
|
def current
|
data/lib/menuizer.rb
CHANGED
data/menuizer.gemspec
CHANGED
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
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.
|
4
|
+
version: 0.3.0
|
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-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: i18n
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: build menu items for admin page ( like AdminLTE )
|
70
84
|
email:
|
71
85
|
- shun@getto.systems
|