labyrinth 0.0.1.alpha
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.
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Rakefile +7 -0
- data/labyrinth.gemspec +24 -0
- data/lib/labyrinth.rb +8 -0
- data/lib/labyrinth/clew.rb +20 -0
- data/lib/labyrinth/crumb.rb +9 -0
- data/lib/labyrinth/layout.rb +24 -0
- data/lib/labyrinth/railtie.rb +12 -0
- data/lib/labyrinth/version.rb +3 -0
- data/lib/labyrinth/view_helpers.rb +24 -0
- data/spec/labyrinth/clew_spec.rb +48 -0
- data/spec/labyrinth/crumb_spec.rb +9 -0
- data/spec/labyrinth/layout_spec.rb +38 -0
- data/spec/spec_helper.rb +1 -0
- metadata +77 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
data/Rakefile
ADDED
data/labyrinth.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "labyrinth/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "labyrinth"
|
7
|
+
s.version = Labyrinth::VERSION
|
8
|
+
s.authors = ["Bry Ashman"]
|
9
|
+
s.email = ["bryashman@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/yrb/labyrinth"
|
11
|
+
s.summary = "Declarative breadcrumbs for Rails"
|
12
|
+
s.description = "Declarative breadcrumbs for Rails"
|
13
|
+
|
14
|
+
s.rubyforge_project = "labyrinth"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
end
|
data/lib/labyrinth.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Labyrinth
|
2
|
+
class Clew
|
3
|
+
def initialize(last_crumb, *args)
|
4
|
+
@path = []
|
5
|
+
parent(last_crumb, *args)
|
6
|
+
end
|
7
|
+
|
8
|
+
def parent(crumb_name, *args)
|
9
|
+
instance_exec(*args, &Labyrinth.find(crumb_name))
|
10
|
+
end
|
11
|
+
|
12
|
+
def link(title, href, options={})
|
13
|
+
@path << Labyrinth::Crumb.new(title, href, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def path
|
17
|
+
@path.reverse
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Labyrinth
|
2
|
+
extend self
|
3
|
+
|
4
|
+
def layout(&block)
|
5
|
+
instance_eval &block
|
6
|
+
end
|
7
|
+
|
8
|
+
def reset!
|
9
|
+
@crumbs = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def crumbs
|
13
|
+
@crumbs ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def crumb(name, &block)
|
17
|
+
crumbs[name] = block
|
18
|
+
end
|
19
|
+
|
20
|
+
def find(name)
|
21
|
+
raise "Crumb '#{name}' has not been defined." unless crumbs.has_key?(name)
|
22
|
+
crumbs[name]
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Labyrinth
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
|
4
|
+
initializer "labyrinth.view_helpers" do
|
5
|
+
ActionView::Base.send(:include, Labyrinth::ViewHelpers)
|
6
|
+
end
|
7
|
+
|
8
|
+
config.after_initialize do
|
9
|
+
Labyrinth::Clew.send(:include, Rails.application.routes.url_helpers)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Labyrinth
|
2
|
+
module ViewHelpers
|
3
|
+
def labyrinth_trail(last_crumb, *args)
|
4
|
+
trail = Labyrinth::Clew.new(last_crumb, *args).path
|
5
|
+
trail_end = trail.pop
|
6
|
+
|
7
|
+
content_tag(:ul, :class => "breadcrumb") do
|
8
|
+
trail.map(&method(:linked_crumb)).reduce(&:+) +
|
9
|
+
active_crumb(trail_end)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def linked_crumb(crumb)
|
15
|
+
content_tag(:li,
|
16
|
+
link_to(crumb.title, crumb.href, crumb.options) +
|
17
|
+
content_tag(:span, '/', :class => "divider"))
|
18
|
+
end
|
19
|
+
|
20
|
+
def active_crumb(crumb)
|
21
|
+
content_tag(:li, crumb.title, :class => "active")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Labyrinth::Clew do
|
4
|
+
before do
|
5
|
+
Labyrinth.reset!
|
6
|
+
Labyrinth.layout do
|
7
|
+
crumb :root do
|
8
|
+
link 'Root Title', 'root href'
|
9
|
+
end
|
10
|
+
|
11
|
+
crumb :level_2 do |title|
|
12
|
+
link 'Level 2', title
|
13
|
+
parent :root
|
14
|
+
end
|
15
|
+
|
16
|
+
crumb :test do |obj|
|
17
|
+
link obj.title, obj.href, :option => true
|
18
|
+
parent :level_2
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:test_object) do
|
24
|
+
stub('Test Object',
|
25
|
+
:title => 'Test Title',
|
26
|
+
:href => 'Test Link')
|
27
|
+
end
|
28
|
+
let(:clew) { Labyrinth::Clew.new(:test, test_object) }
|
29
|
+
|
30
|
+
describe "#path" do
|
31
|
+
subject { clew.path }
|
32
|
+
|
33
|
+
it { should have(3).items }
|
34
|
+
|
35
|
+
it "should be in the correct order" do
|
36
|
+
subject.first.title.should == 'Root Title'
|
37
|
+
subject.last.title.should == 'Test Title'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "crumbs should be created as per the crumb definition" do
|
42
|
+
subject { clew.path.last }
|
43
|
+
|
44
|
+
it { subject.title.should == 'Test Title' }
|
45
|
+
it { subject.href.should == 'Test Link' }
|
46
|
+
it { subject.options.should have_key :option }
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Labyrinth::Crumb do
|
4
|
+
subject { Labyrinth::Crumb.new('Title', 'Href', :option => true) }
|
5
|
+
|
6
|
+
specify { subject.title.should == 'Title' }
|
7
|
+
specify { subject.href.should == 'Href' }
|
8
|
+
specify { subject.options.should have_key(:option) }
|
9
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Labyrinth do
|
4
|
+
it { should respond_to :layout }
|
5
|
+
|
6
|
+
context "when I have defined a layout" do
|
7
|
+
before do
|
8
|
+
subject.reset!
|
9
|
+
subject.layout do
|
10
|
+
crumb :root do
|
11
|
+
link 'Root Title', 'root href'
|
12
|
+
end
|
13
|
+
|
14
|
+
crumb :test do |obj|
|
15
|
+
link 'Test Title', 'test href', :option => true
|
16
|
+
parent :test
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it { subject.crumbs.should have(2).items }
|
22
|
+
|
23
|
+
it "can be reset" do
|
24
|
+
subject.reset!
|
25
|
+
subject.crumbs.should be_empty
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be able find defined crumbs" do
|
29
|
+
subject.find(:test).should_not be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should raise an exception when it cannot find a crumb" do
|
33
|
+
expect {
|
34
|
+
subject.find(:nonexistant_crumb)
|
35
|
+
}.to raise_error(RuntimeError)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'labyrinth'
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: labyrinth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.alpha
|
5
|
+
prerelease: 6
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Bry Ashman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-05 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70354723253140 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70354723253140
|
25
|
+
description: Declarative breadcrumbs for Rails
|
26
|
+
email:
|
27
|
+
- bryashman@gmail.com
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- .rspec
|
34
|
+
- Gemfile
|
35
|
+
- Rakefile
|
36
|
+
- labyrinth.gemspec
|
37
|
+
- lib/labyrinth.rb
|
38
|
+
- lib/labyrinth/clew.rb
|
39
|
+
- lib/labyrinth/crumb.rb
|
40
|
+
- lib/labyrinth/layout.rb
|
41
|
+
- lib/labyrinth/railtie.rb
|
42
|
+
- lib/labyrinth/version.rb
|
43
|
+
- lib/labyrinth/view_helpers.rb
|
44
|
+
- spec/labyrinth/clew_spec.rb
|
45
|
+
- spec/labyrinth/crumb_spec.rb
|
46
|
+
- spec/labyrinth/layout_spec.rb
|
47
|
+
- spec/spec_helper.rb
|
48
|
+
homepage: https://github.com/yrb/labyrinth
|
49
|
+
licenses: []
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>'
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.3.1
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project: labyrinth
|
68
|
+
rubygems_version: 1.8.6
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Declarative breadcrumbs for Rails
|
72
|
+
test_files:
|
73
|
+
- spec/labyrinth/clew_spec.rb
|
74
|
+
- spec/labyrinth/crumb_spec.rb
|
75
|
+
- spec/labyrinth/layout_spec.rb
|
76
|
+
- spec/spec_helper.rb
|
77
|
+
has_rdoc:
|