menuizer 0.2.7 → 0.3.0

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
- MmQ2MDQ0NDlmZjkyZTA1ZDM0NTA5MzI2ZDJlMGE1ZTg1NzUyNGI0Yw==
4
+ ZTFkZWI1NDljM2M1MmE2ZjZkODRmMGU1NzM1NzYzMmZiYTc4NjE4NA==
5
5
  data.tar.gz: !binary |-
6
- NDk4NTYxYTBjMWZlZmI4MzAzODMwNzEzNTA3NDU0ZDI0ODliY2ZiNQ==
6
+ NWM3YTUxZjFlMGRlYTRlNmY1MTA5Zjg3ODM3MTg5Y2VjNzIxMmQ1ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDA4MTE5MzIxYTk0MTgzMjExM2QyNDA5YTU2ZWE4MDU1Mjk0MWE5NTI2YWYx
10
- M2I4MjNkOTk0MmU2MjNlZmY0ODM0NWQ0Y2E3ZDk2NzY3NGRhZjVjMDJhNzA1
11
- Y2Y2YzIxNzUyNzhmODEwNmY4NTg0ZWM3MjJhYmI4YTllZDkxMGM=
9
+ Y2UxOTUzNmNlNzViOTk1YzA4YmEwNmJkNjFjOGRkYjNiN2NiNmJkN2Q5YjRk
10
+ Y2ZiOTY4MzkzOWRhNDA2M2YwNWMwOWJmOTQzYzc1YTRkNDVkYmMzOGQ4MjU4
11
+ ZDNjYmU0OTFmMGIwMzc5NjdiMjNlMDY4MmMwZjNjZTg2YTM1ZmM=
12
12
  data.tar.gz: !binary |-
13
- NTE3NjIwYTJkZWY0ZjgxYjJmYzZhMTA4ZWJiMTg5OGUyY2RkOWFlN2NiOWQ2
14
- M2RlMGY5YjQxYTZjNDMyMjhmNzIyMGQyMThkM2Y4YzEwNDk0N2UyNjFjYTBh
15
- MjZhMDE2NGEyOGI4ZDIwNDJlYzMzZGFkNTY1NjEyODQxODFhMzI=
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: :Widget
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: :Admin
57
+ - item: :admins
51
58
  icon: fa fa-circle-o
52
- - item: :User
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 :Admin # item's value %>
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(:Widget) #=> menu 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
- ### convert `model`
210
-
211
- * set `:model` key if title is `Symbol` and respond to `model_name` ( ActiveRecord )
212
-
206
+ ### auto converters
213
207
 
214
- ### convert `title`
208
+ **title**
215
209
 
216
- * convert `model.model_name.human` if model respond to `model_name.huuman`
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
- ### convert `path`
216
+ **path**
221
217
 
222
- * leave `path` if not `nil`
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: :Admin
238
+ - item: :admins
245
239
  ```
246
240
 
247
241
  ```ruby
@@ -5,23 +5,27 @@ class Menuizer::Menu::Item < OpenStruct
5
5
  end
6
6
 
7
7
  def title
8
- if model && model.model_name.respond_to?(:human)
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 path.respond_to?(:unshift)
17
- if namespace
18
- path = [namespace[0..-2].to_sym,*path]
19
- end
16
+ if namespace
17
+ [namespace[0..-2].to_sym,*path]
18
+ else
19
+ path
20
20
  end
21
- path
22
21
  else
23
- if model && model.model_name.respond_to?(:plural)
24
- :"#{namespace}#{model.model_name.plural}"
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
- load_data YAML.load_file(path)
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 title = item.delete(:header)
79
- add_header title
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(title)
96
+ def add_header(header)
92
97
  current << @item_class.new(
93
98
  type: :header,
94
99
  namespace: @namespace,
95
- title: title,
100
+ title: header,
96
101
  )
97
102
  end
98
- def add_item(title, opts)
99
- model = to_model title
100
-
103
+ def add_item(item, opts)
101
104
  props = {
102
- parent: @parent,
103
- namespace: @namespace,
104
- title: title,
105
- model: model,
105
+ parent: @parent,
106
+ namespace: @namespace,
107
+ item: item,
106
108
  }
107
109
 
108
110
  unless children = opts.delete(:children)
109
- item = @item_class.new(
111
+ instance = @item_class.new(
110
112
  **opts,
111
113
  type: :item,
112
114
  **props,
113
115
  )
114
116
  else
115
- item = @item_class.new(
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 = item.children, item
124
+ @current, @parent = instance.children, instance
123
125
  load_data children
124
126
  @current, @parent = parents, owner
125
127
  end
126
128
 
127
- current << item
128
- map[title] = item
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
@@ -1,3 +1,5 @@
1
+ require "i18n"
2
+
1
3
  require "menuizer/version"
2
4
  require "menuizer/menu"
3
5
  require "menuizer/menu/item"
data/menuizer.gemspec CHANGED
@@ -34,4 +34,6 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency "rake", "~> 10.0"
35
35
  spec.add_development_dependency "minitest", "~> 5.0"
36
36
  spec.add_development_dependency "travis"
37
+
38
+ spec.add_dependency "i18n"
37
39
  end
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.2.7
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.2.7
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-18 00:00:00.000000000 Z
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