jonuts-merb-menus 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -68,7 +68,7 @@ module Merb::Menus
68
68
 
69
69
  def submenu(name, opts={}, &blk)
70
70
  submenu = Submenu.new(name, self, opts)
71
- submenu.instance_eval(&blk)
71
+ submenu.instance_eval(&blk) if block_given?
72
72
  @submenus << submenu
73
73
  self
74
74
  end
@@ -2,8 +2,8 @@ class Merb::Controller
2
2
  before do
3
3
  Merb::Menus.reset
4
4
 
5
- controller = params[:controller]
6
- action = params[:action]
5
+ controller = params['controller']
6
+ action = params['action']
7
7
 
8
8
  if top = Merb::Menus.current_menu = Merb::Menus.default
9
9
  if menu = top.current_submenu = get_submenu(top,controller)
@@ -2,7 +2,7 @@ module Merb
2
2
  module Menus
3
3
  BIG = "0"
4
4
  SMALL = "0"
5
- TINY = "6"
5
+ TINY = "7"
6
6
 
7
7
  VERSION = [BIG, SMALL, TINY].join(".")
8
8
  end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Merb::Menus::Item do
4
+ before do
5
+ @menu = Merb::Menus::Menu.new(:foo)
6
+ @menu.display_style(:split) {|thing| thing.to_s.split("_").join(" ")}
7
+
8
+ @submenu = Merb::Menus::Submenu.new(:cakes, @menu)
9
+ @submenu.use_display_style(:split)
10
+
11
+ @cheesecake = Merb::Menus::Item.new(:name => :cheese_cake, :submenu => @submenu)
12
+ @spongecake = Merb::Menus::Item.new(:name => :sponge, :submenu => @submenu, :anchor => "sPOnge cAkE")
13
+ @poundcake = Merb::Menus::Item.new(:name => :pound, :submenu => @submenu, :href => "http://bettercakesite")
14
+ end
15
+
16
+ it "has a unique key"
17
+ it "has a submenu" do
18
+ @cheesecake.submenu.should == @submenu
19
+ end
20
+
21
+ it "sets the anchor based on display rule in submenu" do
22
+ @cheesecake.anchor.should == "cheese cake"
23
+ end
24
+
25
+ it "overrides default display style if given in opts" do
26
+ @spongecake.anchor.should == "sPOnge cAkE"
27
+ end
28
+
29
+ it "generates a url" do
30
+ @cheesecake.href.should == "/cakes/cheese_cake"
31
+ @spongecake.href.should == "/cakes/sponge"
32
+ @poundcake.href.should == "http://bettercakesite"
33
+ end
34
+
35
+ end
36
+
37
+
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Merb::Menus::Menu do
4
+ before do
5
+ @menu = Merb::Menus::Menu.new(:foo)
6
+ @menu.submenu(:wutup){}
7
+ @menu.submenu(:dog){}
8
+ end
9
+
10
+ it "tracks submenus" do
11
+ @menu.submenus.should have(2).things
12
+ end
13
+
14
+ it "stores different display rules"
15
+ it "defines a url generator"
16
+ it "has a default url generation method"
17
+ end
18
+
19
+ describe Merb::Menus::Menu, "#submenu" do
20
+ before do
21
+ @menu = Merb::Menus::Menu.new(:hellothar)
22
+ end
23
+
24
+ it "creates a submenu without taking a block" do
25
+ lambda{@menu.submenu(:foo)}.should_not raise_error(ArgumentError)
26
+ @menu.submenus.should have(1).item
27
+ @menu.submenus.first.name.should == :foo
28
+ end
29
+ end
30
+
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Merb::Menus::DisplayStyle do
4
+ before do
5
+ @menu = Merb::Menus::Menu.new(:foo)
6
+ @split_rule = Merb::Menus::DisplayStyle.new(:split,@menu){|thing| thing.to_s.split("_").join(" ")}
7
+ @splitncap = Merb::Menus::DisplayStyle.new(:split,@menu){|thing| thing.to_s.split("_").join(" ")}
8
+ @dollarfy = Merb::Menus::DisplayStyle.new(:dollar,@menu){|thing| "$#{thing.to_s.gsub(/_/,',')}"}
9
+ end
10
+
11
+ it "has a unique key" do
12
+ @split_rule.key.should == :split
13
+ @splitncap.key.should == :split
14
+
15
+ @split_rule.rule.call("hello_thar").should == "hello thar"
16
+ @splitncap.rule.call("wut_the_deal").should == "wut the deal"
17
+ end
18
+
19
+ it "has a styling rule" do
20
+ Merb::Menus::DisplayStyle.add_rule(:feh).should be_nil
21
+ end
22
+ end
23
+
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Merb::Menus::Submenu do
4
+ before do
5
+ Merb::Menus::Menu.new :foo
6
+ @submenu = Merb::Menus::Submenu.new(:berries, Merb::Menus::Menu[:foo])
7
+ @submenu.item(:straw)
8
+ @submenu.item(:rasp)
9
+ @submenu.item(:black, :anchor => "HELLOTHAR", :url => "eek")
10
+ end
11
+
12
+ it "has a unique key" do
13
+ @submenu.name.should == :berries
14
+ end
15
+
16
+ it "has a collection of items" do
17
+ @submenu.items.should have(3).things
18
+ end
19
+
20
+ it 'sets item properly' do
21
+ item = @submenu.items.first
22
+ item.name.should == :straw
23
+ item.submenu.should == @submenu
24
+ item.anchor.should == "straw"
25
+ item.href.should == "/berries/straw"
26
+ end
27
+ end
28
+
@@ -0,0 +1,137 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ class Application < Merb::Controller
4
+ create_menu :main do
5
+ submenu :cakes, :href => "/cakes" do
6
+ item :cheese
7
+ item :chocolate
8
+ item :devils_food, :anchor => "Devil's Food"
9
+ end
10
+
11
+ submenu :beers, :href => "/beers" do
12
+ item :budweiser
13
+ item :rolling_rock
14
+ item :fosters, :anchor => "Foster's"
15
+ item :fat_tire
16
+ end
17
+
18
+ submenu :drinks, :href => "/drinks" do
19
+ item :soda
20
+ end
21
+
22
+ end
23
+ end
24
+
25
+ class Cakes < Application
26
+ use_menu :main
27
+
28
+ # this should be associated with item :cheese
29
+ def cheese
30
+ 'hello'
31
+ end
32
+
33
+ def chocolate
34
+ menu_item :beers, :budweiser
35
+
36
+ 'word up'
37
+ end
38
+
39
+ def not_devils_food
40
+ # associate this action with item :devils_food
41
+ menu_item :devils_food
42
+
43
+ ':)'
44
+ end
45
+ end
46
+
47
+ class Beers < Application
48
+ def fat_tire
49
+ 'yoink'
50
+ end
51
+ end
52
+
53
+ class Snack < Application
54
+ use_menu :main, :cakes
55
+
56
+ def cheese_cake
57
+ menu_item :cheese
58
+
59
+ [current_menu, current_submenu, current_item].join(" ")
60
+ end
61
+
62
+ def pistachios
63
+ [current_menu, current_submenu, current_item].join(" ")
64
+ end
65
+ end
66
+
67
+ class Drinks < Application
68
+ def soda
69
+ "#{current_menu}/#{current_submenu}/#{current_item}"
70
+ end
71
+ end
72
+
73
+ describe "menu generator", "Merb::Controller" do
74
+ before do
75
+ @menu = Merb::Menus[:main]
76
+ end
77
+
78
+ it "should create the menu" do
79
+ @menu.name.should == :main
80
+ end
81
+
82
+ it "should create all the submenus" do
83
+ @menu.submenus.should have(3).things
84
+ @menu.submenus.first.name.should == :cakes
85
+ end
86
+
87
+ it "should create the submenu items" do
88
+ @menu.submenus.first.items.should have(3).things
89
+ @menu.submenus.first.items.map{|e| e.name}.should == [:cheese, :chocolate, :devils_food]
90
+
91
+ @menu.submenus[1].items.should have(4).things
92
+ @menu.submenus[1].items.map{|e| e.name}.should == [:budweiser, :rolling_rock, :fosters, :fat_tire]
93
+ end
94
+
95
+ it "is accessible from child controllers"
96
+
97
+ it "sets the current menu properly" do
98
+ request('/cakes/cheese')
99
+ top = Merb::Menus[:main]
100
+ top.current_submenu.name.should == :cakes
101
+ top.current_submenu.current_item.name.should == :cheese
102
+ end
103
+
104
+ it "overrides actions default menu item" do
105
+ request('/cakes/chocolate')
106
+ top = Merb::Menus[:main]
107
+ top.current_submenu.name.should == :beers
108
+ top.current_submenu.current_item.name.should == :budweiser
109
+ end
110
+
111
+ it "finds the correct controller/action combo automagically" do
112
+ request '/beers/fat_tire'
113
+ Merb::Menus.current_menu.name.should == :main
114
+ Merb::Menus.current_menu.current_submenu.name.should == :beers
115
+ Merb::Menus.current_menu.current_submenu.current_item.name.should == :fat_tire
116
+ end
117
+
118
+ it "has helpers to access current menu data" do
119
+ req = request '/drinks/soda'
120
+
121
+ req.body.to_s.should == "main/drinks/soda"
122
+ end
123
+
124
+ it do
125
+ req = request '/snack/cheese_cake'
126
+ req.body.to_s.should == "main cakes cheese"
127
+ end
128
+
129
+ it "resets all current menus before each request" do
130
+ req = request '/snack/pistachios'
131
+ req.body.to_s.should_not == "main cakes cheese" #this would happen w/o the reset
132
+ req.body.to_s.should == "main cakes "
133
+ end
134
+
135
+
136
+ end
137
+
@@ -0,0 +1,16 @@
1
+ $:.push File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'merb-core'
6
+ require 'merb-core/test'
7
+ require 'merb-menus'
8
+
9
+ Merb::Router.prepare {default_routes}
10
+
11
+ Merb.start :environment => "test", :adapter => "runner"
12
+
13
+ Spec::Runner.configure {|config|
14
+ config.include(Merb::Test::RouteHelper)
15
+ }
16
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jonuts-merb-menus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - jonah honeyman
@@ -13,16 +13,22 @@ date: 2009-05-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: Merb plugin that provides dot dot dot uh menus!
16
+ description: Merb plugin that provides dot dot dot uh menus
17
17
  email: jonah@honeyman.org
18
18
  executables: []
19
19
 
20
20
  extensions: []
21
21
 
22
- extra_rdoc_files: []
23
-
22
+ extra_rdoc_files:
23
+ - README
24
+ - LICENSE
25
+ - TODO
24
26
  files:
25
- - lib/merb-menus.rb
27
+ - LICENSE
28
+ - README
29
+ - Rakefile
30
+ - TODO
31
+ - lib/merb-menus
26
32
  - lib/merb-menus/item.rb
27
33
  - lib/merb-menus/menu.rb
28
34
  - lib/merb-menus/merb_controller.rb
@@ -30,19 +36,22 @@ files:
30
36
  - lib/merb-menus/rule.rb
31
37
  - lib/merb-menus/submenu.rb
32
38
  - lib/merb-menus/version.rb
33
- - LICENSE
34
- - README
35
- - Rakefile
36
- - TODO
39
+ - lib/merb-menus.rb
40
+ - spec/merb-menus
41
+ - spec/merb-menus/item_spec.rb
42
+ - spec/merb-menus/menu_spec.rb
43
+ - spec/merb-menus/rule.rb
44
+ - spec/merb-menus/submenu_spec.rb
45
+ - spec/merb-menus_spec.rb
46
+ - spec/spec_helper.rb
37
47
  has_rdoc: true
38
48
  homepage: http://github.com/jonuts/merb-menus
49
+ licenses:
39
50
  post_install_message:
40
- rdoc_options:
41
- - --inline-source
42
- - --charset=UTF-8
51
+ rdoc_options: []
52
+
43
53
  require_paths:
44
54
  - lib
45
- - lib/merb-menus
46
55
  required_ruby_version: !ruby/object:Gem::Requirement
47
56
  requirements:
48
57
  - - ">="
@@ -58,9 +67,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
67
  requirements: []
59
68
 
60
69
  rubyforge_project:
61
- rubygems_version: 1.2.0
70
+ rubygems_version: 1.3.5
62
71
  signing_key:
63
72
  specification_version: 2
64
- summary: Merb plugin that provides dot dot dot uh menus!
73
+ summary: Merb plugin that provides dot dot dot uh menus
65
74
  test_files: []
66
75