navigatrix 0.0.1

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.
@@ -0,0 +1,77 @@
1
+ require File.expand_path("../../lib/navigatrix/renderer", __FILE__)
2
+
3
+ module Navigatrix
4
+ describe Renderer do
5
+ describe "#render" do
6
+ class StrategyDouble
7
+ attr_reader :items, :options, :klass
8
+
9
+ def initialize(items, options, klass = nil)
10
+ @items = items
11
+ @options = options
12
+ @klass = klass
13
+ end
14
+
15
+ def render
16
+ @rendered = true
17
+ self
18
+ end
19
+
20
+ def rendered?
21
+ @rendered
22
+ end
23
+
24
+ def rendered_strategy?(strategy_klass)
25
+ puts klass
26
+ puts strategy_klass
27
+ rendered? and klass == strategy_klass
28
+ end
29
+ end
30
+
31
+ let(:rendering_context) { double }
32
+ let(:config) { double }
33
+ let(:item_collection) { double(:items => double) }
34
+
35
+ before do
36
+ wrapped_context = double
37
+ Rendering::Context.stub(:new).with(rendering_context).and_return(wrapped_context)
38
+ ItemCollection.stub(:new).with(config, wrapped_context).and_return(item_collection)
39
+ end
40
+
41
+ context "a specified strategy" do
42
+ subject { render(:strategy => StrategyDouble) }
43
+
44
+ it "renders via the strategy" do
45
+ subject.should be_rendered
46
+ end
47
+
48
+ it "passes the items to be rendered" do
49
+ subject.items.should == item_collection.items
50
+ end
51
+
52
+ it "passes the rendering options" do
53
+ subject.options.should == {:render_option => "an option"}
54
+ end
55
+ end
56
+
57
+ it "finds strategies by name" do
58
+ stub_const("Navigatrix::Renderer::REGISTERED_STRATEGIES", {:bootstrap => StrategyDouble})
59
+ render({:strategy => :bootstrap}).should be_rendered
60
+ end
61
+
62
+ it "defaults to the unordered_list strategy" do
63
+ stub_const("Navigatrix::Renderer::REGISTERED_STRATEGIES", {:unordered_list => StrategyDouble})
64
+ render({:strategy => nil}).should be_rendered
65
+ end
66
+
67
+ def render(options)
68
+ defaults = {
69
+ :render_context => rendering_context,
70
+ :render_option => "an option"
71
+ }
72
+
73
+ Renderer.new(config, defaults.merge(options)).render
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,44 @@
1
+ require "capybara"
2
+ require File.expand_path("../../../support/list_rendering_strategy", __FILE__)
3
+ require File.expand_path("../../../../lib/navigatrix/rendering/strategies/bootstrap/navbar", __FILE__)
4
+
5
+ module Navigatrix::Rendering::Strategies
6
+ module Bootstrap
7
+ describe Navbar do
8
+ include ListRenderingStrategy
9
+
10
+ it_should_behave_like "a list rendering strategy"
11
+
12
+ describe "#render" do
13
+ it "gives the <ul> a class of 'nav'" do
14
+ rendered.should have_selector("ul.nav")
15
+ end
16
+ end
17
+
18
+ describe "a list item" do
19
+ it "does not have a class of 'dropdown'" do
20
+ rendered_item["class"].should_not include("dropdown")
21
+ end
22
+
23
+ context "with children" do
24
+ before do
25
+ item.stub(:has_children? => true, :children => [])
26
+ end
27
+
28
+ it "gives the item a class of 'dropdown'" do
29
+ rendered_item["class"].should include("dropdown")
30
+ end
31
+
32
+ it "includes an icon" do
33
+ rendered_item.should have_selector("i.icon-chevron-down.icon-white")
34
+ end
35
+
36
+ it "allows an icon specification" do
37
+ rendered_item(:dropdown_icon => "<i class='alt-icon'>ABC</i>".html_safe)
38
+ .should have_selector("i.alt-icon")
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,19 @@
1
+ require "capybara"
2
+ require File.expand_path("../../../support/list_rendering_strategy", __FILE__)
3
+ require File.expand_path("../../../../lib/navigatrix/rendering/strategies/bootstrap/tabs", __FILE__)
4
+
5
+ module Navigatrix::Rendering::Strategies
6
+ module Bootstrap
7
+ describe Tabs do
8
+ include ListRenderingStrategy
9
+
10
+ it_should_behave_like "a list rendering strategy"
11
+
12
+ describe "#render" do
13
+ it "gives the <ul> a class of 'nav' and 'nav-tabs'" do
14
+ rendered.should have_selector("ul.nav.nav-tabs")
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require "capybara"
2
+ require File.expand_path("../../support/list_rendering_strategy", __FILE__)
3
+ require File.expand_path("../../../lib/navigatrix/rendering/strategies/list", __FILE__)
4
+
5
+ module Navigatrix::Rendering::Strategies
6
+ describe List do
7
+ include ListRenderingStrategy
8
+
9
+ it_should_behave_like "a list rendering strategy"
10
+ end
11
+ end
@@ -0,0 +1,111 @@
1
+ module ListRenderingStrategy
2
+ def self.included(base)
3
+ base.let(:item) { build_item }
4
+ end
5
+
6
+ def rendered_item(options = {})
7
+ rendered(options).find("wrapper > ul > li")
8
+ end
9
+
10
+ def rendered(options = {})
11
+ Capybara.string("<wrapper>" + described_class.new([item], options).render + "</wrapper>")
12
+ end
13
+
14
+ def build_item(options = {})
15
+ defaults = {
16
+ :name => "Item 1",
17
+ :render? => true,
18
+ :linked? => false,
19
+ :active? => false,
20
+ :html_attributes => {},
21
+ :has_children? => false
22
+ }
23
+
24
+ double(defaults.merge(options))
25
+ end
26
+
27
+ shared_examples_for("a list rendering strategy") do
28
+ it "wraps the list in a <ul>" do
29
+ rendered.should have_selector("ul")
30
+ end
31
+
32
+ it "accepts <ul> attributes" do
33
+ list_attributes = {"id" => "my-list"}
34
+ rendered(:html_attributes => list_attributes).should have_selector("ul#my-list")
35
+ end
36
+
37
+ context "the item should not be rendered" do
38
+ it "does not render the item" do
39
+ item.stub(:render? => false)
40
+ expect { rendered_item }.to raise_error(Capybara::ElementNotFound)
41
+ end
42
+ end
43
+
44
+ describe "a list item" do
45
+ it "returns an <li>" do
46
+ rendered.find("li").should be_present
47
+ end
48
+
49
+ it "contains the item name" do
50
+ rendered_item.should have_content("Item 1")
51
+ end
52
+
53
+ it "incorporates HTML attributes" do
54
+ item.stub(:html_attributes => {:id => "item-1"})
55
+ rendered.find("li")["id"].should include("item-1")
56
+ end
57
+
58
+ context "the item is linked" do
59
+ before do
60
+ item.stub(:linked? => true, :path => "/path")
61
+ end
62
+
63
+ it "contains an <a> and the item name" do
64
+ rendered_item.find("a").should have_content("Item 1")
65
+ end
66
+
67
+ it "links to the correct path" do
68
+ rendered_item.find("a")["href"].should == "/path"
69
+ end
70
+ end
71
+
72
+ context "the item is active" do
73
+ before do
74
+ item.stub(:active? => true)
75
+ end
76
+
77
+ it "adds an 'active' class" do
78
+ rendered_item["class"].should include("active")
79
+ end
80
+
81
+ it "allows the active class to be specified" do
82
+ rendered_item(:active_class => "alt-active")["class"].should include("alt-active")
83
+ end
84
+
85
+ it "does not overwrite item attributes" do
86
+ item.stub(:html_attributes => {:class => "preserved-class"})
87
+ classes = rendered_item["class"].split(" ")
88
+ classes.should include("active")
89
+ classes.should include("preserved-class")
90
+ end
91
+ end
92
+
93
+ context "an item with children" do
94
+ before do
95
+ item.stub(
96
+ :has_children? => true,
97
+ :children => [build_item(:name => "Nested Item 1")]
98
+ )
99
+ end
100
+
101
+ it "creates a nested <ul>" do
102
+ rendered_item.should have_selector("ul")
103
+ end
104
+
105
+ it "creates list items within the nested list" do
106
+ rendered_item.find("li").should have_content("Nested Item 1")
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: navigatrix
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ben Eddy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i18n
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: actionpack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: capybara
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Navigation Generation
112
+ email:
113
+ - bae@foraker.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - .travis.yml
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - lib/navigatrix.rb
125
+ - lib/navigatrix/configuration.rb
126
+ - lib/navigatrix/integration/rails.rb
127
+ - lib/navigatrix/integration/sinatra.rb
128
+ - lib/navigatrix/item.rb
129
+ - lib/navigatrix/item_collection.rb
130
+ - lib/navigatrix/renderer.rb
131
+ - lib/navigatrix/rendering/context.rb
132
+ - lib/navigatrix/rendering/strategies/bootstrap/navbar.rb
133
+ - lib/navigatrix/rendering/strategies/bootstrap/tabs.rb
134
+ - lib/navigatrix/rendering/strategies/list.rb
135
+ - lib/navigatrix/version.rb
136
+ - lib/navigatrix/view_helpers.rb
137
+ - navigatrix.gemspec
138
+ - spec/item_spec.rb
139
+ - spec/renderer_spec.rb
140
+ - spec/strategies/bootstrap/navbar_spec.rb
141
+ - spec/strategies/bootstrap/tabs_spec.rb
142
+ - spec/strategies/list_spec.rb
143
+ - spec/support/list_rendering_strategy.rb
144
+ homepage: https://github.com/foraker/navigatrix
145
+ licenses:
146
+ - MIT
147
+ metadata: {}
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubyforge_project:
164
+ rubygems_version: 2.2.1
165
+ signing_key:
166
+ specification_version: 4
167
+ summary: Navigation generation for Rails and Sinatra
168
+ test_files:
169
+ - spec/item_spec.rb
170
+ - spec/renderer_spec.rb
171
+ - spec/strategies/bootstrap/navbar_spec.rb
172
+ - spec/strategies/bootstrap/tabs_spec.rb
173
+ - spec/strategies/list_spec.rb
174
+ - spec/support/list_rendering_strategy.rb