menumatic 0.1.5 → 0.2.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/Gemfile CHANGED
@@ -7,4 +7,4 @@ gem 'rspec'
7
7
  gem 'autotest'
8
8
  gem 'autotest-growl'
9
9
  gem 'capybara', :git => 'https://github.com/jnicklas/capybara.git'
10
- gem 'rails', '3.0.5'
10
+ gem 'rails', '>= 3.0.4'
data/Gemfile.lock CHANGED
@@ -15,7 +15,8 @@ GIT
15
15
  PATH
16
16
  remote: .
17
17
  specs:
18
- menumatic (0.1.4)
18
+ menumatic (0.2.0)
19
+ rails (>= 3.0.4)
19
20
 
20
21
  GEM
21
22
  remote: http://rubygems.org/
@@ -120,5 +121,5 @@ DEPENDENCIES
120
121
  autotest-growl
121
122
  capybara!
122
123
  menumatic!
123
- rails (= 3.0.5)
124
+ rails (>= 3.0.4)
124
125
  rspec
data/README.md CHANGED
@@ -85,7 +85,7 @@ helper:
85
85
  <!-- snip -->
86
86
  <header>
87
87
  <nav>
88
- <%= navigation :navigation => 'application' %>
88
+ <%= render :navigation => 'application' %>
89
89
  </nav>
90
90
  </header>
91
91
 
data/lib/menumatic.rb CHANGED
@@ -13,9 +13,6 @@ module Menumatic
13
13
  end
14
14
  autoload :Base, 'menumatic/navigation'
15
15
  end
16
-
17
- #autoload :Mapper, 'menumatic/action_dispatch/routing/mapper'
18
- #autoload :SitemapController, '../app/controllers/menumatic
19
16
  end
20
17
 
21
18
  require 'rails'
@@ -23,3 +20,4 @@ require 'menumatic/rails/routes'
23
20
  require 'menumatic/rails/rendering'
24
21
  require 'menumatic/engine'
25
22
  require 'menumatic/hash'
23
+ require 'menumatic/exceptions'
@@ -0,0 +1,22 @@
1
+ module Menumatic
2
+ # A general Menumatic Exception
3
+ class Error < StandardError; end
4
+
5
+ # Raised when a navigation cannot be found, usually from load_navigation
6
+ class NavigationNotFound < Error
7
+
8
+
9
+ def initialize(navigation = nil)
10
+ @navigation = navigation
11
+ @default_message = "No navigation not specified in call to render()."
12
+ end
13
+
14
+ def to_s
15
+ if @navigation
16
+ "Navigation file not found: #{@navigation}"
17
+ else
18
+ @default_message
19
+ end
20
+ end
21
+ end
22
+ end
@@ -42,10 +42,14 @@ module Menumatic
42
42
  end
43
43
 
44
44
  def load_navigation(navigation_id)
45
- # Eager load the requested navgation (allows for use of normal if/unless statements)
46
- Menumatic::Navigation::Base.destroy_all
47
- load "app/navigation/#{navigation_id}_navigation.rb"
48
- Menumatic::Navigation::Base.get(navigation_id)
45
+ if File.exists?("app/navigation/#{navigation_id}_navigation.rb")
46
+ # Eager load the requested navgation (allows for use of normal if/unless statements)
47
+ Menumatic::Navigation::Base.destroy_all
48
+ load "app/navigation/#{navigation_id}_navigation.rb"
49
+ Menumatic::Navigation::Base.get(navigation_id)
50
+ else
51
+ raise Menumatic::NavigationNotFound, "app/navigation/#{navigation_id}_navigation.rb"
52
+ end
49
53
  end
50
54
  end
51
55
 
@@ -20,6 +20,9 @@ module Menumatic
20
20
  options[:wrapper_tag] ||= :ul
21
21
  options[:item_tag] ||= :li
22
22
 
23
+ # 1.0 roadmap - rendering should be divided into these two methods
24
+ render_as_link(request, options) || render_as_group(request, options)
25
+
23
26
  # render list
24
27
  list = self.items.map { |item| item.render(request, options) }.join("")
25
28
  html_options[:class] ||= ""
@@ -95,7 +98,8 @@ module Menumatic
95
98
 
96
99
  def depth_count(request, options = {})
97
100
  return options[:levels].count if options[:levels] && !options[:levels].empty?
98
- count_active_descendants(request)
101
+ depth = count_active_descendants(request)
102
+ (depth > 0) ? depth : 1
99
103
  end
100
104
 
101
105
  def paths_match?(request)
@@ -115,6 +119,19 @@ module Menumatic
115
119
  def levels_to_i(levels_in_words)
116
120
  levels_in_words.map{ |word| word.is_a?(Symbol) ? @@level_options.index(word.to_sym) + 1 : word } if levels_in_words
117
121
  end
122
+
123
+ private
124
+ def render_as_link(request, options = {})
125
+ if self.is_link?
126
+ #... todo
127
+ end
128
+ end
129
+
130
+ def render_as_group(request, options = {})
131
+ if self.is_group?
132
+ #... todo
133
+ end
134
+ end
118
135
  end
119
136
  end
120
137
  end
@@ -5,7 +5,7 @@ module ActionView
5
5
  # for :navigation, which will render the selected navigation from the
6
6
  # `app/navigation` directory.
7
7
  def render_with_navigation_option(options = {}, locals = {}, &block)
8
- if options.has_key? :navigation
8
+ if options.respond_to?(:has_key?) && options.has_key?(:navigation)
9
9
  navigation_id = options[:navigation]
10
10
  options.delete(:navigation)
11
11
  menumatic(navigation_id, options)
@@ -1,3 +1,3 @@
1
1
  module Menumatic
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.0"
3
3
  end
data/menumatic.gemspec CHANGED
@@ -9,11 +9,16 @@ Gem::Specification.new do |s|
9
9
  s.authors = ["Nicholas Bruning"]
10
10
  s.email = ["nicholas@bruning.com.au"]
11
11
  s.homepage = "http://github.com/thetron/menumatic"
12
- s.summary = %q{Menumatic is a Rails 3 gem which aims to simplify building complex website navigation}
13
- s.description = %q{Menumatic is a Rails 3 exclusive gem which aims to take all the fuss and clutter out of developing semantic, usable navigation menus.}
12
+ s.summary = %q{Menumatic is a Rails 3 gem which simplifies building complex website navigation}
13
+ s.description = %q{Menumatic is a Rails 3 gem which simplifies the development of complex website navigation, producing semantic, usable navigation menus.}
14
14
 
15
15
  s.rubyforge_project = "menumatic"
16
16
 
17
+ s.add_dependency 'rails', '>= 3.0.4'
18
+
19
+ s.add_development_dependency 'rspec'
20
+ s.add_development_dependency 'rails', '>= 3.0.4'
21
+
17
22
  s.files = `git ls-files`.split("\n")
18
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
24
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -1,20 +1,76 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Menumatic::Navigation::Item::Group do
3
+ describe Menumatic::Helpers::NavigationHelper do
4
4
  before :each do
5
- # build a reasonably complex navigation and ensure that it's
6
- # properly stored for retreival
7
- end
8
-
9
- it "should be reloadable from it's ID"
10
- it "should reload between renders"
11
- it "should have a depth of 1 if no items are active"
12
- it "should have a depth of 1 if a first-level child is active"
13
- it "should have a depth of 2 if a second-level child is active"
14
- it "should have a depth of 3 if a third-level child is active"
15
- it "should have each level labelled in sequence starting at 1"
16
- it "should be able to display all links"
17
- it "should be able to render a different list tag"
18
- it "should be able to render a different item tag"
19
- it "should render different "
5
+ @navigation = Menumatic::Navigation::Base::new(:application).root
6
+ @navigation.navigate_to "Home", "/home"
7
+ @navigation.navigate_to "Store", "/store" do |store|
8
+ store.navigate_to "Categories", "/store/categories" do |categories|
9
+ categories.navigate_to "Blue things", "/store/categories/blue"
10
+ categories.navigate_to "Red things", "/store/categories/red"
11
+ end
12
+ store.navigate_to "Specials", "/store/specials"
13
+ end
14
+ @navigation.navigate_to "Contact us", "/contact_us"
15
+ end
16
+
17
+ it "should have a depth of 1 if no items are active" do
18
+ @navigation.depth_count(@request).should == 1
19
+ end
20
+
21
+
22
+ it "should have a depth of 1 if a first-level child is active" do
23
+ @request.stub!(:fullpath).and_return("/contact_us")
24
+ @request.stub!(:url).and_return("http://test.menumatic.com/contact_us")
25
+ @navigation.depth_count(@request).should == 1
26
+ end
27
+
28
+ it "should have a depth of 2 if a second-level child is active" do
29
+ @request.stub!(:fullpath).and_return("/store/specials")
30
+ @request.stub!(:url).and_return("http://test.menumatic.com/store/specials")
31
+ @navigation.depth_count(@request).should == 2
32
+ end
33
+
34
+ it "should have a depth of 3 if a third-level child is active" do
35
+ @request.stub!(:fullpath).and_return("/store/categories/red")
36
+ @request.stub!(:url).and_return("http://test.menumatic.com/store/categories/red")
37
+ @navigation.depth_count(@request).should == 3
38
+ end
39
+
40
+ it "should have each level labelled in sequence starting at 1" do
41
+ @request.stub!(:fullpath).and_return("/store/categories/red")
42
+ @request.stub!(:url).and_return("http://test.menumatic.com/store/categories/red")
43
+ Capybara::string(@navigation.render(@request)).should have_selector("ul.level_1 > li > ul.level_2 > li ul.level_3")
44
+ end
45
+
46
+ it "should be able to display all links" do
47
+ html = Capybara::string(@navigation.render(@request, :show => :all))
48
+ html.should have_selector('a[href="/home"]')
49
+ html.should have_selector('a[href="/store"]')
50
+ html.should have_selector('a[href="/store/categories"]')
51
+ html.should have_selector('a[href="/store/categories/blue"]')
52
+ html.should have_selector('a[href="/store/categories/red"]')
53
+ html.should have_selector('a[href="/store/specials"]')
54
+ html.should have_selector('a[href="/contact_us"]')
55
+ end
56
+
57
+ it "should be able to render a different list tag" do
58
+ html = Capybara::string(@navigation.render(@request, :wrapper_tag => :nav))
59
+ html.should have_selector('nav.level_1')
60
+ end
61
+
62
+ it "should be able to render a different item tag" do
63
+ html = Capybara::string(@navigation.render(@request, :item_tag => :span))
64
+ html.should have_selector('ul.level_1 > span > a[href="/home"]')
65
+ end
66
+
67
+ it "should accept a custom HTML class" do
68
+ html = Capybara::string(@navigation.render(@request, :class => "additional_test_class"))
69
+ html.should have_selector('ul.additional_test_class')
70
+ end
71
+
72
+ it "should accept a custom HTML ID" do
73
+ html = Capybara::string(@navigation.render(@request, :id => "navigation_test_id"))
74
+ html.should have_selector('ul#navigation_test_id')
75
+ end
20
76
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: menumatic
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 5
10
- version: 0.1.5
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nicholas Bruning
@@ -15,11 +15,56 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-13 00:00:00 +11:00
18
+ date: 2011-03-15 00:00:00 +11:00
19
19
  default_executable:
20
- dependencies: []
21
-
22
- description: Menumatic is a Rails 3 exclusive gem which aims to take all the fuss and clutter out of developing semantic, usable navigation menus.
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 15
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 4
34
+ version: 3.0.4
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rails
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 15
60
+ segments:
61
+ - 3
62
+ - 0
63
+ - 4
64
+ version: 3.0.4
65
+ type: :development
66
+ version_requirements: *id003
67
+ description: Menumatic is a Rails 3 gem which simplifies the development of complex website navigation, producing semantic, usable navigation menus.
23
68
  email:
24
69
  - nicholas@bruning.com.au
25
70
  executables: []
@@ -49,6 +94,7 @@ files:
49
94
  - lib/menumatic.rb
50
95
  - lib/menumatic/.DS_Store
51
96
  - lib/menumatic/engine.rb
97
+ - lib/menumatic/exceptions.rb
52
98
  - lib/menumatic/hash.rb
53
99
  - lib/menumatic/helpers/navigation_helper.rb
54
100
  - lib/menumatic/navigation.rb
@@ -102,7 +148,7 @@ rubyforge_project: menumatic
102
148
  rubygems_version: 1.3.7
103
149
  signing_key:
104
150
  specification_version: 3
105
- summary: Menumatic is a Rails 3 gem which aims to simplify building complex website navigation
151
+ summary: Menumatic is a Rails 3 gem which simplifies building complex website navigation
106
152
  test_files:
107
153
  - spec/factories.rb
108
154
  - spec/group_spec.rb