js-routes 1.3.3 → 1.4.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +9 -0
- data/Appraisals +3 -3
- data/CHANGELOG.md +36 -0
- data/Readme.md +13 -1
- data/gemfiles/rails32.gemfile +1 -1
- data/gemfiles/rails40.gemfile +1 -1
- data/gemfiles/rails40_sprockets3.gemfile +1 -1
- data/gemfiles/rails41.gemfile +1 -1
- data/gemfiles/rails41_sprockets3.gemfile +1 -1
- data/gemfiles/rails42.gemfile +1 -2
- data/gemfiles/rails42_sprockets3.gemfile +1 -2
- data/gemfiles/rails50.gemfile +1 -1
- data/gemfiles/rails50_sprockets3.gemfile +1 -1
- data/js-routes.gemspec +1 -2
- data/lib/js_routes.rb +48 -43
- data/lib/js_routes/engine.rb +3 -5
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.js +59 -37
- data/lib/routes.js.coffee +45 -29
- data/spec/js_routes/amd_compatibility_spec.rb +2 -2
- data/spec/js_routes/default_serializer_spec.rb +3 -1
- data/spec/js_routes/generated_javascript_spec.rb +0 -4
- data/spec/js_routes/options_spec.rb +110 -137
- data/spec/js_routes/rails_routes_compatibility_spec.rb +84 -84
- data/spec/js_routes/zzz_last_post_rails_init_spec.rb +2 -2
- data/spec/spec_helper.rb +3 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da4a6b84210ad4604692606b4ea0e5c79fc9ee7a
|
4
|
+
data.tar.gz: 342a9ab0a4b396aef730e88af2abc782d64db743
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34511f3806f9985f569cfca45ead8e4766be104912d851c9e48ffb4ef2b0d25cb0df17d7eeac42c0d681aa847ab72324c4cb4a4046b63d7ad4dfc1ca51ecc915
|
7
|
+
data.tar.gz: 905284b66bb0e6f8889a6fee1bdbbd521012990d0d69186ccd13b651e10d0a0a202e8b34493290fb1cdc94844d31e087d7883907d75ab95fe6f5d8186446c2cb
|
data/.travis.yml
CHANGED
@@ -9,6 +9,7 @@ rvm:
|
|
9
9
|
- 2.1
|
10
10
|
- 2.2.5
|
11
11
|
- 2.3.1
|
12
|
+
- 2.4.1
|
12
13
|
- jruby-19mode
|
13
14
|
- ruby-head
|
14
15
|
- jruby-head
|
@@ -49,3 +50,11 @@ matrix:
|
|
49
50
|
gemfile: gemfiles/rails50.gemfile
|
50
51
|
- rvm: 2.1
|
51
52
|
gemfile: gemfiles/rails50_sprockets3.gemfile
|
53
|
+
- rvm: 2.4.1
|
54
|
+
gemfile: gemfiles/rails40.gemfile # Segmentation fault (core dumped) for 2.4
|
55
|
+
- rvm: 2.4.1
|
56
|
+
gemfile: gemfiles/rails40_sprockets3.gemfile # Segmentation fault (core dumped) for 2.4
|
57
|
+
- rvm: 2.4.1
|
58
|
+
gemfile: gemfiles/rails41.gemfile # Segmentation fault (core dumped) for 2.4
|
59
|
+
- rvm: 2.4.1
|
60
|
+
gemfile: gemfiles/rails41_sprockets3.gemfile # Segmentation fault (core dumped) for 2.4
|
data/Appraisals
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
appraise "rails32" do
|
2
|
-
gem "railties", "~> 3.2.
|
2
|
+
gem "railties", "~> 3.2.22.5"
|
3
3
|
gem 'tzinfo'
|
4
4
|
end
|
5
5
|
|
6
|
-
{rails40: '4.0.
|
6
|
+
{rails40: '4.0.13', rails41: '4.1.16', rails42: '4.2.8', rails50: '5.0.2'}.each do |rails, version|
|
7
7
|
appraise "#{rails}" do
|
8
8
|
gem "railties", "~> #{version}"
|
9
9
|
gem "sprockets", "< 3"
|
@@ -13,4 +13,4 @@ end
|
|
13
13
|
gem "railties", "~> #{version}"
|
14
14
|
gem "sprockets", "~> 3.0"
|
15
15
|
end
|
16
|
-
end
|
16
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
## master
|
2
2
|
|
3
|
+
* __breaking change!__ Implemented Routes.config() and Routes.configure instead of Routes.defaults
|
4
|
+
|
5
|
+
New methods support 4 options at the moment:
|
6
|
+
|
7
|
+
``` js
|
8
|
+
Routes.configuration(); // =>
|
9
|
+
/*
|
10
|
+
{
|
11
|
+
prefix: "",
|
12
|
+
default_url_options: {},
|
13
|
+
special_options_key: '_options',
|
14
|
+
custom_serializer: function(...) { ... }
|
15
|
+
}
|
16
|
+
*/
|
17
|
+
|
18
|
+
Routes.configure({
|
19
|
+
prefix: '/app',
|
20
|
+
default_url_options: {format: 'json'},
|
21
|
+
special_options_key: '_my_options_key',
|
22
|
+
custom_serializer: function(...) { ... }
|
23
|
+
});
|
24
|
+
```
|
25
|
+
|
26
|
+
## v1.3.3
|
27
|
+
|
28
|
+
* Improved optional parameters support #216
|
29
|
+
|
30
|
+
## v1.3.2
|
31
|
+
|
32
|
+
* Added `application` option #214
|
33
|
+
|
34
|
+
## v1.3.1
|
35
|
+
|
36
|
+
* Raise error object with id null passed as route paramter #209
|
37
|
+
* Sprockets bugfixes #212
|
38
|
+
|
3
39
|
## v1.3.0
|
4
40
|
|
5
41
|
* Introduce the special _options key. Fixes #86
|
data/Readme.md
CHANGED
@@ -39,10 +39,19 @@ JsRoutes.setup do |config|
|
|
39
39
|
end
|
40
40
|
```
|
41
41
|
|
42
|
+
Or make a more dynamic configuration in JavaScript, but only specific options support the possibility of such configuration(see the list below):
|
43
|
+
|
44
|
+
``` js
|
45
|
+
Routes.configure({
|
46
|
+
option: value
|
47
|
+
});
|
48
|
+
Routes.config(); // current config
|
49
|
+
```
|
50
|
+
|
42
51
|
Available options:
|
43
52
|
|
44
53
|
* `default_url_options` - default parameters used when generating URLs
|
45
|
-
*
|
54
|
+
* Option is configurable at JS level with `Routes.configure()`
|
46
55
|
* Example: {:format => "json", :trailing\_slash => true, :protocol => "https", :host => "example.com", :port => 3000}
|
47
56
|
* Default: {}
|
48
57
|
* `exclude` - Array of regexps to exclude from js routes.
|
@@ -55,6 +64,7 @@ Available options:
|
|
55
64
|
* Supports nested namespace like `MyProject.routes`
|
56
65
|
* Default: `Routes`
|
57
66
|
* `prefix` - String representing a url path to prepend to all paths.
|
67
|
+
* Option is configurable at JS level with `Routes.configure()`
|
58
68
|
* Example: `http://yourdomain.com`. This will cause route helpers to generate full path only.
|
59
69
|
* Default: `Rails.application.config.relative_url_root`
|
60
70
|
* `camel_case` (version >= 0.8.8) - Generate camel case route names.
|
@@ -68,11 +78,13 @@ Available options:
|
|
68
78
|
* Sample route call when option is set to true: Routes.users() => `/users`
|
69
79
|
* `serializer` (version >= 1.1.0) - Puts a JS function here that serializes a Javascript Hash object into URL paramters: `{a: 1, b: 2} => "a=1&b=2"`.
|
70
80
|
* Default: `nil`. Uses built-in serializer
|
81
|
+
* Option is configurable at JS level with `Routes.configure()`
|
71
82
|
* Example: `jQuery.param` - use jQuery's serializer algorithm. You can attach serialize function from your favorite AJAX framework.
|
72
83
|
* Example: `MyApp.custom_serialize` - use completely custom serializer of your application.
|
73
84
|
|
74
85
|
* `special_options_key` - a special key that helps js-routes to destinguish serialized model from options hash
|
75
86
|
* This option is required because JS doesn't provide a difference between an object and a hash
|
87
|
+
* Option is configurable at JS level with `Routes.configure()`
|
76
88
|
* Default: `_options`
|
77
89
|
* `application` - a key to specify which rails engine you want to generate routes too.
|
78
90
|
* This option allows to only generate routes for a specific rails engine, that is mounted into routes instead of all Rails app routes
|
data/gemfiles/rails32.gemfile
CHANGED
data/gemfiles/rails40.gemfile
CHANGED
data/gemfiles/rails41.gemfile
CHANGED
data/gemfiles/rails42.gemfile
CHANGED
data/gemfiles/rails50.gemfile
CHANGED
data/js-routes.gemspec
CHANGED
@@ -31,7 +31,6 @@ Gem::Specification.new do |s|
|
|
31
31
|
else
|
32
32
|
s.add_development_dependency(%q<byebug>)
|
33
33
|
s.add_development_dependency(%q<pry-byebug>)
|
34
|
-
s.add_development_dependency(%q<therubyracer>, [">= 0.12.
|
34
|
+
s.add_development_dependency(%q<therubyracer>, [">= 0.12.3"])
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
data/lib/js_routes.rb
CHANGED
@@ -15,13 +15,14 @@ class JsRoutes
|
|
15
15
|
exclude: [],
|
16
16
|
include: //,
|
17
17
|
file: DEFAULT_PATH,
|
18
|
-
prefix:
|
18
|
+
prefix: -> { Rails.application.config.relative_url_root || "" },
|
19
19
|
url_links: false,
|
20
20
|
camel_case: false,
|
21
21
|
default_url_options: {},
|
22
22
|
compact: false,
|
23
23
|
serializer: nil,
|
24
24
|
special_options_key: "_options",
|
25
|
+
application: -> { Rails.application }
|
25
26
|
}
|
26
27
|
|
27
28
|
NODE_TYPES = {
|
@@ -39,7 +40,29 @@ class JsRoutes
|
|
39
40
|
FILTERED_DEFAULT_PARTS = [:controller, :action, :subdomain]
|
40
41
|
URL_OPTIONS = [:protocol, :domain, :host, :port, :subdomain]
|
41
42
|
|
42
|
-
class
|
43
|
+
class Configuration < Struct.new(*DEFAULTS.keys)
|
44
|
+
def initialize(attributes = nil)
|
45
|
+
assign(DEFAULTS)
|
46
|
+
return unless attributes
|
47
|
+
assign(attributes)
|
48
|
+
end
|
49
|
+
|
50
|
+
def assign(attributes)
|
51
|
+
attributes.each do |attribute, value|
|
52
|
+
value = value.call if value.is_a?(Proc)
|
53
|
+
send(:"#{attribute}=", value)
|
54
|
+
end
|
55
|
+
self
|
56
|
+
end
|
57
|
+
|
58
|
+
def [](attribute)
|
59
|
+
send(attribute)
|
60
|
+
end
|
61
|
+
|
62
|
+
def merge(attributes)
|
63
|
+
clone.assign(attributes)
|
64
|
+
end
|
65
|
+
|
43
66
|
def to_hash
|
44
67
|
Hash[*members.zip(values).flatten(1)].symbolize_keys
|
45
68
|
end
|
@@ -51,13 +74,16 @@ class JsRoutes
|
|
51
74
|
|
52
75
|
class << self
|
53
76
|
def setup(&block)
|
54
|
-
|
77
|
+
configuration.tap(&block) if block
|
55
78
|
end
|
56
79
|
|
57
80
|
def options
|
58
|
-
|
59
|
-
|
60
|
-
|
81
|
+
ActiveSupport::Deprecation.warn('JsRoutes.options method is deprecated use JsRoutes.configuration instead')
|
82
|
+
configuration
|
83
|
+
end
|
84
|
+
|
85
|
+
def configuration
|
86
|
+
@configuration ||= Configuration.new
|
61
87
|
end
|
62
88
|
|
63
89
|
def generate(opts = {})
|
@@ -92,7 +118,7 @@ class JsRoutes
|
|
92
118
|
#
|
93
119
|
|
94
120
|
def initialize(options = {})
|
95
|
-
@
|
121
|
+
@configuration = self.class.configuration.merge(options)
|
96
122
|
end
|
97
123
|
|
98
124
|
def generate
|
@@ -103,49 +129,28 @@ class JsRoutes
|
|
103
129
|
|
104
130
|
{
|
105
131
|
"GEM_VERSION" => JsRoutes::VERSION,
|
106
|
-
"APP_CLASS" => application.class.to_s,
|
107
|
-
"NAMESPACE" => @options[:namespace],
|
108
|
-
"DEFAULT_URL_OPTIONS" => json(@options[:default_url_options].merge(deprecate_url_options)),
|
109
|
-
"PREFIX" => @options[:prefix] || Rails.application.config.relative_url_root || "",
|
110
|
-
"NODE_TYPES" => json(NODE_TYPES),
|
111
|
-
"SERIALIZER" => @options[:serializer] || json(nil),
|
112
132
|
"ROUTES" => js_routes,
|
113
|
-
"SPECIAL_OPTIONS_KEY" => @options[:special_options_key].to_s,
|
114
133
|
"DEPRECATED_BEHAVIOR" => Rails.version < "4",
|
134
|
+
"NODE_TYPES" => json(NODE_TYPES),
|
135
|
+
|
136
|
+
"APP_CLASS" => application.class.to_s,
|
137
|
+
"NAMESPACE" => json(@configuration.namespace),
|
138
|
+
"DEFAULT_URL_OPTIONS" => json(@configuration.default_url_options),
|
139
|
+
"PREFIX" => json(@configuration.prefix),
|
140
|
+
"SPECIAL_OPTIONS_KEY" => json(@configuration.special_options_key),
|
141
|
+
"SERIALIZER" => @configuration.serializer || json(nil),
|
115
142
|
}.inject(File.read(File.dirname(__FILE__) + "/routes.js")) do |js, (key, value)|
|
116
143
|
js.gsub!(key, value.to_s)
|
117
144
|
end
|
118
145
|
end
|
119
146
|
|
120
|
-
def deprecate_url_options
|
121
|
-
result = {}
|
122
|
-
if @options.key?(:default_format)
|
123
|
-
warn("default_format option is deprecated. Use default_url_options = { format: <format> } instead")
|
124
|
-
result.merge!( format: @options[:default_format] )
|
125
|
-
end
|
126
|
-
if @options[:url_links].is_a?(String)
|
127
|
-
ActiveSupport::Deprecation.warn('js-routes url_links config value must be a boolean. Use default_url_options for specifying a default host.')
|
128
|
-
|
129
|
-
raise "invalid URL format in url_links (ex: http[s]://example.com)" if @options[:url_links].match(URI::Parser.new.make_regexp(%w(http https))).nil?
|
130
|
-
uri = URI.parse(@options[:url_links])
|
131
|
-
default_port = uri.scheme == "https" ? 443 : 80
|
132
|
-
port = uri.port == default_port ? nil : uri.port
|
133
|
-
result.merge!(
|
134
|
-
host: uri.host,
|
135
|
-
port: port,
|
136
|
-
protocol: uri.scheme,
|
137
|
-
)
|
138
|
-
end
|
139
|
-
result
|
140
|
-
end
|
141
|
-
|
142
147
|
def generate!(file_name = nil)
|
143
148
|
# Some libraries like Devise do not yet loaded their routes so we will wait
|
144
149
|
# until initialization process finish
|
145
150
|
# https://github.com/railsware/js-routes/issues/7
|
146
151
|
Rails.configuration.after_initialize do
|
147
|
-
file_name ||= self.class.
|
148
|
-
File.open(Rails.root.join(file_name
|
152
|
+
file_name ||= self.class.configuration['file']
|
153
|
+
File.open(Rails.root.join(file_name), 'w') do |f|
|
149
154
|
f.write generate
|
150
155
|
end
|
151
156
|
end
|
@@ -154,7 +159,7 @@ class JsRoutes
|
|
154
159
|
protected
|
155
160
|
|
156
161
|
def application
|
157
|
-
@
|
162
|
+
@configuration.application
|
158
163
|
end
|
159
164
|
|
160
165
|
def named_routes
|
@@ -189,7 +194,7 @@ class JsRoutes
|
|
189
194
|
end
|
190
195
|
|
191
196
|
def build_route_if_match(route, parent_route=nil)
|
192
|
-
if any_match?(route, parent_route, @
|
197
|
+
if any_match?(route, parent_route, @configuration[:exclude]) || !any_match?(route, parent_route, @configuration[:include])
|
193
198
|
nil
|
194
199
|
else
|
195
200
|
build_js(route, parent_route)
|
@@ -205,7 +210,7 @@ class JsRoutes
|
|
205
210
|
|
206
211
|
def build_js(route, parent_route)
|
207
212
|
name = [parent_route.try(:name), route.name].compact
|
208
|
-
route_name = generate_route_name(name, (:path unless @
|
213
|
+
route_name = generate_route_name(name, (:path unless @configuration[:compact]))
|
209
214
|
parent_spec = parent_route.try(:path).try(:spec)
|
210
215
|
route_arguments = route_js_arguments(route, parent_spec)
|
211
216
|
url_link = generate_url_link(name, route_name, route_arguments, route)
|
@@ -236,7 +241,7 @@ class JsRoutes
|
|
236
241
|
end
|
237
242
|
|
238
243
|
def generate_url_link(name, route_name, route_arguments, route)
|
239
|
-
return "" unless @
|
244
|
+
return "" unless @configuration[:url_links]
|
240
245
|
<<-JS.strip!
|
241
246
|
#{generate_route_name(name, :url)}: Utils.route(#{route_arguments}, true)
|
242
247
|
JS
|
@@ -245,7 +250,7 @@ class JsRoutes
|
|
245
250
|
def generate_route_name(name, suffix)
|
246
251
|
route_name = name.join('_')
|
247
252
|
route_name << "_#{ suffix }" if suffix
|
248
|
-
@
|
253
|
+
@configuration[:camel_case] ? route_name.camelize(:lower) : route_name
|
249
254
|
end
|
250
255
|
|
251
256
|
def json(string)
|
data/lib/js_routes/engine.rb
CHANGED
@@ -30,13 +30,12 @@ end
|
|
30
30
|
class Engine < ::Rails::Engine
|
31
31
|
require 'sprockets/version'
|
32
32
|
v2 = Gem::Dependency.new('', ' ~> 2')
|
33
|
-
|
34
|
-
v37 = Gem::Dependency.new('', ' >= 3.7')
|
33
|
+
vgte3 = Gem::Dependency.new('', ' >= 3')
|
35
34
|
sprockets_version = Gem::Version.new(::Sprockets::VERSION).release
|
36
35
|
initializer_args = case sprockets_version
|
37
36
|
when -> (v) { v2.match?('', v) }
|
38
37
|
{ after: "sprockets.environment" }
|
39
|
-
when -> (v) {
|
38
|
+
when -> (v) { vgte3.match?('', v) }
|
40
39
|
{ after: :engines_blank_point, before: :finisher_hook }
|
41
40
|
else
|
42
41
|
raise StandardError, "Sprockets version #{sprockets_version} is not supported"
|
@@ -48,8 +47,7 @@ class Engine < ::Rails::Engine
|
|
48
47
|
initializer 'js-routes.dependent_on_routes', initializer_args do
|
49
48
|
case sprockets_version
|
50
49
|
when -> (v) { v2.match?('', v) },
|
51
|
-
-> (v) {
|
52
|
-
-> (v) { v37.match?('', v) }
|
50
|
+
-> (v) { vgte3.match?('', v) }
|
53
51
|
|
54
52
|
# It seems rails 3.2 is not working if
|
55
53
|
# `Rails.application.config.assets.configure` is used for
|
data/lib/js_routes/version.rb
CHANGED