js-routes 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", ">= 3.0"
4
+
5
+ group :development do
6
+ gem "therubyracer"
7
+ gem "rspec", "~> 2.3.0"
8
+ gem "bundler", "~> 1.0.0"
9
+ gem "jeweler", "~> 1.6.2"
10
+ gem "rcov", ">= 0"
11
+ end
@@ -0,0 +1,97 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.9)
6
+ actionpack (= 3.0.9)
7
+ mail (~> 2.2.19)
8
+ actionpack (3.0.9)
9
+ activemodel (= 3.0.9)
10
+ activesupport (= 3.0.9)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.5.0)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.14)
16
+ rack-test (~> 0.5.7)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.9)
19
+ activesupport (= 3.0.9)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.5.0)
22
+ activerecord (3.0.9)
23
+ activemodel (= 3.0.9)
24
+ activesupport (= 3.0.9)
25
+ arel (~> 2.0.10)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.9)
28
+ activemodel (= 3.0.9)
29
+ activesupport (= 3.0.9)
30
+ activesupport (3.0.9)
31
+ arel (2.0.10)
32
+ builder (2.1.2)
33
+ diff-lcs (1.1.2)
34
+ erubis (2.6.6)
35
+ abstract (>= 1.0.0)
36
+ git (1.2.5)
37
+ i18n (0.5.0)
38
+ jeweler (1.6.4)
39
+ bundler (~> 1.0)
40
+ git (>= 1.2.5)
41
+ rake
42
+ libv8 (3.3.10.2)
43
+ mail (2.2.19)
44
+ activesupport (>= 2.3.6)
45
+ i18n (>= 0.4.0)
46
+ mime-types (~> 1.16)
47
+ treetop (~> 1.4.8)
48
+ mime-types (1.16)
49
+ polyglot (0.3.2)
50
+ rack (1.2.3)
51
+ rack-mount (0.6.14)
52
+ rack (>= 1.0.0)
53
+ rack-test (0.5.7)
54
+ rack (>= 1.0)
55
+ rails (3.0.9)
56
+ actionmailer (= 3.0.9)
57
+ actionpack (= 3.0.9)
58
+ activerecord (= 3.0.9)
59
+ activeresource (= 3.0.9)
60
+ activesupport (= 3.0.9)
61
+ bundler (~> 1.0)
62
+ railties (= 3.0.9)
63
+ railties (3.0.9)
64
+ actionpack (= 3.0.9)
65
+ activesupport (= 3.0.9)
66
+ rake (>= 0.8.7)
67
+ rdoc (~> 3.4)
68
+ thor (~> 0.14.4)
69
+ rake (0.9.2)
70
+ rcov (0.9.9)
71
+ rdoc (3.9.1)
72
+ rspec (2.3.0)
73
+ rspec-core (~> 2.3.0)
74
+ rspec-expectations (~> 2.3.0)
75
+ rspec-mocks (~> 2.3.0)
76
+ rspec-core (2.3.1)
77
+ rspec-expectations (2.3.0)
78
+ diff-lcs (~> 1.1.2)
79
+ rspec-mocks (2.3.0)
80
+ therubyracer (0.9.2)
81
+ libv8 (~> 3.3.10)
82
+ thor (0.14.6)
83
+ treetop (1.4.10)
84
+ polyglot
85
+ polyglot (>= 0.3.1)
86
+ tzinfo (0.3.29)
87
+
88
+ PLATFORMS
89
+ ruby
90
+
91
+ DEPENDENCIES
92
+ bundler (~> 1.0.0)
93
+ jeweler (~> 1.6.2)
94
+ rails (>= 3.0)
95
+ rcov
96
+ rspec (~> 2.3.0)
97
+ therubyracer
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Bogdan Gusiev
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.
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
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
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "js-routes"
18
+ gem.homepage = "http://github.com/railsware/js-routes"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Brings Rails named routes to javascript}
21
+ gem.description = %Q{Generates javascript file that defines all Rails named routes as javascript helpers}
22
+ gem.email = "agresso@gmail.com"
23
+ gem.authors = ["Bogdan Gusiev"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "js-routes #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
@@ -0,0 +1,38 @@
1
+ ## JsRoutes
2
+
3
+ Generates javascript file that defines all Rails named routes as javascript helpers
4
+
5
+ ### Intallation
6
+
7
+ Your Rails Gemfile:
8
+
9
+ ``` ruby
10
+ gem "js-routes"
11
+ ```
12
+
13
+ Your application initializer, like `config/initializers/jsroutes.rb`:
14
+
15
+ ``` ruby
16
+ JsRoutes.generate!(
17
+ :file => "#{Rails.root}app/assets/javascripts/routes.js", # This is default
18
+ :default_format => "json" # Default is blank
19
+ )
20
+ ```
21
+
22
+ ### Usage
23
+
24
+ This will create a nice javascript file with `Routes` object that has all the rails routes available:
25
+
26
+ ``` js
27
+ Routes.users_path() // => "/users"
28
+ Routes.user_path(1, {format: 'json'}) // => "/users/1.json"
29
+ Routes.urer_project_path(1,2, {q: 'hello', custom: true}) // => "/users/1/projects/2?q=hello&custom=true"
30
+ ```
31
+
32
+ In order to make routes helpers available globally:
33
+
34
+ ``` js
35
+ $.extend(window, Routes)
36
+ ```
37
+
38
+ #### Have fun
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.0
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{jsroutes}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Bogdan Gusiev"]
12
+ s.date = %q{2011-08-04}
13
+ s.description = %q{Generates javascript file that defines all Rails named routes as javascript helpers}
14
+ s.email = %q{agresso@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ ".rspec",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "Rakefile",
25
+ "Readme.md",
26
+ "VERSION",
27
+ "jsroutes.gemspec",
28
+ "lib/js_routes.rb",
29
+ "lib/jsroutes.rb",
30
+ "lib/routes.js",
31
+ "lib/tasks/js_routes.rake",
32
+ "spec/js_routes_spec.rb",
33
+ "spec/spec_helper.rb"
34
+ ]
35
+ s.homepage = %q{http://github.com/bogdan/jsroutes}
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = %q{1.3.7}
39
+ s.summary = %q{Brings Rails named routes to javascript}
40
+
41
+ if s.respond_to? :specification_version then
42
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
+ s.specification_version = 3
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_runtime_dependency(%q<rails>, [">= 0"])
47
+ s.add_development_dependency(%q<therubyracer>, [">= 0"])
48
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
49
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
50
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
51
+ s.add_development_dependency(%q<rcov>, [">= 0"])
52
+ else
53
+ s.add_dependency(%q<rails>, [">= 0"])
54
+ s.add_dependency(%q<therubyracer>, [">= 0"])
55
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
56
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
57
+ s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
58
+ s.add_dependency(%q<rcov>, [">= 0"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<rails>, [">= 0"])
62
+ s.add_dependency(%q<therubyracer>, [">= 0"])
63
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
64
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
66
+ s.add_dependency(%q<rcov>, [">= 0"])
67
+ end
68
+ end
69
+
@@ -0,0 +1,88 @@
1
+ module JsRoutes
2
+ class << self
3
+
4
+
5
+ def generate(options = {})
6
+ js = File.read(File.dirname(__FILE__) + "/routes.js")
7
+ js.gsub!("IDENTITY", js_routes(options))
8
+ end
9
+
10
+ def generate!(options = {})
11
+ file = options[:file] || default_file
12
+ File.open(file, 'w') do |f|
13
+ f.write generate(options)
14
+ end
15
+ end
16
+
17
+ #
18
+ # Implementation
19
+ #
20
+
21
+ protected
22
+ def js_routes(options = {})
23
+
24
+ options[:default_format] ||= ""
25
+
26
+ Rails.application.reload_routes!
27
+ Rails.application.routes.named_routes.routes.map do |name, route|
28
+ <<-JS
29
+ // #{route.name} => #{route.path}
30
+ #{name.to_s}_path: function(#{build_params route}) {
31
+ var opts = options || {};
32
+ var format = opts.format || '#{options[:default_format]}';
33
+ delete opts.format;
34
+ #{build_default_params route};
35
+ return Routes.check_path('#{build_path route}' + format) + Routes.serialize(opts);
36
+ },
37
+ JS
38
+ end.join("\n")
39
+ end
40
+
41
+
42
+ def build_params route
43
+ route.conditions[:path_info].captures.map do |cap|
44
+ if cap.is_a?(Rack::Mount::GeneratableRegexp::DynamicSegment)
45
+ if cap.name.to_s == "format"
46
+ nil
47
+ else
48
+ cap.name.to_s.gsub(':', '')
49
+ end
50
+ end
51
+ end.compact.<<("options").join(', ')
52
+ end
53
+
54
+ def build_default_params route
55
+ route.conditions[:path_info].captures.map do |cap|
56
+ if cap.is_a?(Rack::Mount::GeneratableRegexp::DynamicSegment)
57
+ segg = cap.name.to_s.gsub(':', '')
58
+ "#{segg} = Routes.check_parameter(#{segg});"
59
+ end
60
+ end.join("\n")
61
+ end
62
+
63
+ def build_path route
64
+ s = route.path.gsub(/\(\.:format\)$/, ".")
65
+
66
+ route.conditions[:path_info].captures.each do |cap|
67
+ unless cap.name.to_s == "format"
68
+ if route.conditions[:path_info].required_params.include?(cap.name)
69
+ s.gsub!(/:#{cap.name.to_s}/){ "' + #{cap.name.to_s.gsub(':','')} + '" }
70
+ else
71
+ s.gsub!(/\((\.)?:#{cap.name.to_s}\)/){ "#{$1}' + #{cap.name.to_s.gsub(':','')} + '" }
72
+ end
73
+ end
74
+ end
75
+ s
76
+
77
+ end
78
+
79
+ def default_file
80
+ if Rails.version >= "3.1"
81
+ "#{Rails.root}/app/assets/javascripts/routes.js"
82
+ else
83
+ "#{Rails.root}/public/javascripts/routes.js"
84
+ end
85
+ end
86
+
87
+ end
88
+ end
@@ -0,0 +1 @@
1
+ require "js_routes"
@@ -0,0 +1,29 @@
1
+ var Routes = {
2
+
3
+ IDENTITY
4
+
5
+ serialize: function(obj){
6
+ if (obj == null) {return '';}
7
+ var s = [];
8
+ for (prop in obj){
9
+ s.push(prop + "=" + obj[prop]);
10
+ }
11
+ if (s.length == 0) {
12
+ return '';
13
+ }
14
+ return "?" + s.join('&');
15
+ },
16
+
17
+
18
+ check_parameter: function(param) {
19
+ if (param === undefined) {
20
+ param = '';
21
+ }
22
+ return param;
23
+ },
24
+
25
+ check_path: function(path) {
26
+ return path.replace(/\.$/m, '');
27
+ }
28
+
29
+ }
@@ -0,0 +1,14 @@
1
+
2
+ namespace :less do
3
+ namespace :js do
4
+ desc "Make a js file that will have functions that will return restful routes/urls."
5
+ task :routes => :environment do
6
+ require "jsroutes"
7
+
8
+ # Hack for actually load the routes (taken from railties console/app.rb)
9
+ ActionDispatch::Callbacks.new(lambda {}, false)
10
+
11
+ JsRoutes.generate!
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+ require "fileutils"
3
+
4
+
5
+
6
+ describe JsRoutes do
7
+ before(:each) do
8
+ evaljs(JsRoutes.generate(_options))
9
+ end
10
+
11
+ let(:_options) { {} }
12
+
13
+ it "should generate collection routing" do
14
+ evaljs("Routes.inboxes_path()").should == "/inboxes"
15
+ end
16
+
17
+ it "should generate member routing" do
18
+ evaljs("Routes.inbox_path(1)").should == "/inboxes/1"
19
+ end
20
+
21
+ it "should generate nested routing" do
22
+ evaljs("Routes.inbox_message_path(1,2)").should == "/inboxes/1/messages/2"
23
+ end
24
+
25
+ it "should generate routing with format" do
26
+ evaljs("Routes.inbox_path(1, {format: 'json'})").should == "/inboxes/1.json"
27
+ end
28
+
29
+ it "should support get parameters" do
30
+ evaljs("Routes.inbox_path(1, {format: 'json', q: 'hello', lang: 'ua'})").should == "/inboxes/1.json?q=hello&lang=ua"
31
+ end
32
+
33
+
34
+ context "when default_format is specified" do
35
+ let(:_options) { {:default_format => "json"} }
36
+
37
+ it "should render routing with default_format" do
38
+ evaljs("Routes.inbox_path(1)").should == "/inboxes/1.json"
39
+ end
40
+
41
+ it "should override default_format implicitly" do
42
+ evaljs("Routes.inbox_path(1, {format: 'xml'})").should == "/inboxes/1.xml"
43
+ end
44
+
45
+ end
46
+
47
+ describe ".generate!" do
48
+ let(:name) { "#{File.dirname(__FILE__)}/../routes.js" }
49
+ it "should generate routes file" do
50
+ FileUtils.rm_f(name)
51
+ JsRoutes.generate!({:file => name})
52
+ File.exists?(name).should be_true
53
+ end
54
+ after(:all) do
55
+ FileUtils.rm_f(name)
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,30 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'jsroutes'
5
+ require 'rails'
6
+ require "v8"
7
+ require "active_support/core_ext/hash/slice"
8
+
9
+ def evaljs(string)
10
+ @context ||= V8::Context.new
11
+ @context.eval(string)
12
+ end
13
+
14
+ class App < Rails::Application
15
+ self.routes.draw do
16
+ resources :inboxes do
17
+ resources :messages
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+
24
+ # Requires supporting files with custom matchers and macros, etc,
25
+ # in ./support/ and its subdirectories.
26
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
27
+
28
+ RSpec.configure do |config|
29
+
30
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: js-routes
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Bogdan Gusiev
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-08-04 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 7
28
+ segments:
29
+ - 3
30
+ - 0
31
+ version: "3.0"
32
+ requirement: *id001
33
+ type: :runtime
34
+ name: rails
35
+ prerelease: false
36
+ - !ruby/object:Gem::Dependency
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ requirement: *id002
47
+ type: :development
48
+ name: therubyracer
49
+ prerelease: false
50
+ - !ruby/object:Gem::Dependency
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 2
59
+ - 3
60
+ - 0
61
+ version: 2.3.0
62
+ requirement: *id003
63
+ type: :development
64
+ name: rspec
65
+ prerelease: false
66
+ - !ruby/object:Gem::Dependency
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ hash: 23
73
+ segments:
74
+ - 1
75
+ - 0
76
+ - 0
77
+ version: 1.0.0
78
+ requirement: *id004
79
+ type: :development
80
+ name: bundler
81
+ prerelease: false
82
+ - !ruby/object:Gem::Dependency
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ hash: 11
89
+ segments:
90
+ - 1
91
+ - 6
92
+ - 2
93
+ version: 1.6.2
94
+ requirement: *id005
95
+ type: :development
96
+ name: jeweler
97
+ prerelease: false
98
+ - !ruby/object:Gem::Dependency
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ requirement: *id006
109
+ type: :development
110
+ name: rcov
111
+ prerelease: false
112
+ description: Generates javascript file that defines all Rails named routes as javascript helpers
113
+ email: agresso@gmail.com
114
+ executables: []
115
+
116
+ extensions: []
117
+
118
+ extra_rdoc_files:
119
+ - LICENSE.txt
120
+ files:
121
+ - .document
122
+ - .rspec
123
+ - Gemfile
124
+ - Gemfile.lock
125
+ - LICENSE.txt
126
+ - Rakefile
127
+ - Readme.md
128
+ - VERSION
129
+ - jsroutes.gemspec
130
+ - lib/js_routes.rb
131
+ - lib/jsroutes.rb
132
+ - lib/routes.js
133
+ - lib/tasks/js_routes.rake
134
+ - spec/js_routes_spec.rb
135
+ - spec/spec_helper.rb
136
+ has_rdoc: true
137
+ homepage: http://github.com/railsware/js-routes
138
+ licenses:
139
+ - MIT
140
+ post_install_message:
141
+ rdoc_options: []
142
+
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 3
160
+ segments:
161
+ - 0
162
+ version: "0"
163
+ requirements: []
164
+
165
+ rubyforge_project:
166
+ rubygems_version: 1.3.7
167
+ signing_key:
168
+ specification_version: 3
169
+ summary: Brings Rails named routes to javascript
170
+ test_files: []
171
+