pakyow-assets 1.0.0.rc5 → 1.0.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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/lib/pakyow/application/actions/assets/process.rb +65 -0
  4. data/lib/pakyow/application/actions/assets/public.rb +77 -0
  5. data/lib/pakyow/{assets → application}/behavior/assets.rb +2 -2
  6. data/lib/pakyow/application/behavior/assets/externals.rb +61 -0
  7. data/lib/pakyow/application/behavior/assets/packs.rb +164 -0
  8. data/lib/pakyow/application/behavior/assets/prelaunching.rb +21 -0
  9. data/lib/pakyow/application/behavior/assets/processing.rb +29 -0
  10. data/lib/pakyow/application/behavior/assets/silencing.rb +37 -0
  11. data/lib/pakyow/application/behavior/assets/watching.rb +27 -0
  12. data/lib/pakyow/{assets/behavior/config.rb → application/config/assets.rb} +3 -3
  13. data/lib/pakyow/assets.rb +3 -3
  14. data/lib/pakyow/assets/framework.rb +20 -20
  15. data/lib/pakyow/presenter/renderer/behavior/assets/install_assets.rb +41 -0
  16. data/lib/pakyow/{assets/tasks → tasks/assets}/precompile.rake +0 -0
  17. data/lib/pakyow/{assets/tasks → tasks/assets}/update.rake +0 -0
  18. metadata +28 -27
  19. data/lib/pakyow/actions/assets/process.rb +0 -63
  20. data/lib/pakyow/actions/assets/public.rb +0 -75
  21. data/lib/pakyow/assets/behavior/externals.rb +0 -59
  22. data/lib/pakyow/assets/behavior/packs.rb +0 -162
  23. data/lib/pakyow/assets/behavior/prelaunching.rb +0 -19
  24. data/lib/pakyow/assets/behavior/processing.rb +0 -27
  25. data/lib/pakyow/assets/behavior/rendering/install_assets.rb +0 -39
  26. data/lib/pakyow/assets/behavior/silencing.rb +0 -35
  27. data/lib/pakyow/assets/behavior/watching.rb +0 -25
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ module Pakyow
6
+ class Application
7
+ module Behavior
8
+ module Assets
9
+ # Silences asset requests from being logged.
10
+ #
11
+ module Silencing
12
+ extend Support::Extension
13
+
14
+ apply_extension do
15
+ on "load" do
16
+ if config.assets.silent
17
+ # silence asset requests
18
+ Pakyow.silence do |connection|
19
+ # TODO: do we need the second check?
20
+ connection.path.start_with?(config.assets.prefix) || self.class.asset.instances.any? { |asset|
21
+ asset.logical_path == connection.path
22
+ }
23
+ end
24
+
25
+ # silence requests to public files
26
+ Pakyow.silence do |connection|
27
+ # TODO: really need an in-memory directory for these files
28
+ File.file?(File.join(config.assets.public_path, connection.path))
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ module Pakyow
6
+ class Application
7
+ module Behavior
8
+ module Assets
9
+ module Watching
10
+ extend Support::Extension
11
+
12
+ apply_extension do
13
+ after "configure" do
14
+ config.assets.extensions.each do |extension|
15
+ config.process.watched_paths << File.join(config.presenter.path, "**/*#{extension}")
16
+
17
+ # Exclude vendored assets.
18
+ #
19
+ config.process.excluded_paths << File.join(config.assets.externals.path, "*#{extension}")
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -4,9 +4,9 @@ require "pakyow/support/extension"
4
4
  require "pakyow/support/path_version"
5
5
 
6
6
  module Pakyow
7
- module Assets
8
- module Behavior
9
- module Config
7
+ class Application
8
+ module Config
9
+ module Assets
10
10
  extend Support::Extension
11
11
 
12
12
  apply_extension do
data/lib/pakyow/assets.rb CHANGED
@@ -11,9 +11,9 @@ require "pakyow/assets/types/css"
11
11
  require "pakyow/assets/types/sass"
12
12
  require "pakyow/assets/types/scss"
13
13
 
14
- require "pakyow/actions/assets/process"
15
- require "pakyow/actions/assets/public"
14
+ require "pakyow/application/actions/assets/process"
15
+ require "pakyow/application/actions/assets/public"
16
16
 
17
17
  module Pakyow
18
- config.tasks.paths << File.expand_path("../assets/tasks", __FILE__)
18
+ config.tasks.paths << File.expand_path("../tasks", __FILE__)
19
19
  end
@@ -2,19 +2,19 @@
2
2
 
3
3
  require "pakyow/framework"
4
4
 
5
- require "pakyow/assets/asset"
6
- require "pakyow/assets/pack"
5
+ require "pakyow/application/behavior/assets"
6
+ require "pakyow/application/behavior/assets/packs"
7
+ require "pakyow/application/behavior/assets/silencing"
8
+ require "pakyow/application/behavior/assets/externals"
9
+ require "pakyow/application/behavior/assets/watching"
10
+ require "pakyow/application/behavior/assets/prelaunching"
11
+ require "pakyow/application/behavior/assets/processing"
12
+ require "pakyow/application/config/assets"
7
13
 
8
- require "pakyow/assets/behavior/config"
9
- require "pakyow/assets/behavior/assets"
10
- require "pakyow/assets/behavior/packs"
11
- require "pakyow/assets/behavior/silencing"
12
- require "pakyow/assets/behavior/externals"
13
- require "pakyow/assets/behavior/watching"
14
- require "pakyow/assets/behavior/prelaunching"
15
- require "pakyow/assets/behavior/processing"
14
+ require "pakyow/presenter/renderer/behavior/assets/install_assets"
16
15
 
17
- require "pakyow/assets/behavior/rendering/install_assets"
16
+ require "pakyow/assets/asset"
17
+ require "pakyow/assets/pack"
18
18
 
19
19
  module Pakyow
20
20
  module Assets
@@ -29,20 +29,20 @@ module Pakyow
29
29
  #
30
30
  stateful :pack, Pack
31
31
 
32
- include Behavior::Config
33
- include Behavior::Assets
34
- include Behavior::Packs
35
- include Behavior::Silencing
36
- include Behavior::Externals
37
- include Behavior::Watching
38
- include Behavior::Prelaunching
39
- include Behavior::Processing
32
+ include Application::Config::Assets
33
+ include Application::Behavior::Assets
34
+ include Application::Behavior::Assets::Packs
35
+ include Application::Behavior::Assets::Silencing
36
+ include Application::Behavior::Assets::Externals
37
+ include Application::Behavior::Assets::Watching
38
+ include Application::Behavior::Assets::Prelaunching
39
+ include Application::Behavior::Assets::Processing
40
40
 
41
41
  after "load" do
42
42
  isolated(:Renderer) do
43
43
  # Load this one later, in case other actions define components that will load assets.
44
44
  #
45
- include Assets::Behavior::Rendering::InstallAssets
45
+ include Presenter::Renderer::Behavior::Assets::InstallAssets
46
46
  end
47
47
  end
48
48
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pakyow/support/extension"
4
+
5
+ module Pakyow
6
+ module Presenter
7
+ class Renderer
8
+ module Behavior
9
+ module Assets
10
+ module InstallAssets
11
+ extend Support::Extension
12
+
13
+ apply_extension do
14
+ build do |view, app:|
15
+ if head = view.head
16
+ packs = app.packs(view)
17
+
18
+ if app.is_a?(Plugin)
19
+ packs = app.parent.packs(view).concat(packs)
20
+ end
21
+
22
+ packs.uniq { |pack|
23
+ pack.public_path
24
+ }.each do |pack|
25
+ if pack.javascripts?
26
+ head.object.append_html("<script src=\"#{File.join(app.config.assets.host, pack.public_path)}.js\"></script>\n")
27
+ end
28
+
29
+ if pack.stylesheets?
30
+ head.object.append_html("<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"#{File.join(app.config.assets.host, pack.public_path)}.css\">\n")
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pakyow-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-15 00:00:00.000000000 Z
11
+ date: 2019-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pakyow-core
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.rc5
19
+ version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0.rc5
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pakyow-presenter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0.rc5
33
+ version: 1.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0.rc5
40
+ version: 1.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pakyow-routing
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.0.rc5
47
+ version: 1.0.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.0.rc5
54
+ version: 1.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pakyow-support
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.0.rc5
61
+ version: 1.0.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.0.rc5
68
+ version: 1.0.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: execjs
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -165,41 +165,42 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '4.1'
167
167
  description: Asset pipeline for Pakyow
168
- email: bryan@metabahn.com
168
+ email: bryan@bryanp.org
169
169
  executables: []
170
170
  extensions: []
171
171
  extra_rdoc_files: []
172
172
  files:
173
+ - CHANGELOG.md
173
174
  - LICENSE
174
- - lib/pakyow/actions/assets/process.rb
175
- - lib/pakyow/actions/assets/public.rb
175
+ - lib/pakyow/application/actions/assets/process.rb
176
+ - lib/pakyow/application/actions/assets/public.rb
177
+ - lib/pakyow/application/behavior/assets.rb
178
+ - lib/pakyow/application/behavior/assets/externals.rb
179
+ - lib/pakyow/application/behavior/assets/packs.rb
180
+ - lib/pakyow/application/behavior/assets/prelaunching.rb
181
+ - lib/pakyow/application/behavior/assets/processing.rb
182
+ - lib/pakyow/application/behavior/assets/silencing.rb
183
+ - lib/pakyow/application/behavior/assets/watching.rb
184
+ - lib/pakyow/application/config/assets.rb
176
185
  - lib/pakyow/assets.rb
177
186
  - lib/pakyow/assets/asset.rb
178
187
  - lib/pakyow/assets/babel.rb
179
- - lib/pakyow/assets/behavior/assets.rb
180
- - lib/pakyow/assets/behavior/config.rb
181
- - lib/pakyow/assets/behavior/externals.rb
182
- - lib/pakyow/assets/behavior/packs.rb
183
- - lib/pakyow/assets/behavior/prelaunching.rb
184
- - lib/pakyow/assets/behavior/processing.rb
185
- - lib/pakyow/assets/behavior/rendering/install_assets.rb
186
- - lib/pakyow/assets/behavior/silencing.rb
187
- - lib/pakyow/assets/behavior/watching.rb
188
188
  - lib/pakyow/assets/errors.rb
189
189
  - lib/pakyow/assets/external.rb
190
190
  - lib/pakyow/assets/framework.rb
191
191
  - lib/pakyow/assets/pack.rb
192
192
  - lib/pakyow/assets/precompiler.rb
193
193
  - lib/pakyow/assets/source_map.rb
194
- - lib/pakyow/assets/tasks/precompile.rake
195
- - lib/pakyow/assets/tasks/update.rake
196
194
  - lib/pakyow/assets/types/css.rb
197
195
  - lib/pakyow/assets/types/js.rb
198
196
  - lib/pakyow/assets/types/sass.rb
199
197
  - lib/pakyow/assets/types/scss.rb
198
+ - lib/pakyow/presenter/renderer/behavior/assets/install_assets.rb
199
+ - lib/pakyow/tasks/assets/precompile.rake
200
+ - lib/pakyow/tasks/assets/update.rake
200
201
  - src/@babel/standalone@7.3.1/babel.min.js
201
202
  - src/@babel/standalone@7.4.5/babel.min.js
202
- homepage: https://pakyow.org
203
+ homepage: https://pakyow.com
203
204
  licenses:
204
205
  - LGPL-3.0
205
206
  metadata: {}
@@ -214,9 +215,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
215
  version: 2.5.0
215
216
  required_rubygems_version: !ruby/object:Gem::Requirement
216
217
  requirements:
217
- - - ">"
218
+ - - ">="
218
219
  - !ruby/object:Gem::Version
219
- version: 1.3.1
220
+ version: '0'
220
221
  requirements: []
221
222
  rubygems_version: 3.0.3
222
223
  signing_key:
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pakyow
4
- module Actions
5
- module Assets
6
- # Pipeline Action that processes assets at request time.
7
- #
8
- # This is intended for development use, please don't use it in production.
9
- # Instead, precompile assets into the public directory.
10
- #
11
- class Process
12
- def call(connection)
13
- if connection.app.config.assets.process
14
- # TODO: can we short circuit if the request path doesn't match the connection?
15
- if asset = find_asset(connection) || find_pack(connection) || find_asset_map(connection) || find_pack_map(connection)
16
- connection.set_header("content-type", asset.mime_type)
17
- connection.body = asset
18
- connection.halt
19
- end
20
- end
21
- end
22
-
23
- private
24
-
25
- def find_asset(connection, path = connection.path)
26
- connection.app.state(:asset).find { |asset|
27
- asset.public_path == path
28
- }
29
- end
30
-
31
- def find_pack(connection, path = connection.path)
32
- connection.app.state(:pack).lazy.map { |pack|
33
- pack.packed(path)
34
- }.find { |packed| !packed.nil? && packed.any? }
35
- end
36
-
37
- def find_asset_map(connection)
38
- if wants_map?(connection)
39
- if (asset = find_asset(connection, unmapped(connection))) && asset.source_map?
40
- asset.source_map
41
- end
42
- end
43
- end
44
-
45
- def find_pack_map(connection)
46
- if (pack = find_pack(connection, unmapped(connection))) && pack.source_map?
47
- pack.source_map
48
- else
49
- nil
50
- end
51
- end
52
-
53
- def wants_map?(connection)
54
- connection.path.end_with?(".map")
55
- end
56
-
57
- def unmapped(connection)
58
- File.join(File.dirname(connection.path), File.basename(connection.path, ".map"))
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mini_mime"
4
-
5
- require "pakyow/support/core_refinements/string/normalization"
6
-
7
- module Pakyow
8
- module Actions
9
- module Assets
10
- class Public
11
- using Support::Refinements::String::Normalization
12
-
13
- # Pipeline Action that serves files out of your public directory.
14
- #
15
- def initialize(app)
16
- @asset_paths = app.state(:asset).map(&:public_path) + app.state(:pack).flat_map { |pack|
17
- [pack.public_css_path, pack.public_js_path]
18
- }
19
-
20
- @prefix = if app.is_a?(Plugin)
21
- Pathname.new(app.class.mount_path)
22
- else
23
- Pathname.new("/")
24
- end
25
- end
26
-
27
- def call(connection)
28
- if connection.app.config.assets.public
29
- public_path = public_path(connection)
30
-
31
- if public?(public_path)
32
- if mime = MiniMime.lookup_by_filename(public_path)
33
- connection.set_header("content-type", mime.content_type)
34
- end
35
-
36
- if connection.app.config.assets.cache && asset?(connection)
37
- set_cache_headers(connection, public_path)
38
- end
39
-
40
- connection.body = File.open(public_path)
41
- connection.halt
42
- end
43
- end
44
- end
45
-
46
- private
47
-
48
- def public?(path)
49
- File.file?(path)
50
- end
51
-
52
- def public_path(connection)
53
- File.join(
54
- connection.app.config.assets.public_path,
55
- String.normalize_path(
56
- Pathname.new(connection.path).relative_path_from(@prefix).to_s
57
- )
58
- )
59
- end
60
-
61
- def asset?(connection)
62
- @asset_paths.include?(connection.path)
63
- end
64
-
65
- def set_cache_headers(connection, public_path)
66
- mtime = File.mtime(public_path)
67
- connection.set_header("age", (Time.now - mtime).to_i.to_s)
68
- connection.set_header("cache-control", "public, max-age=31536000")
69
- connection.set_header("vary", "accept-encoding")
70
- connection.set_header("last-modified", mtime.httpdate)
71
- end
72
- end
73
- end
74
- end
75
- end