js_routes 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in js_routes.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/js_routes.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "js_routes/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "js_routes"
7
+ s.version = JsRoutes::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Ivan Efremov"]
10
+ s.email = ["st8998@gmail.com"]
11
+ s.homepage = "https://github.com/st8998/js_routes"
12
+ s.summary = %q{}
13
+ s.description = %q{}
14
+
15
+ #s.rubyforge_project = "js_routes"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,34 @@
1
+ (function() {
2
+ var __slice = Array.prototype.slice;
3
+ $.buildPath = function() {
4
+ var extraParams, lastParam, params, paramsHash, path;
5
+ path = arguments[0], params = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
6
+ extraParams = {};
7
+ paramsHash = {};
8
+ if ($.isPlainObject(lastParam = params.pop())) {
9
+ paramsHash = lastParam;
10
+ } else {
11
+ params.push(lastParam);
12
+ }
13
+ $.each(params, function(_, value) {
14
+ var replacement;
15
+ replacement = "/" + value;
16
+ return path = path.replace(/\/:[\w_]+/, replacement);
17
+ });
18
+ $.each(paramsHash, function(name, value) {
19
+ var pattern, replacement;
20
+ if (path.match(new RegExp(":" + name))) {
21
+ pattern = "(.*?)\\(?([\\.\\/]?):" + name + "(\\(.*?\\)|[^\\)]*)?\\)?(.*)";
22
+ replacement = "$1$2" + value + "$3$4";
23
+ return path = path.replace(new RegExp(pattern), replacement);
24
+ } else {
25
+ return extraParams[name] = value;
26
+ }
27
+ });
28
+ path = path.replace(/\(.*\)/, '');
29
+ if (!$.isEmptyObject(extraParams)) {
30
+ path += "?" + ($.param(extraParams));
31
+ }
32
+ return path;
33
+ };
34
+ }).call(this);
@@ -0,0 +1,26 @@
1
+ $.buildPath = (path, params...) ->
2
+ extraParams = {}
3
+ paramsHash = {}
4
+
5
+ if $.isPlainObject(lastParam = params.pop()) then paramsHash = lastParam
6
+ else params.push(lastParam)
7
+
8
+ $.each params, (_, value) ->
9
+ replacement = "/#{value}"
10
+ path = path.replace /\/:[\w_]+/, replacement
11
+
12
+ # try to insert parameters
13
+ $.each paramsHash, (name, value) ->
14
+ if path.match(new RegExp(":#{name}"))
15
+ pattern = "(.*?)\\(?([\\.\\/]?):#{name}(\\(.*?\\)|[^\\)]*)?\\)?(.*)"
16
+ replacement = "$1$2#{value}$3$4"
17
+ path = path.replace new RegExp(pattern), replacement
18
+ else extraParams[name] = value
19
+
20
+ # cleanup
21
+ path = path.replace(/\(.*\)/, '')
22
+
23
+ # add extra params
24
+ path += "?#{$.param(extraParams)}" unless $.isEmptyObject(extraParams)
25
+
26
+ return path
@@ -0,0 +1,7 @@
1
+ window.Routes = {};
2
+ <% Rails.application.routes.routes.each do |route| %>
3
+ Routes.<%= route.name %>_path = function() {
4
+ Array.prototype.unshift.call(arguments, '<%= route.path %>');
5
+ return $.buildPath.apply($, arguments);
6
+ };
7
+ <% end %>
@@ -0,0 +1,7 @@
1
+ module JsRoutes
2
+
3
+ class Engine < ::Rails::Engine
4
+
5
+ end
6
+
7
+ end
@@ -0,0 +1,43 @@
1
+ module JsRoutes
2
+
3
+ class Railtie < ::Rails::Railtie
4
+
5
+ config.before_configuration do
6
+ config.action_view.javascript_expansions[:defaults] |= %w{ js_routes jquery.pathBuilder.js }
7
+ end
8
+
9
+ config.after_initialize do
10
+ if Rails.env.development?
11
+ ApplicationController.class_eval do
12
+ before_filter do
13
+ JsRoutes.generate_routes_file
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ initializer 'js_routes.generate_routes_file', :after=> :build_middleware_stack do |app|
20
+ JsRoutes.generate_routes_file
21
+ FileUtils.cp File.expand_path('../../assets/javascripts/jquery.pathBuilder.js', __FILE__), File.join(Rails.root, 'public', 'javascripts')
22
+ end
23
+
24
+ end
25
+
26
+ def self.generate_routes_file
27
+ puts 'GENERATING ROUTES FILE'
28
+ filename = File.join(Rails.root, 'public', 'javascripts', 'js_routes.js')
29
+ FileUtils.rm filename, :force => true
30
+ File.open(filename, 'w') do |f|
31
+ f << 'window.Routes = {};'
32
+ Rails.application.routes.routes.each do |route|
33
+ f << <<-JS.strip
34
+ Routes.#{route.name}_path = function() {
35
+ Array.prototype.unshift.call(arguments, '#{route.path}');
36
+ return $.buildPath.apply($, arguments);
37
+ };
38
+ JS
39
+ end
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,3 @@
1
+ module JsRoutes
2
+ VERSION = "0.1.1"
3
+ end
data/lib/js_routes.rb ADDED
@@ -0,0 +1,8 @@
1
+ module JsRoutes
2
+ if ::Rails.version < "3.1"
3
+ require 'js_routes/railtie'
4
+ else
5
+ require 'js_routes/engine'
6
+ end
7
+ require 'js_routes/version'
8
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: js_routes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ivan Efremov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-07-12 00:00:00.000000000 +04:00
13
+ default_executable:
14
+ dependencies: []
15
+ description: ''
16
+ email:
17
+ - st8998@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - Rakefile
25
+ - js_routes.gemspec
26
+ - lib/assets/javascripts/jquery.pathBuilder.js
27
+ - lib/assets/javascripts/jquery.pathBuilder.js.coffee
28
+ - lib/assets/javascripts/routes.js.erb
29
+ - lib/js_routes.rb
30
+ - lib/js_routes/engine.rb
31
+ - lib/js_routes/railtie.rb
32
+ - lib/js_routes/version.rb
33
+ has_rdoc: true
34
+ homepage: https://github.com/st8998/js_routes
35
+ licenses: []
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 1.6.2
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: ''
58
+ test_files: []