middleman-core 4.0.0 → 4.1.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/features/asset_hash.feature +63 -0
- data/features/asset_host.feature +14 -0
- data/features/cache_buster.feature +15 -1
- data/features/clean_build.feature +16 -0
- data/features/cli/preview_server.feature +6 -4
- data/features/cli_extension.feature +1 -1
- data/features/directory_index.feature +3 -1
- data/features/encoding_option.feature +28 -0
- data/features/i18n_mixed_sources.feature +39 -0
- data/features/ignore.feature +33 -4
- data/features/relative_assets.feature +14 -0
- data/features/support/env.rb +1 -1
- data/fixtures/asset-hash-app/source/index.html.erb +3 -0
- data/fixtures/asset-hash-app/source/layout.erb +3 -3
- data/fixtures/asset-hash-app/source/other.html.erb +3 -0
- data/fixtures/asset-hash-app/source/stylesheets/fragment.css.scss +7 -0
- data/fixtures/asset-hash-host-app/source/index.html.erb +3 -0
- data/fixtures/asset-hash-host-app/source/layout.erb +3 -3
- data/fixtures/asset-hash-host-app/source/other.html.erb +3 -0
- data/fixtures/asset-hash-host-app/source/stylesheets/fragment.css.scss +3 -0
- data/fixtures/i-8859-1-app/config.rb +1 -0
- data/fixtures/i-8859-1-app/source/index.html.erb +1 -0
- data/fixtures/i18n-mixed-sources/config.rb +1 -0
- data/fixtures/i18n-mixed-sources/locales/en.yml +4 -0
- data/fixtures/i18n-mixed-sources/locales/es.yml +4 -0
- data/fixtures/i18n-mixed-sources/source/a/sub.html.erb +9 -0
- data/fixtures/i18n-mixed-sources/source/b/index.html.erb +9 -0
- data/fixtures/i18n-mixed-sources/source/index.html.erb +9 -0
- data/fixtures/i18n-mixed-sources/source/localizable/a/index.html.erb +9 -0
- data/fixtures/i18n-mixed-sources/source/localizable/b/sub.html.erb +9 -0
- data/fixtures/i18n-mixed-sources/source/localizable/index.html.erb +9 -0
- data/fixtures/import-app/config.rb +1 -1
- data/fixtures/indexable-app/config.rb +1 -0
- data/fixtures/indexable-app/source/regex_leave_me_alone2.html +1 -0
- data/lib/middleman-core/application.rb +6 -5
- data/lib/middleman-core/builder.rb +7 -3
- data/lib/middleman-core/core_extensions/collections.rb +3 -1
- data/lib/middleman-core/core_extensions/collections/step_context.rb +6 -7
- data/lib/middleman-core/core_extensions/default_helpers.rb +2 -2
- data/lib/middleman-core/core_extensions/front_matter.rb +1 -0
- data/lib/middleman-core/core_extensions/i18n.rb +16 -9
- data/lib/middleman-core/core_extensions/routing.rb +1 -1
- data/lib/middleman-core/extension.rb +34 -0
- data/lib/middleman-core/extensions/asset_hash.rb +2 -0
- data/lib/middleman-core/extensions/asset_host.rb +2 -0
- data/lib/middleman-core/extensions/cache_buster.rb +2 -0
- data/lib/middleman-core/extensions/external_pipeline.rb +0 -2
- data/lib/middleman-core/extensions/gzip.rb +1 -1
- data/lib/middleman-core/extensions/relative_assets.rb +2 -0
- data/lib/middleman-core/load_paths.rb +1 -1
- data/lib/middleman-core/meta_pages/sitemap_resource.rb +1 -1
- data/lib/middleman-core/middleware/inline_url_rewriter.rb +10 -2
- data/lib/middleman-core/sitemap/extensions/ignores.rb +37 -39
- data/lib/middleman-core/sitemap/extensions/import.rb +24 -66
- data/lib/middleman-core/sitemap/extensions/move_file.rb +9 -38
- data/lib/middleman-core/sitemap/extensions/proxies.rb +20 -52
- data/lib/middleman-core/sitemap/extensions/traversal.rb +13 -1
- data/lib/middleman-core/sitemap/resource.rb +4 -9
- data/lib/middleman-core/sitemap/store.rb +10 -9
- data/lib/middleman-core/step_definitions/server_steps.rb +4 -0
- data/lib/middleman-core/util.rb +22 -24
- data/lib/middleman-core/version.rb +1 -1
- data/spec/middleman-core/util_spec.rb +10 -1
- metadata +34 -4
@@ -2,10 +2,22 @@ module Middleman
|
|
2
2
|
module Sitemap
|
3
3
|
module Extensions
|
4
4
|
module Traversal
|
5
|
+
def traversal_root
|
6
|
+
root = if !@app.extensions[:i18n]
|
7
|
+
'/'
|
8
|
+
else
|
9
|
+
@app.extensions[:i18n].path_root(::I18n.locale)
|
10
|
+
end
|
11
|
+
|
12
|
+
root.sub(/^\//, '')
|
13
|
+
end
|
14
|
+
|
5
15
|
# This resource's parent resource
|
6
16
|
# @return [Middleman::Sitemap::Resource, nil]
|
7
17
|
def parent
|
8
|
-
|
18
|
+
root = path.sub(/^#{::Regexp.escape(traversal_root)}/, '')
|
19
|
+
parts = root.split('/')
|
20
|
+
|
9
21
|
tail = parts.pop
|
10
22
|
is_index = (tail == @app.config[:index_file])
|
11
23
|
|
@@ -38,6 +38,8 @@ module Middleman
|
|
38
38
|
Contract METADATA_HASH
|
39
39
|
attr_reader :metadata
|
40
40
|
|
41
|
+
attr_accessor :ignored
|
42
|
+
|
41
43
|
# Initialize resource with parent store and URL
|
42
44
|
# @param [Middleman::Sitemap::Store] store
|
43
45
|
# @param [String] path
|
@@ -47,6 +49,7 @@ module Middleman
|
|
47
49
|
@store = store
|
48
50
|
@app = @store.app
|
49
51
|
@path = path
|
52
|
+
@ignored = false
|
50
53
|
|
51
54
|
source = Pathname(source) if source && source.is_a?(String)
|
52
55
|
|
@@ -173,15 +176,7 @@ module Middleman
|
|
173
176
|
# @return [Boolean]
|
174
177
|
Contract Bool
|
175
178
|
def ignored?
|
176
|
-
|
177
|
-
# Ignore based on the source path (without template extensions)
|
178
|
-
return true if @app.sitemap.ignored?(path)
|
179
|
-
# This allows files to be ignored by their source file name (with template extensions)
|
180
|
-
if !self.is_a?(ProxyResource) && file_descriptor && @app.sitemap.ignored?(file_descriptor[:relative_path].to_s)
|
181
|
-
true
|
182
|
-
else
|
183
|
-
false
|
184
|
-
end
|
179
|
+
@ignored
|
185
180
|
end
|
186
181
|
|
187
182
|
# The preferred MIME content type for this resource based on extension or metadata
|
@@ -3,12 +3,6 @@ require 'active_support/core_ext/hash/deep_merge'
|
|
3
3
|
require 'monitor'
|
4
4
|
require 'hamster'
|
5
5
|
|
6
|
-
# Ignores
|
7
|
-
Middleman::Extensions.register :sitemap_ignore, auto_activate: :before_configuration do
|
8
|
-
require 'middleman-core/sitemap/extensions/ignores'
|
9
|
-
Middleman::Sitemap::Extensions::Ignores
|
10
|
-
end
|
11
|
-
|
12
6
|
# Files on Disk
|
13
7
|
Middleman::Extensions.register :sitemap_ondisk, auto_activate: :before_configuration do
|
14
8
|
require 'middleman-core/sitemap/extensions/on_disk'
|
@@ -45,6 +39,12 @@ Middleman::Extensions.register :sitemap_move_files, auto_activate: :before_confi
|
|
45
39
|
Middleman::Sitemap::Extensions::MoveFile
|
46
40
|
end
|
47
41
|
|
42
|
+
# Ignores
|
43
|
+
Middleman::Extensions.register :sitemap_ignore, auto_activate: :before_configuration do
|
44
|
+
require 'middleman-core/sitemap/extensions/ignores'
|
45
|
+
Middleman::Sitemap::Extensions::Ignores
|
46
|
+
end
|
47
|
+
|
48
48
|
require 'middleman-core/contracts'
|
49
49
|
|
50
50
|
module Middleman
|
@@ -108,14 +108,15 @@ module Middleman
|
|
108
108
|
[m[:priority], n]
|
109
109
|
end
|
110
110
|
|
111
|
-
rebuild_resource_list!(:
|
111
|
+
rebuild_resource_list!(:"registered_new_manipulator_#{name}")
|
112
112
|
end
|
113
113
|
|
114
114
|
# Rebuild the list of resources from scratch, using registed manipulators
|
115
115
|
# @return [void]
|
116
116
|
Contract Maybe[Symbol] => Any
|
117
|
-
def rebuild_resource_list!(
|
117
|
+
def rebuild_resource_list!(name=nil)
|
118
118
|
@lock.synchronize do
|
119
|
+
@app.logger.debug "== Requesting resource list rebuilding: #{name}"
|
119
120
|
@needs_sitemap_rebuild = true
|
120
121
|
end
|
121
122
|
end
|
@@ -159,7 +160,7 @@ module Middleman
|
|
159
160
|
end
|
160
161
|
end
|
161
162
|
|
162
|
-
# Invalidate our cached view of resource that are not
|
163
|
+
# Invalidate our cached view of resource that are not ignored. If your extension
|
163
164
|
# adds ways to ignore files, you should call this to make sure #resources works right.
|
164
165
|
def invalidate_resources_not_ignored_cache!
|
165
166
|
@resources_not_ignored = nil
|
@@ -75,6 +75,10 @@ Then /^the content type should be "([^\"]*)"$/ do |expected|
|
|
75
75
|
expect(page.response_headers['Content-Type']).to start_with expected
|
76
76
|
end
|
77
77
|
|
78
|
+
Then /^the "([^\"]*)" header should contain "([^\"]*)"$/ do |header, expected|
|
79
|
+
expect(page.response_headers[header]).to include expected
|
80
|
+
end
|
81
|
+
|
78
82
|
Then /^I should see "([^\"]*)"$/ do |expected|
|
79
83
|
expect(page.body).to include expected
|
80
84
|
end
|
data/lib/middleman-core/util.rb
CHANGED
@@ -201,31 +201,32 @@ module Middleman
|
|
201
201
|
Contract IsA['Middleman::Application'], String, String, Hash => String
|
202
202
|
def asset_url(app, path, prefix='', options={})
|
203
203
|
# Don't touch assets which already have a full path
|
204
|
-
if path.include?('//') || path.start_with?('data:')
|
205
|
-
|
206
|
-
|
207
|
-
|
204
|
+
return path if path.include?('//') || path.start_with?('data:')
|
205
|
+
|
206
|
+
if options[:relative] && !options[:current_resource]
|
207
|
+
raise ArgumentError, '#asset_url must be run in a context with current_resource if relative: true'
|
208
|
+
end
|
209
|
+
|
210
|
+
uri = URI(path)
|
211
|
+
path = uri.path
|
212
|
+
|
213
|
+
result = if resource = app.sitemap.find_resource_by_destination_path(url_for(app, path, options))
|
214
|
+
resource.url
|
215
|
+
else
|
216
|
+
path = File.join(prefix, path)
|
217
|
+
if resource = app.sitemap.find_resource_by_path(path)
|
208
218
|
resource.url
|
209
219
|
else
|
210
|
-
|
211
|
-
if resource = app.sitemap.find_resource_by_path(path)
|
212
|
-
resource.url
|
213
|
-
else
|
214
|
-
File.join(app.config[:http_prefix], path)
|
215
|
-
end
|
220
|
+
File.join(app.config[:http_prefix], path)
|
216
221
|
end
|
222
|
+
end
|
217
223
|
|
218
|
-
|
219
|
-
result
|
220
|
-
else
|
221
|
-
unless options[:current_resource]
|
222
|
-
raise ArgumentError, '#asset_url must be run in a context with current_resource if relative: true'
|
223
|
-
end
|
224
|
+
final_result = URI.encode(relative_path_from_resource(options[:current_resource], result, options[:relative]))
|
224
225
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
226
|
+
result_uri = URI(final_result)
|
227
|
+
result_uri.query = uri.query
|
228
|
+
result_uri.fragment = uri.fragment
|
229
|
+
result_uri.to_s
|
229
230
|
end
|
230
231
|
|
231
232
|
# Given a source path (referenced either absolutely or relatively)
|
@@ -290,9 +291,6 @@ module Middleman
|
|
290
291
|
else
|
291
292
|
resource_url
|
292
293
|
end
|
293
|
-
else
|
294
|
-
# If they explicitly asked for relative links but we can't find a resource...
|
295
|
-
raise "No resource exists at #{url}" if relative
|
296
294
|
end
|
297
295
|
|
298
296
|
# Support a :query option that can be a string or hash
|
@@ -368,7 +366,7 @@ module Middleman
|
|
368
366
|
case
|
369
367
|
when mime.start_with?('text/')
|
370
368
|
true
|
371
|
-
when mime.include?('xml')
|
369
|
+
when mime.include?('xml') && !mime.include?('officedocument')
|
372
370
|
true
|
373
371
|
when mime.include?('json')
|
374
372
|
true
|
@@ -98,6 +98,15 @@ describe Middleman::Util do
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
+
it "returns path relative to the provided current_resource" do
|
102
|
+
Given.fixture 'clean-dir-app'
|
103
|
+
Given.file 'source/a-path/index.html', ''
|
104
|
+
Given.file 'source/a-path/images/blank.gif', ''
|
105
|
+
@mm = Middleman::Application.new
|
106
|
+
current_resource = @mm.sitemap.find_resource_by_path('a-path/index.html')
|
107
|
+
expect( Middleman::Util.asset_url( @mm, 'images/blank.gif', 'images', current_resource: current_resource ) ).to eq '/a-path/images/blank.gif'
|
108
|
+
end
|
109
|
+
|
101
110
|
context "when relative is true" do
|
102
111
|
|
103
112
|
before(:each) do
|
@@ -106,7 +115,7 @@ describe Middleman::Util do
|
|
106
115
|
end
|
107
116
|
|
108
117
|
it "returns path relative to the provided current_resource" do
|
109
|
-
current_resource = instance_double("Middleman::Sitemap::Resource", destination_path: 'a-path/index.html')
|
118
|
+
current_resource = instance_double("Middleman::Sitemap::Resource", destination_path: 'a-path/index.html', path: 'a-path/index.html')
|
110
119
|
expect( Middleman::Util.asset_url( @mm, 'blank.gif', 'images', current_resource: current_resource,
|
111
120
|
relative: true ) ).to eq '../images/blank.gif'
|
112
121
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.1.0.rc.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Reynolds
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2016-01-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -314,6 +314,7 @@ files:
|
|
314
314
|
- features/default-layout.feature
|
315
315
|
- features/directory_index.feature
|
316
316
|
- features/dynamic_pages.feature
|
317
|
+
- features/encoding_option.feature
|
317
318
|
- features/extension_api_deprecations.feature
|
318
319
|
- features/extension_hooks.feature
|
319
320
|
- features/extensionless_text_files.feature
|
@@ -336,6 +337,7 @@ files:
|
|
336
337
|
- features/i18n_builder.feature
|
337
338
|
- features/i18n_force_locale.feature
|
338
339
|
- features/i18n_link_to.feature
|
340
|
+
- features/i18n_mixed_sources.feature
|
339
341
|
- features/i18n_partials.feature
|
340
342
|
- features/i18n_preview.feature
|
341
343
|
- features/ignore.feature
|
@@ -403,6 +405,7 @@ files:
|
|
403
405
|
- fixtures/asset-hash-app/source/partials.html.erb
|
404
406
|
- fixtures/asset-hash-app/source/slim.html.slim
|
405
407
|
- fixtures/asset-hash-app/source/stylesheets/_partial.sass
|
408
|
+
- fixtures/asset-hash-app/source/stylesheets/fragment.css.scss
|
406
409
|
- fixtures/asset-hash-app/source/stylesheets/site.css.scss
|
407
410
|
- fixtures/asset-hash-app/source/stylesheets/uses_fonts.css
|
408
411
|
- fixtures/asset-hash-app/source/stylesheets/uses_partials.css.sass
|
@@ -669,6 +672,8 @@ files:
|
|
669
672
|
- fixtures/gzip-app/source/index.html
|
670
673
|
- fixtures/gzip-app/source/javascripts/test.js
|
671
674
|
- fixtures/gzip-app/source/stylesheets/test.css
|
675
|
+
- fixtures/i-8859-1-app/config.rb
|
676
|
+
- fixtures/i-8859-1-app/source/index.html.erb
|
672
677
|
- fixtures/i18n-alt-root-app/locales/en.yml
|
673
678
|
- fixtures/i18n-alt-root-app/locales/es.yml
|
674
679
|
- fixtures/i18n-alt-root-app/source/lang_data/hello.html.erb
|
@@ -682,6 +687,15 @@ files:
|
|
682
687
|
- fixtures/i18n-force-locale/locales/es.yml
|
683
688
|
- fixtures/i18n-force-locale/locales/fr.yml
|
684
689
|
- fixtures/i18n-force-locale/source/index.html.haml
|
690
|
+
- fixtures/i18n-mixed-sources/config.rb
|
691
|
+
- fixtures/i18n-mixed-sources/locales/en.yml
|
692
|
+
- fixtures/i18n-mixed-sources/locales/es.yml
|
693
|
+
- fixtures/i18n-mixed-sources/source/a/sub.html.erb
|
694
|
+
- fixtures/i18n-mixed-sources/source/b/index.html.erb
|
695
|
+
- fixtures/i18n-mixed-sources/source/index.html.erb
|
696
|
+
- fixtures/i18n-mixed-sources/source/localizable/a/index.html.erb
|
697
|
+
- fixtures/i18n-mixed-sources/source/localizable/b/sub.html.erb
|
698
|
+
- fixtures/i18n-mixed-sources/source/localizable/index.html.erb
|
685
699
|
- fixtures/i18n-nested-app/locales/en.yml
|
686
700
|
- fixtures/i18n-nested-app/locales/en/more.yml
|
687
701
|
- fixtures/i18n-nested-app/locales/es.yml
|
@@ -826,6 +840,7 @@ files:
|
|
826
840
|
- fixtures/indexable-app/source/evil spaces.html
|
827
841
|
- fixtures/indexable-app/source/leave_me_alone.html
|
828
842
|
- fixtures/indexable-app/source/needs_index.html
|
843
|
+
- fixtures/indexable-app/source/regex_leave_me_alone2.html
|
829
844
|
- fixtures/indexable-app/source/regular/index.html
|
830
845
|
- fixtures/indexable-app/source/wildcard_leave_me_alone.html
|
831
846
|
- fixtures/javascript-app/config.rb
|
@@ -1411,9 +1426,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1411
1426
|
version: 2.0.0
|
1412
1427
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1413
1428
|
requirements:
|
1414
|
-
- - "
|
1429
|
+
- - ">"
|
1415
1430
|
- !ruby/object:Gem::Version
|
1416
|
-
version:
|
1431
|
+
version: 1.3.1
|
1417
1432
|
requirements: []
|
1418
1433
|
rubyforge_project:
|
1419
1434
|
rubygems_version: 2.4.8
|
@@ -1448,6 +1463,7 @@ test_files:
|
|
1448
1463
|
- features/default-layout.feature
|
1449
1464
|
- features/directory_index.feature
|
1450
1465
|
- features/dynamic_pages.feature
|
1466
|
+
- features/encoding_option.feature
|
1451
1467
|
- features/extension_api_deprecations.feature
|
1452
1468
|
- features/extension_hooks.feature
|
1453
1469
|
- features/extensionless_text_files.feature
|
@@ -1470,6 +1486,7 @@ test_files:
|
|
1470
1486
|
- features/i18n_builder.feature
|
1471
1487
|
- features/i18n_force_locale.feature
|
1472
1488
|
- features/i18n_link_to.feature
|
1489
|
+
- features/i18n_mixed_sources.feature
|
1473
1490
|
- features/i18n_partials.feature
|
1474
1491
|
- features/i18n_preview.feature
|
1475
1492
|
- features/ignore.feature
|
@@ -1537,6 +1554,7 @@ test_files:
|
|
1537
1554
|
- fixtures/asset-hash-app/source/partials.html.erb
|
1538
1555
|
- fixtures/asset-hash-app/source/slim.html.slim
|
1539
1556
|
- fixtures/asset-hash-app/source/stylesheets/_partial.sass
|
1557
|
+
- fixtures/asset-hash-app/source/stylesheets/fragment.css.scss
|
1540
1558
|
- fixtures/asset-hash-app/source/stylesheets/site.css.scss
|
1541
1559
|
- fixtures/asset-hash-app/source/stylesheets/uses_fonts.css
|
1542
1560
|
- fixtures/asset-hash-app/source/stylesheets/uses_partials.css.sass
|
@@ -1803,6 +1821,8 @@ test_files:
|
|
1803
1821
|
- fixtures/gzip-app/source/index.html
|
1804
1822
|
- fixtures/gzip-app/source/javascripts/test.js
|
1805
1823
|
- fixtures/gzip-app/source/stylesheets/test.css
|
1824
|
+
- fixtures/i-8859-1-app/config.rb
|
1825
|
+
- fixtures/i-8859-1-app/source/index.html.erb
|
1806
1826
|
- fixtures/i18n-alt-root-app/locales/en.yml
|
1807
1827
|
- fixtures/i18n-alt-root-app/locales/es.yml
|
1808
1828
|
- fixtures/i18n-alt-root-app/source/lang_data/hello.html.erb
|
@@ -1816,6 +1836,15 @@ test_files:
|
|
1816
1836
|
- fixtures/i18n-force-locale/locales/es.yml
|
1817
1837
|
- fixtures/i18n-force-locale/locales/fr.yml
|
1818
1838
|
- fixtures/i18n-force-locale/source/index.html.haml
|
1839
|
+
- fixtures/i18n-mixed-sources/config.rb
|
1840
|
+
- fixtures/i18n-mixed-sources/locales/en.yml
|
1841
|
+
- fixtures/i18n-mixed-sources/locales/es.yml
|
1842
|
+
- fixtures/i18n-mixed-sources/source/a/sub.html.erb
|
1843
|
+
- fixtures/i18n-mixed-sources/source/b/index.html.erb
|
1844
|
+
- fixtures/i18n-mixed-sources/source/index.html.erb
|
1845
|
+
- fixtures/i18n-mixed-sources/source/localizable/a/index.html.erb
|
1846
|
+
- fixtures/i18n-mixed-sources/source/localizable/b/sub.html.erb
|
1847
|
+
- fixtures/i18n-mixed-sources/source/localizable/index.html.erb
|
1819
1848
|
- fixtures/i18n-nested-app/locales/en.yml
|
1820
1849
|
- fixtures/i18n-nested-app/locales/en/more.yml
|
1821
1850
|
- fixtures/i18n-nested-app/locales/es.yml
|
@@ -1960,6 +1989,7 @@ test_files:
|
|
1960
1989
|
- fixtures/indexable-app/source/evil spaces.html
|
1961
1990
|
- fixtures/indexable-app/source/leave_me_alone.html
|
1962
1991
|
- fixtures/indexable-app/source/needs_index.html
|
1992
|
+
- fixtures/indexable-app/source/regex_leave_me_alone2.html
|
1963
1993
|
- fixtures/indexable-app/source/regular/index.html
|
1964
1994
|
- fixtures/indexable-app/source/wildcard_leave_me_alone.html
|
1965
1995
|
- fixtures/javascript-app/config.rb
|