bpm 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/lib/bpm/cli/base.rb +4 -7
- data/lib/bpm/init_generator.rb +2 -3
- data/lib/bpm/package.rb +29 -1
- data/lib/bpm/pipeline/generated_asset.rb +5 -9
- data/lib/bpm/pipeline/plugin_asset.rb +74 -0
- data/lib/bpm/pipeline/transport_processor.rb +9 -12
- data/lib/bpm/pipeline.rb +26 -12
- data/lib/bpm/project.rb +1 -0
- data/lib/bpm/version.rb +1 -1
- data/lib/bpm.rb +1 -0
- data/spec/fixtures/minitest/packages/uglyduck/lib/main.js +2 -0
- data/spec/fixtures/minitest/packages/uglyduck/minifier/main.js +4 -2
- data/spec/fixtures/transporter/packages/transport/transports/wrapper.js +1 -1
- data/spec/pipeline_spec.rb +0 -93
- data/spec/plugins/minifier_spec.rb +64 -0
- data/spec/plugins/transport_spec.rb +35 -0
- metadata +29 -24
data/.gitignore
CHANGED
data/lib/bpm/cli/base.rb
CHANGED
@@ -81,12 +81,9 @@ module BPM
|
|
81
81
|
# find project
|
82
82
|
project = find_project
|
83
83
|
|
84
|
-
begin
|
85
|
-
|
86
|
-
|
87
|
-
rescue Exception => e
|
88
|
-
abort e.message
|
89
|
-
end
|
84
|
+
# This was wrapped in a begin/rescue Exception, but we should be selective if we rescue
|
85
|
+
project.add_dependencies deps, true
|
86
|
+
project.build :debug, true
|
90
87
|
end
|
91
88
|
|
92
89
|
desc "remove [PACKAGE]", "Remove package from project"
|
@@ -128,7 +125,7 @@ module BPM
|
|
128
125
|
|
129
126
|
begin
|
130
127
|
project = find_project
|
131
|
-
project.
|
128
|
+
project.rebuild_dependencies nil, options[:verbose]
|
132
129
|
project.build options[:mode], options[:verbose]
|
133
130
|
rescue Exception => e
|
134
131
|
abort e.message
|
data/lib/bpm/init_generator.rb
CHANGED
@@ -31,9 +31,8 @@ module BPM
|
|
31
31
|
def convert_package(destination_root)
|
32
32
|
package = BPM::Package.new(destination_root)
|
33
33
|
package.load_json
|
34
|
-
|
35
|
-
|
36
|
-
end
|
34
|
+
new_json = JSON.pretty_generate(package.as_json)
|
35
|
+
File.open("#{name}.json", "w"){|f| f.write new_json }
|
37
36
|
puts "created #{name}.json from package.json"
|
38
37
|
end
|
39
38
|
|
data/lib/bpm/package.rb
CHANGED
@@ -108,6 +108,28 @@ module BPM
|
|
108
108
|
read && parse
|
109
109
|
end
|
110
110
|
|
111
|
+
def expanded_deps(project)
|
112
|
+
ret = []
|
113
|
+
seen = []
|
114
|
+
todo = [self]
|
115
|
+
while todo.size > 0
|
116
|
+
pkg = todo.shift
|
117
|
+
pkg.dependencies.each do |dep_name, dep_vers|
|
118
|
+
next if seen.include? dep_name
|
119
|
+
seen << dep_name
|
120
|
+
found = project.local_deps.find { |x| x.name == dep_name }
|
121
|
+
if found
|
122
|
+
todo << found
|
123
|
+
ret << found
|
124
|
+
else
|
125
|
+
puts "COULD NOT FIND DEP: #{dep_name}"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
ret
|
131
|
+
end
|
132
|
+
|
111
133
|
# TODO: Make better errors
|
112
134
|
# TODO: This might not work well with conflicting versions
|
113
135
|
def local_deps(search_path=nil)
|
@@ -178,7 +200,13 @@ module BPM
|
|
178
200
|
pkg.load_json
|
179
201
|
pkg.name == pkg_name
|
180
202
|
end
|
181
|
-
|
203
|
+
|
204
|
+
if dep
|
205
|
+
dep.attributes[key_name]
|
206
|
+
else
|
207
|
+
puts "COULD NOT FIND DEP: #{pkg_name}"
|
208
|
+
end
|
209
|
+
|
182
210
|
end.compact
|
183
211
|
end
|
184
212
|
|
@@ -26,17 +26,13 @@ module BPM
|
|
26
26
|
minifier_name = project.minifier_name
|
27
27
|
if minifier_name && content_type == 'application/javascript'
|
28
28
|
pkg = project.package_from_name minifier_name
|
29
|
-
|
29
|
+
minifier_plugin_name = pkg.minifier_plugins(project).first
|
30
|
+
plugin_ctx = environment.plugin_context_for minifier_plugin_name
|
30
31
|
|
31
|
-
minifier_path = blank_context.resolve(project.path_from_module(minifier_plugin))
|
32
|
-
|
33
|
-
ctx = environment.js_context_for minifier_path
|
34
|
-
out = ''
|
35
|
-
|
36
32
|
V8::C::Locker() do
|
37
|
-
|
38
|
-
|
39
|
-
body =
|
33
|
+
plugin_ctx["PACKAGE_INFO"] = pkg.attributes
|
34
|
+
plugin_ctx["DATA"] = body
|
35
|
+
body = plugin_ctx.eval("BPM_PLUGIN.minify(DATA, PACKAGE_INFO)")
|
40
36
|
end
|
41
37
|
end
|
42
38
|
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
|
3
|
+
module BPM
|
4
|
+
|
5
|
+
# Defines an asset that represents a build plugin (such as a transport or
|
6
|
+
# a minifier.) The generated asset will include dependencies of the plugin
|
7
|
+
# module as well as the module itself.
|
8
|
+
class PluginAsset < Sprockets::BundledAsset
|
9
|
+
|
10
|
+
def initialize(environment, module_name)
|
11
|
+
pathname = Pathname.new(File.join(environment.project.root_path, '.bpm', 'plugins', module_name+'.js'))
|
12
|
+
super(environment, module_name, pathname, {})
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def dependency_context_and_body
|
18
|
+
@dependency_context_and_body ||= build_dependency_context_and_body
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# Note: logical path must be hte module
|
24
|
+
def plugin_module
|
25
|
+
project = environment.project
|
26
|
+
parts = logical_path.split('/')
|
27
|
+
[parts.shift, parts.join('/')]
|
28
|
+
end
|
29
|
+
|
30
|
+
def build_dependency_context_and_body
|
31
|
+
|
32
|
+
project = environment.project
|
33
|
+
pkg_name, module_id = plugin_module
|
34
|
+
pkg = project.package_from_name pkg_name
|
35
|
+
|
36
|
+
# Add in the generated header
|
37
|
+
body = ["// BPM PLUGIN: #{logical_path}\n\n"]
|
38
|
+
|
39
|
+
pkg.load_json
|
40
|
+
deps = pkg.expanded_deps project
|
41
|
+
deps << pkg # always load pkg too
|
42
|
+
|
43
|
+
# Prime digest cache with data, since we happen to have it
|
44
|
+
environment.file_digest(pathname, body)
|
45
|
+
|
46
|
+
# add requires for each depedency to context
|
47
|
+
context = blank_context
|
48
|
+
|
49
|
+
deps.map do |pkg|
|
50
|
+
pkg.load_json
|
51
|
+
pkg.pipeline_libs.each do |dir|
|
52
|
+
dir_name = pkg.directories[dir] || dir
|
53
|
+
search_path = File.expand_path File.join(pkg.root_path, dir_name)
|
54
|
+
|
55
|
+
Dir[File.join(search_path, '**', '*')].sort.each do |fn|
|
56
|
+
context.depend_on File.dirname(fn)
|
57
|
+
context.require_asset(fn) if context.asset_requirable? fn
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# require asset itself - this should be included directly in the body
|
63
|
+
# we don't want to use any processors
|
64
|
+
module_path = context.resolve project.path_from_module(logical_path)
|
65
|
+
context.depend_on module_path
|
66
|
+
body << "(function(exports) {"
|
67
|
+
body << File.read(module_path)
|
68
|
+
body << "})(BPM_PLUGIN);\n"
|
69
|
+
|
70
|
+
return context, body.join("\n")
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -5,31 +5,28 @@ module BPM
|
|
5
5
|
class TransportProcessor < Sprockets::Processor
|
6
6
|
|
7
7
|
def evaluate(context, locals)
|
8
|
-
|
8
|
+
environment = context.environment
|
9
|
+
project = environment.project
|
9
10
|
pkg, module_id = project.package_and_module_from_path file
|
10
11
|
transport_plugins = pkg.transport_plugins(project)
|
11
12
|
|
12
13
|
# No transport, just return the existing data
|
13
|
-
return data if transport_plugins.
|
14
|
+
return data if transport_plugins.size == 0
|
14
15
|
|
15
16
|
if transport_plugins.size > 1
|
16
17
|
# TODO: Maybe make custom error for this
|
17
18
|
raise "#{pkg.name} depends on #{transport_plugins.size} packages that define transport plugins. " \
|
18
19
|
"Select a plugin by adding a `plugin:transport` property to the package.json"
|
19
20
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
filepath = file.sub(/^#{project_path}/,'') # relative file path from project
|
24
|
-
|
25
|
-
transport_path = context.resolve project.path_from_module(transport_plugins.first)
|
26
|
-
ctx = context.environment.js_context_for transport_path
|
21
|
+
|
22
|
+
plugin_ctx = environment.plugin_context_for transport_plugins.first
|
23
|
+
filepath = file.to_s
|
27
24
|
out = ''
|
28
25
|
|
29
26
|
V8::C::Locker() do
|
30
|
-
|
31
|
-
|
32
|
-
out =
|
27
|
+
plugin_ctx["PACKAGE_INFO"] = pkg.attributes
|
28
|
+
plugin_ctx["DATA"] = data
|
29
|
+
out = plugin_ctx.eval("BPM_PLUGIN.compileTransport(DATA, PACKAGE_INFO, '#{module_id}', '#{filepath}');")
|
33
30
|
end
|
34
31
|
|
35
32
|
out + "\n\n"
|
data/lib/bpm/pipeline.rb
CHANGED
@@ -3,6 +3,12 @@ require 'v8'
|
|
3
3
|
|
4
4
|
module BPM
|
5
5
|
|
6
|
+
class Console
|
7
|
+
def log(str)
|
8
|
+
puts str
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
6
12
|
# A BPM package-aware asset pipeline. Asset lookup respects package.json
|
7
13
|
# directory configurations as well as loading preprocessors, formats, and
|
8
14
|
# postprocessors from the package config.
|
@@ -14,6 +20,8 @@ module BPM
|
|
14
20
|
# Pass in the project you want the pipeline to manage.
|
15
21
|
def initialize(project)
|
16
22
|
@project = project
|
23
|
+
@plugin_contexts = {}
|
24
|
+
|
17
25
|
project_path = project.root_path
|
18
26
|
|
19
27
|
super project_path
|
@@ -35,11 +43,8 @@ module BPM
|
|
35
43
|
append_path File.join project_path, 'assets'
|
36
44
|
end
|
37
45
|
|
38
|
-
|
39
|
-
|
40
|
-
def js_context_for(path)
|
41
|
-
@js_contexts ||= {}
|
42
|
-
@js_contexts[path] ||= build_js_context(path)
|
46
|
+
def plugin_context_for(module_id)
|
47
|
+
@plugin_contexts[module_id] ||= build_plugin_context(module_id)
|
43
48
|
end
|
44
49
|
|
45
50
|
# Returns an array of all the buildable assets in the current directory.
|
@@ -76,8 +81,12 @@ module BPM
|
|
76
81
|
magic_paths += %w(app_package.js app_styles.css).map do |filename|
|
77
82
|
File.join project.root_path, 'assets', project.name, filename
|
78
83
|
end
|
79
|
-
|
80
|
-
|
84
|
+
|
85
|
+
plugin_path = File.join project.root_path, '.bpm', 'plugins'
|
86
|
+
|
87
|
+
if pathname.to_s =~ /^#{Regexp.escape plugin_path}/
|
88
|
+
BPM::PluginAsset.new(self, "spade/~transports/spade", pathname, options)
|
89
|
+
elsif magic_paths.include? pathname.to_s
|
81
90
|
BPM::GeneratedAsset.new(self, logical_path, pathname, options)
|
82
91
|
else
|
83
92
|
super logical_path, pathname, options
|
@@ -86,18 +95,23 @@ module BPM
|
|
86
95
|
|
87
96
|
private
|
88
97
|
|
89
|
-
def
|
98
|
+
def build_plugin_context(module_id)
|
99
|
+
asset = BPM::PluginAsset.new(self, module_id)
|
100
|
+
plugin_text = asset.to_s
|
101
|
+
|
90
102
|
ctx = nil
|
91
103
|
V8::C::Locker() do
|
92
104
|
ctx = V8::Context.new do |ctx|
|
93
|
-
ctx['
|
94
|
-
ctx
|
105
|
+
ctx['window'] = ctx # make browser-like environment
|
106
|
+
ctx['console'] = BPM::Console.new
|
107
|
+
|
108
|
+
ctx['BPM_PLUGIN'] = {}
|
109
|
+
ctx.eval plugin_text
|
95
110
|
end
|
96
111
|
end
|
97
|
-
ctx
|
98
112
|
|
113
|
+
ctx
|
99
114
|
end
|
100
|
-
|
101
115
|
|
102
116
|
end
|
103
117
|
|
data/lib/bpm/project.rb
CHANGED
data/lib/bpm/version.rb
CHANGED
data/lib/bpm.rb
CHANGED
@@ -17,6 +17,7 @@ module BPM
|
|
17
17
|
autoload :DirectiveProcessor, 'bpm/pipeline/directive_processor'
|
18
18
|
autoload :GeneratedAsset, 'bpm/pipeline/generated_asset'
|
19
19
|
autoload :TransportProcessor, 'bpm/pipeline/transport_processor'
|
20
|
+
autoload :PluginAsset, 'bpm/pipeline/plugin_asset'
|
20
21
|
end
|
21
22
|
|
22
23
|
# The BPM constants need to be defined first
|
@@ -1,4 +1,6 @@
|
|
1
|
+
/*globals BPM_PLUGIN UGLYDUCK */
|
1
2
|
|
2
|
-
|
3
|
-
|
3
|
+
BPM_PLUGIN.minify = function(body, pkg, moduleId, pathname) {
|
4
|
+
var whatIsUglyDuck = 'undefined' === typeof UGLYDUCK ? '(main not loaded)' : UGLYDUCK;
|
5
|
+
return "//MINIFIED START\nUGLY DUCK "+UGLYDUCK+"\n"+body+"\n//MINIFIED END\n";
|
4
6
|
};
|
data/spec/pipeline_spec.rb
CHANGED
@@ -239,96 +239,3 @@ describe BPM::Pipeline, "buildable_assets" do
|
|
239
239
|
|
240
240
|
end
|
241
241
|
|
242
|
-
describe BPM::Pipeline, 'transport processor' do
|
243
|
-
|
244
|
-
before do
|
245
|
-
goto_home
|
246
|
-
set_host
|
247
|
-
reset_libgems bpm_dir.to_s
|
248
|
-
start_fake(FakeGemServer.new)
|
249
|
-
|
250
|
-
FileUtils.cp_r fixtures('transporter'), '.'
|
251
|
-
cd home('transporter')
|
252
|
-
|
253
|
-
bpm 'compile'
|
254
|
-
wait
|
255
|
-
end
|
256
|
-
|
257
|
-
subject do
|
258
|
-
project = BPM::Project.new home('transporter')
|
259
|
-
BPM::Pipeline.new project
|
260
|
-
end
|
261
|
-
|
262
|
-
it "should wrap the project's main.js" do
|
263
|
-
asset = subject.find_asset 'transporter/lib/main.js'
|
264
|
-
asset.to_s.should == "define_transport(function() {\n//TRANSPORT\ntransporter();\n//TRANSPORT\n\n}), 'transporter', 'main', 'lib/main.js');\n\n"
|
265
|
-
asset.pathname.to_s.should == File.join(Dir.pwd, 'lib', 'main.js')
|
266
|
-
end
|
267
|
-
|
268
|
-
it "should not wrap transport/main.js" do
|
269
|
-
asset = subject.find_asset 'transport/lib/main.js'
|
270
|
-
asset.to_s.should == "// TRANSPORT DEMO\n"
|
271
|
-
end
|
272
|
-
|
273
|
-
end
|
274
|
-
|
275
|
-
describe BPM::Pipeline, 'minifier' do
|
276
|
-
|
277
|
-
before do
|
278
|
-
goto_home
|
279
|
-
set_host
|
280
|
-
reset_libgems bpm_dir.to_s
|
281
|
-
start_fake(FakeGemServer.new)
|
282
|
-
|
283
|
-
FileUtils.cp_r fixtures('minitest'), '.'
|
284
|
-
cd home('minitest')
|
285
|
-
|
286
|
-
bpm 'compile'
|
287
|
-
wait
|
288
|
-
end
|
289
|
-
|
290
|
-
subject do
|
291
|
-
project = BPM::Project.new home('minitest')
|
292
|
-
BPM::Pipeline.new project
|
293
|
-
end
|
294
|
-
|
295
|
-
it "should wrap bpm_packages.js" do
|
296
|
-
asset = subject.find_asset 'bpm_packages.js'
|
297
|
-
file_path = home('minitest', 'packages', 'uglyduck', 'lib', 'main.js')
|
298
|
-
expected = <<EOF
|
299
|
-
//MINIFIED START
|
300
|
-
/* ===========================================================================
|
301
|
-
BPM Static Dependencies
|
302
|
-
MANIFEST: uglyduck (1.0.0)
|
303
|
-
This file is generated automatically by the bpm (http://www.bpmjs.org)
|
304
|
-
To use this file, load this file in your HTML head.
|
305
|
-
=========================================================================*/
|
306
|
-
|
307
|
-
#{File.read file_path}
|
308
|
-
//MINIFIED END
|
309
|
-
EOF
|
310
|
-
|
311
|
-
asset.to_s.should == expected
|
312
|
-
end
|
313
|
-
|
314
|
-
it "should wrap app_package.js" do
|
315
|
-
asset = subject.find_asset 'minitest/app_package.js'
|
316
|
-
file_path = home('minitest', 'lib', 'main.js')
|
317
|
-
expected = <<EOF
|
318
|
-
//MINIFIED START
|
319
|
-
/* ===========================================================================
|
320
|
-
BPM Static Dependencies
|
321
|
-
MANIFEST: minitest (2.0.0)
|
322
|
-
This file is generated automatically by the bpm (http://www.bpmjs.org)
|
323
|
-
To use this file, load this file in your HTML head.
|
324
|
-
=========================================================================*/
|
325
|
-
|
326
|
-
#{File.read(file_path)}
|
327
|
-
//MINIFIED END
|
328
|
-
EOF
|
329
|
-
asset.to_s.should == expected
|
330
|
-
end
|
331
|
-
|
332
|
-
end
|
333
|
-
|
334
|
-
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BPM::Pipeline, 'minifier' do
|
4
|
+
|
5
|
+
before do
|
6
|
+
goto_home
|
7
|
+
set_host
|
8
|
+
reset_libgems bpm_dir.to_s
|
9
|
+
start_fake(FakeGemServer.new)
|
10
|
+
|
11
|
+
FileUtils.cp_r fixtures('minitest'), '.'
|
12
|
+
cd home('minitest')
|
13
|
+
|
14
|
+
bpm 'compile'
|
15
|
+
wait
|
16
|
+
end
|
17
|
+
|
18
|
+
subject do
|
19
|
+
project = BPM::Project.new home('minitest')
|
20
|
+
BPM::Pipeline.new project
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should wrap bpm_packages.js" do
|
24
|
+
asset = subject.find_asset 'bpm_packages.js'
|
25
|
+
file_path = home('minitest', 'packages', 'uglyduck', 'lib', 'main.js')
|
26
|
+
expected = <<EOF
|
27
|
+
//MINIFIED START
|
28
|
+
UGLY DUCK IS UGLY
|
29
|
+
/* ===========================================================================
|
30
|
+
BPM Static Dependencies
|
31
|
+
MANIFEST: uglyduck (1.0.0)
|
32
|
+
This file is generated automatically by the bpm (http://www.bpmjs.org)
|
33
|
+
To use this file, load this file in your HTML head.
|
34
|
+
=========================================================================*/
|
35
|
+
|
36
|
+
#{File.read file_path}
|
37
|
+
//MINIFIED END
|
38
|
+
EOF
|
39
|
+
|
40
|
+
asset.to_s.should == expected
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should wrap app_package.js" do
|
44
|
+
asset = subject.find_asset 'minitest/app_package.js'
|
45
|
+
file_path = home('minitest', 'lib', 'main.js')
|
46
|
+
expected = <<EOF
|
47
|
+
//MINIFIED START
|
48
|
+
UGLY DUCK IS UGLY
|
49
|
+
/* ===========================================================================
|
50
|
+
BPM Static Dependencies
|
51
|
+
MANIFEST: minitest (2.0.0)
|
52
|
+
This file is generated automatically by the bpm (http://www.bpmjs.org)
|
53
|
+
To use this file, load this file in your HTML head.
|
54
|
+
=========================================================================*/
|
55
|
+
|
56
|
+
#{File.read(file_path)}
|
57
|
+
//MINIFIED END
|
58
|
+
EOF
|
59
|
+
asset.to_s.should == expected
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BPM::Pipeline, 'transport processor' do
|
4
|
+
|
5
|
+
before do
|
6
|
+
goto_home
|
7
|
+
set_host
|
8
|
+
reset_libgems bpm_dir.to_s
|
9
|
+
start_fake(FakeGemServer.new)
|
10
|
+
|
11
|
+
FileUtils.cp_r fixtures('transporter'), '.'
|
12
|
+
cd home('transporter')
|
13
|
+
|
14
|
+
bpm 'compile'
|
15
|
+
wait
|
16
|
+
end
|
17
|
+
|
18
|
+
subject do
|
19
|
+
project = BPM::Project.new home('transporter')
|
20
|
+
BPM::Pipeline.new project
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should wrap the project's main.js" do
|
24
|
+
asset = subject.find_asset 'transporter/lib/main.js'
|
25
|
+
exp_path = home('transporter', 'lib', 'main.js')
|
26
|
+
asset.to_s.should == "define_transport(function() {\n//TRANSPORT\ntransporter();\n//TRANSPORT\n\n}), 'transporter', 'main', '#{exp_path}');\n\n"
|
27
|
+
asset.pathname.to_s.should == File.join(Dir.pwd, 'lib', 'main.js')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should not wrap transport/main.js" do
|
31
|
+
asset = subject.find_asset 'transport/lib/main.js'
|
32
|
+
asset.to_s.should == "// TRANSPORT DEMO\n"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-05 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: libgems
|
17
|
-
requirement: &
|
17
|
+
requirement: &2152534360 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 0.0.2
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2152534360
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: gemcutter
|
28
|
-
requirement: &
|
28
|
+
requirement: &2152533760 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 0.6.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2152533760
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: highline
|
39
|
-
requirement: &
|
39
|
+
requirement: &2152533080 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 1.6.1
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2152533080
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: json_pure
|
50
|
-
requirement: &
|
50
|
+
requirement: &2152532460 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 1.4.6
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2152532460
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: thor
|
61
|
-
requirement: &
|
61
|
+
requirement: &2152531400 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: 0.14.3
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2152531400
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: therubyracer
|
72
|
-
requirement: &
|
72
|
+
requirement: &2152530740 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: 0.9.2
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *2152530740
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: hike
|
83
|
-
requirement: &
|
83
|
+
requirement: &2152530180 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ~>
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '1.1'
|
89
89
|
type: :runtime
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *2152530180
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: rack
|
94
|
-
requirement: &
|
94
|
+
requirement: &2152529460 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ~>
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: '1.0'
|
100
100
|
type: :runtime
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *2152529460
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: tilt
|
105
|
-
requirement: &
|
105
|
+
requirement: &2152528620 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
@@ -113,10 +113,10 @@ dependencies:
|
|
113
113
|
version: 1.3.0
|
114
114
|
type: :runtime
|
115
115
|
prerelease: false
|
116
|
-
version_requirements: *
|
116
|
+
version_requirements: *2152528620
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: rspec
|
119
|
-
requirement: &
|
119
|
+
requirement: &2152526860 !ruby/object:Gem::Requirement
|
120
120
|
none: false
|
121
121
|
requirements:
|
122
122
|
- - ! '>='
|
@@ -124,10 +124,10 @@ dependencies:
|
|
124
124
|
version: '0'
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
|
-
version_requirements: *
|
127
|
+
version_requirements: *2152526860
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
129
|
name: rack
|
130
|
-
requirement: &
|
130
|
+
requirement: &2152525900 !ruby/object:Gem::Requirement
|
131
131
|
none: false
|
132
132
|
requirements:
|
133
133
|
- - ~>
|
@@ -135,7 +135,7 @@ dependencies:
|
|
135
135
|
version: 1.2.1
|
136
136
|
type: :development
|
137
137
|
prerelease: false
|
138
|
-
version_requirements: *
|
138
|
+
version_requirements: *2152525900
|
139
139
|
description: Package Manager for JavaScript
|
140
140
|
email:
|
141
141
|
- charles@sproutcore.com
|
@@ -327,6 +327,7 @@ files:
|
|
327
327
|
- lib/bpm/pipeline.rb
|
328
328
|
- lib/bpm/pipeline/directive_processor.rb
|
329
329
|
- lib/bpm/pipeline/generated_asset.rb
|
330
|
+
- lib/bpm/pipeline/plugin_asset.rb
|
330
331
|
- lib/bpm/pipeline/transport_processor.rb
|
331
332
|
- lib/bpm/project.rb
|
332
333
|
- lib/bpm/project_generator.rb
|
@@ -555,6 +556,8 @@ files:
|
|
555
556
|
- spec/gauntlet_spec.rb
|
556
557
|
- spec/package_spec.rb
|
557
558
|
- spec/pipeline_spec.rb
|
559
|
+
- spec/plugins/minifier_spec.rb
|
560
|
+
- spec/plugins/transport_spec.rb
|
558
561
|
- spec/project_spec.rb
|
559
562
|
- spec/spec_helper.rb
|
560
563
|
- spec/support/cli.rb
|
@@ -818,6 +821,8 @@ test_files:
|
|
818
821
|
- spec/gauntlet_spec.rb
|
819
822
|
- spec/package_spec.rb
|
820
823
|
- spec/pipeline_spec.rb
|
824
|
+
- spec/plugins/minifier_spec.rb
|
825
|
+
- spec/plugins/transport_spec.rb
|
821
826
|
- spec/project_spec.rb
|
822
827
|
- spec/spec_helper.rb
|
823
828
|
- spec/support/cli.rb
|