wake-assets 0.2.0 → 0.3.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 +7 -0
- data/README.md +6 -6
- data/lib/wake/assets.rb +84 -77
- data/lib/wake/assets/renderer.rb +7 -3
- metadata +16 -21
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 44c5c197971626d1bf3ba093f1a86f0118a783dc
|
4
|
+
data.tar.gz: ac83070891e3a16829f468d6747fa473d44fe37f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b85685b5a106a2f5ceb6f5c84f5a46315bf58d0d658af08d7259a304c1c3b4a154dd2e1995bbdc9a961f3bf8da31749fb66f4d30b7f65e38f58773fcc167b2fb
|
7
|
+
data.tar.gz: 18176ade3766d0816cc2b00b1cb0501a31848f942d64788281f965d9f7e10a811cdb9aca99ee0cc4902020fb011e04257ae7bc578cbc48ef1ce2cfea987f1955
|
data/README.md
CHANGED
@@ -28,10 +28,10 @@ require 'wake/assets'
|
|
28
28
|
dev = Rails.env.development?
|
29
29
|
|
30
30
|
$wake = Wake::Assets.new(
|
31
|
-
:wake
|
32
|
-
:root
|
33
|
-
:mode
|
34
|
-
:
|
31
|
+
:wake => File.expand_path('node_modules/.bin/wake', Rails.root),
|
32
|
+
:root => File.expand_path('public', Rails.root),
|
33
|
+
:mode => dev ? :sources : :targets,
|
34
|
+
:cache => !dev
|
35
35
|
)
|
36
36
|
```
|
37
37
|
|
@@ -41,8 +41,8 @@ The options are:
|
|
41
41
|
* `:root` - the document root of your application
|
42
42
|
* `:mode` - `:sources` if you want to render links to source files, `:targets`
|
43
43
|
if you want optimised files
|
44
|
-
* `:
|
45
|
-
|
44
|
+
* `:cache` - whether to cache `wake` metadata files in memory, recommended in
|
45
|
+
production but not in development
|
46
46
|
|
47
47
|
#### At request time
|
48
48
|
|
data/lib/wake/assets.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'erb'
|
3
3
|
require 'json'
|
4
|
-
require 'listen'
|
5
4
|
require 'mime/types'
|
6
5
|
require 'pathname'
|
7
6
|
require 'set'
|
@@ -10,13 +9,13 @@ module Wake
|
|
10
9
|
class Assets
|
11
10
|
|
12
11
|
DEFAULT_BUILD = 'min'
|
12
|
+
DEFAULT_CACHE = true
|
13
13
|
DEFAULT_MODE = :targets
|
14
14
|
DEFAULT_WAKE = './node_modules/wake/bin/wake'
|
15
15
|
CACHE_FILE = '.wake.json'
|
16
16
|
MANIFEST = '.manifest.json'
|
17
17
|
PACKAGE_FILE = 'package.json'
|
18
18
|
WAKE_FILE = 'wake.json'
|
19
|
-
CONFIG_FILES = Set.new([CACHE_FILE, MANIFEST, PACKAGE_FILE, WAKE_FILE])
|
20
19
|
|
21
20
|
CSS = 'css'
|
22
21
|
JS = 'javascript'
|
@@ -27,38 +26,51 @@ module Wake
|
|
27
26
|
|
28
27
|
autoload :Renderer, File.expand_path('../assets/renderer', __FILE__)
|
29
28
|
|
30
|
-
def initialize(options)
|
31
|
-
@pwd
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@
|
36
|
-
@paths = new_path_cache
|
29
|
+
def initialize(options = {})
|
30
|
+
@pwd = File.expand_path(options.fetch(:pwd, Dir.pwd))
|
31
|
+
@cache = options.fetch(:cache, DEFAULT_CACHE)
|
32
|
+
@wake = options.fetch(:wake, File.expand_path(DEFAULT_WAKE, @pwd))
|
33
|
+
@root = Pathname.new(File.expand_path(options.fetch(:root, @pwd)))
|
34
|
+
@mode = options.fetch(:mode, DEFAULT_MODE)
|
37
35
|
|
38
|
-
|
39
|
-
|
36
|
+
clear_cache
|
37
|
+
end
|
40
38
|
|
41
|
-
|
39
|
+
def clear_cache
|
40
|
+
system(@wake, '--cache') unless @cache
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
48
|
-
listener.force_polling(true)
|
49
|
-
listener.start
|
42
|
+
@config = nil
|
43
|
+
@index = nil
|
44
|
+
@manifest = {}
|
45
|
+
@paths = {}
|
50
46
|
end
|
51
47
|
|
52
|
-
def
|
53
|
-
|
48
|
+
def generated_file_paths
|
49
|
+
index = read_index
|
50
|
+
paths = Set.new([File.join(@pwd, CACHE_FILE)])
|
51
|
+
index.each do |group_name, group|
|
52
|
+
group.each do |bundle_name, bundles|
|
53
|
+
bundles['targets'].each_value do |path|
|
54
|
+
paths.add(path)
|
55
|
+
manifest = File.join(File.dirname(path), MANIFEST)
|
56
|
+
source_map = path + '.map'
|
57
|
+
[manifest, source_map].each do |file|
|
58
|
+
paths.add(file) if File.file?(file)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
paths.map(&method(:resolve))
|
54
64
|
end
|
55
65
|
|
56
66
|
def paths_for(group, names, options = {})
|
67
|
+
config = read_config
|
68
|
+
|
57
69
|
build = options.fetch(:build, DEFAULT_BUILD)
|
58
|
-
unless
|
70
|
+
unless config.fetch(group).fetch('builds', {}).has_key?(build)
|
59
71
|
build = DEFAULT_BUILD
|
60
72
|
end
|
61
|
-
names.map { |name|
|
73
|
+
names.map { |name| read_paths(group, name, build) }.flatten
|
62
74
|
end
|
63
75
|
|
64
76
|
def relative(path)
|
@@ -66,81 +78,76 @@ module Wake
|
|
66
78
|
end
|
67
79
|
|
68
80
|
def renderer(options = {})
|
81
|
+
clear_cache unless @cache
|
69
82
|
Renderer.new(self, options)
|
70
83
|
end
|
71
84
|
|
72
85
|
private
|
73
86
|
|
74
|
-
def find_paths_for(
|
75
|
-
|
76
|
-
|
87
|
+
def find_paths_for(key)
|
88
|
+
group, name, build = *key
|
89
|
+
|
90
|
+
begin
|
91
|
+
index = read_index.fetch(group).fetch(name)
|
77
92
|
if @mode.to_s == 'sources'
|
78
|
-
|
93
|
+
absolute_paths = index.fetch('sources')
|
79
94
|
else
|
80
|
-
[
|
95
|
+
absolute_paths = [index.fetch('targets').fetch(build)]
|
81
96
|
end
|
82
|
-
rescue
|
83
|
-
|
97
|
+
rescue KeyError
|
98
|
+
raise InvalidReference, "Could not find assets: group: '#{group}', name: '#{name}', build: '#{build}'"
|
84
99
|
end
|
85
100
|
|
86
|
-
|
87
|
-
|
88
|
-
end
|
101
|
+
absolute_paths.map(&method(:resolve))
|
102
|
+
end
|
89
103
|
|
90
|
-
|
91
|
-
|
92
|
-
dirname = File.dirname(path)
|
93
|
-
manifest = File.join(dirname, MANIFEST)
|
104
|
+
def read_config
|
105
|
+
return @config if @config
|
94
106
|
|
95
|
-
|
96
|
-
|
97
|
-
end
|
107
|
+
wake = File.join(@pwd, WAKE_FILE)
|
108
|
+
package = File.join(@pwd, PACKAGE_FILE)
|
98
109
|
|
99
|
-
|
100
|
-
|
101
|
-
|
110
|
+
if File.file?(wake)
|
111
|
+
config = JSON.parse(File.read(wake))
|
112
|
+
elsif File.file?(package)
|
113
|
+
config = JSON.parse(File.read(package))['wake']
|
114
|
+
else
|
115
|
+
config = {}
|
102
116
|
end
|
103
|
-
end
|
104
117
|
|
105
|
-
|
106
|
-
|
107
|
-
h[group] = Hash.new do |i, name|
|
108
|
-
i[name] = Hash.new do |j, build|
|
109
|
-
j[build] = find_paths_for(group, name, build)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
118
|
+
@config = config if @cache
|
119
|
+
config
|
113
120
|
end
|
114
121
|
|
115
|
-
def
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
elsif File.file?(package)
|
123
|
-
JSON.parse(File.read(package))['wake']
|
124
|
-
else
|
125
|
-
{}
|
126
|
-
end
|
122
|
+
def read_index
|
123
|
+
return @index if @index
|
124
|
+
path = File.join(@pwd, CACHE_FILE)
|
125
|
+
index = JSON.parse(File.read(path))
|
126
|
+
@index = index if @cache
|
127
|
+
index
|
128
|
+
end
|
127
129
|
|
128
|
-
|
130
|
+
def read_manifest(path)
|
131
|
+
return @manifest[path] if @manifest.has_key?(path)
|
132
|
+
mapping = File.file?(path) ? JSON.parse(File.read(path)) : {}
|
133
|
+
@manifest[path] = mapping if @cache
|
134
|
+
mapping
|
129
135
|
end
|
130
136
|
|
131
|
-
def
|
132
|
-
|
133
|
-
|
137
|
+
def read_paths(group, name, build)
|
138
|
+
key = [group, name, build]
|
139
|
+
return @paths[key] if @paths.has_key?(key)
|
140
|
+
paths = find_paths_for(key)
|
141
|
+
@paths[key] = paths if @cache
|
142
|
+
paths
|
143
|
+
end
|
134
144
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
end
|
142
|
-
@manifest = new_manifest_cache
|
143
|
-
@paths = paths
|
145
|
+
def resolve(path)
|
146
|
+
path = File.join(@pwd, path)
|
147
|
+
basename = File.basename(path)
|
148
|
+
dirname = File.dirname(path)
|
149
|
+
manifest = File.join(dirname, MANIFEST)
|
150
|
+
File.join(dirname, read_manifest(manifest).fetch(basename, basename))
|
144
151
|
end
|
145
152
|
|
146
153
|
end
|
data/lib/wake/assets/renderer.rb
CHANGED
@@ -30,9 +30,7 @@ module Wake
|
|
30
30
|
|
31
31
|
tags = if options.fetch(:inline, @inline)
|
32
32
|
paths_for(IMG, names, options).map do |path|
|
33
|
-
|
34
|
-
mime = MIME::Types.type_for(path).first
|
35
|
-
tag :img, options, :src => "data:#{mime};base64,#{base64}"
|
33
|
+
tag :img, options, :src => base64_file(path)
|
36
34
|
end
|
37
35
|
else
|
38
36
|
urls_for(IMG, names, options).map { |url| tag :img, options, :src => url }
|
@@ -73,6 +71,12 @@ module Wake
|
|
73
71
|
|
74
72
|
private
|
75
73
|
|
74
|
+
def base64_file(path)
|
75
|
+
base64 = Base64.strict_encode64(File.read(path))
|
76
|
+
mime = MIME::Types.type_for(path).first
|
77
|
+
"data:#{mime};base64,#{base64}"
|
78
|
+
end
|
79
|
+
|
76
80
|
def extract_options(names)
|
77
81
|
[names.grep(String), names.grep(Hash).first || {}]
|
78
82
|
end
|
metadata
CHANGED
@@ -1,46 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wake-assets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- James Coglan
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: mime-types
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
28
|
+
name: sinatra
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
|
-
type: :
|
34
|
+
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
description:
|
@@ -55,7 +50,9 @@ files:
|
|
55
50
|
- lib/wake/assets.rb
|
56
51
|
- lib/wake/assets/renderer.rb
|
57
52
|
homepage: http://github.com/jcoglan/wake-assets
|
58
|
-
licenses:
|
53
|
+
licenses:
|
54
|
+
- MIT
|
55
|
+
metadata: {}
|
59
56
|
post_install_message:
|
60
57
|
rdoc_options:
|
61
58
|
- --main
|
@@ -65,21 +62,19 @@ rdoc_options:
|
|
65
62
|
require_paths:
|
66
63
|
- lib
|
67
64
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
65
|
requirements:
|
70
|
-
- -
|
66
|
+
- - '>='
|
71
67
|
- !ruby/object:Gem::Version
|
72
68
|
version: '0'
|
73
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
70
|
requirements:
|
76
|
-
- -
|
71
|
+
- - '>='
|
77
72
|
- !ruby/object:Gem::Version
|
78
73
|
version: '0'
|
79
74
|
requirements: []
|
80
75
|
rubyforge_project:
|
81
|
-
rubygems_version:
|
76
|
+
rubygems_version: 2.0.14
|
82
77
|
signing_key:
|
83
|
-
specification_version:
|
78
|
+
specification_version: 4
|
84
79
|
summary: Renders links to assets managed by wake
|
85
80
|
test_files: []
|