activemenu 0.7.2 → 0.8.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 +4 -4
- data/README.md +34 -21
- data/activemenu_logo.png +0 -0
- data/lib/active_menu/menu.rb +1 -14
- data/lib/active_menu/node.rb +15 -4
- data/lib/active_menu/version.rb +1 -1
- data/spec/lib/active_menu/menu_spec.rb +18 -6
- data/spec/lib/active_menu_spec.rb +7 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffa4c3df4c94a97fdaf3f21747ddb78597d4d246
|
4
|
+
data.tar.gz: f75a7d315fce8804b99f5db4e5c7fb09f5a8b567
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0645c982ed954205a7cacd2ddce21e1578b00ff23e01f65d47ca68350a3ddbf352b1e216d848b2114d526f31e59929eafc54a3677fcaeeb21e82970f6d5a5eba
|
7
|
+
data.tar.gz: 312ec1088cacd38a55cc07a8bcb0dd108f8ee0c6d76eff91706969647cefaad9b4ec825b7cd161137a57a1a7a995b882096174246c8bb362abe1d905ffbc37dc
|
data/README.md
CHANGED
@@ -1,37 +1,50 @@
|
|
1
|
-
|
1
|
+

|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/activemenu)
|
3
4
|
[](https://travis-ci.org/sadjow/activemenu)
|
4
5
|
[](https://gemnasium.com/sadjow/activemenu)
|
5
6
|
[](https://codeclimate.com/github/sadjow/activemenu)
|
6
7
|
|
7
|
-
|
8
|
+
Create menus with multi-level and a Domain Specific Language (DSL) for menus.
|
8
9
|
It's extremely Object Oriented. It still doesn't have code for render, but you can combine it with
|
9
|
-
other
|
10
|
+
other mechanism for rendering, like simple-navigation or other.
|
11
|
+
|
12
|
+
## Semantic Versioning (http://semver.org/)
|
13
|
+
This gem is following the [Semantic Versioning](http://semver.org/)
|
14
|
+
|
15
|
+
## Features
|
16
|
+
* Compatible with any application or framework.
|
17
|
+
* Singleton registry for menus (ActiveMenu::Registry), you can define menus anywhere. (But, use your conscience to a good design.)
|
18
|
+
* Domain Specific Language
|
19
|
+
* You can define the menu along multiple gems(like plugins of Rails)
|
20
|
+
|
21
|
+
## Some wiki
|
22
|
+
[Using simple-navigation with activemenu](https://github.com/sadjow/activemenu/wiki/Using-simple-navigation-for-render-the-activemenu)
|
10
23
|
|
11
24
|
## Initial example
|
12
25
|
```ruby
|
13
26
|
ActiveMenu::create('admix-nav') do |nav|
|
14
|
-
|
27
|
+
|
15
28
|
nav.child :dashboard do |dashboard|
|
16
|
-
dashboard.text Proc.new { t('dashboard.dashboard') }
|
17
|
-
dashboard.href Proc.new { admix_root_url }
|
18
|
-
dashboard.
|
29
|
+
dashboard.text = Proc.new { t('dashboard.dashboard') }
|
30
|
+
dashboard.href = Proc.new { admix_root_url }
|
31
|
+
dashboard.icon = 'icon-flag'
|
19
32
|
end
|
20
33
|
|
21
34
|
nav.child :general do |general|
|
22
|
-
general.text Proc.new { t('general.general') }
|
23
|
-
general.
|
24
|
-
general.
|
35
|
+
general.text = Proc.new { t('general.general') }
|
36
|
+
general.icon = 'icon-flag'
|
37
|
+
general.href = 'javascript:;'
|
38
|
+
general.visible = Proc.new {current_user.has_role?(:admin)}
|
25
39
|
end
|
26
40
|
|
27
41
|
nav.child :content do |content|
|
28
|
-
content.text Proc.new { t('
|
29
|
-
content.
|
42
|
+
content.text = Proc.new { t('content.content') }
|
43
|
+
content.href = 'javascript:;'
|
44
|
+
content.icon = 'icon-flag'
|
30
45
|
end
|
31
46
|
|
32
47
|
end
|
33
|
-
|
34
|
-
end
|
35
48
|
```
|
36
49
|
|
37
50
|
## Installation
|
@@ -57,7 +70,7 @@ ActiveMenu::create(:mymenu)
|
|
57
70
|
#....
|
58
71
|
# In another gem you can use
|
59
72
|
@menu = ActiveMenu::get(:mymenu).child do |sub|
|
60
|
-
sub.content
|
73
|
+
sub.content = 'My content'
|
61
74
|
end
|
62
75
|
```
|
63
76
|
### exists?
|
@@ -90,8 +103,8 @@ or, you can use a block too and retrieve it as the first param.
|
|
90
103
|
These options are write to a hash, that you can use with other gem to render it.
|
91
104
|
```ruby
|
92
105
|
@menu = ActiveMenu::get(:someid)
|
93
|
-
@menu.
|
94
|
-
@menu.
|
106
|
+
@menu.myoption = 'my value'
|
107
|
+
@menu.myoption2 = Proc.new { my_dynamic_method #that will run when I use this option }
|
95
108
|
```
|
96
109
|
|
97
110
|
## Standard DSL (Domain Specific Language) options
|
@@ -103,9 +116,9 @@ You can pass a variable or a Proc to be executed to the visible method.
|
|
103
116
|
```ruby
|
104
117
|
ActiveMenu::create('admix-nav') do |nav|
|
105
118
|
nav.child :general do |general|
|
106
|
-
general.text Proc.new { t('general.general') }
|
107
|
-
general.
|
108
|
-
general.visible Proc.new {current_user.has_role? :admin}
|
119
|
+
general.text = Proc.new { t('general.general') }
|
120
|
+
general.icon = 'icon-flag'
|
121
|
+
general.visible = Proc.new {current_user.has_role? :admin}
|
109
122
|
end
|
110
123
|
end
|
111
124
|
|
@@ -131,7 +144,7 @@ You can set the tag for the menu element or can retrieve it.
|
|
131
144
|
@menu.child(:mychild, href: "test") do |sm|
|
132
145
|
sm.text 'My child'
|
133
146
|
sm.child(:mysubchild, href:'test 2') do |ssm|
|
134
|
-
ssm.text 'My subchild'
|
147
|
+
ssm.text = 'My subchild'
|
135
148
|
end
|
136
149
|
end
|
137
150
|
# Let's improve this DSL, contribute please.
|
data/activemenu_logo.png
ADDED
Binary file
|
data/lib/active_menu/menu.rb
CHANGED
@@ -2,20 +2,7 @@ class ActiveMenu::Menu < ActiveMenu::Node
|
|
2
2
|
|
3
3
|
def initialize(*args)
|
4
4
|
super(*args)
|
5
|
-
self.visible true
|
6
|
-
end
|
7
|
-
|
8
|
-
|
9
|
-
def text(value=nil)
|
10
|
-
self.option(:text, value)
|
11
|
-
end
|
12
|
-
|
13
|
-
def href(value=nil)
|
14
|
-
self.option(:href, value)
|
15
|
-
end
|
16
|
-
|
17
|
-
def visible(value=nil)
|
18
|
-
self.option(:visible, value)
|
5
|
+
self.visible = true
|
19
6
|
end
|
20
7
|
|
21
8
|
end
|
data/lib/active_menu/node.rb
CHANGED
@@ -19,10 +19,6 @@ class ActiveMenu::Node
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def tag(value=nil)
|
23
|
-
self.option(:tag, value)
|
24
|
-
end
|
25
|
-
|
26
22
|
def child(id, options={}, &block)
|
27
23
|
new_child = self.class.new(id, options)
|
28
24
|
new_child.parent = self
|
@@ -65,5 +61,20 @@ class ActiveMenu::Node
|
|
65
61
|
end
|
66
62
|
end
|
67
63
|
|
64
|
+
def method_missing(method_name, *args)
|
65
|
+
unless respond_to?(method_name)
|
66
|
+
option_name = method_name.to_s.gsub("=", "").to_sym
|
67
|
+
match_eq = method_name.to_s.match(/^(\w)=/)
|
68
|
+
self.class.class_eval do
|
69
|
+
define_method method_name do |value=nil|
|
70
|
+
option(option_name, value)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
send(method_name, *args)
|
74
|
+
else
|
75
|
+
send(method_name, *args)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
68
79
|
|
69
80
|
end
|
data/lib/active_menu/version.rb
CHANGED
@@ -15,6 +15,13 @@ describe ActiveMenu::Menu do
|
|
15
15
|
@menu = ActiveMenu::Menu.new(:idtest, href: "http://example.com", text: "My menu")
|
16
16
|
end
|
17
17
|
|
18
|
+
it 'can define dynamic options' do
|
19
|
+
@menu.seila = :li
|
20
|
+
@menu.seila.should == :li
|
21
|
+
@menu.seila = :div
|
22
|
+
@menu.seila.should == :div
|
23
|
+
end
|
24
|
+
|
18
25
|
it 'starts visible' do
|
19
26
|
@menu.visible.should == true
|
20
27
|
end
|
@@ -42,7 +49,7 @@ describe ActiveMenu::Menu do
|
|
42
49
|
it 'have a flexible DSL for menus' do
|
43
50
|
@menu.child(:mychild, text: "test") do |sm|
|
44
51
|
@sm = sm
|
45
|
-
sm.text 'My child'
|
52
|
+
sm.text = 'My child'
|
46
53
|
sm.child(:mysubchild, text: 'test 2') do |ssm|
|
47
54
|
@ssm = ssm
|
48
55
|
ssm.text == 'My subchild'
|
@@ -64,22 +71,27 @@ describe ActiveMenu::Menu do
|
|
64
71
|
end
|
65
72
|
|
66
73
|
it 'can add a tag as a option' do
|
67
|
-
@menu.tag :li
|
74
|
+
@menu.tag = :li
|
68
75
|
@menu.options[:tag].should == :li
|
69
76
|
end
|
70
77
|
|
71
78
|
it 'can add and retrieve the tag name with the #tag method' do
|
72
|
-
@menu.tag :li
|
79
|
+
@menu.tag = :li
|
73
80
|
@menu.tag.should == :li
|
74
|
-
@menu.tag :div
|
81
|
+
@menu.tag = :div
|
75
82
|
@menu.tag.should == :div
|
76
83
|
end
|
77
84
|
|
78
85
|
it 'can set a visible options' do
|
79
|
-
@menu.visible false
|
86
|
+
@menu.visible = false
|
80
87
|
@menu.visible.should == false
|
81
|
-
@menu.visible true
|
88
|
+
@menu.visible = true
|
82
89
|
@menu.visible.should == true
|
83
90
|
end
|
84
91
|
|
92
|
+
it 'can set a undefined method as a option' do
|
93
|
+
@menu.author = "Sadjow"
|
94
|
+
@menu.author.should == "Sadjow"
|
95
|
+
end
|
96
|
+
|
85
97
|
end
|
@@ -34,10 +34,10 @@ describe ActiveMenu do
|
|
34
34
|
|
35
35
|
it 'can create menus with lambdas' do
|
36
36
|
ActiveMenu::create('admix-nav') do |nav|
|
37
|
-
nav.tag :div
|
37
|
+
nav.tag = :div
|
38
38
|
nav.child :dashboard do |d|
|
39
|
-
d.text 'dashboard.dashboard'
|
40
|
-
d.href lambda { admix_root_url }
|
39
|
+
d.text = 'dashboard.dashboard'
|
40
|
+
d.href = lambda { admix_root_url }
|
41
41
|
d.option :icon, 'icon-flag'
|
42
42
|
end
|
43
43
|
end
|
@@ -49,10 +49,10 @@ describe ActiveMenu do
|
|
49
49
|
before :each do
|
50
50
|
@dashboard = nil
|
51
51
|
@nav = ActiveMenu::create('admix-nav') do |nav|
|
52
|
-
nav.tag :div
|
52
|
+
nav.tag = :div
|
53
53
|
@dashboard = nav.child :dashboard do |d|
|
54
|
-
d.text 'dashboard.dashboard'
|
55
|
-
d.href lambda { admix_root_url }
|
54
|
+
d.text = 'dashboard.dashboard'
|
55
|
+
d.href = lambda { admix_root_url }
|
56
56
|
d.option :icon, 'icon-flag'
|
57
57
|
end
|
58
58
|
end
|
@@ -72,7 +72,7 @@ describe ActiveMenu do
|
|
72
72
|
nav.get(:dashboard) do |d|
|
73
73
|
d.child :testchild do |sub|
|
74
74
|
@testchild = sub
|
75
|
-
sub.text "My child"
|
75
|
+
sub.text = "My child"
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemenu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadjow Medeiros Leão
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- activemenu.gemspec
|
55
|
+
- activemenu_logo.png
|
55
56
|
- lib/active_menu.rb
|
56
57
|
- lib/active_menu/menu.rb
|
57
58
|
- lib/active_menu/node.rb
|