js-routes 0.8.7 → 0.8.8

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,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);