autolink 0.0.2
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/LICENSE +20 -0
- data/README.rdoc +23 -0
- data/Rakefile +29 -0
- data/autolink.gemspec +19 -0
- data/lib/autolink.rb +3 -0
- data/lib/autolink/action_controller_extensions.rb +26 -0
- data/lib/autolink/action_view_extensions.rb +28 -0
- data/lib/autolink/active_record_extensions.rb +9 -0
- data/lib/autolink/rspec.rb +25 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/spec_opts.rb +1 -0
- metadata +79 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Burke Libbey, Thorkelson Consulting Ltd.
|
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.rdoc
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
= autolink
|
2
|
+
|
3
|
+
Autolink is a small set of monkeypatches to make linking to objects in deeply-namespaced url schemas completely painless. Say you have object @d, which is almost always referred to as /a/b/@d.b.id/c/@d.c.id/d/@d.id. This plugin lets you specify that default in @d's model, then simply pass @d to rails' link helpers. So `path_for @d` now returns '/a/1/b/2/c/3/d/4'.
|
4
|
+
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
Autolink only works in Rails 2.3, and has only been tested on 2.3.8. Add it as a gem in config/environment.rb:
|
8
|
+
|
9
|
+
config.gem 'autolink'
|
10
|
+
|
11
|
+
Then add this to your 'spec/spec_helper.rb', under the line that requires 'spec/rails':
|
12
|
+
|
13
|
+
require 'autolink/rspec'
|
14
|
+
|
15
|
+
Now add this to any models that you want to autolink:
|
16
|
+
|
17
|
+
def self.default_lineage(object)
|
18
|
+
[:path, :to, :model, object.parent, object]
|
19
|
+
end
|
20
|
+
|
21
|
+
This default lineage works exactly like ActionController's PolymorphicRouting lineage (since that's what it is...). The reason it's a class method rather than an instance method is to deal with some sticky mock-related issues.
|
22
|
+
|
23
|
+
I make no guarantees that this will work for you.
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rcov/rcovtask'
|
6
|
+
Rcov::RcovTask.new do |test|
|
7
|
+
test.libs << 'spec'
|
8
|
+
test.pattern = 'spec/**/*_spec.rb'
|
9
|
+
test.verbose = true
|
10
|
+
end
|
11
|
+
rescue LoadError
|
12
|
+
task :rcov do
|
13
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'rake/rdoctask'
|
18
|
+
Rake::RDocTask.new do |rdoc|
|
19
|
+
if File.exist?('VERSION')
|
20
|
+
version = File.read('VERSION')
|
21
|
+
else
|
22
|
+
version = ""
|
23
|
+
end
|
24
|
+
|
25
|
+
rdoc.rdoc_dir = 'rdoc'
|
26
|
+
rdoc.title = "multilogger #{version}"
|
27
|
+
rdoc.rdoc_files.include('README*')
|
28
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
29
|
+
end
|
data/autolink.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = 'autolink'
|
3
|
+
gem.version = "0.0.2"
|
4
|
+
|
5
|
+
gem.author, gem.email = 'Burke Libbey', "burke@burkelibbey.org"
|
6
|
+
gem.homepage = "http://github.com/burke/autolink"
|
7
|
+
|
8
|
+
gem.summary = "Automatically generate nested paths in Rails 2.3 according to your application's setup"
|
9
|
+
gem.description = "By setting a default lineage in each model, and using these monkeypatches to Rails, the url helpers are able to generate complex urls from a single ActiveRecord::Base object. Works in 2.3.8, probably other 2.3 railses."
|
10
|
+
|
11
|
+
gem.required_ruby_version = '>= 1.8.7'
|
12
|
+
|
13
|
+
gem.has_rdoc = false
|
14
|
+
|
15
|
+
gem.files = Dir.glob("{lib,spec}/**/*") + %w(LICENSE README.rdoc Rakefile autolink.gemspec)
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
|
data/lib/autolink.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActionController #:nodoc:
|
2
|
+
class Base
|
3
|
+
|
4
|
+
def autolink(obj)
|
5
|
+
polymorphic_url(obj.class.default_lineage(obj))
|
6
|
+
end
|
7
|
+
|
8
|
+
def url_for(options = {})
|
9
|
+
options ||= {}
|
10
|
+
case options
|
11
|
+
when ActiveRecord::Base # +
|
12
|
+
@@__url = @url # +
|
13
|
+
autolink(options) # +
|
14
|
+
when String
|
15
|
+
options
|
16
|
+
when Hash
|
17
|
+
@url = @@__url unless @url # +
|
18
|
+
@url.rewrite(rewrite_options(options))
|
19
|
+
else
|
20
|
+
polymorphic_url(options)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ActionView
|
2
|
+
module Helpers
|
3
|
+
module UrlHelper
|
4
|
+
def url_for(options = {})
|
5
|
+
options ||= {}
|
6
|
+
url = case options
|
7
|
+
when ActiveRecord::Base # This method is the same as 2.3.8,
|
8
|
+
polymorphic_path(options.class.default_lineage(options)) # Except for the addition of these two lines.
|
9
|
+
when String
|
10
|
+
escape = true
|
11
|
+
options
|
12
|
+
when Hash
|
13
|
+
options = { :only_path => options[:host].nil? }.update(options.symbolize_keys)
|
14
|
+
escape = options.key?(:escape) ? options.delete(:escape) : true
|
15
|
+
@controller.send(:url_for, options)
|
16
|
+
when :back
|
17
|
+
escape = false
|
18
|
+
@controller.request.env["HTTP_REFERER"] || 'javascript:history.back()'
|
19
|
+
else
|
20
|
+
escape = false
|
21
|
+
polymorphic_path(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
escape ? escape_once(url).html_safe : url
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rails
|
3
|
+
module Matchers
|
4
|
+
|
5
|
+
class RedirectTo
|
6
|
+
|
7
|
+
def expected_url
|
8
|
+
case @expected
|
9
|
+
when ActiveRecord::Base
|
10
|
+
ActionController::Base.new.autolink(@expected)
|
11
|
+
when Hash
|
12
|
+
return ActionController::UrlRewriter.new(@request, {}).rewrite(@expected)
|
13
|
+
when :back
|
14
|
+
return @request.env['HTTP_REFERER']
|
15
|
+
when %r{^\w+://.*}
|
16
|
+
return @expected
|
17
|
+
else
|
18
|
+
return "http://#{@request.host}" + (@expected.split('')[0] == '/' ? '' : '/') + @expected
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/spec/spec_opts.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: autolink
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Burke Libbey
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-08-25 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: By setting a default lineage in each model, and using these monkeypatches to Rails, the url helpers are able to generate complex urls from a single ActiveRecord::Base object. Works in 2.3.8, probably other 2.3 railses.
|
23
|
+
email: burke@burkelibbey.org
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- lib/autolink/action_controller_extensions.rb
|
32
|
+
- lib/autolink/action_view_extensions.rb
|
33
|
+
- lib/autolink/active_record_extensions.rb
|
34
|
+
- lib/autolink/rspec.rb
|
35
|
+
- lib/autolink.rb
|
36
|
+
- spec/spec_helper.rb
|
37
|
+
- spec/spec_opts.rb
|
38
|
+
- LICENSE
|
39
|
+
- README.rdoc
|
40
|
+
- Rakefile
|
41
|
+
- autolink.gemspec
|
42
|
+
has_rdoc: false
|
43
|
+
homepage: http://github.com/burke/autolink
|
44
|
+
licenses: []
|
45
|
+
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 57
|
57
|
+
segments:
|
58
|
+
- 1
|
59
|
+
- 8
|
60
|
+
- 7
|
61
|
+
version: 1.8.7
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
hash: 3
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.3.7
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Automatically generate nested paths in Rails 2.3 according to your application's setup
|
78
|
+
test_files: []
|
79
|
+
|