navigatrix 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,120 @@
1
+ require "spec_helper"
2
+ require "navigatrix/rendering/strategies/html_attributes"
3
+
4
+ module Navigatrix
5
+ describe ItemBuilder do
6
+ class SimpleItem
7
+ def name_or_link
8
+ "name_or_link"
9
+ end
10
+
11
+ def linked_content
12
+ "linked_content"
13
+ end
14
+
15
+ def unlinked_content
16
+ "unlinked_content"
17
+ end
18
+
19
+ def render_children
20
+ "children"
21
+ end
22
+
23
+ def name
24
+ "name"
25
+ end
26
+
27
+ def path
28
+ "/path"
29
+ end
30
+
31
+ def html_attributes
32
+ Rendering::Strategies::HTMLAttributes.new({class: "class"})
33
+ end
34
+
35
+ def children_options
36
+ {class: "class"}
37
+ end
38
+
39
+ def render?
40
+ true
41
+ end
42
+ end
43
+
44
+ describe ItemBuilder do
45
+ before { described_class.stub(klass: SimpleItem) }
46
+
47
+ describe "#wrapper" do
48
+ it "wraps rendered items" do
49
+ renderer = described_class.build do |builder|
50
+ builder.wrapper do |content, children, html_attributes|
51
+ "<li class='#{html_attributes[:class]}'>#{content}<div>#{children}</div></li>"
52
+ end
53
+ end
54
+ rendered = renderer.new.render
55
+
56
+ rendered.should == "<li class='class'>name_or_link<div>children</div></li>"
57
+ end
58
+ end
59
+
60
+ describe "#linked" do
61
+ it "overrides the linked content" do
62
+ renderer = described_class.build do |builder|
63
+ builder.linked do |name, path|
64
+ "<span>#{name}</span>"
65
+ end
66
+ end
67
+
68
+ renderer.new.linked_content.should == "<span>name</span>"
69
+ end
70
+ end
71
+
72
+ describe "#unlinked" do
73
+ it "overrides the unlinked content" do
74
+ renderer = described_class.build do |builder|
75
+ builder.linked do |name, path|
76
+ "<span>#{name}</span>"
77
+ end
78
+ end
79
+
80
+ renderer.new.linked_content.should == "<span>name</span>"
81
+ end
82
+ end
83
+
84
+ describe "#children_options" do
85
+ it "merges options" do
86
+ renderer = described_class.build do |builder|
87
+ builder.children_options do |defaults|
88
+ defaults.merge({
89
+ item: {
90
+ renderer: "child"
91
+ }
92
+ })
93
+ end
94
+ end
95
+
96
+ renderer.new.children_options.should == {
97
+ class: "class",
98
+ item: {
99
+ renderer: "child"
100
+ }
101
+ }
102
+ end
103
+ end
104
+
105
+ describe "#html_attributes" do
106
+ it "merges the options" do
107
+ renderer = described_class.build do |builder|
108
+ builder.html_attributes do |defaults|
109
+ {class: "hide"}
110
+ end
111
+ end
112
+
113
+ renderer.new.html_attributes.should == {
114
+ "class" => "class hide"
115
+ }
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,6 +1,4 @@
1
- require File.expand_path("../../lib/navigatrix/item", __FILE__)
2
- require File.expand_path("../../lib/navigatrix/item_collection", __FILE__)
3
- require File.expand_path("../../lib/navigatrix/configuration", __FILE__)
1
+ require "spec_helper"
4
2
 
5
3
  module Navigatrix
6
4
  describe Item do
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ module Navigatrix
4
+ describe ListBuilder do
5
+ class SimpleList
6
+ def render
7
+ end
8
+
9
+ def render_items
10
+ "children"
11
+ end
12
+
13
+ def html_attributes
14
+ "class='class'"
15
+ end
16
+ end
17
+
18
+ before { ListBuilder.stub(klass: SimpleList) }
19
+
20
+ describe "#wrapper" do
21
+ it "wraps rendered items" do
22
+ renderer = ListBuilder.build do |builder|
23
+ builder.wrapper do |content, html_attributes|
24
+ "<li #{html_attributes}>#{content}</li>"
25
+ end
26
+ end
27
+
28
+ renderer.new.render.should == "<li class='class'>children</li>"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path("../../lib/navigatrix/renderer", __FILE__)
1
+ require "spec_helper"
2
2
 
3
3
  module Navigatrix
4
4
  describe Renderer do
@@ -22,8 +22,6 @@ module Navigatrix
22
22
  end
23
23
 
24
24
  def rendered_strategy?(strategy_klass)
25
- puts klass
26
- puts strategy_klass
27
25
  rendered? and klass == strategy_klass
28
26
  end
29
27
  end
@@ -33,13 +31,22 @@ module Navigatrix
33
31
  let(:item_collection) { double(:items => double) }
34
32
 
35
33
  before do
34
+ Rendering::StrategyFactory.stub(:find_list_strategy)
35
+ .with("list")
36
+ .and_return(StrategyDouble)
37
+
36
38
  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
+ Rendering::Context.stub(:new)
40
+ .with(rendering_context)
41
+ .and_return(wrapped_context)
42
+
43
+ ItemCollection.stub(:new)
44
+ .with(config, wrapped_context)
45
+ .and_return(item_collection)
39
46
  end
40
47
 
41
- context "a specified strategy" do
42
- subject { render(:strategy => StrategyDouble) }
48
+ describe "#render" do
49
+ subject { render }
43
50
 
44
51
  it "renders via the strategy" do
45
52
  subject.should be_rendered
@@ -50,24 +57,20 @@ module Navigatrix
50
57
  end
51
58
 
52
59
  it "passes the rendering options" do
53
- subject.options.should == {:render_option => "an option"}
60
+ subject.options.should == {
61
+ :renderer =>"list",
62
+ :render_option => "an option"
63
+ }
54
64
  end
55
65
  end
56
66
 
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)
67
+ def render(options = {})
68
68
  defaults = {
69
69
  :render_context => rendering_context,
70
- :render_option => "an option"
70
+ :list => {
71
+ :renderer => "list",
72
+ :render_option => "an option"
73
+ }
71
74
  }
72
75
 
73
76
  Renderer.new(config, defaults.merge(options)).render
@@ -1,6 +1,4 @@
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__)
1
+ require "spec_helper"
4
2
 
5
3
  module Navigatrix::Rendering::Strategies
6
4
  module Bootstrap
@@ -17,7 +15,7 @@ module Navigatrix::Rendering::Strategies
17
15
 
18
16
  describe "a list item" do
19
17
  it "does not have a class of 'dropdown'" do
20
- rendered_item["class"].should_not include("dropdown")
18
+ rendered_item["class"].should be_nil
21
19
  end
22
20
 
23
21
  context "with children" do
@@ -1,6 +1,4 @@
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__)
1
+ require "spec_helper"
4
2
 
5
3
  module Navigatrix::Rendering::Strategies
6
4
  module Bootstrap
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ module Navigatrix
4
+ module Rendering
5
+ module Strategies
6
+ describe List do
7
+ include ListRenderingStrategy
8
+
9
+ it_should_behave_like "a list rendering strategy"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,58 @@
1
+ module Navigatrix
2
+ module Rendering
3
+ describe StrategyFactory do
4
+ describe ".find_list_strategy" do
5
+ let(:bootstrap_strategy) { Class.new }
6
+ let(:default_strategy) { double }
7
+ let(:strategies) do
8
+ {
9
+ :unordered_list => default_strategy,
10
+ :bootstrap => bootstrap_strategy
11
+ }
12
+ end
13
+
14
+ it "returns a strategy class" do
15
+ strategy = described_class.find_list_strategy(bootstrap_strategy, strategies)
16
+ strategy.should == bootstrap_strategy
17
+ end
18
+
19
+ it "finds strategies by name" do
20
+ strategy = described_class.find_list_strategy(:bootstrap, strategies)
21
+ strategy.should == bootstrap_strategy
22
+ end
23
+
24
+ it "defaults to the unordered_list strategy" do
25
+ strategy = described_class.find_list_strategy(nil, strategies)
26
+ strategy.should == default_strategy
27
+ end
28
+ end
29
+
30
+ describe ".find_item_strategy" do
31
+ let(:bootstrap_strategy) { Class.new }
32
+ let(:default_strategy) { double }
33
+ let(:strategies) do
34
+ {
35
+ :item => default_strategy,
36
+ :bootstrap => bootstrap_strategy
37
+ }
38
+ end
39
+
40
+ it "returns a strategy class" do
41
+ strategy = described_class.find_item_strategy(bootstrap_strategy, strategies)
42
+ strategy.should == bootstrap_strategy
43
+ end
44
+
45
+ it "finds strategies by name" do
46
+ strategy = described_class.find_item_strategy(:bootstrap, strategies)
47
+ strategy.should == bootstrap_strategy
48
+ end
49
+
50
+ it "defaults to the unordered_list strategy" do
51
+ strategy = described_class.find_item_strategy(nil, strategies)
52
+ strategy.should == default_strategy
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
@@ -0,0 +1,5 @@
1
+ require "navigatrix"
2
+ require "capybara"
3
+
4
+ Dir["./spec/support/**/*.rb"].each { |f| require f }
5
+
@@ -3,12 +3,12 @@ module ListRenderingStrategy
3
3
  base.let(:item) { build_item }
4
4
  end
5
5
 
6
- def rendered_item(options = {})
7
- rendered(options).find("wrapper > ul > li")
6
+ def rendered_item(*args)
7
+ rendered(*args).find("wrapper > ul > li")
8
8
  end
9
9
 
10
- def rendered(options = {})
11
- Capybara.string("<wrapper>" + described_class.new([item], options).render + "</wrapper>")
10
+ def rendered(list_options = {}, item_options = {})
11
+ Capybara.string("<wrapper>" + described_class.new([item], list_options, item_options).render + "</wrapper>")
12
12
  end
13
13
 
14
14
  def build_item(options = {})
@@ -17,6 +17,8 @@ module ListRenderingStrategy
17
17
  :render? => true,
18
18
  :linked? => false,
19
19
  :active? => false,
20
+ :active_class => nil,
21
+ :inactive_class => nil,
20
22
  :html_attributes => {},
21
23
  :has_children? => false
22
24
  }
@@ -55,6 +57,10 @@ module ListRenderingStrategy
55
57
  rendered.find("li")["id"].should include("item-1")
56
58
  end
57
59
 
60
+ it "it does include blank HTML attributes" do
61
+ rendered.find("li")["class"].should be_nil
62
+ end
63
+
58
64
  context "the item is linked" do
59
65
  before do
60
66
  item.stub(:linked? => true, :path => "/path")
@@ -79,7 +85,7 @@ module ListRenderingStrategy
79
85
  end
80
86
 
81
87
  it "allows the active class to be specified" do
82
- rendered_item(:active_class => "alt-active")["class"].should include("alt-active")
88
+ rendered_item({}, {:active_class => "alt-active"})["class"].should include("alt-active")
83
89
  end
84
90
 
85
91
  it "does not overwrite item attributes" do
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: navigatrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eddy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-22 00:00:00.000000000 Z
11
+ date: 2014-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: actionpack
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -70,14 +70,14 @@ dependencies:
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ! '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ! '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
@@ -98,14 +98,14 @@ dependencies:
98
98
  name: capybara
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ! '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ! '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: Navigation Generation
@@ -122,6 +122,7 @@ files:
122
122
  - README.md
123
123
  - Rakefile
124
124
  - lib/navigatrix.rb
125
+ - lib/navigatrix/builder.rb
125
126
  - lib/navigatrix/configuration.rb
126
127
  - lib/navigatrix/integration/rails.rb
127
128
  - lib/navigatrix/integration/sinatra.rb
@@ -131,15 +132,24 @@ files:
131
132
  - lib/navigatrix/rendering/context.rb
132
133
  - lib/navigatrix/rendering/strategies/bootstrap/navbar.rb
133
134
  - lib/navigatrix/rendering/strategies/bootstrap/tabs.rb
135
+ - lib/navigatrix/rendering/strategies/content_helpers.rb
136
+ - lib/navigatrix/rendering/strategies/html_attributes.rb
137
+ - lib/navigatrix/rendering/strategies/item.rb
134
138
  - lib/navigatrix/rendering/strategies/list.rb
139
+ - lib/navigatrix/rendering/strategy_factory.rb
135
140
  - lib/navigatrix/version.rb
136
141
  - lib/navigatrix/view_helpers.rb
137
142
  - navigatrix.gemspec
143
+ - spec/integration/documentation_spec.rb
144
+ - spec/item_builder_spec.rb
138
145
  - spec/item_spec.rb
146
+ - spec/list_builder_spec.rb
139
147
  - spec/renderer_spec.rb
140
- - spec/strategies/bootstrap/navbar_spec.rb
141
- - spec/strategies/bootstrap/tabs_spec.rb
142
- - spec/strategies/list_spec.rb
148
+ - spec/rendering/strategies/bootstrap/navbar_spec.rb
149
+ - spec/rendering/strategies/bootstrap/tabs_spec.rb
150
+ - spec/rendering/strategies/list_spec.rb
151
+ - spec/rendering/strategy_factory_spec.rb
152
+ - spec/spec_helper.rb
143
153
  - spec/support/list_rendering_strategy.rb
144
154
  homepage: https://github.com/foraker/navigatrix
145
155
  licenses:
@@ -151,24 +161,30 @@ require_paths:
151
161
  - lib
152
162
  required_ruby_version: !ruby/object:Gem::Requirement
153
163
  requirements:
154
- - - '>='
164
+ - - ! '>='
155
165
  - !ruby/object:Gem::Version
156
166
  version: '0'
157
167
  required_rubygems_version: !ruby/object:Gem::Requirement
158
168
  requirements:
159
- - - '>='
169
+ - - ! '>='
160
170
  - !ruby/object:Gem::Version
161
171
  version: '0'
162
172
  requirements: []
163
173
  rubyforge_project:
164
- rubygems_version: 2.2.1
174
+ rubygems_version: 2.0.3
165
175
  signing_key:
166
176
  specification_version: 4
167
177
  summary: Navigation generation for Rails and Sinatra
168
178
  test_files:
179
+ - spec/integration/documentation_spec.rb
180
+ - spec/item_builder_spec.rb
169
181
  - spec/item_spec.rb
182
+ - spec/list_builder_spec.rb
170
183
  - spec/renderer_spec.rb
171
- - spec/strategies/bootstrap/navbar_spec.rb
172
- - spec/strategies/bootstrap/tabs_spec.rb
173
- - spec/strategies/list_spec.rb
184
+ - spec/rendering/strategies/bootstrap/navbar_spec.rb
185
+ - spec/rendering/strategies/bootstrap/tabs_spec.rb
186
+ - spec/rendering/strategies/list_spec.rb
187
+ - spec/rendering/strategy_factory_spec.rb
188
+ - spec/spec_helper.rb
174
189
  - spec/support/list_rendering_strategy.rb
190
+ has_rdoc: