bpm 1.0.0.beta.4 → 1.0.0.beta.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +11 -0
- data/TODO.md +4 -10
- data/backbone/LICENSE +22 -0
- data/backbone/README +25 -0
- data/backbone/Rakefile +42 -0
- data/backbone/backbone-0.5.1.bpkg +0 -0
- data/backbone/examples/backbone-localstorage.js +84 -0
- data/backbone/examples/todos/destroy.png +0 -0
- data/backbone/examples/todos/index.html +87 -0
- data/backbone/examples/todos/todos.css +311 -0
- data/backbone/examples/todos/todos.js +258 -0
- data/backbone/index.html +2606 -0
- data/backbone/index.js +1 -0
- data/backbone/lib/backbone.js +1149 -0
- data/backbone/lib/index.js +1 -0
- data/backbone/package.json +14 -0
- data/backbone/test/collection.js +345 -0
- data/backbone/test/events.js +70 -0
- data/backbone/test/model.coffee +43 -0
- data/backbone/test/model.js +424 -0
- data/backbone/test/noconflict.js +12 -0
- data/backbone/test/router.js +116 -0
- data/backbone/test/speed.js +45 -0
- data/backbone/test/sync.js +133 -0
- data/backbone/test/test-zepto.html +30 -0
- data/backbone/test/test.html +31 -0
- data/backbone/test/vendor/jquery-1.5.js +8176 -0
- data/backbone/test/vendor/jslitmus.js +649 -0
- data/backbone/test/vendor/json2.js +481 -0
- data/backbone/test/vendor/qunit.css +196 -0
- data/backbone/test/vendor/qunit.js +1364 -0
- data/backbone/test/vendor/underscore-1.1.6.js +807 -0
- data/backbone/test/vendor/zepto-0.6.js +692 -0
- data/backbone/test/view.js +137 -0
- data/lib/bpm/cli/base.rb +22 -7
- data/lib/bpm/package.rb +17 -5
- data/lib/bpm/project.rb +49 -32
- data/lib/bpm/version.rb +1 -1
- data/spec/cli/add_spec.rb +22 -4
- data/spec/cli/fetch_spec.rb +0 -1
- data/spec/cli/init_spec.rb +25 -10
- data/spec/cli/list_spec.rb +103 -62
- data/spec/cli/pack_spec.rb +36 -4
- data/spec/fixtures/packages/backbone/LICENSE +22 -0
- data/spec/fixtures/packages/backbone/README +25 -0
- data/spec/fixtures/packages/backbone/Rakefile +42 -0
- data/spec/fixtures/packages/backbone/examples/backbone-localstorage.js +84 -0
- data/spec/fixtures/packages/backbone/examples/todos/destroy.png +0 -0
- data/spec/fixtures/packages/backbone/examples/todos/index.html +87 -0
- data/spec/fixtures/packages/backbone/examples/todos/todos.css +311 -0
- data/spec/fixtures/packages/backbone/examples/todos/todos.js +258 -0
- data/spec/fixtures/packages/backbone/index.html +2606 -0
- data/spec/fixtures/packages/backbone/lib/backbone.js +1149 -0
- data/spec/fixtures/packages/backbone/lib/index.js +1 -0
- data/spec/fixtures/packages/backbone/package.json +14 -0
- data/spec/fixtures/packages/backbone/test/collection.js +345 -0
- data/spec/fixtures/packages/backbone/test/events.js +70 -0
- data/spec/fixtures/packages/backbone/test/model.coffee +43 -0
- data/spec/fixtures/packages/backbone/test/model.js +424 -0
- data/spec/fixtures/packages/backbone/test/noconflict.js +12 -0
- data/spec/fixtures/packages/backbone/test/router.js +116 -0
- data/spec/fixtures/packages/backbone/test/speed.js +45 -0
- data/spec/fixtures/packages/backbone/test/sync.js +133 -0
- data/spec/fixtures/packages/backbone/test/test-zepto.html +30 -0
- data/spec/fixtures/packages/backbone/test/test.html +31 -0
- data/spec/fixtures/packages/backbone/test/vendor/jquery-1.5.js +8176 -0
- data/spec/fixtures/packages/backbone/test/vendor/jslitmus.js +649 -0
- data/spec/fixtures/packages/backbone/test/vendor/json2.js +481 -0
- data/spec/fixtures/packages/backbone/test/vendor/qunit.css +196 -0
- data/spec/fixtures/packages/backbone/test/vendor/qunit.js +1364 -0
- data/spec/fixtures/packages/backbone/test/vendor/underscore-1.1.6.js +807 -0
- data/spec/fixtures/packages/backbone/test/vendor/zepto-0.6.js +692 -0
- data/spec/fixtures/packages/backbone/test/view.js +137 -0
- data/spec/fixtures/projects/init_app/assets/bpm_libs.js +1 -1
- data/spec/fixtures/projects/init_app/assets/bpm_styles.css +1 -1
- data/spec/fixtures/projects/init_app/new_project.json +1 -10
- data/spec/pipeline_spec.rb +5 -5
- data/spec/plugins/minifier_spec.rb +1 -1
- data/spec/plugins/transport_spec.rb +1 -1
- metadata +116 -28
- data/spec/fixtures/projects/init_app/assets/new_project/bpm_libs.js +0 -6
- data/spec/fixtures/projects/init_app/assets/new_project/bpm_styles.css +0 -5
@@ -0,0 +1,137 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
|
3
|
+
module("Backbone.View");
|
4
|
+
|
5
|
+
var view = new Backbone.View({
|
6
|
+
id : 'test-view',
|
7
|
+
className : 'test-view'
|
8
|
+
});
|
9
|
+
|
10
|
+
test("View: constructor", function() {
|
11
|
+
equals(view.el.id, 'test-view');
|
12
|
+
equals(view.el.className, 'test-view');
|
13
|
+
equals(view.options.id, 'test-view');
|
14
|
+
equals(view.options.className, 'test-view');
|
15
|
+
});
|
16
|
+
|
17
|
+
test("View: jQuery", function() {
|
18
|
+
view.el = document.body;
|
19
|
+
ok(view.$('#qunit-header a').get(0).innerHTML.match(/Backbone Test Suite/));
|
20
|
+
ok(view.$('#qunit-header a').get(1).innerHTML.match(/Backbone Speed Suite/));
|
21
|
+
});
|
22
|
+
|
23
|
+
test("View: make", function() {
|
24
|
+
var div = view.make('div', {id: 'test-div'}, "one two three");
|
25
|
+
equals(div.tagName.toLowerCase(), 'div');
|
26
|
+
equals(div.id, 'test-div');
|
27
|
+
equals($(div).text(), 'one two three');
|
28
|
+
});
|
29
|
+
|
30
|
+
test("View: initialize", function() {
|
31
|
+
var View = Backbone.View.extend({
|
32
|
+
initialize: function() {
|
33
|
+
this.one = 1;
|
34
|
+
}
|
35
|
+
});
|
36
|
+
var view = new View;
|
37
|
+
equals(view.one, 1);
|
38
|
+
});
|
39
|
+
|
40
|
+
test("View: delegateEvents", function() {
|
41
|
+
var counter = counter2 = 0;
|
42
|
+
view.el = document.body;
|
43
|
+
view.increment = function(){ counter++; };
|
44
|
+
$(view.el).bind('click', function(){ counter2++; });
|
45
|
+
var events = {"click #qunit-banner": "increment"};
|
46
|
+
view.delegateEvents(events);
|
47
|
+
$('#qunit-banner').trigger('click');
|
48
|
+
equals(counter, 1);
|
49
|
+
equals(counter2, 1);
|
50
|
+
$('#qunit-banner').trigger('click');
|
51
|
+
equals(counter, 2);
|
52
|
+
equals(counter2, 2);
|
53
|
+
view.delegateEvents(events);
|
54
|
+
$('#qunit-banner').trigger('click');
|
55
|
+
equals(counter, 3);
|
56
|
+
equals(counter2, 3);
|
57
|
+
});
|
58
|
+
|
59
|
+
test("View: _ensureElement with DOM node el", function() {
|
60
|
+
var ViewClass = Backbone.View.extend({
|
61
|
+
el: document.body
|
62
|
+
});
|
63
|
+
var view = new ViewClass;
|
64
|
+
equals(view.el, document.body);
|
65
|
+
});
|
66
|
+
|
67
|
+
test("View: _ensureElement with string el", function() {
|
68
|
+
var ViewClass = Backbone.View.extend({
|
69
|
+
el: "body"
|
70
|
+
});
|
71
|
+
var view = new ViewClass;
|
72
|
+
equals(view.el, document.body);
|
73
|
+
|
74
|
+
ViewClass = Backbone.View.extend({
|
75
|
+
el: "body > h2"
|
76
|
+
});
|
77
|
+
view = new ViewClass;
|
78
|
+
equals(view.el, $("#qunit-banner").get(0));
|
79
|
+
|
80
|
+
ViewClass = Backbone.View.extend({
|
81
|
+
el: "#nonexistent"
|
82
|
+
});
|
83
|
+
view = new ViewClass;
|
84
|
+
ok(!view.el);
|
85
|
+
});
|
86
|
+
|
87
|
+
test("View: with attributes", function() {
|
88
|
+
var view = new Backbone.View({attributes : {'class': 'one', id: 'two'}});
|
89
|
+
equals(view.el.className, 'one');
|
90
|
+
equals(view.el.id, 'two');
|
91
|
+
});
|
92
|
+
|
93
|
+
test("View: multiple views per element", function() {
|
94
|
+
var count = 0, ViewClass = Backbone.View.extend({
|
95
|
+
el: $("body"),
|
96
|
+
events: {
|
97
|
+
"click": "click"
|
98
|
+
},
|
99
|
+
click: function() {
|
100
|
+
count++;
|
101
|
+
}
|
102
|
+
});
|
103
|
+
|
104
|
+
var view1 = new ViewClass;
|
105
|
+
$("body").trigger("click");
|
106
|
+
equals(1, count);
|
107
|
+
|
108
|
+
var view2 = new ViewClass;
|
109
|
+
$("body").trigger("click");
|
110
|
+
equals(3, count);
|
111
|
+
|
112
|
+
view1.delegateEvents();
|
113
|
+
$("body").trigger("click");
|
114
|
+
equals(5, count);
|
115
|
+
});
|
116
|
+
|
117
|
+
test("View: custom events, with namespaces", function() {
|
118
|
+
var count = 0;
|
119
|
+
var ViewClass = Backbone.View.extend({
|
120
|
+
el: $('body'),
|
121
|
+
events: {
|
122
|
+
"fake$event.namespaced": "run"
|
123
|
+
},
|
124
|
+
run: function() {
|
125
|
+
count++;
|
126
|
+
}
|
127
|
+
});
|
128
|
+
|
129
|
+
var view = new ViewClass;
|
130
|
+
$('body').trigger('fake$event').trigger('fake$event');
|
131
|
+
equals(count, 2);
|
132
|
+
$('body').unbind('.namespaced');
|
133
|
+
$('body').trigger('fake$event');
|
134
|
+
equals(count, 2);
|
135
|
+
});
|
136
|
+
|
137
|
+
});
|
data/lib/bpm/cli/base.rb
CHANGED
@@ -207,12 +207,27 @@ module BPM
|
|
207
207
|
end
|
208
208
|
|
209
209
|
desc "list", "View available packages for download"
|
210
|
-
method_option :
|
211
|
-
method_option :
|
210
|
+
method_option :remote, :type => :boolean, :default => false, :aliases => ['-r'], :desc => 'List packages on remote server'
|
211
|
+
method_option :all, :type => :boolean, :default => false, :aliases => ['-a'], :desc => 'List all versions available (remote only)'
|
212
|
+
method_option :prerelease, :type => :boolean, :default => false, :aliases => ['--pre'], :desc => 'List prerelease versions available (remote only)'
|
213
|
+
method_option :development, :type => :boolean, :default => false,
|
214
|
+
:aliases => ['--dev'], :desc => 'List development dependencies instead of runtime (local only)'
|
212
215
|
def list(*packages)
|
213
|
-
remote
|
214
|
-
|
215
|
-
|
216
|
+
if options[:remote]
|
217
|
+
remote = BPM::Remote.new
|
218
|
+
index = remote.list_packages(packages, options[:all], options[:prerelease])
|
219
|
+
print_specs(packages, index)
|
220
|
+
else
|
221
|
+
packages = nil if packages.size == 0
|
222
|
+
project = find_project
|
223
|
+
project.verify_and_repair
|
224
|
+
|
225
|
+
deps = options[:development] ? project.sorted_development_deps : project.sorted_runtime_deps
|
226
|
+
deps.each do |dep|
|
227
|
+
next if packages && !packages.include?(dep.name)
|
228
|
+
say "#{dep.name} (#{dep.version})"
|
229
|
+
end
|
230
|
+
end
|
216
231
|
end
|
217
232
|
|
218
233
|
desc "init [PATHS]", "Configure a project to use bpm for management"
|
@@ -325,7 +340,7 @@ module BPM
|
|
325
340
|
end
|
326
341
|
|
327
342
|
# make sure the project app status matches
|
328
|
-
project = BPM::Project.new
|
343
|
+
project = BPM::Project.new path
|
329
344
|
|
330
345
|
if project.build_app? != !!include_app
|
331
346
|
project.build_app = include_app
|
@@ -349,7 +364,7 @@ module BPM
|
|
349
364
|
def find_project
|
350
365
|
if options[:project]
|
351
366
|
project_path = File.expand_path options[:project]
|
352
|
-
if BPM::Project.is_project_root?
|
367
|
+
if !BPM::Project.is_project_root?(project_path)
|
353
368
|
abort "#{project_path} does not appear to be managed by bpm"
|
354
369
|
else
|
355
370
|
project = BPM::Project.new project_path
|
data/lib/bpm/package.rb
CHANGED
@@ -19,6 +19,7 @@ module BPM
|
|
19
19
|
"author" => :string,
|
20
20
|
"homepage" => :string,
|
21
21
|
"summary" => :string,
|
22
|
+
"url" => :string,
|
22
23
|
"dependencies" => :hash,
|
23
24
|
"dependencies:development" => :hash,
|
24
25
|
"bpm:build" => :hash,
|
@@ -31,12 +32,12 @@ module BPM
|
|
31
32
|
PLUGIN_FIELDS = %w[bpm:formats bpm:minifier bpm:transport bpm:use:transport]
|
32
33
|
|
33
34
|
# Fields that can be loaded straight into the gemspec
|
34
|
-
SPEC_FIELDS = %w[name email
|
35
|
+
SPEC_FIELDS = %w[name email]
|
35
36
|
|
36
37
|
# Fields that should be bundled up into JSON in the gemspec
|
37
38
|
METADATA_FIELDS = %w[keywords licenses engines main bin directories pipeline bpm:build bpm:formats bpm:transport]
|
38
39
|
|
39
|
-
REQUIRED_FIELDS = %w[name
|
40
|
+
REQUIRED_FIELDS = %w[name author version]
|
40
41
|
|
41
42
|
attr_accessor *FIELDS.keys.map{|f| f.gsub(':', '_') }
|
42
43
|
|
@@ -74,6 +75,10 @@ module BPM
|
|
74
75
|
spec.licenses = licenses.map{|l| l["type"]}
|
75
76
|
spec.executables = bin_files.map{|p| File.basename(p) } if bin_path
|
76
77
|
|
78
|
+
spec.homepage = homepage || url
|
79
|
+
spec.description = description || summary
|
80
|
+
spec.summary = summary || description
|
81
|
+
|
77
82
|
metadata = Hash[METADATA_FIELDS.map{|f| [f, send(c2u(f)) ] }]
|
78
83
|
spec.requirements = [metadata.to_json]
|
79
84
|
|
@@ -136,7 +141,6 @@ module BPM
|
|
136
141
|
build_names += PLUGIN_FIELDS.map do |field_name|
|
137
142
|
val = self.send(c2u(field_name))
|
138
143
|
val = val && val =~ /^#{name}\// ? val[name.size+1..-1]+'.js' : nil
|
139
|
-
puts "FIELD: #{field_name} #{self.send(c2u(field_name))} val=#{val}"
|
140
144
|
val
|
141
145
|
end
|
142
146
|
|
@@ -191,7 +195,7 @@ module BPM
|
|
191
195
|
# Returns a hash of dependencies inferred from the build settings.
|
192
196
|
def dependencies_build
|
193
197
|
ret = {}
|
194
|
-
|
198
|
+
|
195
199
|
bpm_build.each do |target_name, opts|
|
196
200
|
next unless opts.is_a?(Hash)
|
197
201
|
|
@@ -221,7 +225,7 @@ module BPM
|
|
221
225
|
end
|
222
226
|
|
223
227
|
def validate
|
224
|
-
validate_fields && validate_version && validate_paths
|
228
|
+
validate_fields && validate_version && validate_paths && validate_summary && validate_homepage
|
225
229
|
end
|
226
230
|
|
227
231
|
def valid?
|
@@ -390,6 +394,14 @@ module BPM
|
|
390
394
|
end
|
391
395
|
end
|
392
396
|
|
397
|
+
def validate_summary
|
398
|
+
summary || description
|
399
|
+
end
|
400
|
+
|
401
|
+
def validate_homepage
|
402
|
+
homepage || url
|
403
|
+
end
|
404
|
+
|
393
405
|
def add_error(message)
|
394
406
|
self.errors << message
|
395
407
|
end
|
data/lib/bpm/project.rb
CHANGED
@@ -44,10 +44,12 @@ module BPM
|
|
44
44
|
# If no name, try to find project json and get name from it
|
45
45
|
project_file = self.class.project_file_path(root_path)
|
46
46
|
name = File.basename(project_file, '.json') if project_file
|
47
|
+
else
|
48
|
+
project_file = File.join root_path, "#{name}.json"
|
47
49
|
end
|
48
50
|
|
49
51
|
@name = name || File.basename(root_path)
|
50
|
-
@json_path =
|
52
|
+
@json_path = project_file
|
51
53
|
|
52
54
|
load_json && validate
|
53
55
|
end
|
@@ -78,6 +80,10 @@ module BPM
|
|
78
80
|
File.join([@root_path, 'packages', package_name].compact)
|
79
81
|
end
|
80
82
|
|
83
|
+
def vendor_root(*paths)
|
84
|
+
File.join @root_path, 'vendor', *paths
|
85
|
+
end
|
86
|
+
|
81
87
|
def internal_package_root(package_name=nil)
|
82
88
|
File.join([@root_path, BPM_DIR, 'packages', package_name].compact)
|
83
89
|
end
|
@@ -91,31 +97,33 @@ module BPM
|
|
91
97
|
end
|
92
98
|
|
93
99
|
def build_app?
|
94
|
-
!!(bpm_build && bpm_build["
|
100
|
+
!!(bpm_build && bpm_build["bpm_libs.js"] &&
|
101
|
+
bpm_build["bpm_libs.js"]["directories"] &&
|
102
|
+
bpm_build["bpm_libs.js"]["directories"].size>0)
|
95
103
|
end
|
96
104
|
|
97
105
|
def build_app=(value)
|
98
106
|
|
99
|
-
bpm_libs = "
|
100
|
-
bpm_styles = "
|
107
|
+
bpm_libs = "bpm_libs.js"
|
108
|
+
bpm_styles = "bpm_styles.css"
|
101
109
|
|
102
110
|
if value
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
111
|
+
bpm_build[bpm_libs] ||= {}
|
112
|
+
hash = bpm_build[bpm_libs]
|
113
|
+
hash['directories'] ||= []
|
114
|
+
hash['directories'] << 'lib' if hash['directories'].size==0
|
115
|
+
hash['minifier'] ||= 'uglify-js'
|
109
116
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
117
|
+
bpm_build[bpm_styles] ||= {}
|
118
|
+
hash = bpm_build[bpm_styles]
|
119
|
+
hash['directories'] ||= []
|
120
|
+
hash['directories'] << 'css' if hash['directories'].size==0
|
121
|
+
|
122
|
+
directories ||= {}
|
123
|
+
directories['lib'] ||= ['app']
|
116
124
|
else
|
117
|
-
bpm_build
|
118
|
-
bpm_build
|
125
|
+
bpm_build[bpm_libs]['directories'] = []
|
126
|
+
bpm_build[bpm_styles]['directories'] = []
|
119
127
|
end
|
120
128
|
value
|
121
129
|
end
|
@@ -135,9 +143,9 @@ module BPM
|
|
135
143
|
end
|
136
144
|
|
137
145
|
def rebuild_preview(verbose=false)
|
138
|
-
|
146
|
+
|
139
147
|
needs_rebuild = true
|
140
|
-
|
148
|
+
|
141
149
|
if File.directory?(preview_root)
|
142
150
|
cur_previews = Dir[preview_root('**', '*')].sort.reject { |x| File.directory?(x) }
|
143
151
|
exp_filenames = buildable_asset_filenames(:debug)
|
@@ -159,22 +167,22 @@ module BPM
|
|
159
167
|
# Add a new dependency
|
160
168
|
#
|
161
169
|
# Adds to the project json and installs dependency
|
162
|
-
|
170
|
+
|
163
171
|
def add_dependencies(new_deps, development=false, verbose=false)
|
164
172
|
old_deps = build_local_dependency_list(false) || []
|
165
173
|
hard_deps = (development ? dependencies_development : dependencies).merge(new_deps)
|
166
174
|
all_hard_deps = all_dependencies.merge(new_deps)
|
167
|
-
exp_deps = find_non_local_dependencies(
|
168
|
-
|
175
|
+
exp_deps = find_non_local_dependencies(all_hard_deps, true)
|
176
|
+
|
169
177
|
puts "Fetching packages from remote..." if verbose
|
170
178
|
core_fetch_dependencies(exp_deps, verbose)
|
171
|
-
|
179
|
+
|
172
180
|
if development
|
173
181
|
self.dependencies_development = hard_deps
|
174
182
|
else
|
175
183
|
self.dependencies = hard_deps
|
176
184
|
end
|
177
|
-
|
185
|
+
|
178
186
|
rebuild_dependency_list(all_hard_deps, verbose)
|
179
187
|
|
180
188
|
local_deps.each do |dep|
|
@@ -263,7 +271,7 @@ module BPM
|
|
263
271
|
$stdout << "~ Building #{asset.logical_path}..." if verbose
|
264
272
|
File.open(dst_path, 'w+') { |fd| fd << asset.to_s }
|
265
273
|
if verbose
|
266
|
-
gzip_size = `gzip -c #{dst_path}`.
|
274
|
+
gzip_size = `gzip -c #{dst_path}`.bytesize
|
267
275
|
gzip_size = gzip_size < 1024 ? "#{gzip_size} bytes" : "#{gzip_size / 1024} Kb"
|
268
276
|
$stdout << " (gzipped size: #{gzip_size})\n"
|
269
277
|
end
|
@@ -506,8 +514,8 @@ module BPM
|
|
506
514
|
next if seen.include?(name)
|
507
515
|
seen << name
|
508
516
|
|
509
|
-
package_root =
|
510
|
-
if
|
517
|
+
package_root = locate_local_package(name)
|
518
|
+
if package_root
|
511
519
|
pkg = BPM::Package.new(package_root)
|
512
520
|
pkg.load_json
|
513
521
|
|
@@ -590,7 +598,7 @@ module BPM
|
|
590
598
|
# Tell if package is vendored
|
591
599
|
|
592
600
|
def has_local_package?(package_name)
|
593
|
-
|
601
|
+
!!locate_local_package(package_name)
|
594
602
|
end
|
595
603
|
|
596
604
|
|
@@ -640,6 +648,16 @@ module BPM
|
|
640
648
|
end
|
641
649
|
|
642
650
|
|
651
|
+
def locate_local_package(package_name)
|
652
|
+
src_path = local_package_root package_name
|
653
|
+
unless File.directory?(src_path)
|
654
|
+
src_path = Dir[vendor_root('*','packages','*')].find do |path|
|
655
|
+
File.basename(path)==package_name && File.directory?(path)
|
656
|
+
end
|
657
|
+
end
|
658
|
+
src_path
|
659
|
+
end
|
660
|
+
|
643
661
|
# Find package locally or in global cache
|
644
662
|
|
645
663
|
def locate_package(package_name, vers, verbose)
|
@@ -649,9 +667,8 @@ module BPM
|
|
649
667
|
# previous one we had didn't do anything, so it's better to have
|
650
668
|
# none than one that doesn't work
|
651
669
|
vers = ">= 0" if vers == ">= 0-pre"
|
652
|
-
src_path = local ?
|
653
|
-
|
654
|
-
BPM::Local.new.source_root(package_name, vers)
|
670
|
+
src_path = local ? locate_local_package(package_name) :
|
671
|
+
BPM::Local.new.source_root(package_name, vers)
|
655
672
|
|
656
673
|
return nil unless src_path
|
657
674
|
|
data/lib/bpm/version.rb
CHANGED
data/spec/cli/add_spec.rb
CHANGED
@@ -127,7 +127,7 @@ describe 'bpm add' do
|
|
127
127
|
end
|
128
128
|
|
129
129
|
it "should make a soft dependency a hard dependency" do
|
130
|
-
bpm '
|
130
|
+
bpm 'rebuild'
|
131
131
|
wait
|
132
132
|
has_soft_dependency 'ivory', '0.0.1' # precond
|
133
133
|
|
@@ -154,8 +154,6 @@ describe 'bpm add' do
|
|
154
154
|
no_dependency 'custom_package'
|
155
155
|
end
|
156
156
|
|
157
|
-
it "should verify working with config-less projects"
|
158
|
-
|
159
157
|
it "should work with .bpkg file" do
|
160
158
|
FileUtils.cp fixtures('gems', "custom_generator-1.0.bpkg"), '.'
|
161
159
|
bpm "add", "custom_generator-1.0.bpkg" and wait
|
@@ -171,7 +169,7 @@ describe 'bpm add' do
|
|
171
169
|
output = stdout.read
|
172
170
|
output.should include("Added development package 'custom_generator' (1.0)")
|
173
171
|
|
174
|
-
bpm '
|
172
|
+
bpm 'rebuild', '--mode=debug' and wait
|
175
173
|
has_development_dependency 'custom_generator', '1.0'
|
176
174
|
no_dependency 'custom_generator', false
|
177
175
|
end
|
@@ -179,3 +177,23 @@ describe 'bpm add' do
|
|
179
177
|
end
|
180
178
|
|
181
179
|
end
|
180
|
+
|
181
|
+
describe "bpm add using a vendor directory" do
|
182
|
+
before do
|
183
|
+
goto_home
|
184
|
+
set_host
|
185
|
+
start_fake(FakeGemServer.new)
|
186
|
+
FileUtils.cp_r project_fixture('hello_dev'), '.'
|
187
|
+
FileUtils.mkdir_p home('hello_dev', 'vendor')
|
188
|
+
FileUtils.cp_r project_fixture('hello_world'), home('hello_dev', 'vendor', 'hello_world')
|
189
|
+
cd home('hello_dev')
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should include custom_package defined in a project found vendor" do
|
193
|
+
bpm 'add', 'custom_package' and wait
|
194
|
+
|
195
|
+
File.read(home('hello_dev', 'assets', 'bpm_libs.js')).should include("custom_package (2.0.0)")
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
199
|
+
|
data/spec/cli/fetch_spec.rb
CHANGED
data/spec/cli/init_spec.rb
CHANGED
@@ -29,14 +29,32 @@ describe "bpm init on existing directory" do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should not overwrite existing project file" do
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
|
33
|
+
dummy_project = {
|
34
|
+
"name" => "custom_project",
|
35
|
+
"bpm" => "1.0.0"
|
36
|
+
}
|
37
|
+
|
38
|
+
File.open("new_project.json", 'w'){|f| f.print dummy_project.to_json }
|
35
39
|
|
36
|
-
|
40
|
+
bpm 'init', '--skip' and wait # skip, since we can't test the prompt
|
41
|
+
File.read("new_project.json").should == dummy_project.to_json
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should not overwrite existing project file (with different name)" do
|
45
|
+
|
46
|
+
dummy_project = {
|
47
|
+
"name" => "custom_project",
|
48
|
+
"bpm" => "1.0.0"
|
49
|
+
}
|
50
|
+
|
51
|
+
File.open("package.json", 'w'){|f| f.print dummy_project.to_json }
|
37
52
|
|
38
|
-
|
39
|
-
|
53
|
+
bpm 'init' and wait
|
54
|
+
exit_status.should be_success
|
55
|
+
|
56
|
+
File.read("package.json").should == dummy_project.to_json
|
57
|
+
File.exists?('new_project.json').should_not be_true
|
40
58
|
end
|
41
59
|
|
42
60
|
it "should update the project with app but save other settings" do
|
@@ -50,9 +68,6 @@ describe "bpm init on existing directory" do
|
|
50
68
|
|
51
69
|
bpm 'init', '--app' and wait
|
52
70
|
|
53
|
-
app_package = home 'new_project', 'assets', 'new_project', 'bpm_libs.js'
|
54
|
-
File.exists?(app_package).should be_true
|
55
|
-
|
56
71
|
json = JSON.load File.read(project_json)
|
57
72
|
json["custom_property"].should == "I haz it"
|
58
73
|
json["bpm:build"]["bpm_libs.js"].should_not be_nil
|
@@ -104,7 +119,7 @@ describe "bpm init on a non-existant directory" do
|
|
104
119
|
|
105
120
|
|
106
121
|
files = %w(LICENSE README.md index.html app/main.js BpmTest.json)
|
107
|
-
generated_files = %w(assets/bpm_libs.js assets/bpm_styles.css
|
122
|
+
generated_files = %w(assets/bpm_libs.js assets/bpm_styles.css)
|
108
123
|
|
109
124
|
# output without coloration
|
110
125
|
output = stdout.read.gsub(/\e\[\d+m/,'')
|