Bill-route_name_for 0.0.1 → 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/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.0.2 2008-08-28
2
+
3
+ * 1 major enhancement:
4
+ * route_name_for now takes request.request_uri and (empty) environment hash, instead of :controller, :action. It was wrong to ever take :controller, :action since that combination is often ambiguous.
5
+
1
6
  == 0.0.1 2008-08-21
2
7
 
3
8
  * 1 major enhancement:
data/Manifest.txt CHANGED
@@ -6,8 +6,11 @@ README.txt
6
6
  Rakefile
7
7
  config/hoe.rb
8
8
  config/requirements.rb
9
+ lib/init.rb
10
+ lib/rails/init.rb
9
11
  lib/route_name_for.rb
10
12
  lib/route_name_for/version.rb
13
+ route_name_for.gemspec
11
14
  script/console
12
15
  script/destroy
13
16
  script/generate
data/README.txt CHANGED
@@ -4,45 +4,79 @@ http://thoughtpropulsion.com
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- Ruby Gem to look up Rails route name given url_for parameters. Adds route_name_for method to controllers and views.
7
+ Rails helper to look up (named) route name given current request URI. Adds route_name_for method to controllers and views.
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
10
 
11
- * FIX (list of features or problems)
11
+ It only finds named routes of course, so sometimes it'll return nothing (if you give a path for which there)
12
+ is no named route.
12
13
 
13
14
  == SYNOPSIS:
14
15
 
15
- FIX (code sample of usage)
16
+ If you have routes like this:
16
17
 
17
- == REQUIREMENTS:
18
+ map.home '', :controller => 'home'
19
+ map.login 'login', :controller => 'home'
18
20
 
19
- * FIX (list of requirements)
21
+ You might like to define this helper in your ApplicationController:
20
22
 
21
- == INSTALL:
23
+ def body_class
24
+ route_name_for request.request_uri, {}
25
+ end
22
26
 
23
- * FIX (sudo gem install, anything else)
27
+ And then call it from your application layout like this:
24
28
 
25
- == LICENSE:
29
+ <body class='<%=body_class%>'>
30
+
31
+ So that when you browse to '/login', your page will have:
32
+
33
+ <body class='login'>…
34
+
35
+ And when you you browse to '' or '/', your page will have:
36
+
37
+ <body class='home'>…
38
+
39
+ Then you can match that in your CSS rules with a selector like this:
26
40
 
27
- (The MIT License)
41
+ body.login { … }
28
42
 
29
- Copyright (c) 2008 FIXME full name
43
+ == REQUIREMENTS:
44
+
45
+ Rails 2.1.0 or later.
30
46
 
31
- Permission is hereby granted, free of charge, to any person obtaining
32
- a copy of this software and associated documentation files (the
33
- 'Software'), to deal in the Software without restriction, including
34
- without limitation the rights to use, copy, modify, merge, publish,
35
- distribute, sublicense, and/or sell copies of the Software, and to
36
- permit persons to whom the Software is furnished to do so, subject to
37
- the following conditions:
47
+ Also note: this code is highly dependent upon Rails' implementation of the ActionController::Routing::RouteSet implementation. In particular, the optimization to that class found in recognition_optimisation.rb (sic). The upside of this tight coupling is that this add-on performs as well as Rails native routing. The downside is that Rails may (will) change and this RubyGem will have to track those changes.
48
+
49
+ == INSTALL:
38
50
 
39
- The above copyright notice and this permission notice shall be
40
- included in all copies or substantial portions of the Software.
51
+ sudo gem install Bill-route_name_for
52
+
53
+ See also http://gems.github.com/
54
+
55
+ == LICENSE:
41
56
 
42
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
43
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
45
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
46
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
47
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
48
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
57
+ (The BSD License)
58
+
59
+ * Copyright (c) 2008, Thought Propulsion
60
+ * All rights reserved.
61
+ *
62
+ * Redistribution and use in source and binary forms, with or without
63
+ * modification, are permitted provided that the following conditions are met:
64
+ * * Redistributions of source code must retain the above copyright
65
+ * notice, this list of conditions and the following disclaimer.
66
+ * * Redistributions in binary form must reproduce the above copyright
67
+ * notice, this list of conditions and the following disclaimer in the
68
+ * documentation and/or other materials provided with the distribution.
69
+ * * Neither the name of the Thought Propulsion nor the
70
+ * names of its contributors may be used to endorse or promote products
71
+ * derived from this software without specific prior written permission.
72
+ *
73
+ * THIS SOFTWARE IS PROVIDED BY Thought Propulsion ''AS IS'' AND ANY
74
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
75
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
76
+ * DISCLAIMED. IN NO EVENT SHALL Thought Propulsion BE LIABLE FOR ANY
77
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
78
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
79
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
80
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
81
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
82
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/lib/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + "/rails/init"
data/lib/rails/init.rb ADDED
@@ -0,0 +1,7 @@
1
+ [ActionController::Routing::RouteSet].each do |c|
2
+ c.send( :include, RouteNameFor::RouteSetMethods)
3
+ end
4
+ # Optional, but recommended for Rails
5
+ ActionController::Base.send(:include, RouteNameFor::Helpers)
6
+ # Include this module into views, too.
7
+ ActionController::Base.helper(RouteNameFor::Helpers)
@@ -2,7 +2,7 @@ module RouteNameFor
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -2,22 +2,55 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module RouteNameFor
5
-
6
- def route_name_for( options)
7
- # This does a reverse-lookup to find the named route (name) from the current
8
- # controller and action. The is preferrable to just munging the controller name since often
9
- # your named routes (names) evolve somewhat independently of your controller names over time.
10
- routes = ActionController::Routing::Routes.named_routes.routes
11
- found = routes.find do |route_name, route|
12
- route.generate( options, options) # ignore "recall" issues (see Rails route_set.rb)
5
+
6
+ module RouteSetMethods
7
+ def recognized_route( path, env)
8
+ recognized_route_optimized( path, env)
9
+ end
10
+
11
+ def recognized_route_optimized( path, env)
12
+ write_recognized_route_optimized( path, env)
13
+ recognized_route_optimized(path, env)
14
+ end
15
+
16
+ def write_recognized_route_optimized( path, env)
17
+ # This does a reverse-lookup to find the named route (name) from the current
18
+ # controller and action. The is preferrable to just munging the controller name since often
19
+ # your named routes (names) evolve somewhat independently of your controller names over time.
20
+ # See write_recognize_optimized in Rails' recognition_optimisation.rb (sic) (that's where I stole)
21
+ # this code from. It's important to steal this optimized (dynamically-compiled) code lest
22
+ # we defeat the Rails optimization.
23
+
24
+ tree = segment_tree(routes)
25
+ body = generate_code(tree)
26
+ instance_eval %{
27
+ def recognized_route_optimized(path, env)
28
+ segments = to_plain_segments(path)
29
+ index = #{body}
30
+ return nil unless index
31
+ while index < routes.size
32
+ routes[index].recognize(path, env) and return routes[index]
33
+ index += 1
34
+ end
35
+ nil
36
+ end
37
+ }, __FILE__, __LINE__
13
38
  end
14
- (found && found[0]) || ''
15
39
  end
40
+
41
+ module Helpers
42
+ def route_name_for( path, env)
43
+ r = ActionController::Routing::Routes.recognized_route( path, {})
44
+ ActionController::Routing::Routes.named_routes.routes.invert[r].to_s
45
+ end
46
+ end
47
+
16
48
  end
17
49
 
18
- # Properly, we should be extending ActionView::Helpers::UrlHelper, however we are loaded too late
19
- # to do that. By the time we are loaded ActionView has already extended ActionView::Base with all
20
- # its helper modules. So we have to just settle for adding ourselves directly to ActionView::Base.
21
- [ActionController::Base, ActionView::Base].each do |c|
22
- c.send( :include, RouteNameFor)
23
- end
50
+ [ActionController::Routing::RouteSet].each do |c|
51
+ c.send( :include, RouteNameFor::RouteSetMethods)
52
+ end
53
+ # Optional, but recommended for Rails
54
+ ActionController::Base.send(:include, RouteNameFor::Helpers)
55
+ # Include this module into views, too.
56
+ ActionController::Base.helper(RouteNameFor::Helpers)
@@ -0,0 +1,36 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{route_name_for}
3
+ s.version = "0.0.2"
4
+
5
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
+ s.authors = ["Bill Burcham"]
7
+ s.date = %q{2008-08-28}
8
+ s.description = %q{Rails helper to look up (named) route name given current request URI. Adds route_name_for method to controllers and views.}
9
+ s.email = ["propeller@thoughtpropulsion.com"]
10
+ s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "website/index.txt"]
11
+ s.files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "config/hoe.rb", "config/requirements.rb", "lib/init.rb", "lib/rails/init.rb", "lib/route_name_for.rb", "lib/route_name_for/version.rb", "route_name_for.gemspec", "script/console", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "tasks/deployment.rake", "tasks/environment.rake", "tasks/website.rake", "test/test_helper.rb", "test/test_route_name_for.rb", "website/index.html", "website/index.txt", "website/javascripts/rounded_corners_lite.inc.js", "website/stylesheets/screen.css", "website/template.html.erb"]
12
+ s.has_rdoc = true
13
+ s.homepage = %q{http://github.com/Bill/route_name_for/tree/master}
14
+ s.post_install_message = %q{
15
+ For more information on route_name_for, see http://github.com/Bill/route_name_for/tree/master
16
+ }
17
+ s.rdoc_options = ["--main", "README.txt"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{route_name_for}
20
+ s.rubygems_version = %q{1.2.0}
21
+ s.summary = %q{description of gem}
22
+ s.test_files = ["test/test_helper.rb", "test/test_route_name_for.rb"]
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 2
27
+
28
+ if current_version >= 3 then
29
+ s.add_development_dependency(%q<hoe>, [">= 1.7.0"])
30
+ else
31
+ s.add_dependency(%q<hoe>, [">= 1.7.0"])
32
+ end
33
+ else
34
+ s.add_dependency(%q<hoe>, [">= 1.7.0"])
35
+ end
36
+ end
data/website/index.html CHANGED
@@ -1,11 +1,141 @@
1
- <html>
2
- <head>
3
- <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
- <title>route_name_for</title>
5
-
6
- </head>
7
- <body id="body">
8
- <p>This page has not yet been created for RubyGem <code>route_name_for</code></p>
9
- <p>To the developer: To generate it, update website/index.txt and run the rake task <code>website</code> to generate this <code>index.html</code> file.</p>
10
- </body>
11
- </html>
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ route_name_for
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>route_name_for</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/route_name_for"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/route_name_for" class="numbers">0.0.2</a>
37
+ </div>
38
+ <h1>&#x2192; &#8216;route_name_for&#8217;</h1>
39
+
40
+
41
+ <h2>What</h2>
42
+
43
+
44
+ <h2>Installing</h2>
45
+
46
+
47
+ <p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">route_name_for</span></pre></p>
48
+
49
+
50
+ <h2>The basics</h2>
51
+
52
+
53
+ <h2>Demonstration of usage</h2>
54
+
55
+
56
+ <h2>Forum</h2>
57
+
58
+
59
+ <p><a href="http://groups.google.com/group/route_name_for">http://groups.google.com/group/route_name_for</a></p>
60
+
61
+
62
+ <p><span class="caps">TODO</span> &#8211; create Google Group &#8211; route_name_for</p>
63
+
64
+
65
+ <h2>How to submit patches</h2>
66
+
67
+
68
+ <p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people&#8217;s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
69
+
70
+
71
+ <p><span class="caps">TODO</span> &#8211; pick <span class="caps">SVN</span> or Git instructions</p>
72
+
73
+
74
+ <p>The trunk repository is <code>svn://rubyforge.org/var/svn/route_name_for/trunk</code> for anonymous access.</p>
75
+
76
+
77
+ <p><span class="caps">OOOORRRR</span></p>
78
+
79
+
80
+ <p>You can fetch the source from either:</p>
81
+
82
+
83
+ <ul>
84
+ <li>rubyforge: <span class="caps">MISSING IN ACTION</span></li>
85
+ </ul>
86
+
87
+
88
+ <p><span class="caps">TODO</span> &#8211; You can not created a RubyForge project, OR have not run <code>rubyforge config</code>
89
+ yet to refresh your local rubyforge data with this projects&#8217; id information.</p>
90
+
91
+
92
+ <p>When you do this, this message will magically disappear!</p>
93
+
94
+
95
+ <p>Or you can hack website/index.txt and make it all go away!!</p>
96
+
97
+
98
+ <ul>
99
+ <li>github: <a href="http://github.com/GITHUB_USERNAME/route_name_for/tree/master">http://github.com/GITHUB_USERNAME/route_name_for/tree/master</a></li>
100
+ </ul>
101
+
102
+
103
+ <pre>git clone git://github.com/GITHUB_USERNAME/route_name_for.git</pre>
104
+
105
+ <p><span class="caps">TODO</span> &#8211; add &#8220;github_username: username&#8221; to ~/.rubyforge/user-config.yml and newgem will reuse it for future projects.</p>
106
+
107
+
108
+ <ul>
109
+ <li>gitorious: <a href="git://gitorious.org/route_name_for/mainline.git">git://gitorious.org/route_name_for/mainline.git</a></li>
110
+ </ul>
111
+
112
+
113
+ <pre>git clone git://gitorious.org/route_name_for/mainline.git</pre>
114
+
115
+ <h3>Build and test instructions</h3>
116
+
117
+
118
+ <pre>cd route_name_for
119
+ rake test
120
+ rake install_gem</pre>
121
+
122
+ <h2>License</h2>
123
+
124
+
125
+ <p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
126
+
127
+
128
+ <h2>Contact</h2>
129
+
130
+
131
+ <p>Comments are welcome. Send an email to <a href="mailto:FIXME"><span class="caps">FIXME</span> full name</a> email via the <a href="http://groups.google.com/group/route_name_for">forum</a></p>
132
+ <p class="coda">
133
+ <a href="FIXME email">FIXME full name</a>, 21st August 2008<br>
134
+ Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
135
+ </p>
136
+ </div>
137
+
138
+ <!-- insert site tracking codes here, like Google Urchin -->
139
+
140
+ </body>
141
+ </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Bill-route_name_for
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill Burcham
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-08-22 00:00:00 -07:00
12
+ date: 2008-08-28 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -21,7 +21,7 @@ dependencies:
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.7.0
23
23
  version:
24
- description: Look up Rails route name given url_for parameters. Adds route_name_for method to controllers and views.
24
+ description: Rails helper to look up (named) route name given current request URI. Adds route_name_for method to controllers and views.
25
25
  email:
26
26
  - propeller@thoughtpropulsion.com
27
27
  executables: []
@@ -44,8 +44,11 @@ files:
44
44
  - Rakefile
45
45
  - config/hoe.rb
46
46
  - config/requirements.rb
47
+ - lib/init.rb
48
+ - lib/rails/init.rb
47
49
  - lib/route_name_for.rb
48
50
  - lib/route_name_for/version.rb
51
+ - route_name_for.gemspec
49
52
  - script/console
50
53
  - script/destroy
51
54
  - script/generate
@@ -62,10 +65,10 @@ files:
62
65
  - website/stylesheets/screen.css
63
66
  - website/template.html.erb
64
67
  has_rdoc: true
65
- homepage: http://thoughtpropulsion.com
68
+ homepage: http://github.com/Bill/route_name_for/tree/master
66
69
  post_install_message: |
67
70
 
68
- For more information on route_name_for, see http://thoughtpropulsion.com
71
+ For more information on route_name_for, see http://github.com/Bill/route_name_for/tree/master
69
72
 
70
73
  rdoc_options:
71
74
  - --main
@@ -90,7 +93,7 @@ rubyforge_project: route_name_for
90
93
  rubygems_version: 1.2.0
91
94
  signing_key:
92
95
  specification_version: 2
93
- summary: Look up Rails route name given url_for parameters. Adds route_name_for method to controllers and views.
96
+ summary: description of gem
94
97
  test_files:
95
98
  - test/test_helper.rb
96
99
  - test/test_route_name_for.rb