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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +144 -0
- data/Rakefile +1 -0
- data/lib/navigatrix.rb +9 -0
- data/lib/navigatrix/configuration.rb +51 -0
- data/lib/navigatrix/integration/rails.rb +9 -0
- data/lib/navigatrix/integration/sinatra.rb +3 -0
- data/lib/navigatrix/item.rb +109 -0
- data/lib/navigatrix/item_collection.rb +10 -0
- data/lib/navigatrix/renderer.rb +41 -0
- data/lib/navigatrix/rendering/context.rb +26 -0
- data/lib/navigatrix/rendering/strategies/bootstrap/navbar.rb +38 -0
- data/lib/navigatrix/rendering/strategies/bootstrap/tabs.rb +12 -0
- data/lib/navigatrix/rendering/strategies/list.rb +100 -0
- data/lib/navigatrix/version.rb +3 -0
- data/lib/navigatrix/view_helpers.rb +7 -0
- data/navigatrix.gemspec +29 -0
- data/spec/item_spec.rb +247 -0
- data/spec/renderer_spec.rb +77 -0
- data/spec/strategies/bootstrap/navbar_spec.rb +44 -0
- data/spec/strategies/bootstrap/tabs_spec.rb +19 -0
- data/spec/strategies/list_spec.rb +11 -0
- data/spec/support/list_rendering_strategy.rb +111 -0
- metadata +174 -0
@@ -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
|