asset_pipeline_routes 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +39 -36
  3. data/lib/asset_pipeline_routes/path.rb +3 -2
  4. data/lib/asset_pipeline_routes/path_processor.rb +30 -0
  5. data/lib/asset_pipeline_routes/railtie.rb +1 -5
  6. data/lib/asset_pipeline_routes/routes.rb +1 -5
  7. data/lib/asset_pipeline_routes/version.rb +1 -1
  8. data/lib/asset_pipeline_routes.rb +8 -7
  9. data/spec/asset_pipeline_routes_spec.rb +18 -50
  10. data/spec/fixtures/argument_function.js +1 -0
  11. data/spec/fixtures/false_positive.js +1 -0
  12. data/spec/fixtures/function_argument.js +1 -0
  13. data/spec/fixtures/nested_routes.js +1 -0
  14. data/spec/fixtures/simple_coffee_route.js.coffee +1 -0
  15. data/spec/fixtures/simple_route.js +1 -0
  16. data/spec/fixtures/simple_route_with_variable.js +2 -0
  17. data/spec/fixtures/unknown_route.js +1 -0
  18. data/spec/fixtures/unqualified_routes.js +1 -0
  19. data/spec/path_processor_spec.rb +63 -0
  20. data/spec/path_spec.rb +1 -1
  21. data/spec/spec_helper.rb +2 -0
  22. metadata +73 -71
  23. data/lib/asset_pipeline_routes/js_function_helper.rb +0 -27
  24. data/lib/asset_pipeline_routes/routes_context.rb +0 -8
  25. data/spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats-default-replacements.xml +0 -9
  26. data/spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats-number-of-replacements.xml +0 -9
  27. data/spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats-replacements.xml +0 -11
  28. data/spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats.xml +0 -7
  29. data/spec/reports/SPEC-AssetPipelineRoutes-Path-apply-format.xml +0 -11
  30. data/spec/reports/SPEC-AssetPipelineRoutes-Path-format.xml +0 -11
  31. data/spec/reports/SPEC-AssetPipelineRoutes-Path.xml +0 -7
  32. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-javascript-method-generation.xml +0 -13
  33. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-nested-routes-project-ticket-path.xml +0 -9
  34. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-nested-routes-with-format.xml +0 -11
  35. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-nested-routes.xml +0 -17
  36. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-edit-edit-user-path.xml +0 -9
  37. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-edit-with-format.xml +0 -11
  38. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-edit.xml +0 -11
  39. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-index-users-path.xml +0 -9
  40. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-index-with-format.xml +0 -9
  41. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-index.xml +0 -11
  42. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-show-user-path.xml +0 -9
  43. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-show-with-format.xml +0 -11
  44. data/spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-show.xml +0 -11
  45. data/spec/reports/SPEC-AssetPipelineRoutes-Routes.xml +0 -7
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1e0aeb2674f4d71a276bdcddb8d548fd28170850
4
+ data.tar.gz: 1ab2d6146ded1c488fb782630eabc8c50430c360
5
+ SHA512:
6
+ metadata.gz: 27200138ee83a6b432f4a8b32ac451227a9eac0ed609966f8d7f237e3a23f9e3f18af7449003e34483631071a08c75c9f6b40f5c3caf1d605bc08244319b8a15
7
+ data.tar.gz: 9eed93d8a24d642b349935912f194581d2c5daffa2a98a2dff19c2cf28fbe4dbc1776a76fb1c8091d48e4939a754ee4e1f1abf949629e0143784f7ae64bd2d75
data/README.md CHANGED
@@ -1,57 +1,60 @@
1
1
  # asset\_pipeline\_routes
2
2
 
3
- Getting your Rails routes into the Rails 3.2 asset pipeline is really easy. Just
4
- `include Rails.application.routes.url_helpers` and you have all your routes available.
3
+ [![Build Status](https://travis-ci.org/nicolai86/asset_pipeline_routes.png?branch=master)](https://travis-ci.org/nicolai86/asset_pipeline_routes)
5
4
 
6
- But except for hard-coded links this won't help you, because in production you have to pass in resource parameters at compile-time, where they are not available.
5
+ `asset_pipeline_routes` defines a `r` shorthand function which you can use inside your javascript assets.
7
6
 
8
- Heh, you might think! Just call a route helper and pass in a dynamic parameter mapping, like
9
- `user_path('{{id}}')`. Sadly this won't yield the desired result! Instead of `/users/{{id}}`, you'll be presented with `/users/%7B%7Bid%7D%7D` because you're mapping just got html_escaped!
7
+ ## What it does
10
8
 
11
- This is where asset\_pipeline\_routes comes to the rescue!
9
+ Assuming you got a `routes.rb` with:
12
10
 
13
- # What it does
11
+ ``` ruby
12
+ resources :users # => yields multiple routes, e.g. /users/:id(.:format)
13
+ ```
14
14
 
15
- It adds a helper object to your asset-pipeline called `r`. Using
16
- `r` you can access all your routes you'd normally do, except that all those path fragments
17
- can be changed to whatever you need them to.
15
+ Inside your javascript assets you can now write:
18
16
 
19
- Here's an example, assuming you got a routes.rb with
17
+ ``` javascript
18
+ r(users_path) // => yields '/users'
19
+ r(user_path) // => yields '/users/{{id}}'
20
+ r(user_path, userId) // => yields '/users/'+userId
21
+ ```
20
22
 
21
- resources :users # => yields multiple routes, e.g. /users/:id(.:format)
23
+ It works with coffeescript as well:
22
24
 
23
- in it. Then, in you're javascript file you'd call `r.users_path`. All path fragments are replaced with Mustache-style attribute bindings by default:
25
+ ``` coffeescript
26
+ promise = $.rails.ajax({
27
+ url: r(user_path, userId)
28
+ })
29
+ ```
24
30
 
25
- # application.js.coffee.erb
26
- userPath = '<%= r.user_path %>' # => yields /users/{{id}}
27
- usersPath = '<%= r.users_path %>' # => yields /users
31
+ If you are compiling client side templates with the rails asset pipeline this works inside templates as well, e.g.
28
32
 
29
- You can even hook up member- or collection routes, whatever you like really. Just prefix your routes with `r.` and you can directly use them in your asset-pipeline!
33
+ ``` hamlbars
34
+ %form{ action: r(user_path) }
35
+ ```
36
+ will generate
37
+ ``` html
38
+ <form action='/users/{{id}}'></form>
39
+ ```
30
40
 
31
- All `_path`-methods take an arbitrary argument which is used to evaluate the final route.
32
- So if you want a regexp matching all users-show actions, you can do it just like this:
41
+ ## Upgrading Notes
33
42
 
34
- # application.js.coffee.erb
35
- usersPath = '<%= r.user_path '\d+' %>' # => yields /users/\d+
43
+ *v0.2* introduced code breaking changes!
44
+ **THIS WILL NO LONGER WORK**
36
45
 
37
- Sometimes you want to generate the URL for a given resource on the client-side entirely. That's possible as well:
46
+ ``` erb
47
+ // inside application.js.erb
48
+ var url = '<%= r.user_path 42 %>';
49
+ ```
38
50
 
39
- # application.js.erb
40
- var editUserRoute = <%= r.edit_user_path_method %>; // => yields anonymous function in js
41
- var editUserPath = editUserRoute(42); // => yields '/users/42/edit'
51
+ Instead, you can now drop the `.erb` extension and use r inline:
42
52
 
43
- # or, if you prefer CoffeeScript:
44
- # application.js.coffee.erb
45
- editUserPath = <%= r.edit_user_path_method(:coffee) %>
46
- editUserPath = editUserRoute(42) # => yields '/users/42/edit'
47
-
48
- Now you have total control over your Rails routes.
49
-
50
- # Addendum
51
-
52
- If you happen to use haml\_assets to be able to use HAML in your asset pipeline, you could easily create forms to be used in Backbone.js or similar - because you can add an url option which correctly binds to your context!
53
+ ``` javascript
54
+ var url = r(user_path, 42);
55
+ ```
53
56
 
54
57
  # License
55
- Copyright © 2011 Raphael Randschau <nicolai86@me.com>
58
+ Copyright © 2011-2013 Raphael Randschau <nicolai86@me.com>
56
59
 
57
60
  asset\_pipeline\_routes is distributed under an MIT-style license. See LICENSE for details.
@@ -23,9 +23,10 @@ module AssetPipelineRoutes
23
23
 
24
24
  def build *args
25
25
  apply_format args.extract_options!
26
- replacements(*args).inject(@route) { |route, param|
26
+ clean = replacements(*args).inject(@route) { |route, param|
27
27
  route.sub(/:(\w+)/, param.to_s)
28
28
  }
29
+ return "'#{clean}'"
29
30
  end
30
31
 
31
32
  def format options
@@ -40,7 +41,7 @@ module AssetPipelineRoutes
40
41
 
41
42
  def replacements *args
42
43
  defaults = default_replacements
43
- defaults[0...args.length] = args
44
+ defaults[0...args.length] = args.map { |item| (item != DEFAULT_REPLACEMENT) ? "'+#{item}+'" : item }
44
45
  defaults
45
46
  end
46
47
 
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ require 'sprockets/processor'
3
+ require 'active_support/core_ext/object/blank'
4
+ module AssetPipelineRoutes
5
+ class PathProcessor < ::Sprockets::Processor
6
+ def r
7
+ @r ||= Routes.new(Rails.application.routes.routes)
8
+ end
9
+ def r= new_r
10
+ @r = new_r
11
+ end
12
+
13
+ def evaluate context, locals
14
+ data.gsub /[^[[:word:]]]r\(([[:word:]]+),?(.*)\)/ do |match|
15
+ parts = $2.split(',').map(&:strip).reject(&:blank?)
16
+ route = $1.to_sym
17
+
18
+ wrap = (match[0] == '(')
19
+
20
+ expanded = if r.respond_to? route
21
+ r.send route, *parts
22
+ else
23
+ "''"
24
+ end
25
+
26
+ wrap ? "(#{expanded})" : expanded
27
+ end
28
+ end
29
+ end
30
+ end
@@ -3,11 +3,7 @@ module AssetPipelineRoutes
3
3
  class Railtie < ::Rails::Railtie
4
4
  initializer "asset_pipeline_routes.environment" do |app|
5
5
  ActiveSupport.on_load(:action_view) do
6
- include ::AssetPipelineRoutes::RoutesContext
7
-
8
- app.assets.context_class.instance_eval do
9
- include ::AssetPipelineRoutes::RoutesContext
10
- end
6
+ app.assets.register_preprocessor('application/javascript', PathProcessor)
11
7
  end
12
8
  end
13
9
  end
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require "active_support/core_ext/array/extract_options"
3
+ require 'active_support/core_ext/string/inflections'
3
4
 
4
5
  module AssetPipelineRoutes
5
6
  class Routes
@@ -16,11 +17,6 @@ module AssetPipelineRoutes
16
17
  def define_route route
17
18
  self.class.instance_eval do
18
19
  define_method :"#{route.name}_path", Path.proc_for_route(route)
19
-
20
- define_method :"#{route.name}_path_method" do |style = :js|
21
- path = Path.new(route.path.ast.to_s)
22
- JsFunctionHelper::route_to_anonymous_function(path.build(*Array.new(path.number_of_replacements, ':\1')), style)
23
- end
24
20
  end
25
21
  end
26
22
 
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module AssetPipelineRoutes
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
@@ -1,11 +1,12 @@
1
1
  # encoding: UTF-8
2
- require_relative "asset_pipeline_routes/version"
2
+ require "asset_pipeline_routes/version"
3
+ require "asset_pipeline_routes/path"
4
+ require "asset_pipeline_routes/routes"
5
+ require "asset_pipeline_routes/path_processor"
3
6
 
4
- module AssetPipelineRoutes
5
- autoload :Path, 'asset_pipeline_routes/path'
6
- autoload :Routes, 'asset_pipeline_routes/routes'
7
- autoload :JsFunctionHelper, 'asset_pipeline_routes/js_function_helper'
8
- autoload :RoutesContext, 'asset_pipeline_routes/routes_context'
7
+ if defined?(Rails)
8
+ require "asset_pipeline_routes/railtie"
9
9
  end
10
10
 
11
- require_relative "asset_pipeline_routes/railtie" if defined?(Rails)
11
+ module AssetPipelineRoutes
12
+ end
@@ -12,11 +12,11 @@ describe AssetPipelineRoutes::Routes do
12
12
  subject { AssetPipelineRoutes::Routes.new [@route] }
13
13
 
14
14
  it { should respond_to(:users_path) }
15
- its(:users_path) { should eql '/users'}
16
- it { subject.users_path('\d+').should eql('/users') }
15
+ its(:users_path) { should eql "'/users'"}
16
+ it { subject.users_path('42').should eql("'/users'") }
17
17
 
18
18
  describe "with format" do
19
- it { subject.users_path(format: 'json').should eql('/users.json') }
19
+ it { subject.users_path(format: 'json').should eql("'/users.json'") }
20
20
  end
21
21
  end
22
22
 
@@ -25,12 +25,12 @@ describe AssetPipelineRoutes::Routes do
25
25
  subject { AssetPipelineRoutes::Routes.new [@route] }
26
26
 
27
27
  it { should respond_to(:user_path) }
28
- its(:user_path) { should eql('/users/{{id}}') }
29
- it { subject.user_path('\d+').should eql('/users/\d+') }
28
+ its(:user_path) { should eql("'/users/{{id}}'") }
29
+ it { subject.user_path('42').should eql("'/users/'+42+''") }
30
30
 
31
31
  describe "with format" do
32
- it { subject.user_path('\d+', format: 'json').should eql('/users/\d+.json') }
33
- it { subject.user_path(42, format: 'xml').should eql('/users/42.xml') }
32
+ it { subject.user_path("'42'", format: 'json').should eql("'/users/'+'42'+'.json'") }
33
+ it { subject.user_path(42, format: 'xml').should eql("'/users/'+42+'.xml'") }
34
34
  end
35
35
  end
36
36
 
@@ -39,12 +39,12 @@ describe AssetPipelineRoutes::Routes do
39
39
  subject { AssetPipelineRoutes::Routes.new [@route] }
40
40
 
41
41
  it { should respond_to(:edit_user_path) }
42
- its(:edit_user_path) { should eql('/users/{{id}}/edit') }
43
- it { subject.edit_user_path('\d+').should eql('/users/\d+/edit') }
42
+ its(:edit_user_path) { should eql("'/users/{{id}}/edit'") }
43
+ it { subject.edit_user_path('42').should eql("'/users/'+42+'/edit'") }
44
44
 
45
45
  describe "with format" do
46
- it { subject.edit_user_path('\d+', format: 'json').should eql('/users/\d+/edit.json') }
47
- it { subject.edit_user_path(42, format: 'xml').should eql('/users/42/edit.xml') }
46
+ it { subject.edit_user_path('42', format: 'json').should eql("'/users/'+42+'/edit.json'") }
47
+ it { subject.edit_user_path(42, format: 'xml').should eql("'/users/'+42+'/edit.xml'") }
48
48
  end
49
49
  end
50
50
 
@@ -53,47 +53,15 @@ describe AssetPipelineRoutes::Routes do
53
53
  subject { AssetPipelineRoutes::Routes.new [@route] }
54
54
 
55
55
  it { should respond_to(:project_ticket_path) }
56
- its(:project_ticket_path) {should eql('/projects/{{project_id}}/tickets/{{id}}') }
57
- it { subject.project_ticket_path(1,'\d+').should eql('/projects/1/tickets/\d+') }
58
- it { subject.project_ticket_path('\d+',2).should eql('/projects/\d+/tickets/2') }
59
- it { subject.project_ticket_path(1,2).should eql('/projects/1/tickets/2') }
60
- it { subject.project_ticket_path(1,2,3).should eql('/projects/1/tickets/2') }
56
+ its(:project_ticket_path) {should eql("'/projects/{{project_id}}/tickets/{{id}}'") }
57
+ it { subject.project_ticket_path(1).should eql("'/projects/'+1+'/tickets/{{id}}'") }
58
+ it { subject.project_ticket_path('x',2).should eql("'/projects/'+x+'/tickets/'+2+''") }
59
+ it { subject.project_ticket_path(1,2).should eql("'/projects/'+1+'/tickets/'+2+''") }
60
+ it { subject.project_ticket_path(1,2,3).should eql("'/projects/'+1+'/tickets/'+2+''") }
61
61
 
62
62
  describe "with format" do
63
- it { subject.project_ticket_path("a","b",format: 'json').should eql('/projects/a/tickets/b.json') }
64
- it { subject.project_ticket_path("a", format: 'json').should eql('/projects/a/tickets/{{id}}.json') }
65
- end
66
- end
67
-
68
- describe 'javascript method generation' do
69
- before { @route = build_route 'user', '/users/:id/edit(.:format)' }
70
- subject { AssetPipelineRoutes::Routes.new [@route] }
71
-
72
- it { should respond_to(:user_path_method) }
73
-
74
- it "should generate JavaScript mapping method" do
75
- js_method = "(function() { return function (id) { return '/users/' + id + '/edit' }; }).call(this);"
76
- subject.edit_user_path_method.should eql(js_method)
77
- end
78
-
79
- it "should generate CoffeScript mapping method" do
80
- coffee_method = "(-> (id) -> '/users/' + id + '/edit')(this)"
81
- subject.edit_user_path_method(:coffee).should eql(coffee_method)
82
- end
83
-
84
- context 'nested routes' do
85
- before { @route = build_route 'project_ticket', '/projects/:project_id/tickets/:id(.:format)' }
86
- subject { AssetPipelineRoutes::Routes.new [@route] }
87
-
88
- it "should generate CoffeScript mapping method" do
89
- coffee_method = "(-> (projectId, id) -> '/projects/' + projectId + '/tickets/' + id)(this)"
90
- subject.project_ticket_path_method(:coffee).should eql(coffee_method)
91
- end
92
-
93
- it "should generate JavaScript mapping method" do
94
- js_method = "(function() { return function (projectId, id) { return '/projects/' + projectId + '/tickets/' + id }; }).call(this);"
95
- subject.project_ticket_path_method.should eql(js_method)
96
- end
63
+ it { subject.project_ticket_path("a","b",format: 'json').should eql("'/projects/'+a+'/tickets/'+b+'.json'") }
64
+ it { subject.project_ticket_path("a", format: 'json').should eql("'/projects/'+a+'/tickets/{{id}}.json'") }
97
65
  end
98
66
  end
99
67
  end
@@ -0,0 +1 @@
1
+ var url = r(user_path, fetchUserId());
@@ -0,0 +1 @@
1
+ var x = receiver(y);
@@ -0,0 +1 @@
1
+ var url = receiver(r(users_path));
@@ -0,0 +1 @@
1
+ var project_path = r(project_ticket_path, 2);
@@ -0,0 +1 @@
1
+ Bar = r(users_path);
@@ -0,0 +1 @@
1
+ var Bar = r(users_path);
@@ -0,0 +1,2 @@
1
+ var x = 2;
2
+ var Bar = r(user_path, x);
@@ -0,0 +1 @@
1
+ var Bar = r(foo_path);
@@ -0,0 +1 @@
1
+ var url = r(user_path);
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'sprockets'
3
+
4
+ def build_route name, path
5
+ OpenStruct.new({:name => name, :path => OpenStruct.new(:ast => path)})
6
+ end
7
+
8
+ module Rails
9
+ def self.application
10
+ return OpenStruct.new({
11
+ routes: OpenStruct.new({
12
+ routes: [
13
+ build_route('users', '/users(.:format)'),
14
+ build_route('user', '/users/:id(.:format)'),
15
+ build_route('project_ticket', '/projects/:project_id/tickets/:id(.:format)')]
16
+ })
17
+ })
18
+ end
19
+ end
20
+
21
+ describe AssetPipelineRoutes::PathProcessor do
22
+ before do
23
+ @env = Sprockets::Environment.new(".")
24
+ @env.append_path(FIXTURE_ROOT)
25
+ @env.register_preprocessor('application/javascript', ::AssetPipelineRoutes::PathProcessor)
26
+ end
27
+
28
+ it "replaces calls to r() with route" do
29
+ @env['simple_route.js'].to_s.should == "var Bar ='/users';\n"
30
+ end
31
+
32
+ it "replaces calls with unknown route to ''" do
33
+ @env['unknown_route.js'].to_s.should == "var Bar ='';\n"
34
+ end
35
+
36
+ it "works with variables" do
37
+ @env['simple_route_with_variable.js'].to_s.should == "var x = 2;\nvar Bar ='/users/'+x+'';\n"
38
+ end
39
+
40
+ it "works with coffeescript" do
41
+ @env['simple_coffee_route.js'].to_s.should == "(function() {\n var Bar;\n\n Bar = '/users';\n\n}).call(this);\n"
42
+ end
43
+
44
+ it "works with unqualified routes" do
45
+ @env['unqualified_routes.js'].to_s.should == "var url ='/users/{{id}}';\n"
46
+ end
47
+
48
+ it "works with partially qualified nested routes" do
49
+ @env['nested_routes.js'].to_s.should == "var project_path ='/projects/'+2+'/tickets/{{id}}';\n"
50
+ end
51
+
52
+ it "does not replace false positives" do
53
+ @env['false_positive.js'].to_s.should == "var x = receiver(y);\n";
54
+ end
55
+
56
+ it "works as function argument" do
57
+ @env["function_argument.js"].to_s.should == "var url = receiver('/users');\n"
58
+ end
59
+
60
+ it "works with function argument" do
61
+ @env["argument_function.js"].to_s.should == "var url ='/users/'+fetchUserId()+'';\n"
62
+ end
63
+ end
data/spec/path_spec.rb CHANGED
@@ -26,7 +26,7 @@ describe AssetPipelineRoutes::Path do
26
26
 
27
27
  describe 'replacements' do
28
28
  it { subject.replacements().should eql subject.default_replacements }
29
- it { subject.replacements(1).should eql [1] }
29
+ it { subject.replacements(1).should eql ["'+1+'"] }
30
30
  end
31
31
  end
32
32
  end
data/spec/spec_helper.rb CHANGED
@@ -9,6 +9,8 @@ end
9
9
 
10
10
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
11
 
12
+ FIXTURE_ROOT = File.expand_path(File.join(File.dirname(__FILE__), "fixtures"))
13
+
12
14
  require 'asset_pipeline_routes'
13
15
  require 'rspec'
14
16
  require 'ostruct'
metadata CHANGED
@@ -1,112 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset_pipeline_routes
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.1
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Raphael Randschau
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-28 00:00:00.000000000 Z
11
+ date: 2013-05-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- version_requirements: !ruby/object:Gem::Requirement
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
20
- none: false
21
- name: rails
19
+ version: 3.2.13
22
20
  type: :development
23
21
  prerelease: false
24
- requirement: !ruby/object:Gem::Requirement
22
+ version_requirements: !ruby/object:Gem::Requirement
25
23
  requirements:
26
24
  - - ~>
27
25
  - !ruby/object:Gem::Version
28
- version: 3.2.0
29
- none: false
26
+ version: 3.2.13
30
27
  - !ruby/object:Gem::Dependency
31
- version_requirements: !ruby/object:Gem::Requirement
28
+ name: sprockets
29
+ requirement: !ruby/object:Gem::Requirement
32
30
  requirements:
33
- - - ! '>='
31
+ - - '>='
34
32
  - !ruby/object:Gem::Version
35
33
  version: '0'
36
- none: false
37
- name: activesupport
38
34
  type: :development
39
35
  prerelease: false
40
- requirement: !ruby/object:Gem::Requirement
36
+ version_requirements: !ruby/object:Gem::Requirement
41
37
  requirements:
42
- - - ! '>='
38
+ - - '>='
43
39
  - !ruby/object:Gem::Version
44
40
  version: '0'
45
- none: false
46
41
  - !ruby/object:Gem::Dependency
47
- version_requirements: !ruby/object:Gem::Requirement
42
+ name: coffee-script
43
+ requirement: !ruby/object:Gem::Requirement
48
44
  requirements:
49
- - - ! '>='
45
+ - - '>='
50
46
  - !ruby/object:Gem::Version
51
47
  version: '0'
52
- none: false
53
- name: rspec
54
48
  type: :development
55
49
  prerelease: false
56
- requirement: !ruby/object:Gem::Requirement
50
+ version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
- - - ! '>='
52
+ - - '>='
59
53
  - !ruby/object:Gem::Version
60
54
  version: '0'
61
- none: false
62
55
  - !ruby/object:Gem::Dependency
63
- version_requirements: !ruby/object:Gem::Requirement
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - ! '>='
59
+ - - '>='
66
60
  - !ruby/object:Gem::Version
67
61
  version: '0'
68
- none: false
69
- name: ci_reporter
70
62
  type: :development
71
63
  prerelease: false
72
- requirement: !ruby/object:Gem::Requirement
64
+ version_requirements: !ruby/object:Gem::Requirement
73
65
  requirements:
74
- - - ! '>='
66
+ - - '>='
75
67
  - !ruby/object:Gem::Version
76
68
  version: '0'
77
- none: false
78
69
  - !ruby/object:Gem::Dependency
79
- version_requirements: !ruby/object:Gem::Requirement
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
80
72
  requirements:
81
- - - ! '>='
73
+ - - '>='
82
74
  - !ruby/object:Gem::Version
83
75
  version: '0'
84
- none: false
85
- name: simplecov
86
76
  type: :development
87
77
  prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ci_reporter
88
85
  requirement: !ruby/object:Gem::Requirement
89
86
  requirements:
90
- - - ! '>='
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
91
95
  - !ruby/object:Gem::Version
92
96
  version: '0'
93
- none: false
94
97
  - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
95
106
  version_requirements: !ruby/object:Gem::Requirement
96
107
  requirements:
97
- - - ! '>='
108
+ - - '>='
98
109
  - !ruby/object:Gem::Version
99
110
  version: '0'
100
- none: false
111
+ - !ruby/object:Gem::Dependency
101
112
  name: simplecov-rcov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
102
118
  type: :development
103
119
  prerelease: false
104
- requirement: !ruby/object:Gem::Requirement
120
+ version_requirements: !ruby/object:Gem::Requirement
105
121
  requirements:
106
- - - ! '>='
122
+ - - '>='
107
123
  - !ruby/object:Gem::Version
108
124
  version: '0'
109
- none: false
110
125
  description: Add a routes helper for all asset pipeline needs
111
126
  email:
112
127
  - nicolai86@me.com
@@ -114,62 +129,49 @@ executables: []
114
129
  extensions: []
115
130
  extra_rdoc_files: []
116
131
  files:
117
- - lib/asset_pipeline_routes/js_function_helper.rb
118
132
  - lib/asset_pipeline_routes/path.rb
133
+ - lib/asset_pipeline_routes/path_processor.rb
119
134
  - lib/asset_pipeline_routes/railtie.rb
120
135
  - lib/asset_pipeline_routes/routes.rb
121
- - lib/asset_pipeline_routes/routes_context.rb
122
136
  - lib/asset_pipeline_routes/version.rb
123
137
  - lib/asset_pipeline_routes.rb
124
138
  - spec/asset_pipeline_routes_spec.rb
139
+ - spec/fixtures/argument_function.js
140
+ - spec/fixtures/false_positive.js
141
+ - spec/fixtures/function_argument.js
142
+ - spec/fixtures/nested_routes.js
143
+ - spec/fixtures/simple_coffee_route.js.coffee
144
+ - spec/fixtures/simple_route.js
145
+ - spec/fixtures/simple_route_with_variable.js
146
+ - spec/fixtures/unknown_route.js
147
+ - spec/fixtures/unqualified_routes.js
148
+ - spec/path_processor_spec.rb
125
149
  - spec/path_spec.rb
126
- - spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats-default-replacements.xml
127
- - spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats-number-of-replacements.xml
128
- - spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats-replacements.xml
129
- - spec/reports/SPEC-AssetPipelineRoutes-Path-after-applying-formats.xml
130
- - spec/reports/SPEC-AssetPipelineRoutes-Path-apply-format.xml
131
- - spec/reports/SPEC-AssetPipelineRoutes-Path-format.xml
132
- - spec/reports/SPEC-AssetPipelineRoutes-Path.xml
133
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-javascript-method-generation.xml
134
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-nested-routes-project-ticket-path.xml
135
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-nested-routes-with-format.xml
136
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-nested-routes.xml
137
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-edit-edit-user-path.xml
138
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-edit-with-format.xml
139
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-edit.xml
140
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-index-users-path.xml
141
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-index-with-format.xml
142
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-index.xml
143
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-show-user-path.xml
144
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-show-with-format.xml
145
- - spec/reports/SPEC-AssetPipelineRoutes-Routes-resources-show.xml
146
- - spec/reports/SPEC-AssetPipelineRoutes-Routes.xml
147
150
  - spec/spec_helper.rb
148
151
  - README.md
149
152
  - Rakefile
150
153
  homepage: ''
151
154
  licenses: []
155
+ metadata: {}
152
156
  post_install_message:
153
157
  rdoc_options: []
154
158
  require_paths:
155
159
  - lib
156
160
  required_ruby_version: !ruby/object:Gem::Requirement
157
161
  requirements:
158
- - - ! '>='
162
+ - - '>='
159
163
  - !ruby/object:Gem::Version
160
164
  version: '0'
161
- none: false
162
165
  required_rubygems_version: !ruby/object:Gem::Requirement
163
166
  requirements:
164
- - - ! '>='
167
+ - - '>='
165
168
  - !ruby/object:Gem::Version
166
169
  version: '0'
167
- none: false
168
170
  requirements: []
169
171
  rubyforge_project: asset_pipeline_routes
170
- rubygems_version: 1.8.23
172
+ rubygems_version: 2.0.0
171
173
  signing_key:
172
- specification_version: 3
174
+ specification_version: 4
173
175
  summary: Add a routes helper for all asset pipeline needs
174
176
  test_files: []
175
177
  has_rdoc:
@@ -1,27 +0,0 @@
1
- # encoding: UTF-8
2
- require 'active_support/core_ext/string/inflections'
3
-
4
- module AssetPipelineRoutes
5
- module JsFunctionHelper
6
- def self.route_to_anonymous_function route, style = :js
7
- function_arguments = route.scan(/:(\w+)/).flatten.map { |param|
8
- param.camelcase(:lower)
9
- }
10
- url_parts = route.split(/:\w+/).map{ |fragment| "'#{fragment}'" }
11
- function = if style == :js
12
- <<-JS
13
- (function() {
14
- return function (#{function_arguments.join ', '}) {
15
- return #{url_parts.zip(function_arguments).flatten.reject{ |part| part.nil? }.join(' + ')}
16
- };
17
- }).call(this);
18
- JS
19
- elsif style == :coffee
20
- <<-COFFEESCRIPT
21
- (-> (#{function_arguments.join ', '}) -> #{url_parts.zip(function_arguments).flatten.reject{ |part| part.nil? }.join(' + ')})(this)
22
- COFFEESCRIPT
23
- end
24
- function.gsub(/\s+/,' ').strip
25
- end
26
- end
27
- end
@@ -1,8 +0,0 @@
1
- # encoding: UTF-8
2
- module AssetPipelineRoutes
3
- module RoutesContext
4
- def r
5
- @r ||= Routes.new(Rails.application.routes.routes)
6
- end
7
- end
8
- end
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path after applying formats default_replacements" tests="1" time="0.000606" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Path after applying formats default_replacements " time="0.000367">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path after applying formats number_of_replacements" tests="1" time="0.000399" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Path after applying formats number_of_replacements " time="0.00023">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path after applying formats replacements" tests="2" time="0.001243" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Path after applying formats replacements " time="0.000469">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Path after applying formats replacements " time="0.000307">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path after applying formats" tests="0" time="0.000104" failures="0" errors="0" skipped="0">
3
- <system-out>
4
- </system-out>
5
- <system-err>
6
- </system-err>
7
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path apply_format" tests="2" time="0.00067" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Path apply_format " time="0.000267">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Path apply_format " time="0.000202">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path format" tests="2" time="0.000805" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Path format " time="0.000283">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Path format " time="0.000254">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Path" tests="0" time="0.000188" failures="0" errors="0" skipped="0">
3
- <system-out>
4
- </system-out>
5
- <system-err>
6
- </system-err>
7
- </testsuite>
@@ -1,13 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes javascript method generation" tests="3" time="0.029629" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes javascript method generation " time="0.000316">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes javascript method generation should generate JavaScript mapping method" time="0.028323">
6
- </testcase>
7
- <testcase name="AssetPipelineRoutes::Routes javascript method generation should generate CoffeScript mapping method" time="0.000554">
8
- </testcase>
9
- <system-out>
10
- </system-out>
11
- <system-err>
12
- </system-err>
13
- </testsuite>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes nested routes project_ticket_path" tests="1" time="0.00053" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes nested routes project_ticket_path " time="0.000355">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes nested routes with format" tests="2" time="0.0013" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes nested routes with format " time="0.000323">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes nested routes with format " time="0.000648">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,17 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes nested routes" tests="5" time="0.001551" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes nested routes " time="0.000243">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes nested routes " time="0.000261">
6
- </testcase>
7
- <testcase name="AssetPipelineRoutes::Routes nested routes " time="0.000259">
8
- </testcase>
9
- <testcase name="AssetPipelineRoutes::Routes nested routes " time="0.000258">
10
- </testcase>
11
- <testcase name="AssetPipelineRoutes::Routes nested routes " time="0.000259">
12
- </testcase>
13
- <system-out>
14
- </system-out>
15
- <system-err>
16
- </system-err>
17
- </testsuite>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#edit edit_user_path" tests="1" time="0.000494" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#edit edit_user_path " time="0.000335">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#edit with format" tests="2" time="0.00074" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#edit with format " time="0.000281">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes resources#edit with format " time="0.000261">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#edit" tests="2" time="0.000665" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#edit " time="0.000232">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes resources#edit " time="0.000261">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#index users_path" tests="1" time="0.00125" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#index users_path " time="0.000874">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#index with format" tests="1" time="0.000472" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#index with format " time="0.000277">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#index" tests="2" time="0.002326" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#index " time="0.001202">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes resources#index " time="0.000807">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#show user_path" tests="1" time="0.000475" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#show user_path " time="0.000305">
4
- </testcase>
5
- <system-out>
6
- </system-out>
7
- <system-err>
8
- </system-err>
9
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#show with format" tests="2" time="0.0008" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#show with format " time="0.000293">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes resources#show with format " time="0.000305">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes resources#show" tests="2" time="0.000723" failures="0" errors="0" skipped="0">
3
- <testcase name="AssetPipelineRoutes::Routes resources#show " time="0.000241">
4
- </testcase>
5
- <testcase name="AssetPipelineRoutes::Routes resources#show " time="0.000268">
6
- </testcase>
7
- <system-out>
8
- </system-out>
9
- <system-err>
10
- </system-err>
11
- </testsuite>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="AssetPipelineRoutes::Routes" tests="0" time="0.000121" failures="0" errors="0" skipped="0">
3
- <system-out>
4
- </system-out>
5
- <system-err>
6
- </system-err>
7
- </testsuite>