opal-sprockets 0.4.9.1.0.3.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,60 +20,130 @@ describe Opal::Sprockets::Server do
20
20
  end
21
21
 
22
22
  it 'serves assets with complex sprockets requires' do
23
- asset = app.sprockets['complex_sprockets']
23
+ asset = app.sprockets['complex_sprockets', accept: "application/javascript"]
24
24
  expect(asset).to be_truthy
25
25
 
26
- assets = asset.to_a.map do |sub_asset|
27
- sub_asset.logical_path.gsub(/\.self\.js$/, '.js')
26
+ assets = asset.metadata[:included].map do |sub_asset|
27
+ URI.parse(sub_asset).path.split(%r'/fixtures/|/stdlib/').last
28
28
  end
29
29
 
30
30
  %w[
31
- base64.js
32
- no_requires.js
33
- jst_file.js
34
- required_tree_test/required_file1.js
35
- required_tree_test/required_file2.js
31
+ base64.rb
32
+ no_requires.rb
33
+ jst_file.jst.ejs
34
+ required_tree_test/required_file1.rb
35
+ required_tree_test/required_file2.rb
36
36
  file_with_directives.js
37
37
  ].each do |logical_path|
38
38
  expect(assets).to include(logical_path)
39
39
  end
40
40
  end
41
41
 
42
+ it 'recompiles the asset when its dependencies change' do
43
+ does_include = proc do |it, what, what_not=[], what_else=nil, what_else_not=nil|
44
+ expect(it).to include what_else if what_else
45
+ expect(it).not_to include what_else_not if what_else_not
46
+ what.each { |i| expect(it).to include %{modules["required_tree_test/required_file#{i}"]} }
47
+ what_not.each { |i| expect(it).not_to include %{modules["required_tree_test/required_file#{i}"]} }
48
+ end
49
+
50
+ ["default", "debug"].each do |pipeline|
51
+ asset = app.sprockets['require_tree_test', pipeline: pipeline, accept: "application/javascript"]
52
+ expect(asset).to be_truthy
53
+ does_include.(asset.to_s, [1,2], [3], nil, "UNIQUESTRING")
54
+ get "/assets/require_tree_test.#{pipeline}.js"
55
+ does_include.(last_response.body, [1,2], [3], nil, "UNIQUESTRING")
56
+
57
+ sleep 1 # Make sure to modify mtime
58
+
59
+ File.write(__dir__+"/../fixtures/required_tree_test/required_file2.rb", "p 'UNIQUESTRING1'")
60
+
61
+ asset = app.sprockets['require_tree_test', pipeline: pipeline, accept: "application/javascript"]
62
+ expect(asset).to be_truthy
63
+ does_include.(asset.to_s, [1,2], [3], "UNIQUESTRING1")
64
+ get "/assets/require_tree_test.#{pipeline}.js"
65
+ does_include.(last_response.body, [1,2], [3], "UNIQUESTRING1")
66
+
67
+ sleep 1 # Make sure to modify mtime
68
+
69
+ File.write(__dir__+"/../fixtures/required_tree_test/required_file2.rb", "p 'UNIQUESTRING2'")
70
+
71
+ asset = app.sprockets['require_tree_test', pipeline: pipeline, accept: "application/javascript"]
72
+ expect(asset).to be_truthy
73
+ does_include.(asset.to_s, [1,2], [3], "UNIQUESTRING2")
74
+ get "/assets/require_tree_test.#{pipeline}.js"
75
+ does_include.(last_response.body, [1,2], [3], "UNIQUESTRING2")
76
+
77
+ sleep 1 # Make sure to modify mtime
78
+
79
+ File.write(__dir__+"/../fixtures/required_tree_test/required_file2.rb", "p 'UNIQUESTRING3'")
80
+ File.write(__dir__+"/../fixtures/required_tree_test/required_file3.rb", "p 3")
81
+
82
+ asset = app.sprockets['require_tree_test', pipeline: pipeline, accept: "application/javascript"]
83
+ expect(asset).to be_truthy
84
+ does_include.(asset.to_s, [1,2,3], [], "UNIQUESTRING3")
85
+ get "/assets/require_tree_test.#{pipeline}.js"
86
+ does_include.(last_response.body, [1,2], [], "UNIQUESTRING3") # fails with 3 - it doesn't get new files
87
+
88
+ sleep 1 # Make sure to modify mtime
89
+ ensure
90
+ File.write(__dir__+"/../fixtures/required_tree_test/required_file2.rb", "p 2\n")
91
+ File.unlink(__dir__+"/../fixtures/required_tree_test/required_file3.rb") rescue nil
92
+ end
93
+ end
94
+
42
95
  describe 'source maps' do
43
- RSpec::Matchers.define :include_inline_source_map do
96
+ RSpec::Matchers.define :include_source_map do
44
97
  match do |actual_response|
45
98
  actual_response.ok? &&
46
- actual_response.body.lines.last.start_with?('//# sourceMappingURL=data:application/json;base64,')
99
+ actual_response.body.lines.last.start_with?('//# sourceMappingURL=')
47
100
  end
48
101
  end
49
102
 
50
- def extract_inline_map(response)
103
+ def extract_map(path, response)
51
104
  last_line = response.body.lines.last
52
- b64_encoded = last_line.split('//# sourceMappingURL=data:application/json;base64,', 2)[1]
53
- json_string = Base64.decode64(b64_encoded)
105
+ if last_line.start_with? "//# sourceMappingURL=data:application/json;base64,"
106
+ b64_encoded = last_line.split('//# sourceMappingURL=data:application/json;base64,', 2)[1]
107
+ json_string = Base64.decode64(b64_encoded)
108
+ else
109
+ map_file = last_line.split('//# sourceMappingURL=', 2)[1].chomp
110
+ map_file = relative_path(path, map_file)
111
+ map_file = get map_file
112
+ json_string = map_file.body
113
+ end
54
114
  JSON.parse(json_string, symbolize_names: true)
55
115
  end
56
116
 
117
+ def relative_path(path, file)
118
+ URI.join("http://example.com/", path, file).path
119
+ end
120
+
57
121
  it 'serves map for a top level file' do
58
- get '/assets/opal_file.js'
59
- expect(last_response).to include_inline_source_map
122
+ path = '/assets/opal_file.debug.js'
123
+ get path
124
+ expect(last_response).to include_source_map
60
125
 
61
- map = extract_inline_map(last_response)
126
+ map = extract_map(path, last_response)
62
127
 
63
- expect(map[:sources]).to eq(['opal_file.rb']).or eq(['opal_file'])
64
- expect(map[:sourcesContent]).to eq(["require 'opal'\nputs 'hi from opal!'\n"])
128
+ expect(map[:file]).to eq('opal_file.rb')
129
+ expect(map[:sections].last[:map][:sources]).to eq(['opal_file.source.rb'])
130
+
131
+ expect(get(relative_path(path, map[:sections].last[:map][:sources][0])).body.chomp)
132
+ .to eq("require 'opal'\nputs 'hi from opal!'")
65
133
  end
66
134
 
67
135
  it 'serves map for a subfolder file' do
68
- get '/assets/source_map/subfolder/other_file.self.js'
69
- expect(last_response).to include_inline_source_map
136
+ path = '/assets/source_map/subfolder/other_file.debug.js'
137
+ get path
138
+ expect(last_response).to include_source_map
139
+
140
+ map = extract_map(path, last_response)
70
141
 
71
- map = extract_inline_map(last_response)
142
+ expect(map[:file]).to eq('source_map/subfolder/other_file.rb')
143
+ expect(map[:sections].first[:map][:sources]).to eq(['other_file.source.rb'])
72
144
 
73
- expect(map[:sources])
74
- .to eq(['source_map/subfolder/other_file.rb'])
75
- .or eq(['source_map/subfolder/other_file'])
76
- expect(map[:sourcesContent]).to eq(["puts 'other!'\n"])
145
+ expect(get(relative_path(path, map[:sections][0][:map][:sources][0])).body.chomp)
146
+ .to eq("puts 'other!'")
77
147
  end
78
148
  end
79
149
  end
@@ -5,7 +5,7 @@ describe Opal::TiltTemplate do
5
5
  %w[rb js.rb opal js.opal].each do |ext|
6
6
  let(:ext) { ext }
7
7
 
8
- describe %Q{with extension ".#{ext}"} do
8
+ describe %{with extension ".#{ext}"} do
9
9
  it "is registered for '.#{ext}' files" do
10
10
  expect(Tilt["test.#{ext}"]).to be <= described_class
11
11
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-sprockets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9.1.0.3.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elia Schito
8
8
  - Adam Beynon
9
9
  autorequire:
10
- bindir: bin
10
+ bindir: exe
11
11
  cert_chain: []
12
- date: 2020-09-10 00:00:00.000000000 Z
12
+ date: 2021-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sprockets
@@ -17,28 +17,34 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '3.7'
20
+ version: '4.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '3.7'
27
+ version: '4.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: opal
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '1.0'
35
+ - - "<"
33
36
  - !ruby/object:Gem::Version
34
- version: 1.0.0
37
+ version: '1.2'
35
38
  type: :runtime
36
39
  prerelease: false
37
40
  version_requirements: !ruby/object:Gem::Requirement
38
41
  requirements:
39
- - - "~>"
42
+ - - ">="
40
43
  - !ruby/object:Gem::Version
41
- version: 1.0.0
44
+ version: '1.0'
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
42
48
  - !ruby/object:Gem::Dependency
43
49
  name: tilt
44
50
  requirement: !ruby/object:Gem::Requirement
@@ -109,19 +115,51 @@ dependencies:
109
115
  - - ">="
110
116
  - !ruby/object:Gem::Version
111
117
  version: '0'
112
- description: Sprockets support for Opal.
118
+ - !ruby/object:Gem::Dependency
119
+ name: ejs
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: pry
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ description:
113
147
  email: elia@schito.me
114
148
  executables: []
115
149
  extensions: []
116
150
  extra_rdoc_files: []
117
151
  files:
152
+ - ".github/workflows/build.yml"
118
153
  - ".gitignore"
119
154
  - ".rspec"
120
- - ".travis.yml"
121
155
  - CHANGELOG.md
122
156
  - Gemfile
123
157
  - README.md
124
158
  - Rakefile
159
+ - bin/console
160
+ - bin/rake
161
+ - bin/rspec
162
+ - bin/setup
125
163
  - example/Gemfile
126
164
  - example/Gemfile.lock
127
165
  - example/app/application.rb
@@ -129,17 +167,20 @@ files:
129
167
  - example/config.ru
130
168
  - example/index.html.erb
131
169
  - lib/opal-sprockets.rb
170
+ - lib/opal/environment.rb
171
+ - lib/opal/processor.rb
132
172
  - lib/opal/sprockets.rb
173
+ - lib/opal/sprockets/assets_helper.rb
133
174
  - lib/opal/sprockets/environment.rb
134
175
  - lib/opal/sprockets/erb.rb
135
- - lib/opal/sprockets/path_reader.rb
176
+ - lib/opal/sprockets/mime_types.rb
136
177
  - lib/opal/sprockets/processor.rb
137
178
  - lib/opal/sprockets/server.rb
138
179
  - lib/opal/sprockets/version.rb
139
180
  - opal-sprockets.gemspec
140
181
  - spec/fixtures/complex_sprockets.js.rb.erb
141
182
  - spec/fixtures/file_with_directives.js
142
- - spec/fixtures/jst_file.js.jst
183
+ - spec/fixtures/jst_file.jst.ejs
143
184
  - spec/fixtures/no_requires.rb
144
185
  - spec/fixtures/opal_file.rb
145
186
  - spec/fixtures/require_tree_test.rb
@@ -150,18 +191,19 @@ files:
150
191
  - spec/fixtures/source_map/subfolder/other_file.rb
151
192
  - spec/fixtures/sprockets_file.js.rb
152
193
  - spec/fixtures/sprockets_require_tree_test.rb
153
- - spec/shared/path_finder_shared.rb
154
- - spec/shared/path_reader_shared.rb
155
194
  - spec/spec_helper.rb
156
195
  - spec/sprockets/erb_spec.rb
157
- - spec/sprockets/path_reader_spec.rb
158
196
  - spec/sprockets/processor_spec.rb
159
197
  - spec/sprockets/server_spec.rb
160
198
  - spec/sprockets_spec.rb
161
199
  - spec/tilt/opal_spec.rb
162
200
  homepage: https://github.com/opal/opal-sprockets#readme
163
- licenses: []
164
- metadata: {}
201
+ licenses:
202
+ - MIT
203
+ metadata:
204
+ homepage_uri: https://github.com/opal/opal-sprockets#readme
205
+ source_code_uri: https://github.com/opal/opal-sprockets
206
+ changelog_uri: https://github.com/opal/opal-sprockets/blob/master/CHANGELOG.md
165
207
  post_install_message:
166
208
  rdoc_options: []
167
209
  require_paths:
@@ -170,21 +212,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
212
  requirements:
171
213
  - - ">="
172
214
  - !ruby/object:Gem::Version
173
- version: '0'
215
+ version: '2.5'
216
+ - - "<"
217
+ - !ruby/object:Gem::Version
218
+ version: '3.1'
174
219
  required_rubygems_version: !ruby/object:Gem::Requirement
175
220
  requirements:
176
221
  - - ">="
177
222
  - !ruby/object:Gem::Version
178
223
  version: '0'
179
224
  requirements: []
180
- rubygems_version: 3.1.2
225
+ rubygems_version: 3.2.3
181
226
  signing_key:
182
227
  specification_version: 4
183
228
  summary: Sprockets support for Opal.
184
229
  test_files:
185
230
  - spec/fixtures/complex_sprockets.js.rb.erb
186
231
  - spec/fixtures/file_with_directives.js
187
- - spec/fixtures/jst_file.js.jst
232
+ - spec/fixtures/jst_file.jst.ejs
188
233
  - spec/fixtures/no_requires.rb
189
234
  - spec/fixtures/opal_file.rb
190
235
  - spec/fixtures/require_tree_test.rb
@@ -195,11 +240,8 @@ test_files:
195
240
  - spec/fixtures/source_map/subfolder/other_file.rb
196
241
  - spec/fixtures/sprockets_file.js.rb
197
242
  - spec/fixtures/sprockets_require_tree_test.rb
198
- - spec/shared/path_finder_shared.rb
199
- - spec/shared/path_reader_shared.rb
200
243
  - spec/spec_helper.rb
201
244
  - spec/sprockets/erb_spec.rb
202
- - spec/sprockets/path_reader_spec.rb
203
245
  - spec/sprockets/processor_spec.rb
204
246
  - spec/sprockets/server_spec.rb
205
247
  - spec/sprockets_spec.rb
data/.travis.yml DELETED
@@ -1,21 +0,0 @@
1
- language: ruby
2
-
3
- branches:
4
- only:
5
- - master
6
- - /^.*-stable$/
7
- - /^.*ci-check$/
8
-
9
- matrix:
10
- include:
11
- - rvm: 2.3
12
- env: OPAL_VERSION='~> 1.0.0'
13
- - rvm: 2.4
14
- env: OPAL_VERSION='~> 1.0.0'
15
- - rvm: 2.5
16
- env: OPAL_VERSION='~> 1.0.0'
17
- - rvm: 2.6
18
- env: OPAL_VERSION='~> 1.0.0'
19
-
20
- notifications:
21
- irc: "irc.freenode.org#opal"
@@ -1,36 +0,0 @@
1
- module Opal
2
- module Sprockets
3
-
4
- class PathReader
5
- def initialize(env, context)
6
- @env ||= env
7
- @context ||= context
8
- end
9
-
10
- def read path
11
- if path.end_with? '.js'
12
- context.depend_on_asset(path)
13
- env[path, bundle: true].to_s
14
- else
15
- context.depend_on(path)
16
- File.open(expand(path), 'rb:UTF-8'){|f| f.read}
17
- end
18
- rescue ::Sprockets::FileNotFound
19
- nil
20
- end
21
-
22
- def expand path
23
- env.resolve(path) or
24
- # Sprockets 3 just returns nil for unknown paths
25
- raise ::Sprockets::FileNotFound, path.inspect
26
- end
27
-
28
- def paths
29
- env.paths
30
- end
31
-
32
- attr_reader :env, :context
33
- end
34
-
35
- end
36
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples :path_finder do
4
- # @param path
5
- # the path we want to read
6
- #
7
- # @param full_path
8
- # the expanded path that should be found
9
- #
10
- it 'returns the full path if the path exists' do
11
- expect(path_finder.find(path)).to eq(full_path)
12
- end
13
-
14
- it 'returns nil if the path is missing' do
15
- expect(path_finder.find('unexpected-path')).to eq(nil)
16
- end
17
- end
18
-
19
-
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # Below the helpers expected from a spec that
4
- # includes these shared examples:
5
- #
6
- # @object [PathReader] path_reader the object under test
7
- # @method [String] path the path we want to read
8
- # @method [String] contents the contents we expect to be read
9
- #
10
- shared_examples :path_reader do
11
- describe '#paths' do
12
- it 'is an Enumberable' do
13
- expect(path_reader.paths).to be_an(Enumerable)
14
- end
15
-
16
- it 'includes Opal.paths' do
17
- paths = path_reader.paths.to_a
18
- Opal.paths.each { |path| expect(paths).to include(path) }
19
- end
20
- end
21
-
22
- describe '#read' do
23
- it 'responds to #path' do
24
- expect(path_reader.read(path)).to eq(contents)
25
- end
26
-
27
- it 'returns nil if the file is missing' do
28
- expect(path_reader.read('unexpected-path!')).to be_nil
29
- end
30
- end
31
- end