loaf 0.1.1 → 0.2.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.
- data/.document +5 -0
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.rvmrc +28 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +132 -0
- data/LICENSE.txt +20 -0
- data/README.md +128 -0
- data/Rakefile +2 -45
- data/init.rb +3 -0
- data/lib/loaf.rb +14 -8
- data/lib/loaf/configuration.rb +2 -0
- data/lib/loaf/{filters.rb → controller_extensions.rb} +13 -12
- data/lib/loaf/crumb.rb +6 -0
- data/lib/loaf/crumb_formatter.rb +20 -0
- data/lib/loaf/railtie.rb +15 -6
- data/lib/loaf/translation.rb +18 -9
- data/lib/loaf/version.rb +4 -2
- data/lib/loaf/view_extensions.rb +43 -0
- data/loaf.gemspec +28 -0
- data/spec/integration/configuration_spec.rb +13 -0
- data/spec/integration/crumbs_routing_spec.rb +33 -0
- data/spec/integration/nested_crumbs_spec.rb +5 -0
- data/spec/loaf/crumb_formatter_spec.rb +33 -0
- data/spec/loaf/translation_spec.rb +23 -0
- data/spec/loaf_spec.rb +5 -0
- data/spec/rails_app/.gitignore +5 -0
- data/spec/rails_app/Rakefile +8 -0
- data/spec/rails_app/app/assets/images/rails.png +0 -0
- data/spec/rails_app/app/assets/javascripts/application.js +9 -0
- data/spec/rails_app/app/assets/stylesheets/application.css +7 -0
- data/spec/rails_app/app/controllers/application_controller.rb +5 -0
- data/spec/rails_app/app/controllers/comments_controller.rb +4 -0
- data/spec/rails_app/app/controllers/home_controller.rb +4 -0
- data/spec/rails_app/app/controllers/posts_controller.rb +12 -0
- data/spec/rails_app/app/helpers/application_helper.rb +2 -0
- data/spec/rails_app/app/mailers/.gitkeep +0 -0
- data/spec/rails_app/app/models/.gitkeep +0 -0
- data/spec/rails_app/app/views/home/index.html.erb +1 -0
- data/spec/rails_app/app/views/layouts/_breadcrumbs.html.erb +8 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +16 -0
- data/spec/rails_app/app/views/posts/index.html.erb +1 -0
- data/spec/rails_app/app/views/posts/new.html.erb +1 -0
- data/spec/rails_app/config.ru +4 -0
- data/spec/rails_app/config/application.rb +48 -0
- data/spec/rails_app/config/boot.rb +10 -0
- data/spec/rails_app/config/database.yml +25 -0
- data/spec/rails_app/config/environment.rb +5 -0
- data/spec/rails_app/config/environments/development.rb +30 -0
- data/spec/rails_app/config/environments/production.rb +60 -0
- data/spec/rails_app/config/environments/test.rb +42 -0
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails_app/config/initializers/inflections.rb +10 -0
- data/spec/rails_app/config/initializers/mime_types.rb +5 -0
- data/spec/rails_app/config/initializers/secret_token.rb +7 -0
- data/spec/rails_app/config/initializers/session_store.rb +8 -0
- data/spec/rails_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/rails_app/config/locales/en.yml +5 -0
- data/spec/rails_app/config/routes.rb +9 -0
- data/spec/rails_app/db/seeds.rb +7 -0
- data/spec/rails_app/lib/assets/.gitkeep +0 -0
- data/spec/rails_app/lib/tasks/.gitkeep +0 -0
- data/spec/rails_app/public/404.html +26 -0
- data/spec/rails_app/public/422.html +26 -0
- data/spec/rails_app/public/500.html +26 -0
- data/spec/rails_app/public/favicon.ico +0 -0
- data/spec/rails_app/public/robots.txt +5 -0
- data/spec/rails_app/script/rails +6 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/capybara.rb +10 -0
- data/spec/support/load_routes.rb +6 -0
- metadata +202 -119
- data/README.rdoc +0 -71
- data/lib/loaf/helpers.rb +0 -49
data/.document
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.rvmrc
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
environment_id="ruby-1.9.3-p0@loaf"
|
4
|
+
|
5
|
+
if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
|
6
|
+
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
7
|
+
then
|
8
|
+
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
9
|
+
|
10
|
+
if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
|
11
|
+
then
|
12
|
+
. "${rvm_path:-$HOME/.rvm}/hooks/after_use"
|
13
|
+
fi
|
14
|
+
else
|
15
|
+
# If the environment file has not yet been created, use the RVM CLI to select.
|
16
|
+
if ! rvm --create "$environment_id"
|
17
|
+
then
|
18
|
+
echo "Failed to create RVM environment '${environment_id}'."
|
19
|
+
return 1
|
20
|
+
fi
|
21
|
+
fi
|
22
|
+
|
23
|
+
if [[ $- == *i* ]] # check for interactive shells
|
24
|
+
then
|
25
|
+
echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
|
26
|
+
else
|
27
|
+
echo "Using: $GEM_HOME" # don't use colors in interactive shells
|
28
|
+
fi
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
0.2.0 (February , 2012)
|
2
|
+
|
3
|
+
* Change gemspec with new gem dependencies, use git
|
4
|
+
* Setup testing environment with dummy rails app
|
5
|
+
* Add integration tests for breadcrumbs view rendering
|
6
|
+
* Add translation module for breadcrumbs title lookup
|
7
|
+
* Add breadcrumb formatting module with tests
|
8
|
+
* Refactor names for controller and view extensions
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
loaf (0.1.1)
|
5
|
+
rails
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionmailer (3.1.3)
|
11
|
+
actionpack (= 3.1.3)
|
12
|
+
mail (~> 2.3.0)
|
13
|
+
actionpack (3.1.3)
|
14
|
+
activemodel (= 3.1.3)
|
15
|
+
activesupport (= 3.1.3)
|
16
|
+
builder (~> 3.0.0)
|
17
|
+
erubis (~> 2.7.0)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
rack (~> 1.3.5)
|
20
|
+
rack-cache (~> 1.1)
|
21
|
+
rack-mount (~> 0.8.2)
|
22
|
+
rack-test (~> 0.6.1)
|
23
|
+
sprockets (~> 2.0.3)
|
24
|
+
activemodel (3.1.3)
|
25
|
+
activesupport (= 3.1.3)
|
26
|
+
builder (~> 3.0.0)
|
27
|
+
i18n (~> 0.6)
|
28
|
+
activerecord (3.1.3)
|
29
|
+
activemodel (= 3.1.3)
|
30
|
+
activesupport (= 3.1.3)
|
31
|
+
arel (~> 2.2.1)
|
32
|
+
tzinfo (~> 0.3.29)
|
33
|
+
activeresource (3.1.3)
|
34
|
+
activemodel (= 3.1.3)
|
35
|
+
activesupport (= 3.1.3)
|
36
|
+
activesupport (3.1.3)
|
37
|
+
multi_json (~> 1.0)
|
38
|
+
arel (2.2.1)
|
39
|
+
builder (3.0.0)
|
40
|
+
capybara (1.1.2)
|
41
|
+
mime-types (>= 1.16)
|
42
|
+
nokogiri (>= 1.3.3)
|
43
|
+
rack (>= 1.0.0)
|
44
|
+
rack-test (>= 0.5.4)
|
45
|
+
selenium-webdriver (~> 2.0)
|
46
|
+
xpath (~> 0.1.4)
|
47
|
+
childprocess (0.2.3)
|
48
|
+
ffi (~> 1.0.6)
|
49
|
+
diff-lcs (1.1.3)
|
50
|
+
erubis (2.7.0)
|
51
|
+
ffi (1.0.11)
|
52
|
+
hike (1.2.1)
|
53
|
+
i18n (0.6.0)
|
54
|
+
json (1.6.3)
|
55
|
+
mail (2.3.0)
|
56
|
+
i18n (>= 0.4.0)
|
57
|
+
mime-types (~> 1.16)
|
58
|
+
treetop (~> 1.4.8)
|
59
|
+
mime-types (1.17.2)
|
60
|
+
multi_json (1.0.4)
|
61
|
+
nokogiri (1.5.0)
|
62
|
+
polyglot (0.3.3)
|
63
|
+
rack (1.3.5)
|
64
|
+
rack-cache (1.1)
|
65
|
+
rack (>= 0.4)
|
66
|
+
rack-mount (0.8.3)
|
67
|
+
rack (>= 1.0.0)
|
68
|
+
rack-ssl (1.3.2)
|
69
|
+
rack
|
70
|
+
rack-test (0.6.1)
|
71
|
+
rack (>= 1.0)
|
72
|
+
rails (3.1.3)
|
73
|
+
actionmailer (= 3.1.3)
|
74
|
+
actionpack (= 3.1.3)
|
75
|
+
activerecord (= 3.1.3)
|
76
|
+
activeresource (= 3.1.3)
|
77
|
+
activesupport (= 3.1.3)
|
78
|
+
bundler (~> 1.0)
|
79
|
+
railties (= 3.1.3)
|
80
|
+
railties (3.1.3)
|
81
|
+
actionpack (= 3.1.3)
|
82
|
+
activesupport (= 3.1.3)
|
83
|
+
rack-ssl (~> 1.3.2)
|
84
|
+
rake (>= 0.8.7)
|
85
|
+
rdoc (~> 3.4)
|
86
|
+
thor (~> 0.14.6)
|
87
|
+
rake (0.9.2.2)
|
88
|
+
rdoc (3.12)
|
89
|
+
json (~> 1.4)
|
90
|
+
rspec (2.7.0)
|
91
|
+
rspec-core (~> 2.7.0)
|
92
|
+
rspec-expectations (~> 2.7.0)
|
93
|
+
rspec-mocks (~> 2.7.0)
|
94
|
+
rspec-core (2.7.1)
|
95
|
+
rspec-expectations (2.7.0)
|
96
|
+
diff-lcs (~> 1.1.2)
|
97
|
+
rspec-mocks (2.7.0)
|
98
|
+
rspec-rails (2.7.0)
|
99
|
+
actionpack (~> 3.0)
|
100
|
+
activesupport (~> 3.0)
|
101
|
+
railties (~> 3.0)
|
102
|
+
rspec (~> 2.7.0)
|
103
|
+
rubyzip (0.9.5)
|
104
|
+
selenium-webdriver (2.15.0)
|
105
|
+
childprocess (>= 0.2.1)
|
106
|
+
ffi (~> 1.0.9)
|
107
|
+
multi_json (~> 1.0.4)
|
108
|
+
rubyzip
|
109
|
+
sprockets (2.0.3)
|
110
|
+
hike (~> 1.2)
|
111
|
+
rack (~> 1.0)
|
112
|
+
tilt (~> 1.1, != 1.3.0)
|
113
|
+
sqlite3 (1.3.5)
|
114
|
+
thor (0.14.6)
|
115
|
+
tilt (1.3.3)
|
116
|
+
treetop (1.4.10)
|
117
|
+
polyglot
|
118
|
+
polyglot (>= 0.3.1)
|
119
|
+
tzinfo (0.3.31)
|
120
|
+
xpath (0.1.4)
|
121
|
+
nokogiri (~> 1.3)
|
122
|
+
|
123
|
+
PLATFORMS
|
124
|
+
ruby
|
125
|
+
|
126
|
+
DEPENDENCIES
|
127
|
+
bundler
|
128
|
+
capybara
|
129
|
+
loaf!
|
130
|
+
rails (~> 3.1)
|
131
|
+
rspec-rails
|
132
|
+
sqlite3
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Piotr Murach
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
# Loaf [][travis] [][gemnasium]
|
2
|
+
|
3
|
+
[travis]: http://travis-ci.org/peter-murach/loaf
|
4
|
+
[gemnasium]: https://gemnasium.com/peter-murach/loaf
|
5
|
+
|
6
|
+
Breadcrumbs creation library.
|
7
|
+
|
8
|
+
* Helps in creating breadcrumbs.
|
9
|
+
* Uses controllers to specify names and routes for parts of breadcrum trails or collections of breadcrumbs.
|
10
|
+
* Stays out of your way when it comes to markup exposing only single helper method to access breadcrumb data.
|
11
|
+
* Supports Rails 2 & 3.
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Install from source:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem install loaf
|
19
|
+
```
|
20
|
+
|
21
|
+
Add to your Gemfile:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
gem 'loaf'
|
25
|
+
```
|
26
|
+
|
27
|
+
## Configuration
|
28
|
+
|
29
|
+
There is a small set of custom opinionated defaults. The following options are valid parameters:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
:crumb_length # breadcrumb length in integer, default length is 30 characters
|
33
|
+
:root # boolean, default is true, displays the home crumb
|
34
|
+
:capitalize # set breadcrumbs to have initial letter uppercase, default false
|
35
|
+
:style_classes # CSS class to be used to style current breadcrumb,
|
36
|
+
# defaults to 'selected'
|
37
|
+
```
|
38
|
+
|
39
|
+
You can override them in your views by passing them to the view `breadcrumb` helper
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
<% breadcrumbs :crumb_length => 20 do |name, url, styles| %>
|
43
|
+
..
|
44
|
+
<% end %>
|
45
|
+
```
|
46
|
+
|
47
|
+
or by adding initializer
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
Loaf.configure do |config|
|
51
|
+
config.crumb_length => 20
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
## Usage
|
56
|
+
|
57
|
+
In controller:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
class Blog::CategoriesController < ApplicationController
|
61
|
+
|
62
|
+
add_breadcrumb 'Article Categories', 'blog_categories_path', :only => [:show]
|
63
|
+
|
64
|
+
def show
|
65
|
+
add_breadcrumb "#{@category.title}", 'blog_category_path(@category)'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
```
|
69
|
+
|
70
|
+
You can add breadcrumbs for nested resources, for instance, article categories:
|
71
|
+
|
72
|
+
In your view add semantic markup to show breadcrumbs:
|
73
|
+
|
74
|
+
```html
|
75
|
+
<ul id="breadcrumbs">
|
76
|
+
<%- breadcrumbs :crumb_length => 20 do |name, url, styles| -%>
|
77
|
+
<li class="<%= styles %>">
|
78
|
+
<%= link_to name, url %>
|
79
|
+
<span><%= styles == 'selected' ? '' : '::' %></span>
|
80
|
+
</li>
|
81
|
+
<%- end -%>
|
82
|
+
</ul>
|
83
|
+
```
|
84
|
+
|
85
|
+
Usually best practice is to put such snippet inside its own partial.
|
86
|
+
|
87
|
+
## Locale
|
88
|
+
|
89
|
+
When adding breadcrumbs one can use locales for their titles. The only assumption it makes is that all breadcrumb names are scoped inside `breadcrumbs` namespace. However, this can be easily changed by passing `:scope => 'new_scope_name'` configuration option
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
en:
|
93
|
+
breadcrumbs:
|
94
|
+
controller:
|
95
|
+
action:
|
96
|
+
```
|
97
|
+
|
98
|
+
Therefore in your controller/view one would have
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
class Blog::CategoriesController < ApplicationController
|
102
|
+
|
103
|
+
add_breadcrumb 'blog.categories', 'blog_categories_path'
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
And corresponding entry in locale:
|
108
|
+
|
109
|
+
en:
|
110
|
+
breadcrumbs:
|
111
|
+
blog:
|
112
|
+
categories: 'Article Categories'
|
113
|
+
```
|
114
|
+
|
115
|
+
## TODO
|
116
|
+
|
117
|
+
* Add ability to add breadcrumbs for nested resources
|
118
|
+
* Add support for name internationalisation
|
119
|
+
* Finish specs
|
120
|
+
|
121
|
+
## Contributing to loaf
|
122
|
+
|
123
|
+
Questions or problems? Please post them on the [issue tracker](https://github.com/peter-murach/loaf/issues). You can contribute changes by forking the project and submitting a pull request. You can ensure the tests are passing by running `bundle` and `rake`.
|
124
|
+
|
125
|
+
## Copyright
|
126
|
+
|
127
|
+
Copyright (c) 2011 Piotr Murach. See LICENSE.txt for
|
128
|
+
further details.
|
data/Rakefile
CHANGED
@@ -1,51 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'bundler'
|
5
|
-
begin
|
6
|
-
Bundler.setup(:default, :development)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
require './lib/loaf/version.rb'
|
16
|
-
Jeweler::Tasks.new do |gem|
|
17
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
18
|
-
gem.name = "loaf"
|
19
|
-
gem.homepage = "http://github.com/peter-murach/loaf"
|
20
|
-
gem.license = "MIT"
|
21
|
-
gem.summary = %Q{TODO: one-line summary of your gem}
|
22
|
-
gem.description = %Q{TODO: longer description of your gem}
|
23
|
-
gem.email = "pmurach@gmail.com"
|
24
|
-
gem.authors = ["Piotr Murach"]
|
25
|
-
gem.version = Loaf::Version::STRING
|
26
|
-
# dependencies defined in Gemfile
|
27
|
-
end
|
28
|
-
Jeweler::RubygemsDotOrgTasks.new
|
29
|
-
|
30
|
-
require 'rspec/core'
|
3
|
+
require 'bundler/gem_tasks'
|
31
4
|
require 'rspec/core/rake_task'
|
32
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
33
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
34
|
-
end
|
35
5
|
|
36
|
-
RSpec::Core::RakeTask.new(:
|
37
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
38
|
-
spec.rcov = true
|
39
|
-
end
|
6
|
+
RSpec::Core::RakeTask.new(:spec)
|
40
7
|
|
41
8
|
task :default => :spec
|
42
|
-
|
43
|
-
require 'rake/rdoctask'
|
44
|
-
Rake::RDocTask.new do |rdoc|
|
45
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
|
-
|
47
|
-
rdoc.rdoc_dir = 'rdoc'
|
48
|
-
rdoc.title = "loaf #{version}"
|
49
|
-
rdoc.rdoc_files.include('README*')
|
50
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
|
-
end
|
data/init.rb
ADDED
data/lib/loaf.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
-
require 'action_controller'
|
2
1
|
require 'loaf/configuration'
|
2
|
+
require 'loaf/railtie'
|
3
|
+
require 'loaf/crumb'
|
4
|
+
require 'loaf/builder'
|
5
|
+
require 'loaf/translation'
|
6
|
+
require 'loaf/controller_extensions'
|
7
|
+
require 'loaf/view_extensions'
|
8
|
+
require 'loaf/crumb_formatter'
|
3
9
|
|
4
10
|
module Loaf
|
11
|
+
extend Configuration
|
12
|
+
|
5
13
|
if defined? Rails::Railtie
|
6
14
|
require 'loaf/railtie'
|
7
15
|
else
|
8
|
-
autoload :
|
9
|
-
autoload :Helpers, 'loaf/
|
16
|
+
autoload :ControllerExtensions, 'loaf/controller_extensions'
|
17
|
+
autoload :Helpers, 'loaf/view_extensions'
|
10
18
|
|
11
|
-
::ActionController::Base.send :include, Loaf::
|
12
|
-
::ActionController::Base.helper Loaf::
|
19
|
+
::ActionController::Base.send :include, Loaf::ControllerExtensions
|
20
|
+
::ActionController::Base.helper Loaf::ViewExtensions
|
13
21
|
end
|
14
|
-
|
15
|
-
extend Configuration
|
16
|
-
end
|
22
|
+
end # Loaf
|