js-routes 0.8.7 → 0.8.8

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,52 @@
1
+ # rcov generated
2
+ coverage
3
+
4
+ # rdoc generated
5
+ rdoc
6
+
7
+ # yard generated
8
+ doc
9
+ .yardoc
10
+ log
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
19
+ #
20
+ # * Create a file at ~/.gitignore
21
+ # * Include files you want ignored
22
+ # * Run: git config --global core.excludesfile ~/.gitignore
23
+ #
24
+ # After doing this, these files will be ignored in all your git projects,
25
+ # saving you from having to 'pollute' every project you touch with them
26
+ #
27
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
28
+ #
29
+ # For MacOS:
30
+ #
31
+ #.DS_Store
32
+
33
+ # For TextMate
34
+ #*.tmproj
35
+ #tmtags
36
+
37
+ # For emacs:
38
+ #*~
39
+ #\#*
40
+ #.\#*
41
+
42
+ # For vim:
43
+ #*.swp
44
+
45
+ # For redcar:
46
+ #.redcar
47
+
48
+ # For rubinius:
49
+ #*.rbc
50
+ .rvmrc
51
+
52
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -1,10 +1,16 @@
1
+ language: ruby
1
2
  rvm:
2
3
  - 1.8.7
3
4
  - 1.9.2
4
5
  - 1.9.3
6
+ - 2.0.0
7
+ - ruby-head
5
8
  notifications:
6
- email:
9
+ email:
7
10
  - agresso@gmail.com
8
11
  branches:
9
12
  only:
10
13
  - master
14
+ matrix:
15
+ allow_failures:
16
+ - rvm: ruby-head
data/Gemfile CHANGED
@@ -1,10 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "rails", ">= 3.2"
4
-
5
- group :development do
6
- gem "therubyracer"
7
- gem "rspec", "~> 2.10.0"
8
- gem "bundler", "~> 1.1.0"
9
- gem "jeweler", "~> 1.6.2"
10
- end
3
+ # Specify your gem's dependencies in js-routes.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,3 @@
1
+ guard 'coffeescript', :output => 'lib', :all_on_start => true do
2
+ watch(%r{^lib/(.+\.coffee)$})
3
+ end
data/Rakefile CHANGED
@@ -9,23 +9,10 @@ rescue Bundler::BundlerError => e
9
9
  $stderr.puts "Run `bundle install` to install missing gems"
10
10
  exit e.status_code
11
11
  end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- gem.name = "js-routes"
17
- gem.homepage = "http://github.com/railsware/js-routes"
18
- gem.license = "MIT"
19
- gem.summary = %Q{Brings Rails named routes to javascript}
20
- gem.description = %Q{Generates javascript file that defines all Rails named routes as javascript helpers}
21
- gem.email = "agresso@gmail.com"
22
- gem.authors = ["Bogdan Gusiev"]
23
- # dependencies defined in Gemfile
24
- end
25
- Jeweler::RubygemsDotOrgTasks.new
26
-
12
+ require 'bundler/gem_tasks'
27
13
  require 'rspec/core'
28
14
  require 'rspec/core/rake_task'
15
+
29
16
  RSpec::Core::RakeTask.new(:spec) do |spec|
30
17
  spec.pattern = FileList['spec/**/*_spec.rb'].sort_by do|n|
31
18
  # we need to run post_rails_init_spec as the latest
data/Readme.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # JsRoutes
2
+ [![Build Status](https://travis-ci.org/railsware/js-routes.png)](https://travis-ci.org/railsware/js-routes)
2
3
 
3
4
  Generates javascript file that defines all Rails named routes as javascript helpers
4
5
 
@@ -26,9 +27,9 @@ Also in order to flush asset pipeline cache sometimes you might need to run:
26
27
  rake tmp:cache:clear
27
28
  ```
28
29
 
29
- This cache is not flushed on server restart in development environment.
30
+ This cache is not flushed on server restart in development environment.
30
31
 
31
- **Important:** If routes.js file is not updated after some configuration change you need to run this command again.
32
+ **Important:** If routes.js file is not updated after some configuration change you need to run this rake task again.
32
33
 
33
34
  ### Advanced Setup
34
35
 
@@ -46,19 +47,20 @@ Available options:
46
47
  * Note that currently only optional parameters (like `:format`) can be defaulted.
47
48
  * Example: {:format => "json"}
48
49
  * Default: {}
49
- * `exclude` - Array of regexps to exclude from js routes.
50
+ * `exclude` - Array of regexps to exclude from js routes.
50
51
  * Note that regexp applied to **named route** not to *URL*
51
52
  * Default: []
52
- * `include` - Array of regexps to include in js routes.
53
+ * `include` - Array of regexps to include in js routes.
53
54
  * Note that regexp applied to **named route** not to *URL*
54
55
  * Default: []
55
- * `namespace` - global object used to access routes.
56
+ * `namespace` - global object used to access routes.
56
57
  * Supports nested namespace like `MyProject.routes`
57
58
  * Default: `Routes`
58
- * `prefix` - String representing a url path to prepend to all paths.
59
- * Example: `http://yourdomain.com`. This will cause route helpers to generate full path only.
59
+ * `prefix` - String representing a url path to prepend to all paths.
60
+ * Example: `http://yourdomain.com`. This will cause route helpers to generate full path only.
60
61
  * Default: blank
61
-
62
+ * `camel_case` (version >= 0.8.8) - Generate camel case route names.
63
+ * Default: false
62
64
 
63
65
  You can generate routes files on the application side like this:
64
66
 
@@ -105,7 +107,7 @@ jQuery.extend(window, Routes)
105
107
 
106
108
  ## What about security?
107
109
 
108
- js-routes itself do not have security holes. It makes URLs
110
+ js-routes itself do not have security holes. It makes URLs
109
111
  without access protection more reachable by potential attacker.
110
112
  In order to prevent this use `:exclude` option for sensitive urls like `/admin_/`
111
113
 
@@ -119,7 +121,7 @@ Spork.trap_method(JsRoutes, :generate!)
119
121
 
120
122
  ## Advantages over alternatives
121
123
 
122
- There are some alternatives available. Most of them has only basic feature and don't reach the level of quality I accept.
124
+ There are some alternatives available. Most of them has only basic feature and don't reach the level of quality I accept.
123
125
  Advantages of this one are:
124
126
 
125
127
  * Rails3 support
@@ -129,4 +131,4 @@ Advantages of this one are:
129
131
 
130
132
  #### Thanks to [Contributors](https://github.com/railsware/js-routes/contributors)
131
133
 
132
- #### Have fun
134
+ #### Have fun
data/js-routes.gemspec CHANGED
@@ -1,11 +1,11 @@
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 -*-
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'js_routes/version'
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{js-routes}
8
- s.version = "0.8.7"
8
+ s.version = JsRoutes::VERSION
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bogdan Gusiev"]
@@ -15,57 +15,19 @@ Gem::Specification.new do |s|
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt"
17
17
  ]
18
- s.files = [
19
- ".document",
20
- ".rspec",
21
- ".travis.yml",
22
- "Gemfile",
23
- "Gemfile.lock",
24
- "LICENSE.txt",
25
- "Rakefile",
26
- "Readme.md",
27
- "VERSION",
28
- "app/assets/javascripts/js-routes.js.erb",
29
- "js-routes.gemspec",
30
- "lib/js-routes.rb",
31
- "lib/js_routes.rb",
32
- "lib/js_routes/engine.rb",
33
- "lib/routes.js",
34
- "lib/tasks/js_routes.rake",
35
- "spec/js_routes/generated_javascript_spec.rb",
36
- "spec/js_routes/options_spec.rb",
37
- "spec/js_routes/post_rails_init_spec.rb",
38
- "spec/js_routes/rails_routes_compatibility_spec.rb",
39
- "spec/spec_helper.rb"
40
- ]
18
+ s.files = `git ls-files`.split("\n")
41
19
  s.homepage = %q{http://github.com/railsware/js-routes}
42
20
  s.licenses = ["MIT"]
43
21
  s.require_paths = ["lib"]
44
22
  s.rubygems_version = %q{1.6.0}
45
23
  s.summary = %q{Brings Rails named routes to javascript}
46
24
 
47
- if s.respond_to? :specification_version then
48
- s.specification_version = 3
49
-
50
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
- s.add_runtime_dependency(%q<rails>, [">= 3.2"])
52
- s.add_development_dependency(%q<therubyracer>, [">= 0"])
53
- s.add_development_dependency(%q<rspec>, ["~> 2.10.0"])
54
- s.add_development_dependency(%q<bundler>, ["~> 1.1.0"])
55
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
56
- else
57
- s.add_dependency(%q<rails>, [">= 3.2"])
58
- s.add_dependency(%q<therubyracer>, [">= 0"])
59
- s.add_dependency(%q<rspec>, ["~> 2.10.0"])
60
- s.add_dependency(%q<bundler>, ["~> 1.1.0"])
61
- s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
62
- end
63
- else
64
- s.add_dependency(%q<rails>, [">= 3.2"])
65
- s.add_dependency(%q<therubyracer>, [">= 0"])
66
- s.add_dependency(%q<rspec>, ["~> 2.10.0"])
67
- s.add_dependency(%q<bundler>, ["~> 1.1.0"])
68
- s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
69
- end
25
+ s.add_runtime_dependency(%q<rails>, [">= 3.2"])
26
+ s.add_development_dependency(%q<therubyracer>, [">= 0"])
27
+ s.add_development_dependency(%q<rspec>, ["~> 2.10.0"])
28
+ s.add_development_dependency(%q<bundler>, [">= 1.1.0"])
29
+ s.add_development_dependency(%q<guard>, [">= 0"])
30
+ s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
31
+ s.add_development_dependency(%q<guard-coffeescript>, [">= 0"])
70
32
  end
71
33
 
data/lib/js_routes.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'js_routes/version'
1
2
  class JsRoutes
2
3
 
3
4
  #
@@ -12,6 +13,7 @@ class JsRoutes
12
13
  :include => //,
13
14
  :file => DEFAULT_PATH,
14
15
  :prefix => "",
16
+ :camel_case => false,
15
17
  :default_url_options => {}
16
18
  }
17
19
 
@@ -93,9 +95,9 @@ class JsRoutes
93
95
  end
94
96
 
95
97
  def deprecated_default_format
96
- if @options.key?(:default_format)
98
+ if @options.key?(:default_format)
97
99
  warn("default_format option is deprecated. Use default_url_options = {:format => <format>} instead")
98
- {:format => @options[:default_format]}
100
+ {:format => @options[:default_format]}
99
101
  else
100
102
  {}
101
103
  end
@@ -149,9 +151,11 @@ class JsRoutes
149
151
  required_parts = route.required_parts.clone
150
152
  optional_parts = route.optional_parts.clone
151
153
  optional_parts.push(required_parts.delete :format) if required_parts.include?(:format)
154
+ route_name = "#{name.join('_')}_path"
155
+ route_name = route_name.camelize(:lower) if true == @options[:camel_case]
152
156
  _ = <<-JS.strip!
153
157
  // #{name.join('.')} => #{parent_spec}#{route.path.spec}
154
- #{name.join('_')}_path: function(#{build_params(required_parts)}) {
158
+ #{route_name}: function(#{build_params(required_parts)}) {
155
159
  return Utils.build_path(#{json(required_parts)}, #{json(optional_parts)}, #{json(serialize(route.path.spec, parent_spec))}, arguments);
156
160
  }
157
161
  JS
@@ -0,0 +1,3 @@
1
+ class JsRoutes
2
+ VERSION = "0.8.8"
3
+ end
data/lib/routes.js CHANGED
@@ -1,205 +1,208 @@
1
- (function(){
1
+ (function() {
2
+ var NodeTypes, ParameterMissing, Utils, defaults,
3
+ __hasProp = {}.hasOwnProperty;
2
4
 
3
- function ParameterMissing(message) {
4
- this.message = message;
5
- }
6
- ParameterMissing.prototype = new Error();
5
+ ParameterMissing = function(message) {
6
+ this.message = message;
7
+ };
8
+
9
+ ParameterMissing.prototype = new Error();
7
10
 
8
- var defaults = {
9
- prefix: 'PREFIX',
11
+ defaults = {
12
+ prefix: "PREFIX",
10
13
  default_url_options: DEFAULT_URL_OPTIONS
11
14
  };
12
15
 
13
- var NodeTypes = NODE_TYPES;
14
-
15
- var Utils = {
16
+ NodeTypes = NODE_TYPES;
17
+
18
+ Utils = {
19
+ serialize: function(obj) {
20
+ var i, key, prop, result, s, val, _i, _len;
16
21
 
17
- serialize: function(obj){
18
- if (!obj) {return '';}
22
+ if (!obj) {
23
+ return "";
24
+ }
19
25
  if (window.jQuery) {
20
- var result = window.jQuery.param(obj);
21
- return !result ? "" : "?" + result
22
- }
23
- var s = [];
24
- for (prop in obj){
25
- if (obj[prop]) {
26
- if (obj[prop] instanceof Array) {
27
- for (var i=0; i < obj[prop].length; i++) {
28
- key = prop + encodeURIComponent("[]");
29
- s.push(key + "=" + encodeURIComponent(obj[prop][i].toString()));
26
+ result = window.jQuery.param(obj);
27
+ return (!result ? "" : "?" + result);
28
+ }
29
+ s = [];
30
+ for (key in obj) {
31
+ if (!__hasProp.call(obj, key)) continue;
32
+ prop = obj[key];
33
+ if (prop != null) {
34
+ if (prop instanceof Array) {
35
+ for (i = _i = 0, _len = prop.length; _i < _len; i = ++_i) {
36
+ val = prop[i];
37
+ s.push("" + key + (encodeURIComponent("[]")) + "=" + (encodeURIComponent(val.toString())));
30
38
  }
31
39
  } else {
32
- s.push(prop + "=" + encodeURIComponent(obj[prop].toString()));
40
+ s.push("" + key + "=" + (encodeURIComponent(prop.toString())));
33
41
  }
34
42
  }
35
43
  }
36
- if (s.length === 0) {
37
- return '';
44
+ if (!s.length) {
45
+ return "";
38
46
  }
39
- return "?" + s.join('&');
47
+ return "?" + (s.join("&"));
40
48
  },
41
-
42
49
  clean_path: function(path) {
50
+ var last_index;
51
+
43
52
  path = path.split("://");
44
- var last_index = path.length - 1;
45
- path[last_index] = path[last_index].replace(/\/+/g, "/").replace(/\/$/m, '');
53
+ last_index = path.length - 1;
54
+ path[last_index] = path[last_index].replace(/\/+/g, "/").replace(/\/$/m, "");
46
55
  return path.join("://");
47
56
  },
48
-
49
57
  set_default_url_options: function(optional_parts, options) {
50
- for (var i=0;i < optional_parts.length; i++) {
51
- var part = optional_parts[i];
58
+ var i, part, _i, _len, _results;
59
+
60
+ _results = [];
61
+ for (i = _i = 0, _len = optional_parts.length; _i < _len; i = ++_i) {
62
+ part = optional_parts[i];
52
63
  if (!options.hasOwnProperty(part) && defaults.default_url_options.hasOwnProperty(part)) {
53
- options[part] = defaults.default_url_options[part];
64
+ _results.push(options[part] = defaults.default_url_options[part]);
65
+ } else {
66
+ _results.push(void 0);
54
67
  }
55
68
  }
69
+ return _results;
56
70
  },
57
-
58
71
  extract_anchor: function(options) {
59
- var anchor = options.hasOwnProperty("anchor") ? options.anchor : null;
60
- delete options.anchor;
61
- return anchor ? "#" + anchor : "";
62
- },
72
+ var anchor;
63
73
 
64
- extract_options: function(number_of_params, args) {
65
- if (args.length > number_of_params) {
66
- return typeof(args[args.length-1]) == "object" ? args.pop() : {};
67
- } else {
68
- return {};
74
+ anchor = "";
75
+ if (options.hasOwnProperty("anchor")) {
76
+ anchor = "#" + options.anchor;
77
+ options.anchor = null;
69
78
  }
79
+ return anchor;
70
80
  },
81
+ extract_options: function(number_of_params, args) {
82
+ var ret_value;
71
83
 
84
+ ret_value = {};
85
+ if (args.length > number_of_params && typeof args[args.length - 1] === "object") {
86
+ ret_value = args.pop();
87
+ }
88
+ return ret_value;
89
+ },
72
90
  path_identifier: function(object) {
91
+ var property;
92
+
73
93
  if (object === 0) {
74
- return '0';
94
+ return "0";
75
95
  }
76
-
77
- if (! object) { // null, undefined, false or ''
78
- return '';
96
+ if (!object) {
97
+ return "";
79
98
  }
80
-
81
- if (typeof(object) == "object") {
82
- var property = object.to_param || object.id || object;
83
- if (typeof(property) == "function") {
84
- property = property.call(object)
99
+ property = object;
100
+ if (typeof object === "object") {
101
+ property = object.to_param || object.id || object;
102
+ if (typeof property === "function") {
103
+ property = property.call(object);
85
104
  }
86
- return property.toString();
87
- } else {
88
- return object.toString();
89
105
  }
106
+ return property.toString();
90
107
  },
108
+ clone: function(obj) {
109
+ var attr, copy, key;
91
110
 
92
- clone: function (obj) {
93
- if (null == obj || "object" != typeof obj) return obj;
94
- var copy = obj.constructor();
95
- for (var attr in obj) {
96
- if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
111
+ if (null === obj || "object" !== typeof obj) {
112
+ return obj;
113
+ }
114
+ copy = obj.constructor();
115
+ for (key in obj) {
116
+ if (!__hasProp.call(obj, key)) continue;
117
+ attr = obj[key];
118
+ copy[key] = attr;
97
119
  }
98
120
  return copy;
99
121
  },
100
-
101
122
  prepare_parameters: function(required_parameters, actual_parameters, options) {
102
- var result = this.clone(options) || {};
103
- for (var i=0; i < required_parameters.length; i++) {
104
- result[required_parameters[i]] = actual_parameters[i];
123
+ var i, result, val, _i, _len;
124
+
125
+ result = this.clone(options) || {};
126
+ for (i = _i = 0, _len = required_parameters.length; _i < _len; i = ++_i) {
127
+ val = required_parameters[i];
128
+ result[val] = actual_parameters[i];
105
129
  }
106
130
  return result;
107
131
  },
108
-
109
132
  build_path: function(required_parameters, optional_parts, route, args) {
133
+ var opts, parameters, result;
134
+
110
135
  args = Array.prototype.slice.call(args);
111
- var opts = this.extract_options(required_parameters.length, args);
136
+ opts = this.extract_options(required_parameters.length, args);
112
137
  if (args.length > required_parameters.length) {
113
138
  throw new Error("Too many parameters provided for path");
114
139
  }
115
-
116
- var parameters = this.prepare_parameters(required_parameters, args, opts);
140
+ parameters = this.prepare_parameters(required_parameters, args, opts);
117
141
  this.set_default_url_options(optional_parts, parameters);
118
- var result = Utils.get_prefix();
119
- var anchor = Utils.extract_anchor(parameters);
120
-
121
- result += this.visit(route, parameters)
122
- return Utils.clean_path(result + anchor) + Utils.serialize(parameters);
142
+ result = "" + (Utils.get_prefix()) + (this.visit(route, parameters));
143
+ return Utils.clean_path("" + result + (Utils.extract_anchor(parameters))) + Utils.serialize(parameters);
123
144
  },
124
-
125
- /*
126
- * This function is JavaScript impelementation of the
127
- * Journey::Visitors::Formatter that builds route by given parameters
128
- * from route binary tree.
129
- * Binary tree is serialized in the following way:
130
- * [node type, left node, right node ]
131
- *
132
- * @param {Boolean} optional Marks the currently visited branch as optional.
133
- * If set to `true`, this method will not throw when encountering
134
- * a missing parameter (used in recursive calls).
135
- */
136
145
  visit: function(route, parameters, optional) {
137
- var type = route[0];
138
- var left = route[1];
139
- var right = route[2];
146
+ var left, left_part, right, right_part, type, value;
147
+
148
+ type = route[0], left = route[1], right = route[2];
140
149
  switch (type) {
141
150
  case NodeTypes.GROUP:
142
- return this.visit(left, parameters, true)
143
151
  case NodeTypes.STAR:
144
- return this.visit(left, parameters, true)
145
- case NodeTypes.CAT:
146
- var leftPart = this.visit(left, parameters, optional),
147
- rightPart = this.visit(right, parameters, optional);
148
-
149
- if (optional && ! (leftPart && rightPart))
150
- return '';
151
-
152
- return leftPart + rightPart;
152
+ return this.visit(left, parameters, true);
153
153
  case NodeTypes.LITERAL:
154
- return left;
155
154
  case NodeTypes.SLASH:
156
- return left;
157
155
  case NodeTypes.DOT:
158
156
  return left;
157
+ case NodeTypes.CAT:
158
+ left_part = this.visit(left, parameters, optional);
159
+ right_part = this.visit(right, parameters, optional);
160
+ if (optional && !(left_part && right_part)) {
161
+ return "";
162
+ }
163
+ return "" + left_part + right_part;
159
164
  case NodeTypes.SYMBOL:
160
- var value = parameters[left];
161
-
162
- if (value || value === 0) {
163
- delete parameters[left];
165
+ value = parameters[left];
166
+ if (value != null) {
167
+ parameters[left] = null;
164
168
  return this.path_identifier(value);
165
169
  }
166
-
167
170
  if (optional) {
168
- return ''; // missing parameter
171
+ return "";
169
172
  } else {
170
173
  throw new ParameterMissing("Route parameter missing: " + left);
171
174
  }
172
- /*
173
- * I don't know what is this node type
174
- * Please send your PR if you do
175
- */
176
- //case NodeTypes.OR:
175
+ break;
177
176
  default:
178
177
  throw new Error("Unknown Rails node type");
179
178
  }
180
179
  },
180
+ get_prefix: function() {
181
+ var prefix;
181
182
 
182
- get_prefix: function(){
183
- var prefix = defaults.prefix;
184
-
185
- if( prefix !== "" ){
186
- prefix = prefix.match('\/$') ? prefix : ( prefix + '/');
183
+ prefix = defaults.prefix;
184
+ if (prefix !== "") {
185
+ prefix = (prefix.match("/$") ? prefix : "" + prefix + "/");
187
186
  }
188
-
189
187
  return prefix;
190
188
  },
189
+ namespace: function(root, namespaceString) {
190
+ var current, parts;
191
191
 
192
- namespace: function (root, namespaceString) {
193
- var parts = namespaceString ? namespaceString.split('.') : [];
194
- if (parts.length > 0) {
195
- current = parts.shift();
196
- root[current] = root[current] || {};
197
- Utils.namespace(root[current], parts.join('.'));
198
- }
192
+ parts = (namespaceString ? namespaceString.split(".") : []);
193
+ if (!parts.length) {
194
+ return;
195
+ }
196
+ current = parts.shift();
197
+ root[current] = root[current] || {};
198
+ return Utils.namespace(root[current], parts.join("."));
199
199
  }
200
200
  };
201
201
 
202
- Utils.namespace(window, 'NAMESPACE');
202
+ Utils.namespace(window, "NAMESPACE");
203
+
203
204
  window.NAMESPACE = ROUTES;
205
+
204
206
  window.NAMESPACE.options = defaults;
205
- })();
207
+
208
+ }).call(this);