navigatrix 0.0.1 → 0.1.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.
@@ -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: