bpm 1.0.0.beta.6 → 1.0.0.beta.8

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 (40) hide show
  1. data/CHANGELOG.md +26 -0
  2. data/TODO.md +0 -3
  3. data/lib/bpm/cli/base.rb +3 -3
  4. data/lib/bpm/default.json +5 -1
  5. data/lib/bpm/errors.rb +8 -0
  6. data/lib/bpm/generator.rb +8 -0
  7. data/lib/bpm/init_generator.rb +1 -1
  8. data/lib/bpm/package.rb +113 -11
  9. data/lib/bpm/pipeline/format_processor.rb +28 -0
  10. data/lib/bpm/pipeline/generated_asset.rb +2 -2
  11. data/lib/bpm/pipeline/package_pipeline.rb +79 -0
  12. data/lib/bpm/pipeline/plugin_asset.rb +7 -8
  13. data/lib/bpm/pipeline/plugin_processor.rb +52 -0
  14. data/lib/bpm/pipeline.rb +89 -26
  15. data/lib/bpm/project.rb +55 -29
  16. data/lib/bpm/version.rb +1 -1
  17. data/lib/bpm.rb +3 -1
  18. data/spec/cli/list_spec.rb +1 -0
  19. data/spec/cli/pack_spec.rb +125 -103
  20. data/spec/fixtures/projects/coffee/coffee.json +17 -0
  21. data/spec/fixtures/projects/coffee/index.html.handlebars +1 -0
  22. data/spec/fixtures/projects/coffee/lib/main.coffee +1 -0
  23. data/spec/fixtures/projects/coffee/packages/coffee-script/compiler.js +4 -0
  24. data/spec/fixtures/projects/coffee/packages/coffee-script/lib/main.js +1 -0
  25. data/spec/fixtures/projects/coffee/packages/coffee-script/package.json +15 -0
  26. data/spec/fixtures/projects/coffee/packages/handlebars/format.js +6 -0
  27. data/spec/fixtures/projects/coffee/packages/handlebars/lib/main.js +2 -0
  28. data/spec/fixtures/projects/coffee/packages/handlebars/package.json +16 -0
  29. data/spec/fixtures/projects/coffee/packages/spade/lib/main.js +1 -0
  30. data/spec/fixtures/projects/coffee/packages/spade/package.json +14 -0
  31. data/spec/fixtures/projects/coffee/packages/spade/transport.js +3 -0
  32. data/spec/fixtures/projects/coffee/templates/section.handlebars +1 -0
  33. data/spec/fixtures/projects/minitrans/packages/transport/package.json +5 -1
  34. data/spec/fixtures/projects/transporter/packages/transport/package.json +5 -1
  35. data/spec/package_pipeline_spec.rb +30 -0
  36. data/spec/package_spec.rb +328 -316
  37. data/spec/plugins/format_spec.rb +38 -0
  38. data/spec/plugins/transport_spec.rb +1 -1
  39. data/spec/support/matchers.rb +1 -2
  40. metadata +57 -24
data/lib/bpm/project.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'set'
2
3
  require 'bpm/version'
3
4
 
4
5
  module BPM
@@ -49,7 +50,7 @@ module BPM
49
50
  end
50
51
 
51
52
  @name = name || File.basename(root_path)
52
- @json_path = project_file
53
+ @json_path = project_file || File.join(root_path, "#{File.basename(root_path)}.json")
53
54
 
54
55
  load_json && validate
55
56
  end
@@ -88,8 +89,12 @@ module BPM
88
89
  File.join([@root_path, BPM_DIR, 'packages', package_name].compact)
89
90
  end
90
91
 
92
+ def assets_path
93
+ 'assets'
94
+ end
95
+
91
96
  def assets_root(*paths)
92
- File.join @root_path, 'assets', *paths
97
+ File.join @root_path, assets_path, *paths
93
98
  end
94
99
 
95
100
  def preview_root(*paths)
@@ -174,7 +179,7 @@ module BPM
174
179
  all_hard_deps = all_dependencies.merge(new_deps)
175
180
  exp_deps = find_non_local_dependencies(all_hard_deps, true)
176
181
 
177
- puts "Fetching packages from remote..." if verbose
182
+ say "Fetching packages from remote..." if verbose
178
183
  core_fetch_dependencies(exp_deps, verbose)
179
184
 
180
185
  if development
@@ -187,7 +192,7 @@ module BPM
187
192
 
188
193
  local_deps.each do |dep|
189
194
  next if old_deps.find { |pkg| (pkg.name == dep.name) && (pkg.version == dep.version) }
190
- puts "Added #{development ? "development " : ""}package '#{dep.name}' (#{dep.version})"
195
+ say "Added #{development ? "development " : ""}package '#{dep.name}' (#{dep.version})"
191
196
  end
192
197
 
193
198
  save!
@@ -213,7 +218,7 @@ module BPM
213
218
 
214
219
  old_deps.each do |dep|
215
220
  next if local_deps.find { |pkg| (pkg.name == dep.name) && (pkg.version == dep.version) }
216
- puts "Removed package '#{dep.name}' (#{dep.version})"
221
+ say "Removed package '#{dep.name}' (#{dep.version})"
217
222
  end
218
223
 
219
224
  save!
@@ -234,7 +239,7 @@ module BPM
234
239
  # Get dependencies from server if not installed
235
240
 
236
241
  def fetch_dependencies(verbose=false)
237
- puts "Fetching packages from remote..." if verbose
242
+ say "Fetching packages from remote..." if verbose
238
243
  exp_deps = find_non_local_dependencies(all_dependencies, true)
239
244
  core_fetch_dependencies(exp_deps, verbose)
240
245
  end
@@ -246,7 +251,7 @@ module BPM
246
251
 
247
252
  verify_and_repair mode, verbose
248
253
 
249
- puts "Building static assets..." if verbose
254
+ say "Building static assets..." if verbose
250
255
 
251
256
  report_package_locations if verbose
252
257
 
@@ -264,7 +269,7 @@ module BPM
264
269
  FileUtils.mkdir_p File.dirname(dst_path)
265
270
 
266
271
  if asset.kind_of? Sprockets::StaticAsset
267
- puts "~ Copying #{asset.logical_path}" if verbose
272
+ say "~ Copying #{asset.logical_path}" if verbose
268
273
  FileUtils.rm dst_path if File.exists? dst_path
269
274
  FileUtils.cp asset.pathname, dst_path
270
275
  else
@@ -278,7 +283,7 @@ module BPM
278
283
  end
279
284
  end
280
285
 
281
- puts "\n" if verbose
286
+ say "\n" if verbose
282
287
  end
283
288
 
284
289
 
@@ -286,7 +291,7 @@ module BPM
286
291
  # package is removed from the project to cleanup any assets
287
292
 
288
293
  def unbuild(verbose=false)
289
- puts "Removing stale assets..." if verbose
294
+ say "Removing stale assets..." if verbose
290
295
 
291
296
  pipeline = BPM::Pipeline.new self
292
297
  asset_root = File.join root_path, 'assets'
@@ -294,7 +299,7 @@ module BPM
294
299
  next if asset.logical_path =~ /^bpm_/
295
300
  asset_path = File.join asset_root, asset.logical_path
296
301
  next unless File.exists? asset_path
297
- puts "~ Removing #{asset.logical_path}" if verbose
302
+ say "~ Removing #{asset.logical_path}" if verbose
298
303
  FileUtils.rm asset_path
299
304
 
300
305
  # cleanup empty directories
@@ -302,12 +307,12 @@ module BPM
302
307
  asset_path = File.dirname asset_path
303
308
  FileUtils.rmdir(asset_path) if File.directory?(asset_path)
304
309
  if verbose && !File.exists?(asset_path)
305
- puts "~ Removed empty directory #{File.basename asset_path}"
310
+ say "~ Removed empty directory #{File.basename asset_path}"
306
311
  end
307
312
  end
308
313
  end
309
314
 
310
- puts "\n" if verbose
315
+ say "\n" if verbose
311
316
  end
312
317
 
313
318
 
@@ -400,6 +405,12 @@ module BPM
400
405
  @local_deps ||= build_local_dependency_list
401
406
  end
402
407
 
408
+ def map_to_packages(deps)
409
+ Array(deps).map do |dep_name, vers|
410
+ local_deps.find { |x| x.name==dep_name }
411
+ end
412
+ end
413
+
403
414
  # List of local dependency names in order of dependency
404
415
 
405
416
  def sorted_deps
@@ -477,12 +488,23 @@ module BPM
477
488
 
478
489
  def load_json
479
490
  return super if has_json?
480
- FIELDS.keys.each{|f| send("#{c2u(f)}=", DEFAULT_CONFIG[f]) }
491
+ (FIELDS.keys + %w(description summary homepage)).each do |f|
492
+ send("#{c2u(f)}=", DEFAULT_CONFIG[f])
493
+ end
494
+
481
495
  self.name = File.basename(@json_path, '.json')
482
496
  self.version = "0.0.1"
483
497
  true
484
498
  end
485
499
 
500
+ # Tell if package is vendored
501
+
502
+ def has_local_package?(package_name)
503
+ !!locate_local_package(package_name)
504
+ end
505
+
506
+
507
+
486
508
 
487
509
  private
488
510
 
@@ -570,7 +592,7 @@ module BPM
570
592
  end
571
593
 
572
594
  installed.each do |i|
573
- puts "~ Fetched #{i.name} (#{i.version}) from remote" if verbose
595
+ say "~ Fetched #{i.name} (#{i.version}) from remote" if verbose
574
596
  end
575
597
 
576
598
  end
@@ -595,13 +617,6 @@ module BPM
595
617
  end
596
618
  end
597
619
 
598
- # Tell if package is vendored
599
-
600
- def has_local_package?(package_name)
601
- !!locate_local_package(package_name)
602
- end
603
-
604
-
605
620
  # Tell if given version is satisfied by the passed version
606
621
 
607
622
  def satisfied_by?(req_vers, new_vers)
@@ -612,7 +627,7 @@ module BPM
612
627
 
613
628
 
614
629
  # Get list of dependencies, searching only the project and fetched
615
- # packages. Does not query remote server. Raises if not found or
630
+ # packages. Raises if not found or
616
631
  # conflicting.
617
632
  def find_dependencies(deps=nil, verbose=false)
618
633
 
@@ -621,7 +636,11 @@ module BPM
621
636
  search_list = Array(deps)
622
637
  found = []
623
638
  ret = []
624
-
639
+
640
+ # if we discover a new local package via indirect dependencies then
641
+ # it's dependencies will be fetchable one time.
642
+ fetchable = Set.new
643
+
625
644
  until search_list.empty?
626
645
  name, version = search_list.shift
627
646
 
@@ -632,17 +651,24 @@ module BPM
632
651
  end
633
652
 
634
653
  pkg = locate_package(name, version, verbose)
654
+ if pkg.nil? && fetchable.include?(name)
655
+ fetchable.reject! { |x| x == name }
656
+ core_fetch_dependency(name, version, :runtime, true)
657
+ pkg = locate_package name, version, verbose
658
+ end
659
+
635
660
  raise PackageNotFoundError.new(name, version) unless pkg
636
661
 
637
662
  found << pkg
638
663
 
639
664
  # Look up dependencies of dependencies
640
- search_list += Array(pkg.dependencies)
641
- search_list += Array(pkg.dependencies_build)
642
-
665
+ new_deps = Array(pkg.dependencies) + Array(pkg.dependencies_build)
643
666
  if has_local_package? pkg.name
644
- search_list += Array(pkg.dependencies_development)
667
+ new_deps += Array(pkg.dependencies_development)
668
+ new_deps.each { |dep| fetchable.add dep.first }
645
669
  end
670
+
671
+ search_list += new_deps
646
672
 
647
673
  ret << pkg
648
674
  end
@@ -685,7 +711,7 @@ module BPM
685
711
  deps ||= local_deps
686
712
  deps.each do |dep|
687
713
  is_local = has_local_package?(dep.name) ? 'local' : 'fetched'
688
- puts "~ Using #{is_local} package '#{dep.name}' (#{dep.version})"
714
+ say "~ Using #{is_local} package '#{dep.name}' (#{dep.version})"
689
715
  end
690
716
  end
691
717
 
data/lib/bpm/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module BPM
2
- VERSION = "1.0.0.beta.6"
2
+ VERSION = "1.0.0.beta.8"
3
3
  COMPAT_VERSION = '1.0.0'
4
4
  end
data/lib/bpm.rb CHANGED
@@ -16,10 +16,12 @@ module BPM
16
16
  autoload :Pipeline, 'bpm/pipeline'
17
17
  autoload :DirectiveProcessor, 'bpm/pipeline/directive_processor'
18
18
  autoload :GeneratedAsset, 'bpm/pipeline/generated_asset'
19
- autoload :TransportProcessor, 'bpm/pipeline/transport_processor'
20
19
  autoload :SourceURLProcessor, 'bpm/pipeline/source_url_processor'
21
20
  autoload :PluginAsset, 'bpm/pipeline/plugin_asset'
22
21
  autoload :PluginContext, 'bpm/pipeline/plugin_context'
22
+ autoload :PackagePipeline, 'bpm/pipeline/package_pipeline'
23
+ autoload :FormatProcessor, 'bpm/pipeline/format_processor'
24
+ autoload :PluginProcessor, 'bpm/pipeline/plugin_processor'
23
25
  end
24
26
 
25
27
  # The BPM constants need to be defined first
@@ -11,6 +11,7 @@ describe "bpm list" do
11
11
  before do
12
12
  FileUtils.cp_r project_fixture('hello_world'), home
13
13
  cd home('hello_world')
14
+ bpm 'fetch' and wait # make sure rebuild step doesn't run
14
15
  end
15
16
 
16
17
  it "lists non-development dependencies by default" do
@@ -1,118 +1,140 @@
1
1
  require "spec_helper"
2
2
  require "libgems/format"
3
3
 
4
- describe "bpm pack when logged in" do
5
- let(:email) { "who@example.com" }
6
-
7
- before do
8
- goto_home
9
- write_creds(email, "deadbeef")
10
- end
11
-
12
- it "builds a bpm from a given package.json" do
13
- FileUtils.cp_r package_fixture("core-test"), "."
14
- cd "core-test"
15
- bpm "pack"
16
-
17
- exit_status.should be_success
18
- output = stdout.read
19
- output.should include("Successfully built package: core-test-0.4.9.bpkg")
20
-
21
- package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
22
- package.spec.name.should == "core-test"
23
- package.spec.version.should == LibGems::Version.new("0.4.9")
24
- package.spec.email.should == email
25
- end
26
- end
27
-
28
- describe "bpm pack without logging in" do
29
- before do
30
- goto_home
31
- end
32
-
33
- it "pack a bpm from a given package.json" do
34
- FileUtils.cp_r package_fixture("core-test"), "."
35
- cd "core-test"
36
- bpm "pack", "-e", "joe@example.com"
37
-
38
- exit_status.should be_success
4
+ describe "bpm pack" do
5
+
6
+ describe "when logged in" do
7
+ let(:email) { "who@example.com" }
8
+
9
+ before do
10
+ goto_home
11
+ write_creds(email, "deadbeef")
12
+ end
13
+
14
+ it "builds a bpm from a given package.json" do
15
+ FileUtils.cp_r package_fixture("core-test"), "."
16
+ cd "core-test"
17
+ bpm "pack"
39
18
 
40
- package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
41
- package.spec.name.should == "core-test"
42
- package.spec.version.should == LibGems::Version.new("0.4.9")
19
+ exit_status.should be_success
20
+ output = stdout.read
21
+ output.should include("Successfully built package: core-test-0.4.9.bpkg")
22
+
23
+ package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
24
+ package.spec.name.should == "core-test"
25
+ package.spec.version.should == LibGems::Version.new("0.4.9")
26
+ package.spec.email.should == email
27
+ end
43
28
  end
44
-
45
- it "builds a bpm when given a path to a package" do
46
- FileUtils.cp_r package_fixture("core-test"), "."
47
- bpm "pack", "core-test", "-e", "joe@example.com"
48
-
49
- exit_status.should be_success
29
+
30
+ describe "without logging in" do
31
+ before do
32
+ goto_home
33
+ end
34
+
35
+ it "pack a bpm from a given package.json" do
36
+ FileUtils.cp_r package_fixture("core-test"), "."
37
+ cd "core-test"
38
+ bpm "pack", "-e", "joe@example.com"
39
+
40
+ exit_status.should be_success
41
+
42
+ package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
43
+ package.spec.name.should == "core-test"
44
+ package.spec.version.should == LibGems::Version.new("0.4.9")
45
+ end
46
+
47
+ it "builds a bpm when given a path to a package" do
48
+ FileUtils.cp_r package_fixture("core-test"), "."
49
+ bpm "pack", "core-test", "-e", "joe@example.com"
50
+
51
+ exit_status.should be_success
50
52
 
51
- cd 'core-test'
52
- package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
53
- package.spec.name.should == "core-test"
54
- package.spec.version.should == LibGems::Version.new("0.4.9")
55
- end
56
-
57
- it "sets the email address if one is given" do
58
- FileUtils.cp_r package_fixture("core-test"), "."
59
- cd "core-test"
60
- bpm "pack", "-e", "lucy@allen.com"
61
-
62
- exit_status.should be_success
63
- output = stdout.read
64
-
65
- package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
66
- package.spec.name.should == "core-test"
67
- package.spec.version.should == LibGems::Version.new("0.4.9")
68
- package.spec.email.should == "lucy@allen.com"
69
- end
70
- end
71
-
72
- describe "bpm pack with an invalid package.json" do
73
- before do
74
- goto_home
75
- write_api_key("deadbeef")
76
- end
77
-
78
- it "reports error messages" do
79
- FileUtils.touch "package.json"
80
- bpm "pack", :track_stderr => true
81
-
82
- exit_status.should_not be_success
83
- output = stderr.read
84
- output.should include("There was a problem parsing package.json")
85
- end
86
- end
87
-
88
- describe "bpm pack npm-compatible package" do
89
- before do
90
- FileUtils.cp_r package_fixture("backbone"), "."
91
- cd "backbone"
92
- bpm "pack", :track_stderr => true and wait
93
- end
94
-
95
- it "successfully packs" do
96
- exit_status.should be_success
97
- end
98
-
99
- it "implies the summary field" do
100
- package = LibGems::Format.from_file_by_path("backbone-0.5.1.bpkg")
101
- package.spec.summary.should == package.spec.description
53
+ cd 'core-test'
54
+ package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
55
+ package.spec.name.should == "core-test"
56
+ package.spec.version.should == LibGems::Version.new("0.4.9")
57
+ end
58
+
59
+ it "sets the email address if one is given" do
60
+ FileUtils.cp_r package_fixture("core-test"), "."
61
+ cd "core-test"
62
+ bpm "pack", "-e", "lucy@allen.com"
63
+
64
+ exit_status.should be_success
65
+ output = stdout.read
66
+
67
+ package = LibGems::Format.from_file_by_path("core-test-0.4.9.bpkg")
68
+ package.spec.name.should == "core-test"
69
+ package.spec.version.should == LibGems::Version.new("0.4.9")
70
+ package.spec.email.should == "lucy@allen.com"
71
+ end
102
72
  end
103
73
 
104
- it "gets name and version" do
105
- package = LibGems::Format.from_file_by_path("backbone-0.5.1.bpkg")
106
- package.spec.name.should == "backbone"
107
- package.spec.version.should == LibGems::Version.new("0.5.1")
74
+ describe "with an invalid package.json" do
75
+ before do
76
+ goto_home
77
+ write_api_key("deadbeef")
78
+ end
79
+
80
+ it "reports error messages" do
81
+ FileUtils.touch "package.json"
82
+ bpm "pack", :track_stderr => true
83
+
84
+ exit_status.should_not be_success
85
+ output = stderr.read
86
+ output.should include("There was a problem parsing package.json")
87
+ end
108
88
  end
109
-
110
- it "gets the homepage" do
111
- package = LibGems::Format.from_file_by_path("backbone-0.5.1.bpkg")
112
- package.spec.homepage.should == 'http://documentcloud.github.com/backbone/'
89
+
90
+ describe "npm-compatible package" do
91
+ before do
92
+ goto_home
93
+ FileUtils.cp_r package_fixture("backbone"), "."
94
+ cd home("backbone")
95
+ bpm "pack", :track_stderr => true and wait
96
+ end
97
+
98
+ it "successfully packs" do
99
+ exit_status.should be_success
100
+ end
101
+
102
+ it "implies the summary field" do
103
+ package = LibGems::Format.from_file_by_path("backbone-0.5.1.bpkg")
104
+ package.spec.summary.should == package.spec.description
105
+ end
106
+
107
+ it "gets name and version" do
108
+ package = LibGems::Format.from_file_by_path("backbone-0.5.1.bpkg")
109
+ package.spec.name.should == "backbone"
110
+ package.spec.version.should == LibGems::Version.new("0.5.1")
111
+ end
112
+
113
+ it "gets the homepage" do
114
+ package = LibGems::Format.from_file_by_path("backbone-0.5.1.bpkg")
115
+ package.spec.homepage.should == 'http://documentcloud.github.com/backbone/'
116
+ end
117
+
113
118
  end
114
119
 
120
+ describe "package with plugins" do
121
+ before do
122
+ goto_home
123
+ FileUtils.cp_r project_fixture('coffee', 'packages'), '.'
124
+ end
115
125
 
126
+ it "should pack transports" do
127
+ cd home('packages', 'spade')
128
+ bpm "pack" and wait
129
+ puts stdout.read
130
+ exit_status.should be_success
131
+
132
+ package = LibGems::Format.from_file_by_path 'spade-1.0.0.bpkg'
133
+ package.spec.files.should include('lib/main.js')
134
+ package.spec.files.should include('transport.js')
135
+ end
136
+ end
137
+
116
138
  end
117
139
 
118
140
 
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "coffee",
3
+ "bpm": "1.0.0",
4
+
5
+ "dependencies": {
6
+ "spade": "~> 1.0.0",
7
+ "coffee-script": "~> 1.0.0",
8
+ "handlebars": "~> 1.0.0"
9
+ },
10
+
11
+ "bpm:build": {
12
+ "bpm_libs.js": {
13
+ "directories": ["lib", "templates"]
14
+ }
15
+ }
16
+ }
17
+
@@ -0,0 +1 @@
1
+ {{INDEX}}
@@ -0,0 +1 @@
1
+ //coffee/lib/main
@@ -0,0 +1,4 @@
1
+
2
+ exports.compileFormat = function(body, context, filename) {
3
+ return "COFFEE("+body+")";
4
+ };
@@ -0,0 +1 @@
1
+ //coffee-script/lib/main
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "coffee-script",
3
+ "version": "1.0.0",
4
+ "description": "DESC",
5
+ "summary": "SUMMARY",
6
+ "author": "AUTHOR",
7
+ "homepage": "HOMEPAGE",
8
+
9
+ "bpm:provides": {
10
+ "format:coffee": {
11
+ "mime:default": "application/javascript",
12
+ "main": "coffee-script/compiler"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,6 @@
1
+
2
+ exports.compileFormat = function(body, context, filename) {
3
+ var runtime = typeof RUNTIME === undefined ? '(NO runtime)' : RUNTIME;
4
+ return "HANDLEBARS("+body+" "+runtime+")";
5
+ };
6
+
@@ -0,0 +1,2 @@
1
+ //handlebars/lib/main
2
+ RUNTIME = "RUNTIME";
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "handlebars",
3
+ "version": "1.0.0",
4
+ "description": "DESC",
5
+ "summary": "SUMMARY",
6
+ "author": "AUTHOR",
7
+ "homepage": "HOMEPAGE",
8
+
9
+ "bpm:provides": {
10
+ "format:handlebars": {
11
+ "mime:default": "application/javascript",
12
+ "main": "handlebars/format"
13
+ }
14
+ }
15
+
16
+ }
@@ -0,0 +1 @@
1
+ //spade/lib/main
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "spade",
3
+ "version": "1.0.0",
4
+ "description": "DESC",
5
+ "summary": "SUMMARY",
6
+ "author": "AUTHOR",
7
+ "homepage": "http://example.com",
8
+
9
+ "bpm:provides": {
10
+ "transport": {
11
+ "main": "spade/transport"
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,3 @@
1
+ exports.compileTransport = function(body, context, filename) {
2
+ return "spade("+body+")";
3
+ };
@@ -0,0 +1 @@
1
+ //coffee/templates/section
@@ -16,6 +16,10 @@
16
16
 
17
17
  },
18
18
 
19
- "bpm:transport": "transport/transports/wrapper"
19
+ "bpm:provides": {
20
+ "transport": {
21
+ "main": "transport/transports/wrapper"
22
+ }
23
+ }
20
24
 
21
25
  }
@@ -16,6 +16,10 @@
16
16
 
17
17
  },
18
18
 
19
- "bpm:transport": "transport/transports/wrapper"
19
+ "bpm:provides": {
20
+ "transport": {
21
+ "main": "transport/transports/wrapper"
22
+ }
23
+ }
20
24
 
21
25
  }
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe BPM::PackagePipeline do
4
+
5
+ before do
6
+ goto_home
7
+ set_host
8
+ start_fake(FakeGemServer.new)
9
+ FileUtils.cp_r(project_fixture('coffee'), '.')
10
+ cd home('coffee')
11
+ end
12
+
13
+ subject do
14
+ project = BPM::Project.new home('coffee')
15
+ BPM::Pipeline.new project
16
+ end
17
+
18
+ it "should get package pipelines for each package" do
19
+ names = subject.package_pipelines.map { |pipeline| pipeline.package.name }
20
+ names.sort.should == %w(coffee coffee-script handlebars spade)
21
+ end
22
+
23
+ it "should get an asset for the coffee file" do
24
+ asset = subject.find_asset 'coffee/lib/main.js'
25
+ asset.should_not be_nil
26
+ asset.pathname.should == home('coffee', 'lib', 'main.coffee')
27
+ end
28
+
29
+ end
30
+