sprockets-preload 0.0.1 → 0.0.2
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/README.md +17 -9
- data/lib/sprockets/preload/directive_processor.rb +19 -6
- data/lib/sprockets/preload/version.rb +1 -1
- data/spec/helpers/assets/directory/directory.js +1 -0
- data/spec/helpers/assets/directory/test1.js +1 -0
- data/spec/helpers/assets/directory/test2.js +1 -0
- data/spec/helpers/boot.rb +1 -1
- data/spec/integrational/direct_spec.rb +2 -2
- data/spec/integrational/directory_spec.rb +29 -0
- data/spec/integrational/forced_spec.rb +3 -3
- data/spec/integrational/nested_spec.rb +2 -2
- metadata +9 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c109168d6d857d0d53ea555d65a80f4c6e6044fe
|
4
|
+
data.tar.gz: bd31241d93501635dae87cb3e284ebc4bd6862c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88c35958ca2cd51ab0430b62c0a912c5f52283b84b74a07e5fac8f49e8bb00231a01fb5e925327f204ae11ddd9091e85e7430ecb936f1db7bcd7211a8b550831
|
7
|
+
data.tar.gz: 4e1d63162c5de636f99aeec6139cdbbe4db15451ccbc6f30fc390a8b2bb155d03d0c8c23b98f8b153ae745719aad5f8df4a845b2b2e6c58470376fde923fa747
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ Let's make user experience smooth:
|
|
25
25
|
|
26
26
|
1. Add `sprockets-preload` to your `Gemfile` and run `bundle install`
|
27
27
|
|
28
|
-
2. Change `//= include` to `//= preload` for the assets you want to
|
28
|
+
2. Change `//= include` to `//= preload` for the assets you want to detach:
|
29
29
|
|
30
30
|
```javascript
|
31
31
|
//= include helpers
|
@@ -37,7 +37,7 @@ Let's make user experience smooth:
|
|
37
37
|
$ -> Front.start()
|
38
38
|
```
|
39
39
|
|
40
|
-
3. Delay initialization to the moment when
|
40
|
+
3. Delay initialization to the moment when detached assets are loaded:
|
41
41
|
|
42
42
|
```javascript
|
43
43
|
//= include helpers
|
@@ -71,7 +71,7 @@ Let's make user experience smooth:
|
|
71
71
|
}
|
72
72
|
```
|
73
73
|
|
74
|
-
5. **IMPORTANT**: Rails development environment uses stub to ease debugging. Thus while things keep working, assets don't really get
|
74
|
+
5. **IMPORTANT**: Rails development environment uses stub to ease debugging. Thus while things keep working, assets don't really get detached. To force production-grade loading (just to make sure things work fine) add `//= preload!` to your manifest:
|
75
75
|
|
76
76
|
```javascript
|
77
77
|
//= preload!
|
@@ -94,6 +94,10 @@ Let's make user experience smooth:
|
|
94
94
|
|
95
95
|
Make sure to remove `//= preload!` when your tests are done.
|
96
96
|
|
97
|
+
-----------
|
98
|
+
|
99
|
+
By the way, there's also `//= preload_tree` directive that works similar to `//= require_tree`.
|
100
|
+
|
97
101
|
## Caching options
|
98
102
|
|
99
103
|
To make loading progress tracking smooth and cache manually controllable, **Sprockets::Preload** uses `localStorage` to cache assets (it falls back to default browser cache automatically). **Sprockets** provides digests and logic-aware dependency system that work much better and much more predictable than more common default HTTP caching.
|
@@ -127,10 +131,14 @@ SprocketsPreload.progress = function(percent) {
|
|
127
131
|
|
128
132
|
**Sprockets::Preload** does not depend on Rails. However it has proper rail-ties and is fully-functional on Rails out of box. If you want to use it outside of Rails with clean **Sprockets** – see `lib/sprockets/preload/engine.rb` for required initialization settings.
|
129
133
|
|
130
|
-
##
|
134
|
+
## History
|
135
|
+
|
136
|
+
**Sprockets::Preload** is a mutated fork of [Joosy](http://joosy.ws) 1.x preloaders. For Node.js-based applications please refer to [Loada](https://github.com/inossidabile/loada).
|
137
|
+
|
138
|
+
## Maintainers
|
139
|
+
|
140
|
+
* Boris Staal, [@inossidabile](http://staal.io)
|
141
|
+
|
142
|
+
## License
|
131
143
|
|
132
|
-
|
133
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
134
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
135
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
136
|
-
5. Create new Pull Request
|
144
|
+
It is free software, and may be redistributed under the terms of MIT license.
|
@@ -4,22 +4,35 @@
|
|
4
4
|
module Sprockets
|
5
5
|
module Preload
|
6
6
|
module DirectiveProcessor
|
7
|
-
def process_preload_directive(path)
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
def process_preload_directive(path, inherit=true)
|
8
|
+
# Other macroses like `#= preload_directory` can
|
9
|
+
# call require on their own behalf
|
10
|
+
process_require_directive path if inherit
|
11
|
+
|
12
|
+
if context.content_type == 'application/javascript'
|
11
13
|
unless context._assets_to_preload
|
12
14
|
process_require_directive 'sprockets/preload/load'
|
13
15
|
context._assets_to_preload = []
|
14
16
|
end
|
15
17
|
|
16
|
-
context.require_asset path
|
17
18
|
context.stub_asset path if context.preload?
|
18
|
-
|
19
19
|
context._assets_to_preload.push path
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
def process_preload_directory_directive(path=".")
|
24
|
+
root = pathname.dirname.join(path).expand_path
|
25
|
+
|
26
|
+
process_require_directory_directive(path).each do |pathname|
|
27
|
+
pathname = root.join(pathname)
|
28
|
+
if pathname.to_s == self.file
|
29
|
+
next
|
30
|
+
elsif context.asset_requirable?(pathname)
|
31
|
+
process_preload_directive(context.environment.attributes_for(pathname).logical_path)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
23
36
|
define_method :"process_preload!_directive" do
|
24
37
|
context._force_preload = true
|
25
38
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
//= preload_directory ./
|
@@ -0,0 +1 @@
|
|
1
|
+
test1
|
@@ -0,0 +1 @@
|
|
1
|
+
test2
|
data/spec/helpers/boot.rb
CHANGED
@@ -9,7 +9,7 @@ describe "Direct dependency" do
|
|
9
9
|
Sprockets::Preload.precompiles -= ["direct/direct.js"]
|
10
10
|
end
|
11
11
|
|
12
|
-
it "serves
|
12
|
+
it "serves detached" do
|
13
13
|
Sprockets::Preload.environment['sprockets/preload/assets'].source.should == "test1\n;\ntest2\n;\n\n"
|
14
14
|
end
|
15
15
|
|
@@ -20,7 +20,7 @@ describe "Direct dependency" do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
context "
|
23
|
+
context "detached", inline: false do
|
24
24
|
it "keeps inlines" do
|
25
25
|
Sprockets::Preload.environment['direct/direct'].source.should_not include("test1", "test2")
|
26
26
|
Sprockets::Preload.environment['direct/direct'].source.should_not include("SprocketsPreload.inline = true")
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'helpers/boot'
|
2
|
+
|
3
|
+
describe "Self dependency" do
|
4
|
+
before(:all) do
|
5
|
+
Sprockets::Preload.precompiles += ["directory/directory.js"]
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:all) do
|
9
|
+
Sprockets::Preload.precompiles -= ["directory/directory.js"]
|
10
|
+
end
|
11
|
+
|
12
|
+
it "serves detached" do
|
13
|
+
Sprockets::Preload.environment['sprockets/preload/assets'].source.should == "test1\n;\ntest2\n;\n\n"
|
14
|
+
end
|
15
|
+
|
16
|
+
context "inlined", inline: true do
|
17
|
+
it "keeps inlines" do
|
18
|
+
Sprockets::Preload.environment['directory/directory'].source.should include("test1", "test2")
|
19
|
+
Sprockets::Preload.environment['directory/directory'].source.should include("SprocketsPreload.inline = true")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "detached", inline: false do
|
24
|
+
it "keeps inlines" do
|
25
|
+
Sprockets::Preload.environment['directory/directory'].source.should_not include("test1", "test2")
|
26
|
+
Sprockets::Preload.environment['directory/directory'].source.should_not include("SprocketsPreload.inline = true")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'helpers/boot'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "Forced dependency" do
|
4
4
|
before(:all) do
|
5
5
|
Sprockets::Preload.precompiles += ["forced/forced.js"]
|
6
6
|
end
|
@@ -9,7 +9,7 @@ describe "Direct dependency" do
|
|
9
9
|
Sprockets::Preload.precompiles -= ["forced/forced.js"]
|
10
10
|
end
|
11
11
|
|
12
|
-
it "serves
|
12
|
+
it "serves detached" do
|
13
13
|
Sprockets::Preload.environment['sprockets/preload/assets'].source.should == "test1\n;\ntest2\n;\n\n"
|
14
14
|
end
|
15
15
|
|
@@ -20,7 +20,7 @@ describe "Direct dependency" do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
context "
|
23
|
+
context "detached", inline: false do
|
24
24
|
it "keeps inlines" do
|
25
25
|
Sprockets::Preload.environment['forced/forced'].source.should_not include("test1", "test2")
|
26
26
|
Sprockets::Preload.environment['forced/forced'].source.should_not include("SprocketsPreload.inline = true")
|
@@ -9,7 +9,7 @@ describe "Nested dependency" do
|
|
9
9
|
Sprockets::Preload.precompiles -= ["nested/nested.js"]
|
10
10
|
end
|
11
11
|
|
12
|
-
it "serves
|
12
|
+
it "serves detached" do
|
13
13
|
Sprockets::Preload.environment['sprockets/preload/assets'].source.should == "test2\n;\n\n"
|
14
14
|
end
|
15
15
|
|
@@ -20,7 +20,7 @@ describe "Nested dependency" do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
context "
|
23
|
+
context "detached", inline: false do
|
24
24
|
it "keeps inlines" do
|
25
25
|
Sprockets::Preload.environment['nested/nested'].source.should include("test1")
|
26
26
|
Sprockets::Preload.environment['nested/nested'].source.should_not include("test2")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprockets-preload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Staal
|
@@ -78,6 +78,9 @@ files:
|
|
78
78
|
- spec/helpers/assets/direct/direct.js
|
79
79
|
- spec/helpers/assets/direct/test1.js
|
80
80
|
- spec/helpers/assets/direct/test2.js
|
81
|
+
- spec/helpers/assets/directory/directory.js
|
82
|
+
- spec/helpers/assets/directory/test1.js
|
83
|
+
- spec/helpers/assets/directory/test2.js
|
81
84
|
- spec/helpers/assets/forced/forced.js
|
82
85
|
- spec/helpers/assets/forced/test1.js
|
83
86
|
- spec/helpers/assets/forced/test2.js
|
@@ -87,6 +90,7 @@ files:
|
|
87
90
|
- spec/helpers/boot.rb
|
88
91
|
- spec/integrational/circular_spec.rb
|
89
92
|
- spec/integrational/direct_spec.rb
|
93
|
+
- spec/integrational/directory_spec.rb
|
90
94
|
- spec/integrational/forced_spec.rb
|
91
95
|
- spec/integrational/nested_spec.rb
|
92
96
|
- sprockets-preload.gemspec
|
@@ -122,6 +126,9 @@ test_files:
|
|
122
126
|
- spec/helpers/assets/direct/direct.js
|
123
127
|
- spec/helpers/assets/direct/test1.js
|
124
128
|
- spec/helpers/assets/direct/test2.js
|
129
|
+
- spec/helpers/assets/directory/directory.js
|
130
|
+
- spec/helpers/assets/directory/test1.js
|
131
|
+
- spec/helpers/assets/directory/test2.js
|
125
132
|
- spec/helpers/assets/forced/forced.js
|
126
133
|
- spec/helpers/assets/forced/test1.js
|
127
134
|
- spec/helpers/assets/forced/test2.js
|
@@ -131,5 +138,6 @@ test_files:
|
|
131
138
|
- spec/helpers/boot.rb
|
132
139
|
- spec/integrational/circular_spec.rb
|
133
140
|
- spec/integrational/direct_spec.rb
|
141
|
+
- spec/integrational/directory_spec.rb
|
134
142
|
- spec/integrational/forced_spec.rb
|
135
143
|
- spec/integrational/nested_spec.rb
|