menu_builder 0.3.3 → 0.4.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.
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