js_routes 0.1.1

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/.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: []