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