menu_builder 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.4.0
@@ -2,16 +2,21 @@ module MenuBuilder
2
2
  module Controller
3
3
  extend ActiveSupport::Concern
4
4
 
5
- def menu_item(name, options = {})
6
- instance_variable_set('@menu_item', name)
5
+ def menu_items(*items)
6
+ instance_variable_set('@menu_items', items)
7
7
  end
8
+ alias_method :menu_item, :menu_items
8
9
 
9
10
  module ClassMethods
10
- def menu_item(name, options = {})
11
+ def menu_items(*items)
12
+ options = items.extract_options!
13
+
11
14
  before_filter(options) do |controller|
12
- controller.instance_variable_set('@menu_item', name)
15
+ controller.instance_variable_set('@menu_items', items)
13
16
  end
14
17
  end
18
+ alias_method :menu_item, :menu_items
19
+
15
20
  end
16
21
 
17
22
  end
@@ -1,21 +1,19 @@
1
1
  module MenuBuilder
2
2
  module ViewHelpers
3
3
  class Menu
4
-
5
4
  def initialize(context)
6
5
  @context = context
7
- @menu_item = @context.instance_variable_get('@menu_item')
6
+ @menu_items = @context.instance_variable_get('@menu_items')
8
7
  end
9
8
 
10
- def current_item?(item)
11
- @menu_item.to_s == item.to_s
9
+ def included_in_current_items?(item)
10
+ @menu_items.present? && @menu_items.include?(item.to_sym)
12
11
  end
13
12
 
14
13
  def method_missing(item, *args, &block)
15
- css_class = "current" if current_item?(item)
14
+ css_class = "current" if included_in_current_items? item
16
15
  @context.content_tag :li, @context.link_to(*args, &block), :class=>css_class
17
16
  end
18
-
19
17
  end
20
18
 
21
19
  def menu(options={}, &block)
data/menu_builder.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{menu_builder}
8
- s.version = "0.3.3"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Daniel Lopes"]
12
- s.date = %q{2010-07-30}
12
+ s.date = %q{2010-10-10}
13
13
  s.description = %q{ helper and controller macros to define current menu item and also create the menu in view. }
14
14
  s.email = %q{danielvlopes@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -7,26 +7,35 @@ class ActiveSupport::TestCase
7
7
  end
8
8
 
9
9
  class BooksController < ApplicationController
10
- menu_item :home
10
+ menu_item :books
11
+ def index ; end
12
+ end
11
13
 
12
- def index
13
- end
14
-
15
- def show
16
- menu_item :show
14
+ class SettingsController < ApplicationController
15
+ menu_items :settings, :home
16
+
17
+ def index ; end
18
+
19
+ def notifications
20
+ menu_item :notification
17
21
  end
18
22
  end
19
23
 
20
- class MenuBuilderTest < ActionController::TestCase
21
- tests BooksController
24
+ class BooksControllerTest < ActionController::TestCase
25
+ test "assigns the current tab" do
26
+ get :index
27
+ assert_equal([:books], assigns(:menu_items))
28
+ end
29
+ end
22
30
 
23
- test "should assigns the current tab in class level" do
31
+ class SettingsControllerTest < ActionController::TestCase
32
+ test "ability to assign more than one current tab" do
24
33
  get :index
25
- assert_equal(:home, assigns(:menu_item))
34
+ assert_equal([:settings, :home], assigns(:menu_items))
26
35
  end
27
36
 
28
- test "should assigns the current tab in action level" do
29
- get :show
30
- assert_equal(:show, assigns(:menu_item))
37
+ test "that instance level menu_items override class level" do
38
+ get :notifications
39
+ assert_equal([:notification], assigns(:menu_items))
31
40
  end
32
41
  end
data/test/helper_test.rb CHANGED
@@ -3,6 +3,8 @@ require "test_helper"
3
3
  class HelperTest < ActionView::TestCase
4
4
  tests MenuBuilder::ViewHelpers
5
5
 
6
+ attr_accessor :controller, :request
7
+
6
8
  test "menu yields an instance of Menu" do
7
9
  concat(menu do |m|
8
10
  assert m.instance_of?(MenuBuilder::ViewHelpers::Menu)
@@ -13,31 +15,58 @@ class HelperTest < ActionView::TestCase
13
15
  concat(menu(:id => "menu") { |m| })
14
16
  assert_select "ul#menu"
15
17
  end
16
-
17
- test "menu should accept html options like classes and id" do
18
+
19
+ test "menu accept html options like classes and id" do
18
20
  concat(menu :id=>"menu", :class=>"tabs" do |m| end)
19
21
  assert_select "ul#menu.tabs"
20
22
  end
21
-
22
- test "menu should create a line item" do
23
+
24
+ test "menu create a line item" do
23
25
  concat(menu { |m| concat m.home "Home", "#" })
24
26
  assert_select "li", 1
25
27
  end
26
-
27
- test "should create a link inside line item" do
28
+
29
+ test "create a link inside line item" do
28
30
  concat(menu { |m| concat m.home "Home", "/" })
29
31
  expected = %(<ul><li><a href="/">Home</a></li></ul>)
30
32
  assert_dom_equal expected, output_buffer
31
33
  end
32
-
33
- test "should set the class to the current item li" do
34
- @menu_item = :home
34
+
35
+ test "set the class to the current item li" do
36
+ @menu_items = [:home]
35
37
  concat(menu do |m|
36
38
  concat m.home "Home", "/"
37
39
  concat m.contact "Store", "/store"
38
40
  end)
39
-
41
+
40
42
  assert_select "li.current", 1
41
43
  end
42
44
 
45
+ test "accept more than one menu item" do
46
+ @menu_items = [:settings, :notifications]
47
+
48
+ concat(menu do |m|
49
+ concat m.home "Home", "/"
50
+ concat m.notifications "Notifications", "/notifications"
51
+ concat m.settings "Settings", "/settings"
52
+ end)
53
+
54
+ assert_select "li.current", 2
55
+ end
56
+
57
+ test "accept more than one menu" do
58
+ @menu_items = [:settings, :notifications]
59
+
60
+ concat(menu do |m|
61
+ concat m.home "Home", "/"
62
+ concat m.notifications "Notifications", "/notifications"
63
+ end)
64
+
65
+ concat(menu do |m|
66
+ concat m.home "Contact", "/contact"
67
+ concat m.notifications "Settings", "/settings"
68
+ end)
69
+
70
+ assert_select "li.current", 2
71
+ end
43
72
  end
data/test/test_helper.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
 
4
- gem "actionpack", "3.0.0.rc"
5
- gem "activemodel", "3.0.0.rc"
4
+ gem "actionpack", "3.0.0"
5
+ gem "activemodel", "3.0.0"
6
6
 
7
7
  require 'action_controller'
8
8
  require 'action_view'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: menu_builder
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 3
10
- version: 0.3.3
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Lopes
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-30 00:00:00 -03:00
18
+ date: 2010-10-10 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies: []
21
21