ariane 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .rvmrc
6
+ *.swp
@@ -0,0 +1,3 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.0.3
4
+
5
+ * FIX: The HTMLList divider is now rendered correctly (@PatrickMa)
6
+ * FIX: #2 A Crumb should be able to store random data
7
+ * IMPROVED: Most of the code is now documented
8
+ * IMPROVED: The tests are now using subject (@PatrickMa)
9
+
3
10
  ## 0.0.2
4
11
 
5
12
  * FIX: HTML#link and HTMLLink#link return a non html safe string when return
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
- # Ariane
1
+ # Ariane [![Build Status](https://secure.travis-ci.org/simonc/ariane.png?branch=master)](http://travis-ci.org/simonc/ariane)
2
2
 
3
3
  Ariane is a flexible breadcrumb system for Rails. And it's fully compatible with
4
4
  the [Twitter Bootstrap](http://twitter.github.com/bootstrap/) !
5
5
 
6
+ It works perfectly with Rails 3 and allows to use I18n.
7
+
6
8
  ## Installation
7
9
 
8
10
  Add the following line to your `Gemfile`:
@@ -11,6 +13,10 @@ Add the following line to your `Gemfile`:
11
13
  gem 'ariane'
12
14
  ```
13
15
 
16
+ And then execute:
17
+
18
+ bundle
19
+
14
20
  ## Requirements
15
21
 
16
22
  * Ruby >= 1.9.x
@@ -179,6 +185,15 @@ You'll obtain the following HTML:
179
185
  You can create a complete renderer, simply take a look at
180
186
  `lib/ariane/render/html.rb` for a complete example implementation.
181
187
 
188
+ ### I18n
189
+
190
+ Since Ariane is used in before filters or in the views, it supports
191
+ I18n out of the box.
192
+
193
+ ``` ruby
194
+ ariane.add t('home'), root_path
195
+ ```
196
+
182
197
  ## Boring legal stuff
183
198
 
184
199
  Copyright (c) 2012, Simon COURTOIS
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -21,5 +21,6 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_dependency "actionpack", ">= 2.3.0"
23
23
  s.add_dependency "activesupport", ">= 2.3.0"
24
+ s.add_development_dependency "rake"
24
25
  s.add_development_dependency "rspec"
25
26
  end
@@ -9,39 +9,99 @@ module Ariane
9
9
  class << self
10
10
  attr_accessor :request
11
11
 
12
+ # Public: Provides a simple way to access Ariane configuration.
13
+ #
14
+ # Yields self.
15
+ #
16
+ # Examples
17
+ #
18
+ # Ariane.configure do |config|
19
+ # config.default_renderer = SomeRendererClass
20
+ # end
21
+ #
22
+ # Returns nothing.
12
23
  def configure
13
24
  yield self
14
25
  end
15
26
 
27
+ # Internal: Sets the request environment.
28
+ #
29
+ # If the :breadcrumb key is not present in the environment, it will be set
30
+ # to a new instance of Breadcrumb.
31
+ #
32
+ # Returns nothing.
16
33
  def request_env=(environment)
17
34
  @request_env = environment
18
35
  @request_env[:breadcrumb] ||= Breadcrumb.new
19
36
  end
20
37
 
38
+ # Internal: Gets the request environment.
39
+ #
40
+ # Returns a Hash containing the request environment.
21
41
  def request_env
22
42
  @request_env if defined?(@request_env)
23
43
  end
24
44
 
45
+ # Internal: Gets the request id.
46
+ #
47
+ # Returns the current request id.
25
48
  def request
26
49
  @request_id if defined? @request_id
27
50
  end
28
51
 
52
+ # Internal: Sets the request id.
53
+ #
54
+ # request_id - The request id.
55
+ #
56
+ # Returns nothing.
29
57
  def request=(request_id)
30
58
  @request_id = request_id
31
59
  end
32
60
 
61
+ # Internal: Gets the Breadcrumb.
62
+ #
63
+ # Returns a Breadcrumb.
33
64
  def breadcrumb
34
65
  @request_env[:breadcrumb]
35
66
  end
36
67
 
68
+ # Internal: Sets the Breadcrumb.
69
+ #
70
+ # Returns nothing.
37
71
  def breadcrumb=(breadcrumb)
38
72
  @request_env[:breadcrumb] = breadcrumb
39
73
  end
40
74
 
75
+ # Public: Returns the default renderer used by Ariane.
76
+ #
77
+ # If the default renderer hasn't been set yeat, it will be set
78
+ # as a new Ariane::Render::HTMLList instance.
79
+ #
80
+ # Examples
81
+ #
82
+ # Ariane.default_renderer
83
+ # # => #<Ariane::Render::HTMLList ...>
84
+ #
85
+ # Returns the default renderer.
41
86
  def default_renderer
42
87
  @default_renderer ||= Ariane::Render::HTMLList.new
43
88
  end
44
89
 
90
+ # Public: Sets the default renderer used by Ariane.
91
+ #
92
+ # renderer - An instance or a class that will be used as default renderer
93
+ # by Ariane. If a class is given the default renderer will be set
94
+ # to a new instance of this class.
95
+ #
96
+ # Examples
97
+ #
98
+ # Ariane.default_renderer = SomeRendererClass.new
99
+ #
100
+ # Ariane.default_renderer = SomeRendererClass
101
+ # Ariane.default_renderer
102
+ # # => #<SomeRendererClass ...>
103
+ #
104
+ # Returns the default renderer.
45
105
  def default_renderer=(renderer)
46
106
  @default_renderer = renderer.is_a?(Class) ? renderer.new : renderer
47
107
  end
@@ -1,17 +1,59 @@
1
1
  require 'ariane/crumb'
2
2
 
3
3
  module Ariane
4
+ # Internal: The Breadcrumb class is used to interact with the crumbs list.
5
+ #
6
+ # Examples
7
+ #
8
+ # ariane.add 'Home', root_path
9
+ #
10
+ # ariane.render
4
11
  class Breadcrumb
12
+ # Internal: Returns the list of crumbs.
13
+ #
14
+ # Examples
15
+ #
16
+ # ariane.crumbs
17
+ # # => [#<Crumb ...>, ...]
18
+ #
19
+ # Returns an Array containing a list of Crumb objects.
5
20
  def crumbs
6
21
  @crumbs ||= []
7
22
  end
8
23
 
9
- def add(text='', url=nil, &block)
10
- new_crumb = Crumb.new(text, url)
24
+ # Public: Add a Crumb to the crumbs list.
25
+ #
26
+ # args - Any arguments that can be passed to Crumb#initialize.
27
+ #
28
+ # Yields the new Crumb before it is added to the list.
29
+ #
30
+ # Examples
31
+ #
32
+ # ariane.add 'Home', root_path
33
+ # ariane.add 'Other'
34
+ # ariane.add 'Foo', root_path, :foo => :bar
35
+ #
36
+ # Returns nothing.
37
+ def add(*args)
38
+ new_crumb = Crumb.new(*args)
11
39
  yield new_crumb if block_given?
12
40
  crumbs << new_crumb
13
41
  end
14
42
 
43
+ # Public: Renders the breadcrumb.
44
+ #
45
+ # If no renderer is provided, Ariane's default_renderer will be used.
46
+ #
47
+ # renderer - An instance or a class that will be used to render the
48
+ # breadcrumb. If a class is given the renderer will be set
49
+ # to a new instance of this class (default: nil).
50
+ #
51
+ # Examples
52
+ #
53
+ # ariane.render
54
+ # ariane.render(SomeRendererClass)
55
+ #
56
+ # Returns a String representing the breadcrumb.
15
57
  def render(renderer=nil)
16
58
  renderer ||= Ariane.default_renderer
17
59
  renderer = renderer.new if renderer.is_a?(Class)
@@ -1,12 +1,23 @@
1
1
  require 'delegate'
2
2
 
3
3
  module Ariane
4
+ # Internal: Stores the data related to a single crumb.
4
5
  class Crumb
5
- attr_accessor :text, :url
6
+ # Public: Gets/Sets the String data of the crumb.
7
+ # Public: Gets/Sets the String text of the crumb.
8
+ # Public: Gets/Sets the String url of the crumb.
9
+ attr_accessor :data, :text, :url
6
10
 
7
- def initialize(text='', url=nil)
11
+ # Internal: Initialize a Crumb.
12
+ #
13
+ # text - A String representing the text of the crumb (default: '').
14
+ # url - A String representing the url of the crumb (default: nil).
15
+ # data - A Hash used to store any data that can be used by renderers
16
+ # (default: {}).
17
+ def initialize(text='', url=nil, data={})
8
18
  @text = text
9
19
  @url = url
20
+ @data = data
10
21
  end
11
22
  end
12
23
  end
@@ -1,4 +1,5 @@
1
1
  module Ariane
2
+ # Adds the ariane helper to controllers.
2
3
  module ControllerHelper
3
4
  def ariane
4
5
  if !Ariane.request_env || Ariane.request != request.object_id
@@ -1,4 +1,5 @@
1
1
  module Ariane
2
+ # Adds the ariane helper to views.
2
3
  module ViewHelper
3
4
  def ariane
4
5
  Ariane.breadcrumb
@@ -1,23 +1,42 @@
1
1
  module Ariane
2
2
  module Render
3
3
 
4
+ # Internal: Base renderer from which every renderer inherits.
4
5
  class Base
6
+ # Internal: Gets/Sets the Hash options.
5
7
  attr_accessor :options
6
8
 
9
+ # Public: Initialize a Base renderer.
10
+ #
11
+ # options - A Hash containing options for the renderer (default: {}):
12
+ # :divider - The String divider used to separate crumbs
13
+ # (default: Base#divider).
7
14
  def initialize(options={})
8
15
  @options = {
9
- divider: divider
16
+ divider: ' / '
10
17
  }.merge(options)
11
18
  end
12
19
 
20
+ # Internal: Renders the breadcrumbs.
21
+ #
22
+ # This method MUST be overridden by any renderer inheriting from Base.
23
+ #
24
+ # crumbs - An Array containing a list of Crumb objects composing the
25
+ # breadcrumb.
26
+ #
27
+ # Returns nothing.
28
+ # Raises RuntimeError everytime.
13
29
  def render(crumbs)
14
30
  raise 'the render method is not implemented in your Ariane renderer'
15
31
  end
16
32
 
33
+ # Public: Returns the divider used to separate crumbs.
34
+ #
35
+ # Returns the String ' / '.
17
36
  def divider
18
37
  ' / '
19
38
  end
20
39
  end
21
40
 
22
41
  end
23
- end
42
+ end
@@ -4,13 +4,37 @@ require 'action_view'
4
4
  module Ariane
5
5
  module Render
6
6
 
7
+ # Public: HTML renderer.
8
+ #
9
+ # Displays the breadcrumb as follows:
10
+ #
11
+ # <p class="breadcrumb">
12
+ # <a href="/">Home</a> / Other
13
+ # </p>
14
+ #
7
15
  class HTML < Base
8
16
  include ActionView::Helpers::TagHelper
9
17
  include ActionView::Helpers::UrlHelper
10
18
  include ActionView::Helpers::OutputSafetyHelper
11
19
 
20
+ # Public: Gets/Sets the String output_buffer.
12
21
  attr_accessor :output_buffer
13
22
 
23
+ # Public: Initialize an HTML renderer.
24
+ #
25
+ # options - A Hash containing options for the renderer (default: {}):
26
+ # :active_class - The String class used for active Crumb when
27
+ # rendered as a link (default: 'active').
28
+ # :divider - The String divider used to separate crumbs
29
+ # (default: Base#divider).
30
+ # :link_active - A Boolean telling if the active Crumb should
31
+ # be rendered as a link (default: false).
32
+ # :link_class - The String html class for each link
33
+ # (default: nil).
34
+ # :list_class - The String html class used for the crumbs list
35
+ # container (default: 'breadcrumb').
36
+ # :list_id - The String html id used for the crumbs list
37
+ # container (default: nil).
14
38
  def initialize(options={})
15
39
  options = {
16
40
  active_class: 'active',
@@ -23,16 +47,51 @@ module Ariane
23
47
  super(options)
24
48
  end
25
49
 
50
+ # Public: Renders the breadcrumb.
51
+ #
52
+ # crumbs - An Array containing a list of Crumb objects composing the
53
+ # breadcrumb.
54
+ #
55
+ # Examples
56
+ #
57
+ # html.render(crumbs)
58
+ # # => "<p class=\"breadcrumb\"><a href=\"/\">Home</a> / Other</p>"
59
+ #
60
+ # Returns an html safe String representing the breadcrumb to print.
26
61
  def render(crumbs)
27
62
  list(crumbs).html_safe
28
63
  end
29
64
 
65
+ # Public: Defines the breadcrumb container.
66
+ #
67
+ # crumbs - An Array containing a list of Crumb objects composing the
68
+ # breadcrumb.
69
+ #
70
+ # Examples
71
+ #
72
+ # html.list(crumbs)
73
+ # # => "<p class=\"breadcrumb\"> ... </p>"
74
+ # # The String returned cannot be considered as html safe.
75
+ #
76
+ # Returns a non html safe String representing the breadcrumb.
30
77
  def list(crumbs)
31
78
  content_tag(:p, id: options[:list_id], class: options[:list_class]) do
32
79
  raw items(crumbs)
33
80
  end
34
81
  end
35
82
 
83
+ # Public: Returns the rendered list of breadcrumb items.
84
+ #
85
+ # crumbs - An Array containing a list of Crumb objects composing the
86
+ # breadcrumb.
87
+ #
88
+ # Examples
89
+ #
90
+ # html.items(crumbs)
91
+ # # => "<a href=\"/\">Home</a> / Other"
92
+ # # The String returned cannot be considered as html safe.
93
+ #
94
+ # Returns a non html safe String representing the breadcrumb items.
36
95
  def items(crumbs)
37
96
  crumbs.inject('') do |out, crumb|
38
97
  active = crumb == crumbs.last
@@ -41,12 +100,50 @@ module Ariane
41
100
  end
42
101
  end
43
102
 
103
+ # Public: Returns a rendered breadcrumb item.
104
+ #
105
+ # Appends the divider unless active is true.
106
+ #
107
+ # crumb - The Crumb item to be rendered.
108
+ # active - A Boolean indicating if the Crumb is active or not
109
+ # (default: false).
110
+ #
111
+ # Examples
112
+ #
113
+ # html.item(crumb)
114
+ # # => "<a href=\"/\">Home</a> /"
115
+ #
116
+ # html.item(crumb, true)
117
+ # # => "Home"
118
+ #
119
+ # Returns an hmtl safe String representing a rendered Crumb item.
44
120
  def item(crumb, active=false)
45
121
  out = link(crumb, active)
46
122
  out << options[:divider] if options[:divider] && !active
47
123
  out
48
124
  end
49
125
 
126
+ # Public: Returns a Crumb link.
127
+ #
128
+ # crumb - The Crumb item to be rendered.
129
+ # active - A Boolean indicating if the Crumb is active or not
130
+ # (default: false).
131
+ #
132
+ # Examples
133
+ #
134
+ # html.link(crumb)
135
+ # # => "<a href=\"/\">Home</a>"
136
+ #
137
+ # # If the :link_active option is false:
138
+ # html.link(crumb, true)
139
+ # # => "Home"
140
+ #
141
+ # # If the :link_active option is true and
142
+ # # the :link_class option is set to 'active':
143
+ # html.link(crumb, true)
144
+ # # => "<a href=\"/\" class=\"active\">Home</a>"
145
+ #
146
+ # Returns an html safe String representing the link for the Crumb item.
50
147
  def link(crumb, active=false)
51
148
  classes = options[:link_class]
52
149
 
@@ -3,7 +3,36 @@ require 'ariane/render/html'
3
3
  module Ariane
4
4
  module Render
5
5
 
6
+ # Public: HTML renderer.
7
+ #
8
+ # Displays the breadcrumb as follows:
9
+ #
10
+ # <ul class="breadcrumb">
11
+ # <li>
12
+ # <a href="/">Home</a>
13
+ # <span class="divider">/</span>
14
+ # </li>
15
+ # <li>Other</li>
16
+ # </ul>
17
+ #
6
18
  class HTMLList < HTML
19
+ # Public: Initialize an HMTLList renderer.
20
+ #
21
+ # options - A Hash containing options for the renderer (default: {}):
22
+ # :active_class - The String class used for active Crumb when
23
+ # rendered as a link (default: 'active').
24
+ # :divider - The String divider used to separate crumbs
25
+ # (default: HTMLList#divider).
26
+ # :item_class - A String class used for each breadcrumb item
27
+ # (default: nil).
28
+ # :link_active - A Boolean telling if the active Crumb should
29
+ # be rendered as a link (default: false).
30
+ # :link_class - The String html class for each link
31
+ # (default: nil).
32
+ # :list_class - The String html class used for the crumbs list
33
+ # container (default: 'breadcrumb').
34
+ # :list_id - The String html id used for the crumbs list
35
+ # container (default: nil).
7
36
  def initialize(options={})
8
37
  options = {
9
38
  item_class: nil
@@ -12,12 +41,48 @@ module Ariane
12
41
  super(options)
13
42
  end
14
43
 
44
+ # Public: Defines the breadcrumb container.
45
+ #
46
+ # crumbs - An Array containing a list of Crumb objects composing the
47
+ # breadcrumb.
48
+ #
49
+ # Examples
50
+ #
51
+ # htmllist.list(crumbs)
52
+ # # => "<ul class=\"breadcrumb\"> ... </ul>"
53
+ # # The String returned cannot be considered as html safe.
54
+ #
55
+ # Returns a non html safe String representing the breadcrumb.
15
56
  def list(crumbs)
16
57
  content_tag(:ul, id: options[:list_id], class: options[:list_class]) do
17
58
  raw items(crumbs)
18
59
  end
19
60
  end
20
61
 
62
+ # Public: Returns a rendered breadcrumb item.
63
+ #
64
+ # Appends the divider unless active is true.
65
+ #
66
+ # crumb - The Crumb item to be rendered.
67
+ # active - A Boolean indicating if the Crumb is active or not
68
+ # (default: false).
69
+ #
70
+ # Examples
71
+ #
72
+ # htmllist.item(crumb)
73
+ # # => "<li><a href=\"/\">Home</a><span class=\"divider\">/</span></li>"
74
+ #
75
+ # # If the :item_class options is set to 'crumb':
76
+ # htmllist.item(crumb)
77
+ # # => "<li class=\"crumb\"> ... </li>"
78
+ #
79
+ # htmllist.item(crumb, true)
80
+ # # => "<li>Home</li>"
81
+ #
82
+ # htmllist.item(crumb, true)
83
+ # # => "<li class=\"active\">Home</li>"
84
+ #
85
+ # Returns an hmtl safe String representing a rendered Crumb item.
21
86
  def item(crumb, active=false)
22
87
  classes = options[:item_class]
23
88
 
@@ -28,11 +93,27 @@ module Ariane
28
93
 
29
94
  content_tag(:li, class: classes) do
30
95
  out = link(crumb, active)
31
- out << options[:divider] if options[:divider] && !active
96
+ out << divider unless active
32
97
  out
33
98
  end
34
99
  end
35
100
 
101
+ # Public: Returns a Crumb link.
102
+ #
103
+ # crumb - The Crumb item to be rendered.
104
+ # active - A Boolean indicating if the Crumb is active or not
105
+ # (default: false).
106
+ #
107
+ # Examples
108
+ #
109
+ # htmllist.link(crumb)
110
+ # # => "<a href=\"/\">Home</a>"
111
+ #
112
+ # # If the :link_active option is false:
113
+ # htmllist.link(crumb, true)
114
+ # # => "Home"
115
+ #
116
+ # Returns an html safe String representing the link for the Crumb item.
36
117
  def link(crumb, active=false)
37
118
  link_active = !active || options[:link_active]
38
119
  if crumb.url && link_active
@@ -43,8 +124,16 @@ module Ariane
43
124
  link.html_safe
44
125
  end
45
126
 
127
+ # Public: Returns the divider used to separate crumbs.
128
+ #
129
+ # Examples
130
+ #
131
+ # htmllist.divider
132
+ # # => "<span class=\"divider\">/</span>"
133
+ #
134
+ # Returns the String representing the html divider.
46
135
  def divider
47
- content_tag(:span, '/', class: 'divider')
136
+ content_tag(:span, options[:divider].strip, class: 'divider')
48
137
  end
49
138
  end
50
139
 
@@ -1,3 +1,4 @@
1
1
  module Ariane
2
- VERSION = "0.0.2"
2
+ # Public: String version of the Ariane gem.
3
+ VERSION = "0.0.3"
3
4
  end
@@ -2,13 +2,15 @@ require 'ariane'
2
2
 
3
3
  module Ariane
4
4
  describe Breadcrumb do
5
+ subject { Breadcrumb.new }
6
+
5
7
  describe "#crumbs" do
6
8
  it "has a crumbs method that returns an Enumerable" do
7
- Breadcrumb.new.crumbs.is_a?(Enumerable).should be_true
9
+ subject.crumbs.is_a?(Enumerable).should be_true
8
10
  end
9
11
 
10
12
  it "set the crumbs to an empty Enumerable by default" do
11
- crumbs = Breadcrumb.new.crumbs
13
+ crumbs = subject.crumbs
12
14
  crumbs.respond_to?(:count).should be_true
13
15
  crumbs.count.should be(0)
14
16
  end
@@ -16,19 +18,18 @@ module Ariane
16
18
 
17
19
  describe "#add" do
18
20
  it "creates a new crumb and push it to crumbs" do
19
- breadcrumb = Breadcrumb.new
20
- breadcrumb.add 'text', 'url'
21
- breadcrumb.crumbs.count.should be(1)
22
- breadcrumb.crumbs.last.text.should == 'text'
23
- breadcrumb.crumbs.last.url.should == 'url'
21
+ subject.add 'text', 'url', :foo => :bar
22
+ subject.crumbs.count.should be(1)
23
+ subject.crumbs.last.text.should == 'text'
24
+ subject.crumbs.last.url.should == 'url'
25
+ subject.crumbs.last.data.should == { :foo => :bar }
24
26
  end
25
27
 
26
28
  it "yields passing the new crumb if a block is given" do
27
- breadcrumb = Breadcrumb.new
28
- breadcrumb.add 'text' do |crumb|
29
+ subject.add 'text' do |crumb|
29
30
  crumb.url = 'url'
30
31
  end
31
- breadcrumb.crumbs.last.url.should == 'url'
32
+ subject.crumbs.last.url.should == 'url'
32
33
  end
33
34
  end
34
35
 
@@ -38,10 +39,9 @@ module Ariane
38
39
 
39
40
  it "uses Ariane's default renderer if none is passed as argument" do
40
41
  Ariane.default_renderer = test_renderer
41
- breadcrumb = Breadcrumb.new
42
- breadcrumb.add 'text', 'url'
42
+ subject.add 'text', 'url'
43
43
  test_renderer.should_receive(:render)
44
- breadcrumb.render
44
+ subject.render
45
45
  end
46
46
 
47
47
  it "instanciates the renderer if a class is given" do
@@ -54,10 +54,9 @@ module Ariane
54
54
  end
55
55
 
56
56
  it "calls render on the renderer, passing it the cumbs" do
57
- breadcrumb = Breadcrumb.new
58
- breadcrumb.add 'text', 'url'
59
- test_renderer.should_receive(:render).with(breadcrumb.crumbs)
60
- breadcrumb.render(test_renderer)
57
+ subject.add 'text', 'url'
58
+ test_renderer.should_receive(:render).with(subject.crumbs)
59
+ subject.render(test_renderer)
61
60
  end
62
61
  end
63
62
  end
@@ -2,33 +2,51 @@ require 'ariane/crumb'
2
2
 
3
3
  module Ariane
4
4
  describe Crumb do
5
- it "has a text attribute" do
6
- Crumb.new.respond_to?(:text)
7
- end
5
+ subject { Crumb.new }
8
6
 
9
- it "sets text as an empty string by default" do
10
- Crumb.new.text.should == ''
11
- end
7
+ describe ".new" do
8
+ it "sets its text attribute based on the first argument of the initializer" do
9
+ crumb = Crumb.new('test')
10
+ crumb.text.should == 'test'
11
+ end
12
12
 
13
- it "has a setter for the text attribute" do
14
- crumb = Crumb.new
15
- crumb.text = 'test'
16
- crumb.text.should == 'test'
13
+ it "sets its url attribute based on the second argument of the initializer" do
14
+ crumb = Crumb.new('text', 'test-url')
15
+ crumb.url.should == 'test-url'
16
+ end
17
+
18
+ it "sets its data based on third argument of the initializer" do
19
+ crumb = Crumb.new('text', 'url', :foo => :bar)
20
+ crumb.data.should == { :foo => :bar }
21
+ end
17
22
  end
18
23
 
24
+ describe "#text" do
25
+ it "sets text as an empty string by default" do
26
+ subject.text.should == ''
27
+ end
19
28
 
20
- it "has an url attribute" do
21
- Crumb.new.respond_to?(:url)
29
+ it "has a setter for the text attribute" do
30
+ subject.text = 'test'
31
+ subject.text.should == 'test'
32
+ end
22
33
  end
23
34
 
24
- it "sets url as nil by default" do
25
- Crumb.new.url.should be_nil
35
+ describe "#url" do
36
+ it "sets url as nil by default" do
37
+ subject.url.should be_nil
38
+ end
39
+
40
+ it "has a setter for the url attribute" do
41
+ subject.url = '/'
42
+ subject.url.should == '/'
43
+ end
26
44
  end
27
45
 
28
- it "has a setter for the url attribute" do
29
- crumb = Crumb.new
30
- crumb.url = '/'
31
- crumb.url.should == '/'
46
+ describe "#data" do
47
+ it "has a data attribute which is a hash" do
48
+ subject.data.should == {}
49
+ end
32
50
  end
33
51
  end
34
52
  end
@@ -106,6 +106,10 @@ module Ariane
106
106
  it "returns the HTML list divider" do
107
107
  HTMLList.new.divider.should == '<span class="divider">/</span>'
108
108
  end
109
+
110
+ it "returns the HTML list divider for a custom divider" do
111
+ HTMLList.new(divider: ' > ').divider.should == '<span class="divider">&gt;</span>'
112
+ end
109
113
  end
110
114
  end
111
115
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ariane
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-27 00:00:00.000000000 Z
12
+ date: 2012-03-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
16
- requirement: &70206894458820 !ruby/object:Gem::Requirement
16
+ requirement: &70159377260060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70206894458820
24
+ version_requirements: *70159377260060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70206894473580 !ruby/object:Gem::Requirement
27
+ requirement: &70159377256400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,21 @@ dependencies:
32
32
  version: 2.3.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70206894473580
35
+ version_requirements: *70159377256400
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &70159377253500 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70159377253500
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rspec
38
- requirement: &70206894472540 !ruby/object:Gem::Requirement
49
+ requirement: &70159377252560 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,7 +54,7 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70206894472540
57
+ version_requirements: *70159377252560
47
58
  description: Ariane is a flexible breadcrumb system for Rails. It is fully compatible
48
59
  with the Twitter Bootstrap and can be adapted to any kind of output.
49
60
  email:
@@ -53,6 +64,7 @@ extensions: []
53
64
  extra_rdoc_files: []
54
65
  files:
55
66
  - .gitignore
67
+ - .travis.yml
56
68
  - CHANGELOG.md
57
69
  - COPYING
58
70
  - Gemfile
@@ -108,3 +120,4 @@ test_files:
108
120
  - spec/ariane/render/html_list_spec.rb
109
121
  - spec/ariane/render/html_spec.rb
110
122
  - spec/ariane_spec.rb
123
+ has_rdoc: