ichiban 1.2.9 → 1.2.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f23b29b8203e4aa58d682ad5fa9461aa541cce7
4
- data.tar.gz: 466a911fc20a62c28ae391dd15c95cedc63047ad
3
+ metadata.gz: e2d44498e5294a4e136fd93046d4056280e227f1
4
+ data.tar.gz: 35934ae9f79da4a76c65b57c7ad68c26fb4e629f
5
5
  SHA512:
6
- metadata.gz: c67d7b52f7c85f05c49c3d9570b5ee290d4371b197b86269b214de2b8a7a4f924fc304a9f042c5d5c16c2ea1cf433ce74483d8ae5c0ef35817a52e207f2129d1
7
- data.tar.gz: 42d896bf38f16e6371805cd6699b6e87d516026de87240018f34e6582d8a5d4350506b37189d14dd5739fc9ccfbbbe44df59611b0256e06977b5bc3bbeb6fcf1
6
+ metadata.gz: 6077e06b1d7ddca0db15f9dd268213414e4969be3ce429b601948ecf66e8ec3f5ee64f3fd8a5845c0ed2222240767db718afa3f5ef804c40e2a5b8aa621005b8
7
+ data.tar.gz: e91d785c7208e74206832c528b26f34490a9c44ef22cdd45459945a1836e8021f98c0f88e401ff4294060964aabb83da192486034dea3e601052956f89108f59
@@ -19,8 +19,8 @@ require 'bundler'
19
19
  require 'listen'
20
20
  require 'ejs'
21
21
  require 'uglifier'
22
+ require 'sourcemap'
22
23
  require 'therubyracer'
23
- require 'source_map'
24
24
 
25
25
  # Ichiban files. Order matters!
26
26
  require 'ichiban/config'
@@ -8,7 +8,7 @@ module Ichiban
8
8
  class Config
9
9
  def self.load_file
10
10
  config_file = File.join(Ichiban.project_root, 'config.rb')
11
- raise "#{config_file} must exist" unless File.exists?(config_file)
11
+ raise "#{config_file} must exist" unless File.exist?(config_file)
12
12
  load config_file
13
13
  end
14
14
 
@@ -10,7 +10,7 @@ module Ichiban
10
10
  else
11
11
  dest = nil
12
12
  end
13
- if dest and File.exists?(dest)
13
+ if dest and File.exist?(dest)
14
14
  FileUtils.rm(dest)
15
15
  end
16
16
 
@@ -23,7 +23,7 @@ module Ichiban
23
23
  raise(TypeError, "Expected String, Array, or Proc, but was: #{files.inspect}")
24
24
  end
25
25
  paths.map do |path|
26
- project_file = Ichiban::ProjectFile.from_abs(path)
26
+ Ichiban::ProjectFile.from_abs(path)
27
27
  end.compact
28
28
  else
29
29
  []
@@ -22,7 +22,7 @@ module Ichiban
22
22
  if @html_file.is_a?(Ichiban::HTMLFile)
23
23
  ivars_for_ctx[:_current_path] = @html_file.web_path
24
24
  end
25
- ivars_for_ctx.merge!(@ivars) if @ivars
25
+ ivars_for_ctx.merge!(@ivars) if instance_variable_defined?('@ivars')
26
26
 
27
27
  ctx = Ichiban::HTMLCompiler::Context.new(ivars_for_ctx)
28
28
 
@@ -52,7 +52,7 @@ module Ichiban
52
52
  def wrap_in_layouts(ctx, inner_rhtml)
53
53
  ctx.layout_stack.reverse.inject(inner_rhtml) do |html, layout_name|
54
54
  layout_path = File.join(Ichiban.project_root, 'layouts', layout_name + '.html')
55
- unless File.exists?(layout_path)
55
+ unless File.exist?(layout_path)
56
56
  raise "Layout does not exist: #{layout_path}"
57
57
  end
58
58
  eruby = Eruby.new(
@@ -100,7 +100,7 @@ module Ichiban
100
100
  end
101
101
 
102
102
  def layout_stack
103
- @_layout_stack or ['default']
103
+ instance_variable_defined?('@_layout_stack') ? @_layout_stack : ['default']
104
104
  end
105
105
 
106
106
  def self.user_defined_helpers
@@ -1,65 +1,70 @@
1
1
  module Ichiban
2
- # This class uses the UglifyJS2 binary to concatenate and minify JS source files.
2
+ # This class uses the UglifyJS2 binary (uglifyjs) to concatenate and minify JS source
3
+ # files. You must have uglify-js on your path.
3
4
  class JSCompiler
4
5
  def compile
5
6
  rel = @file.rel_to 'assets/js'
6
7
  Ichiban.config.js_manifests.each do |dest, sources|
7
8
  if sources.include? rel
8
- # Make the destination folder if necessary.
9
+ # Before doing anything, we compute several paths. Assume, for the sake of
10
+ # example, that dest == 'foo/bar.js'. Then the paths would be:
11
+ #
12
+ # Variable Example value
13
+ # ------------------------------------------------------------------------------
14
+ # dest foo/bar.js
15
+ # dest_folder /home/johnq/mysite/compiled/js/foo
16
+ # ugly_js_path /home/johnq/mysite/compiled/js/foo/bar.js
17
+ # map_path /home/johnq/mysite/compiled/js/foo/bar.js.map
18
+ # map_path_from_webroot /js/foo/bar.js.map
19
+
9
20
  dest_folder = File.expand_path(File.join(
10
21
  Ichiban.project_root, 'compiled', 'js',
11
22
  File.dirname(dest)
12
23
  ))
13
- unless File.exists? dest_folder
14
- FileUtils.mkdir_p dest_folder
24
+
25
+ ugly_js_path = File.join(Ichiban.project_root, 'compiled', 'js', dest)
26
+
27
+ map_path = ugly_js_path + '.map'
28
+
29
+ map_path_from_webroot = File.join('/js', dest + '.map')
30
+
31
+ # Make individual, uglified JS and maps.
32
+ compiled = sources.map do |src_path|
33
+ src_js = File.read File.join(Ichiban.project_root, 'assets', 'js', src_path)
34
+ ugly_js, map_json = Uglifier.compile_with_map src_js, source_map: {filename: src_path}
35
+ [
36
+ ugly_js,
37
+ SourceMap::Map.from_json(map_json)
38
+ ]
15
39
  end
16
40
 
17
- # Build the name of the source map.
18
- map_name = File.basename(dest, File.extname(dest)) + '.js.map'
41
+ # Concatenate the uglified JS and maps.
42
+ all_js, all_maps = compiled.inject do |(all_js, all_maps), (this_js, this_map)|
43
+ # all_js and this_js are strings. all_maps and this_map are instances of
44
+ # SourceMap::Map. (SourceMap::Map supports the + operator.)
45
+ [all_js + this_js, all_maps + this_map]
46
+ end
19
47
 
20
- # Shell out to UglifyJS2.
21
- uglify_stdout = `
22
- cd #{File.join(Ichiban.project_root, 'assets', 'js')} && \
23
- uglifyjs \
24
- #{sources.join(' ')} \
25
- --output #{File.join(Ichiban.project_root, 'compiled', 'js', dest)} \
26
- --source-map #{map_name} \
27
- --source-map-url /js/#{map_name} \
28
- --source-map-root /js \
29
- 2>&1 # Redirect STDERR to STDOUT.
30
- `
31
- unless $?.success?
32
- raise UglifyError, "uglifyjs command failed:\n\n#{uglify_stdout}"
48
+ # Ensure the destination folder exists.
49
+ unless File.exist? dest_folder
50
+ FileUtils.mkdir_p dest_folder
33
51
  end
34
52
 
35
- # Uglify populates the source map's "file" property with the absolute path.
36
- # Replace it with the filename.
37
- map_path = File.join Ichiban.project_root, 'assets', 'js', map_name
38
- map_json = JSON.parse(File.read(map_path))
39
- File.open map_path, 'w' do |f|
40
- f << JSON.dump(map_json.merge('file' => dest))
53
+ # Write the compiled JS.
54
+ File.open(ugly_js_path, 'w') do |f|
55
+ f << all_js << "\n//# sourceMappingURL=#{map_path_from_webroot}"
41
56
  end
42
57
 
43
- # Uglify writes the source map in assets/js.
44
- # Move it into compiled/js.
45
- FileUtils.mv(
46
- File.join(Ichiban.project_root, 'assets', 'js', map_name),
47
- File.join(Ichiban.project_root, 'compiled', 'js')
48
- )
58
+ # Write the map.
59
+ File.open(map_path, 'w') do |f|
60
+ f << all_maps.to_json
61
+ end
49
62
 
50
- # Copy each of the source files into compiled/js so that JS debuggers
51
- # can use them with the source map.
52
- sources.each do |filename|
53
- folder = File.expand_path(File.join(
54
- Ichiban.project_root, 'compiled', 'js',
55
- File.dirname(filename)
56
- ))
57
- unless File.exists? folder
58
- FileUtils.mkdir_p folder
59
- end
63
+ # Copy each source file (for the sake of mapping).
64
+ sources.each do |src_path|
60
65
  FileUtils.cp(
61
- File.join(Ichiban.project_root, 'assets', 'js', filename),
62
- File.join(Ichiban.project_root, 'compiled', 'js')
66
+ File.join(Ichiban.project_root, 'assets/js', src_path),
67
+ File.join(Ichiban.project_root, 'compiled/js', src_path),
63
68
  )
64
69
  end
65
70
 
@@ -72,50 +77,6 @@ module Ichiban
72
77
  def initialize(file)
73
78
  @file = file
74
79
  end
75
-
76
- private
77
-
78
- # Pass in absolute source_paths.
79
- #def compile_paths(source_paths, source_root, js_filename, map_filename)
80
- # # The Uglify gem, unlike UglifyJS2, doesn't support concatenation as of August 2015.
81
- # # Thus, before we call Uglify, we have to concatenate ourselves. We also generate an
82
- # # intermediate source map for the concatenated JS. Uglify will use the intermediate
83
- # # source map when it creates its own source map.
84
- # js, map = concat(
85
- # source_paths.map { |p| [File.read(p), File.basename(p)] },
86
- # source_root
87
- # )
88
- #
89
- # js, map = uglify js, map, js_filename
90
- #
91
- # map_url = File.join Ichiban.config.relative_url_root, 'js', map_filename
92
- # js << "\n//# sourceMappingURL=#{map_url}"
93
- #
94
- # [js, map]
95
- #end
96
-
97
- # Sources should be an array of form: [['alert("foo");', 'alert.js']] Returns a tuple. The
98
- # first element is the concatenated JS. The second element is the map string.
99
- #def concat(sources, source_root)
100
- # js = StringIO.new
101
- # map = SourceMap.new(
102
- # generated_output: js,
103
- # source_root: source_root
104
- # )
105
- # sources.each do |source_js, source_filename|
106
- # map.add_generated source_js, source: File.join(source_filename)
107
- # end
108
- # js.rewind
109
- # puts map.to_s
110
- # [js.read, map.to_s]
111
- #end
112
-
113
- #def uglify(js, map, js_filename)
114
- # Uglifier.new(
115
- # input_source_map: map,
116
- # output_filename: js_filename
117
- # ).compile_with_map(js)
118
- #end
119
80
  end
120
81
 
121
82
  class UglifyError < RuntimeError; end
@@ -1,3 +1,3 @@
1
1
  module Ichiban
2
- VERSION = '1.2.9'
2
+ VERSION = '1.2.10'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ichiban
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jarrett Colby
@@ -76,47 +76,41 @@ dependencies:
76
76
  requirements:
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 2.10.1
79
+ version: 3.1.5
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '2'
82
+ version: '3'
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 2.10.1
89
+ version: 3.1.5
90
90
  - - "~>"
91
91
  - !ruby/object:Gem::Version
92
- version: '2'
92
+ version: '3'
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: activesupport
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 4.1.5
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '4'
99
+ version: 4.2.8
103
100
  type: :runtime
104
101
  prerelease: false
105
102
  version_requirements: !ruby/object:Gem::Requirement
106
103
  requirements:
107
104
  - - ">="
108
105
  - !ruby/object:Gem::Version
109
- version: 4.1.5
110
- - - "~>"
111
- - !ruby/object:Gem::Version
112
- version: '4'
106
+ version: 4.2.8
113
107
  - !ruby/object:Gem::Dependency
114
108
  name: bundler
115
109
  requirement: !ruby/object:Gem::Requirement
116
110
  requirements:
117
111
  - - ">="
118
112
  - !ruby/object:Gem::Version
119
- version: 1.5.1
113
+ version: 1.13.6
120
114
  - - "~>"
121
115
  - !ruby/object:Gem::Version
122
116
  version: '1'
@@ -126,7 +120,7 @@ dependencies:
126
120
  requirements:
127
121
  - - ">="
128
122
  - !ruby/object:Gem::Version
129
- version: 1.5.1
123
+ version: 1.13.6
130
124
  - - "~>"
131
125
  - !ruby/object:Gem::Version
132
126
  version: '1'
@@ -136,27 +130,27 @@ dependencies:
136
130
  requirements:
137
131
  - - ">="
138
132
  - !ruby/object:Gem::Version
139
- version: 2.7.2
133
+ version: 3.2.0
140
134
  - - "~>"
141
135
  - !ruby/object:Gem::Version
142
- version: '2'
136
+ version: '3'
143
137
  type: :runtime
144
138
  prerelease: false
145
139
  version_requirements: !ruby/object:Gem::Requirement
146
140
  requirements:
147
141
  - - ">="
148
142
  - !ruby/object:Gem::Version
149
- version: 2.7.2
143
+ version: 3.2.0
150
144
  - - "~>"
151
145
  - !ruby/object:Gem::Version
152
- version: '2'
146
+ version: '3'
153
147
  - !ruby/object:Gem::Dependency
154
- name: therubyracer
148
+ name: sourcemap
155
149
  requirement: !ruby/object:Gem::Requirement
156
150
  requirements:
157
151
  - - ">="
158
152
  - !ruby/object:Gem::Version
159
- version: 0.12.2
153
+ version: 0.1.1
160
154
  - - "~>"
161
155
  - !ruby/object:Gem::Version
162
156
  version: '0'
@@ -166,51 +160,57 @@ dependencies:
166
160
  requirements:
167
161
  - - ">="
168
162
  - !ruby/object:Gem::Version
169
- version: 0.12.2
163
+ version: 0.1.1
170
164
  - - "~>"
171
165
  - !ruby/object:Gem::Version
172
166
  version: '0'
173
167
  - !ruby/object:Gem::Dependency
174
- name: source_map
168
+ name: therubyracer
175
169
  requirement: !ruby/object:Gem::Requirement
176
170
  requirements:
177
171
  - - ">="
178
172
  - !ruby/object:Gem::Version
179
- version: 3.0.1
173
+ version: 0.12.2
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
180
177
  type: :runtime
181
178
  prerelease: false
182
179
  version_requirements: !ruby/object:Gem::Requirement
183
180
  requirements:
184
181
  - - ">="
185
182
  - !ruby/object:Gem::Version
186
- version: 3.0.1
183
+ version: 0.12.2
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: rake
189
189
  requirement: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - ">="
192
192
  - !ruby/object:Gem::Version
193
- version: 10.3.2
193
+ version: 12.0.0
194
194
  - - "~>"
195
195
  - !ruby/object:Gem::Version
196
- version: '10'
196
+ version: '12'
197
197
  type: :development
198
198
  prerelease: false
199
199
  version_requirements: !ruby/object:Gem::Requirement
200
200
  requirements:
201
201
  - - ">="
202
202
  - !ruby/object:Gem::Version
203
- version: 10.3.2
203
+ version: 12.0.0
204
204
  - - "~>"
205
205
  - !ruby/object:Gem::Version
206
- version: '10'
206
+ version: '12'
207
207
  - !ruby/object:Gem::Dependency
208
208
  name: minitest
209
209
  requirement: !ruby/object:Gem::Requirement
210
210
  requirements:
211
211
  - - ">="
212
212
  - !ruby/object:Gem::Version
213
- version: 5.4.1
213
+ version: 5.10.2
214
214
  - - "~>"
215
215
  - !ruby/object:Gem::Version
216
216
  version: '5'
@@ -220,7 +220,7 @@ dependencies:
220
220
  requirements:
221
221
  - - ">="
222
222
  - !ruby/object:Gem::Version
223
- version: 5.4.1
223
+ version: 5.10.2
224
224
  - - "~>"
225
225
  - !ruby/object:Gem::Version
226
226
  version: '5'
@@ -230,7 +230,7 @@ dependencies:
230
230
  requirements:
231
231
  - - ">="
232
232
  - !ruby/object:Gem::Version
233
- version: 1.0.5
233
+ version: 1.1.14
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
236
  version: '1'
@@ -240,7 +240,7 @@ dependencies:
240
240
  requirements:
241
241
  - - ">="
242
242
  - !ruby/object:Gem::Version
243
- version: 1.0.5
243
+ version: 1.1.14
244
244
  - - "~>"
245
245
  - !ruby/object:Gem::Version
246
246
  version: '1'
@@ -250,7 +250,7 @@ dependencies:
250
250
  requirements:
251
251
  - - ">="
252
252
  - !ruby/object:Gem::Version
253
- version: 1.1.0
253
+ version: 1.2.1
254
254
  - - "~>"
255
255
  - !ruby/object:Gem::Version
256
256
  version: '1'
@@ -260,7 +260,7 @@ dependencies:
260
260
  requirements:
261
261
  - - ">="
262
262
  - !ruby/object:Gem::Version
263
- version: 1.1.0
263
+ version: 1.2.1
264
264
  - - "~>"
265
265
  - !ruby/object:Gem::Version
266
266
  version: '1'
@@ -290,7 +290,7 @@ dependencies:
290
290
  requirements:
291
291
  - - ">="
292
292
  - !ruby/object:Gem::Version
293
- version: 2.1.7
293
+ version: 2.1.8
294
294
  - - "~>"
295
295
  - !ruby/object:Gem::Version
296
296
  version: '2'
@@ -300,7 +300,7 @@ dependencies:
300
300
  requirements:
301
301
  - - ">="
302
302
  - !ruby/object:Gem::Version
303
- version: 2.1.7
303
+ version: 2.1.8
304
304
  - - "~>"
305
305
  - !ruby/object:Gem::Version
306
306
  version: '2'
@@ -397,7 +397,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
397
397
  requirements:
398
398
  - - ">="
399
399
  - !ruby/object:Gem::Version
400
- version: '0'
400
+ version: 2.2.6
401
401
  required_rubygems_version: !ruby/object:Gem::Requirement
402
402
  requirements:
403
403
  - - ">="
@@ -405,7 +405,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
405
405
  version: '0'
406
406
  requirements: []
407
407
  rubyforge_project:
408
- rubygems_version: 2.2.2
408
+ rubygems_version: 2.6.12
409
409
  signing_key:
410
410
  specification_version: 4
411
411
  summary: Ichiban