buildr 1.3.5 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +153 -8
- data/README.rdoc +1 -1
- data/addon/buildr/antlr.rb +5 -5
- data/addon/buildr/drb.rb +18 -18
- data/addon/buildr/hibernate.rb +18 -14
- data/addon/buildr/javacc.rb +4 -4
- data/addon/buildr/jetty.rb +5 -5
- data/addon/buildr/nailgun.rb +23 -23
- data/addon/buildr/openjpa.rb +1 -1
- data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/protobuf.rb +75 -0
- data/addon/buildr/xmlbeans.rb +5 -5
- data/buildr.buildfile +2 -2
- data/buildr.gemspec +8 -7
- data/doc/_layouts/default.html +2 -2
- data/doc/artifacts.textile +4 -4
- data/doc/building.textile +35 -3
- data/doc/contributing.textile +5 -0
- data/doc/download.textile +16 -5
- data/doc/extending.textile +38 -12
- data/doc/installing.textile +6 -5
- data/doc/languages.textile +182 -42
- data/doc/more_stuff.textile +2 -2
- data/doc/packaging.textile +14 -15
- data/doc/projects.textile +7 -2
- data/doc/quick_start.textile +4 -4
- data/doc/scripts/buildr-git.rb +63 -63
- data/doc/scripts/gitflow.rb +21 -21
- data/doc/settings_profiles.textile +9 -2
- data/doc/testing.textile +16 -5
- data/etc/KEYS +38 -0
- data/lib/buildr/core/application.rb +33 -27
- data/lib/buildr/core/build.rb +41 -28
- data/lib/buildr/core/cc.rb +172 -0
- data/lib/buildr/core/checks.rb +1 -1
- data/lib/buildr/core/common.rb +7 -6
- data/lib/buildr/core/compile.rb +7 -8
- data/lib/buildr/core/doc.rb +263 -0
- data/lib/buildr/core/environment.rb +6 -6
- data/lib/buildr/core/filter.rb +77 -35
- data/lib/buildr/core/generate.rb +7 -7
- data/lib/buildr/core/help.rb +1 -1
- data/lib/buildr/core/osx.rb +6 -6
- data/lib/buildr/core/progressbar.rb +4 -4
- data/lib/buildr/core/project.rb +144 -36
- data/lib/buildr/core/shell.rb +34 -34
- data/lib/buildr/core/test.rb +89 -20
- data/lib/buildr/core/transports.rb +8 -7
- data/lib/buildr/core/util.rb +77 -23
- data/lib/buildr/core.rb +1 -0
- data/lib/buildr/groovy/bdd.rb +5 -5
- data/lib/buildr/groovy/compiler.rb +19 -15
- data/lib/buildr/groovy/shell.rb +6 -6
- data/lib/buildr/ide/eclipse/java.rb +3 -3
- data/lib/buildr/ide/eclipse/plugin.rb +8 -5
- data/lib/buildr/ide/eclipse/scala.rb +4 -2
- data/lib/buildr/ide/eclipse.rb +148 -75
- data/lib/buildr/ide/idea.rb +2 -2
- data/lib/buildr/ide/idea7x.rb +23 -4
- data/lib/buildr/java/ant.rb +4 -4
- data/lib/buildr/java/bdd.rb +51 -54
- data/lib/buildr/java/cobertura.rb +57 -35
- data/lib/buildr/java/commands.rb +14 -5
- data/lib/buildr/java/compiler.rb +3 -217
- data/lib/buildr/java/deprecated.rb +4 -4
- data/lib/buildr/java/doc.rb +70 -0
- data/lib/buildr/java/emma.rb +22 -22
- data/lib/buildr/java/jruby.rb +4 -4
- data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
- data/lib/buildr/java/packaging.rb +30 -29
- data/lib/buildr/java/pom.rb +4 -4
- data/lib/buildr/java/rjb.rb +6 -6
- data/lib/buildr/java/test_result.rb +61 -85
- data/lib/buildr/java/tests.rb +44 -27
- data/lib/buildr/java/version_requirement.rb +8 -8
- data/lib/buildr/java.rb +1 -0
- data/lib/buildr/packaging/archive.rb +55 -22
- data/lib/buildr/packaging/artifact.rb +75 -36
- data/lib/buildr/packaging/artifact_namespace.rb +90 -78
- data/lib/buildr/packaging/artifact_search.rb +5 -5
- data/lib/buildr/packaging/gems.rb +11 -7
- data/lib/buildr/packaging/package.rb +10 -7
- data/lib/buildr/packaging/tar.rb +14 -14
- data/lib/buildr/packaging/version_requirement.rb +30 -10
- data/lib/buildr/packaging/ziptask.rb +51 -13
- data/lib/buildr/scala/bdd.rb +25 -20
- data/lib/buildr/scala/compiler.rb +87 -40
- data/lib/buildr/scala/doc.rb +106 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
- data/lib/buildr/scala/shell.rb +14 -9
- data/lib/buildr/scala/tests.rb +33 -26
- data/lib/buildr/scala.rb +1 -0
- data/lib/buildr/shell.rb +33 -33
- data/lib/buildr.rb +1 -1
- data/rakelib/all-in-one.rake +113 -0
- data/rakelib/checks.rake +1 -1
- data/rakelib/doc.rake +7 -0
- data/rakelib/package.rake +1 -1
- data/rakelib/release.rake +9 -6
- data/rakelib/rspec.rake +26 -7
- data/rakelib/setup.rake +15 -3
- data/rakelib/stage.rake +18 -11
- data/spec/addon/drb_spec.rb +25 -25
- data/spec/core/application_spec.rb +111 -21
- data/spec/core/build_spec.rb +16 -15
- data/spec/core/cc_spec.rb +174 -0
- data/spec/core/checks_spec.rb +34 -34
- data/spec/core/common_spec.rb +51 -5
- data/spec/core/compile_spec.rb +89 -14
- data/spec/core/extension_spec.rb +127 -19
- data/spec/core/generate_spec.rb +2 -2
- data/spec/core/project_spec.rb +10 -10
- data/spec/core/test_spec.rb +144 -35
- data/spec/core/transport_spec.rb +8 -8
- data/spec/core/util_spec.rb +63 -5
- data/spec/groovy/bdd_spec.rb +5 -5
- data/spec/groovy/compiler_spec.rb +29 -18
- data/spec/ide/eclipse_spec.rb +185 -9
- data/spec/ide/idea7x_spec.rb +22 -10
- data/spec/java/ant_spec.rb +9 -5
- data/spec/java/bdd_spec.rb +29 -37
- data/spec/java/cobertura_spec.rb +12 -12
- data/spec/java/commands_spec.rb +34 -0
- data/spec/java/compiler_spec.rb +53 -53
- data/spec/java/emma_spec.rb +11 -11
- data/spec/java/java_spec.rb +10 -10
- data/spec/java/packaging_spec.rb +67 -20
- data/spec/java/test_coverage_helper.rb +18 -18
- data/spec/java/tests_spec.rb +13 -9
- data/spec/packaging/archive_spec.rb +187 -20
- data/spec/packaging/artifact_namespace_spec.rb +172 -83
- data/spec/packaging/artifact_spec.rb +83 -18
- data/spec/packaging/packaging_spec.rb +41 -14
- data/spec/sandbox.rb +23 -12
- data/spec/scala/bdd_spec.rb +13 -8
- data/spec/scala/compiler_spec.rb +18 -13
- data/spec/scala/scala.rb +3 -3
- data/spec/scala/tests_spec.rb +46 -24
- data/spec/spec_helpers.rb +28 -10
- data/spec/version_requirement_spec.rb +25 -11
- metadata +149 -133
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
- data/rakelib/stage.rake~ +0 -213
@@ -26,46 +26,58 @@ describe Buildr::ArtifactNamespace do
|
|
26
26
|
Object.send :remove_const, :A
|
27
27
|
end
|
28
28
|
|
29
|
-
describe '.root' do
|
29
|
+
describe '.root' do
|
30
30
|
it 'should return the top level namespace' do
|
31
31
|
Buildr::ArtifactNamespace.root.should be_root
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
it 'should yield the namespace if a block is given' do
|
35
|
-
|
35
|
+
flag = false
|
36
|
+
Buildr::ArtifactNamespace.root { |ns| flag = true; ns.should be_root }
|
37
|
+
flag.should == true
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should return the root when used outside of a project definition' do
|
41
|
+
artifact_ns.should be_root
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should yield to a block when used outside of a project definition' do
|
45
|
+
flag = false
|
46
|
+
artifact_ns {|ns| flag = true; ns.should be_root}
|
47
|
+
flag.should == true
|
36
48
|
end
|
37
49
|
end
|
38
50
|
|
39
|
-
describe '.instance' do
|
51
|
+
describe '.instance' do
|
40
52
|
it 'should return the top level namespace when invoked outside a project definition' do
|
41
53
|
artifact_ns.should be_root
|
42
54
|
end
|
43
55
|
|
44
|
-
it 'should return the namespace for the receiving project' do
|
56
|
+
it 'should return the namespace for the receiving project' do
|
45
57
|
define('foo') { }
|
46
58
|
project('foo').artifact_ns.name.should == 'foo'
|
47
59
|
end
|
48
|
-
|
60
|
+
|
49
61
|
it 'should return the current project namespace when invoked inside a project' do
|
50
62
|
define 'foo' do
|
51
63
|
artifact_ns.should_not be_root
|
52
64
|
artifact_ns.name.should == 'foo'
|
53
|
-
task :doit do
|
65
|
+
task :doit do
|
54
66
|
artifact_ns.should_not be_root
|
55
67
|
artifact_ns.name.should == 'foo'
|
56
68
|
end.invoke
|
57
69
|
end
|
58
70
|
end
|
59
|
-
|
71
|
+
|
60
72
|
it 'should return the root namespace if given :root' do
|
61
73
|
artifact_ns(:root).should be_root
|
62
74
|
end
|
63
|
-
|
64
|
-
it 'should return the namespace for the given name' do
|
75
|
+
|
76
|
+
it 'should return the namespace for the given name' do
|
65
77
|
artifact_ns(:foo).name.should == 'foo'
|
66
78
|
artifact_ns('foo:bar').name.should == 'foo:bar'
|
67
79
|
artifact_ns(['foo', 'bar', 'baz']).name.should == 'foo:bar:baz'
|
68
|
-
abc_module do
|
80
|
+
abc_module do
|
69
81
|
artifact_ns(A::B::C).name.should == 'A::B::C'
|
70
82
|
end
|
71
83
|
artifact_ns(:root).should be_root
|
@@ -79,12 +91,12 @@ describe Buildr::ArtifactNamespace do
|
|
79
91
|
end
|
80
92
|
end
|
81
93
|
|
82
|
-
describe '#parent' do
|
83
|
-
it 'should be nil for root namespace' do
|
94
|
+
describe '#parent' do
|
95
|
+
it 'should be nil for root namespace' do
|
84
96
|
artifact_ns(:root).parent.should be_nil
|
85
97
|
end
|
86
|
-
|
87
|
-
it 'should be the parent namespace for nested modules' do
|
98
|
+
|
99
|
+
it 'should be the parent namespace for nested modules' do
|
88
100
|
abc_module do
|
89
101
|
artifact_ns(A::B::C).parent.should == artifact_ns(A::B)
|
90
102
|
artifact_ns(A::B).parent.should == artifact_ns(A)
|
@@ -93,8 +105,8 @@ describe Buildr::ArtifactNamespace do
|
|
93
105
|
end
|
94
106
|
|
95
107
|
it 'should be the parent namespace for nested projects' do
|
96
|
-
define 'a' do
|
97
|
-
define 'b' do
|
108
|
+
define 'a' do
|
109
|
+
define 'b' do
|
98
110
|
define 'c' do
|
99
111
|
artifact_ns.parent.should == artifact_ns(parent)
|
100
112
|
end
|
@@ -104,9 +116,9 @@ describe Buildr::ArtifactNamespace do
|
|
104
116
|
end
|
105
117
|
end
|
106
118
|
end
|
107
|
-
|
119
|
+
|
108
120
|
describe '#parent=' do
|
109
|
-
it 'should reject to set parent for root namespace' do
|
121
|
+
it 'should reject to set parent for root namespace' do
|
110
122
|
lambda { artifact_ns(:root).parent = :foo }.should raise_error(Exception, /cannot set parent/i)
|
111
123
|
end
|
112
124
|
|
@@ -118,10 +130,10 @@ describe Buildr::ArtifactNamespace do
|
|
118
130
|
end
|
119
131
|
|
120
132
|
it 'should allow to set parent to :current' do
|
121
|
-
abc_module do
|
133
|
+
abc_module do
|
122
134
|
mod = A::B
|
123
135
|
artifact_ns(mod).parent = :current
|
124
|
-
def mod.stuff
|
136
|
+
def mod.stuff
|
125
137
|
Buildr::artifact_ns(self)
|
126
138
|
end
|
127
139
|
define 'a' do
|
@@ -133,14 +145,14 @@ describe Buildr::ArtifactNamespace do
|
|
133
145
|
end
|
134
146
|
end
|
135
147
|
end
|
136
|
-
|
137
|
-
describe '#need' do
|
148
|
+
|
149
|
+
describe '#need' do
|
138
150
|
it 'should accept an artifact spec' do
|
139
151
|
define 'one' do
|
140
152
|
artifact_ns.need 'a:b:c:1'
|
141
153
|
# referenced by spec
|
142
154
|
artifact_ns['a:b:c'].should_not be_selected
|
143
|
-
|
155
|
+
|
144
156
|
# referenced by name
|
145
157
|
artifact_ns[:b].should_not be_selected
|
146
158
|
artifact_ns[:b].should be_satisfied_by('a:b:c:1')
|
@@ -155,7 +167,7 @@ describe Buildr::ArtifactNamespace do
|
|
155
167
|
artifact_ns.need 'thing -> a:b:c:2.1 -> ~>2.0'
|
156
168
|
# referenced by spec
|
157
169
|
artifact_ns['a:b:c'].should_not be_selected
|
158
|
-
|
170
|
+
|
159
171
|
# referenced by name
|
160
172
|
artifact_ns.key?(:b).should be_false
|
161
173
|
artifact_ns[:thing].should_not be_selected
|
@@ -165,7 +177,7 @@ describe Buildr::ArtifactNamespace do
|
|
165
177
|
end
|
166
178
|
end
|
167
179
|
|
168
|
-
it 'should accept a hash :name -> requirement_spec' do
|
180
|
+
it 'should accept a hash :name -> requirement_spec' do
|
169
181
|
define 'one' do
|
170
182
|
artifact_ns.need :thing => 'a:b:c:2.1 -> ~>2.0'
|
171
183
|
artifact_ns[:thing].should be_satisfied_by('a:b:c:2.5')
|
@@ -181,8 +193,8 @@ describe Buildr::ArtifactNamespace do
|
|
181
193
|
end
|
182
194
|
end
|
183
195
|
|
184
|
-
it 'should take a hash :name -> specs_array' do
|
185
|
-
define 'one' do
|
196
|
+
it 'should take a hash :name -> specs_array' do
|
197
|
+
define 'one' do
|
186
198
|
artifact_ns.need :things => ['foo:bar:jar:1.0',
|
187
199
|
'foo:baz:jar:2.0',]
|
188
200
|
artifact_ns['foo:bar:jar'].should_not be_selected
|
@@ -194,8 +206,8 @@ describe Buildr::ArtifactNamespace do
|
|
194
206
|
end
|
195
207
|
end
|
196
208
|
|
197
|
-
it 'should select best matching version if defined' do
|
198
|
-
define 'one' do
|
209
|
+
it 'should select best matching version if defined' do
|
210
|
+
define 'one' do
|
199
211
|
artifact_ns.use :a => 'foo:bar:jar:1.5'
|
200
212
|
artifact_ns.use :b => 'foo:baz:jar:2.0'
|
201
213
|
define 'two' do
|
@@ -205,7 +217,7 @@ describe Buildr::ArtifactNamespace do
|
|
205
217
|
artifact_ns.need :c => 'foo:bat:jar:3.0'
|
206
218
|
artifact_ns['foo:bat:jar'].should_not be_selected
|
207
219
|
artifact_ns[:c].should_not be_selected
|
208
|
-
|
220
|
+
|
209
221
|
artifact_ns.need :one => 'foo:bar:jar:>=1.0'
|
210
222
|
artifact_ns[:one].version.should == '1.5'
|
211
223
|
artifact_ns[:one].should be_selected
|
@@ -220,7 +232,7 @@ describe Buildr::ArtifactNamespace do
|
|
220
232
|
end
|
221
233
|
end
|
222
234
|
|
223
|
-
describe '#use' do
|
235
|
+
describe '#use' do
|
224
236
|
it 'should register the artifact on namespace' do
|
225
237
|
define 'one' do
|
226
238
|
artifact_ns.use :thing => 'a:b:c:1'
|
@@ -232,7 +244,7 @@ describe Buildr::ArtifactNamespace do
|
|
232
244
|
artifact_ns[:thing].requirement.should be_nil
|
233
245
|
artifact_ns[:thing].version.should == '2'
|
234
246
|
artifact_ns[:thing].id.should == 'd'
|
235
|
-
|
247
|
+
|
236
248
|
artifact_ns.use :copied => artifact_ns.parent[:thing]
|
237
249
|
artifact_ns[:copied].should_not == artifact_ns.parent[:thing]
|
238
250
|
artifact_ns[:copied].requirement.should be_nil
|
@@ -258,7 +270,7 @@ describe Buildr::ArtifactNamespace do
|
|
258
270
|
artifact_ns['a:b:c'].version.should == '2'
|
259
271
|
end
|
260
272
|
end
|
261
|
-
|
273
|
+
|
262
274
|
it 'should complain if namespace requirement is not satisfied' do
|
263
275
|
define 'one' do
|
264
276
|
artifact_ns.need :bar => 'foo:bar:baz:~>1.5'
|
@@ -266,7 +278,7 @@ describe Buildr::ArtifactNamespace do
|
|
266
278
|
end
|
267
279
|
end
|
268
280
|
|
269
|
-
it 'should be able to register a group' do
|
281
|
+
it 'should be able to register a group' do
|
270
282
|
specs = ['its:me:here:1', 'its:you:there:2']
|
271
283
|
artifact_ns.use :them => specs
|
272
284
|
artifact_ns[:them].map(&:to_spec).should == specs
|
@@ -274,7 +286,7 @@ describe Buildr::ArtifactNamespace do
|
|
274
286
|
artifact_ns[:you].should be_nil
|
275
287
|
end
|
276
288
|
|
277
|
-
it 'should be able to assign sub namespaces' do
|
289
|
+
it 'should be able to assign sub namespaces' do
|
278
290
|
artifact_ns(:foo).bar = "foo:bar:baz:0"
|
279
291
|
artifact_ns(:moo).foo = artifact_ns(:foo)
|
280
292
|
artifact_ns(:moo).foo.should == artifact_ns(:foo)
|
@@ -289,15 +301,22 @@ describe Buildr::ArtifactNamespace do
|
|
289
301
|
end
|
290
302
|
end
|
291
303
|
|
304
|
+
it 'should handle version string' do
|
305
|
+
foo = artifact_ns do |ns|
|
306
|
+
ns.bar = 'a:b:c:1'
|
307
|
+
end
|
308
|
+
foo.use :bar => '2.0'
|
309
|
+
foo.bar.version.should == '2.0'
|
310
|
+
end
|
292
311
|
end
|
293
312
|
|
294
|
-
describe '#values' do
|
295
|
-
it 'returns the artifacts defined on namespace' do
|
313
|
+
describe '#values' do
|
314
|
+
it 'returns the artifacts defined on namespace' do
|
296
315
|
define 'foo' do
|
297
316
|
artifact_ns.use 'foo:one:baz:1.0'
|
298
317
|
define 'bar' do
|
299
318
|
artifact_ns.use 'foo:two:baz:1.0'
|
300
|
-
|
319
|
+
|
301
320
|
specs = artifact_ns.values.map(&:to_spec)
|
302
321
|
specs.should include('foo:two:baz:1.0')
|
303
322
|
specs.should_not include('foo:one:baz:1.0')
|
@@ -309,13 +328,13 @@ describe Buildr::ArtifactNamespace do
|
|
309
328
|
end
|
310
329
|
end
|
311
330
|
|
312
|
-
describe '#values_at' do
|
313
|
-
it 'returns the named artifacts' do
|
331
|
+
describe '#values_at' do
|
332
|
+
it 'returns the named artifacts' do
|
314
333
|
define 'foo' do
|
315
334
|
artifact_ns.use 'foo:one:baz:1.0'
|
316
335
|
define 'bar' do
|
317
336
|
artifact_ns.use :foo_baz => 'foo:two:baz:1.0'
|
318
|
-
|
337
|
+
|
319
338
|
specs = artifact_ns.values_at('one').map(&:to_spec)
|
320
339
|
specs.should include('foo:one:baz:1.0')
|
321
340
|
specs.should_not include('foo:two:baz:1.0')
|
@@ -332,7 +351,7 @@ describe Buildr::ArtifactNamespace do
|
|
332
351
|
artifact_ns.use 'foo:one:baz:2.0'
|
333
352
|
define 'bar' do
|
334
353
|
artifact_ns.use :older => 'foo:one:baz:1.0'
|
335
|
-
|
354
|
+
|
336
355
|
specs = artifact_ns.values_at('foo:one:baz').map(&:to_spec)
|
337
356
|
specs.should include('foo:one:baz:1.0')
|
338
357
|
specs.should_not include('foo:one:baz:2.0')
|
@@ -348,7 +367,7 @@ describe Buildr::ArtifactNamespace do
|
|
348
367
|
artifact_ns.use 'foo:one:baz:2.0'
|
349
368
|
define 'bar' do
|
350
369
|
artifact_ns.use :older => 'foo:one:baz:1.0'
|
351
|
-
|
370
|
+
|
352
371
|
specs = artifact_ns.values_at('foo:one:baz:>1.0').map(&:to_spec)
|
353
372
|
specs.should include('foo:one:baz:2.0')
|
354
373
|
specs.should_not include('foo:one:baz:1.0')
|
@@ -356,14 +375,57 @@ describe Buildr::ArtifactNamespace do
|
|
356
375
|
end
|
357
376
|
end
|
358
377
|
end
|
359
|
-
|
360
|
-
describe '#
|
361
|
-
it '
|
378
|
+
|
379
|
+
describe '#artifacts' do
|
380
|
+
it 'returns artifacts in namespace' do
|
381
|
+
define 'one' do
|
382
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
383
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
384
|
+
artifact_ns.artifacts.map{|a| a.to_spec}.should include('group:foo:jar:1', 'group:bar:jar:1')
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
describe '#keys' do
|
390
|
+
it 'returns names in namespace' do
|
391
|
+
define 'one' do
|
392
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
393
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
394
|
+
artifact_ns.keys.should include('foo', 'bar')
|
395
|
+
end
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
describe '#delete' do
|
400
|
+
it 'deletes corresponding artifact requirement' do
|
401
|
+
define 'one' do
|
402
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
403
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
404
|
+
artifact_ns.delete :bar
|
405
|
+
artifact_ns.artifacts.map{|a| a.to_spec}.should include('group:foo:jar:1')
|
406
|
+
artifact_ns[:foo].to_spec.should eql('group:foo:jar:1')
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
describe '#clear' do
|
412
|
+
it 'clears all artifact requirements in namespace' do
|
413
|
+
define 'one' do
|
414
|
+
artifact_ns[:foo] = 'group:foo:jar:1'
|
415
|
+
artifact_ns[:bar] = 'group:bar:jar:1'
|
416
|
+
artifact_ns.clear
|
417
|
+
artifact_ns.artifacts.should be_empty
|
418
|
+
end
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
describe '#method_missing' do
|
423
|
+
it 'should use cool_aid! to create a requirement' do
|
362
424
|
define 'foo' do
|
363
425
|
artifact_ns.cool_aid!('cool:aid:jar:2').should be_kind_of(ArtifactNamespace::ArtifactRequirement)
|
364
426
|
artifact_ns[:cool_aid].version.should == '2'
|
365
427
|
artifact_ns[:cool_aid].should_not be_selected
|
366
|
-
define 'bar' do
|
428
|
+
define 'bar' do
|
367
429
|
artifact_ns.cool_aid! 'cool:aid:man:3', '>2'
|
368
430
|
artifact_ns[:cool_aid].version.should == '3'
|
369
431
|
artifact_ns[:cool_aid].requirement.should be_satisfied_by('2.5')
|
@@ -372,11 +434,11 @@ describe Buildr::ArtifactNamespace do
|
|
372
434
|
end
|
373
435
|
end
|
374
436
|
|
375
|
-
it 'should use cool_aid= as shorhand for [:cool_aid]=' do
|
437
|
+
it 'should use cool_aid= as shorhand for [:cool_aid]=' do
|
376
438
|
artifact_ns.cool_aid = 'cool:aid:jar:1'
|
377
439
|
artifact_ns[:cool_aid].should be_selected
|
378
440
|
end
|
379
|
-
|
441
|
+
|
380
442
|
it 'should use cool_aid as shorthand for [:cool_aid]' do
|
381
443
|
artifact_ns.need :cool_aid => 'cool:aid:jar:1'
|
382
444
|
artifact_ns.cool_aid.should_not be_selected
|
@@ -391,25 +453,25 @@ describe Buildr::ArtifactNamespace do
|
|
391
453
|
end
|
392
454
|
end
|
393
455
|
|
394
|
-
describe '#ns' do
|
456
|
+
describe '#ns' do
|
395
457
|
it 'should create a sub namespace' do
|
396
458
|
artifact_ns.ns :foo
|
397
459
|
artifact_ns[:foo].should be_kind_of(ArtifactNamespace)
|
398
460
|
artifact_ns(:foo).should_not === artifact_ns.foo
|
399
461
|
artifact_ns.foo.parent.should == artifact_ns
|
400
462
|
end
|
401
|
-
|
463
|
+
|
402
464
|
it 'should take any use arguments' do
|
403
465
|
artifact_ns.ns :foo, :bar => 'foo:bar:jar:0', :baz => 'foo:baz:jar:0'
|
404
466
|
artifact_ns.foo.bar.should be_selected
|
405
467
|
artifact_ns.foo[:baz].should be_selected
|
406
468
|
end
|
407
|
-
|
408
|
-
it 'should access sub artifacts using with foo_bar like syntax' do
|
469
|
+
|
470
|
+
it 'should access sub artifacts using with foo_bar like syntax' do
|
409
471
|
artifact_ns.ns :foo, :bar => 'foo:bar:jar:0', :baz => 'foo:baz:jar:0'
|
410
472
|
artifact_ns[:foo_baz].should be_selected
|
411
473
|
artifact_ns.foo_bar.should be_selected
|
412
|
-
|
474
|
+
|
413
475
|
artifact_ns.foo.ns :bat, 'bat:man:jar:>1'
|
414
476
|
batman = artifact_ns.foo.bat.man
|
415
477
|
batman.should be_selected
|
@@ -418,7 +480,7 @@ describe Buildr::ArtifactNamespace do
|
|
418
480
|
artifact_ns[:foo_bat_man].version.should == '3'
|
419
481
|
end
|
420
482
|
|
421
|
-
it 'should include sub artifacts when calling #values' do
|
483
|
+
it 'should include sub artifacts when calling #values' do
|
422
484
|
artifact_ns.ns :bat, 'bat:man:jar:>1'
|
423
485
|
artifact_ns.values.should_not be_empty
|
424
486
|
artifact_ns.values.first.unversioned_spec.should == 'bat:man:jar'
|
@@ -435,13 +497,13 @@ describe Buildr::ArtifactNamespace do
|
|
435
497
|
lambda { artifact_ns.ns(:foo) }.should raise_error(TypeError, /not a sub/i)
|
436
498
|
end
|
437
499
|
|
438
|
-
it 'should clone artifacts when assigned' do
|
500
|
+
it 'should clone artifacts when assigned' do
|
439
501
|
artifact_ns(:foo).bar = "foo:bar:jar:0"
|
440
502
|
artifact_ns(:moo).ns :muu, :miu => artifact_ns(:foo).bar
|
441
503
|
artifact_ns(:moo).muu.miu.should_not == artifact_ns(:foo).bar
|
442
504
|
artifact_ns(:moo).muu.miu.to_spec.should == artifact_ns(:foo).bar.to_spec
|
443
505
|
end
|
444
|
-
|
506
|
+
|
445
507
|
it 'should clone parent artifacts by name' do
|
446
508
|
define 'foo' do
|
447
509
|
artifact_ns.bar = "foo:bar:jar:0"
|
@@ -462,12 +524,39 @@ describe Buildr::ArtifactNamespace do
|
|
462
524
|
|
463
525
|
end # ArtifactNamespace
|
464
526
|
|
527
|
+
describe Buildr::ArtifactNamespace::ArtifactRequirement do
|
528
|
+
before(:each) { Buildr::ArtifactNamespace.clear }
|
529
|
+
it 'should be created from artifact_ns' do
|
530
|
+
foo = artifact_ns do |ns|
|
531
|
+
ns.bar = 'a:b:c:1.0'
|
532
|
+
end
|
533
|
+
foo.bar.should be_kind_of(ArtifactNamespace::ArtifactRequirement)
|
534
|
+
end
|
535
|
+
|
536
|
+
it 'should handle version as string' do
|
537
|
+
foo = artifact_ns do |ns|
|
538
|
+
ns.bar = 'a:b:c:1.0'
|
539
|
+
end
|
540
|
+
foo.bar.version = '2.0'
|
541
|
+
foo.bar.version.should == '2.0'
|
542
|
+
end
|
543
|
+
|
544
|
+
it 'should handle version string directly' do
|
545
|
+
foo = artifact_ns do |ns|
|
546
|
+
ns.bar = 'a:b:c:1.0'
|
547
|
+
end
|
548
|
+
foo.bar = '2.0'
|
549
|
+
foo.bar.version.should == '2.0'
|
550
|
+
end
|
551
|
+
|
552
|
+
end # ArtifactRequirement
|
553
|
+
|
465
554
|
describe Buildr do
|
466
555
|
before(:each) { Buildr::ArtifactNamespace.clear }
|
467
556
|
|
468
|
-
describe '.artifacts' do
|
557
|
+
describe '.artifacts' do
|
469
558
|
it 'should take ruby symbols and ask the current namespace for them' do
|
470
|
-
define 'foo' do
|
559
|
+
define 'foo' do
|
471
560
|
artifact_ns.cool = 'cool:aid:jar:1.0'
|
472
561
|
artifact_ns.use 'some:other:jar:1.0'
|
473
562
|
artifact_ns.use 'bat:man:jar:1.0'
|
@@ -475,8 +564,8 @@ describe Buildr do
|
|
475
564
|
compile.dependencies.map(&:to_spec).should include('cool:aid:jar:1.0', 'some:other:jar:1.0', 'bat:man:jar:1.0')
|
476
565
|
end
|
477
566
|
end
|
478
|
-
|
479
|
-
it 'should take a namespace' do
|
567
|
+
|
568
|
+
it 'should take a namespace' do
|
480
569
|
artifact_ns(:moo).muu = 'moo:muu:jar:1.0'
|
481
570
|
define 'foo' do
|
482
571
|
compile.with artifact_ns(:moo)
|
@@ -484,28 +573,28 @@ describe Buildr do
|
|
484
573
|
end
|
485
574
|
end
|
486
575
|
end
|
487
|
-
|
576
|
+
|
488
577
|
describe '.artifact' do
|
489
|
-
it 'should search current namespace if given a symbol' do
|
490
|
-
define 'foo' do
|
578
|
+
it 'should search current namespace if given a symbol' do
|
579
|
+
define 'foo' do
|
491
580
|
artifact_ns.use :cool => 'cool:aid:jar:1.0'
|
492
581
|
define 'bar' do
|
493
582
|
artifact(:cool).should == artifact_ns[:cool].artifact
|
494
583
|
end
|
495
584
|
end
|
496
585
|
end
|
497
|
-
|
498
|
-
it 'should search current namespace if given a symbol spec' do
|
499
|
-
define 'foo' do
|
586
|
+
|
587
|
+
it 'should search current namespace if given a symbol spec' do
|
588
|
+
define 'foo' do
|
500
589
|
artifact_ns.use 'cool:aid:jar:1.0'
|
501
590
|
define 'bar' do
|
502
591
|
artifact(:'cool:aid:jar').should == artifact_ns[:aid].artifact
|
503
592
|
end
|
504
593
|
end
|
505
594
|
end
|
506
|
-
|
595
|
+
|
507
596
|
it 'should fail when no artifact by that name is found' do
|
508
|
-
define 'foo' do
|
597
|
+
define 'foo' do
|
509
598
|
artifact_ns.use 'cool:aid:jar:1.0'
|
510
599
|
define 'bar' do
|
511
600
|
lambda { artifact(:cool) }.should raise_error(IndexError, /artifact/)
|
@@ -524,12 +613,12 @@ describe "Extension using ArtifactNamespace" do
|
|
524
613
|
ensure
|
525
614
|
Object.send :remove_const, :A
|
526
615
|
end
|
527
|
-
|
616
|
+
|
528
617
|
it 'can register namespace listeners' do
|
529
618
|
abc_module do
|
530
619
|
# An example extension to illustrate namespace listeners and method forwarding
|
531
620
|
class A::Example
|
532
|
-
|
621
|
+
|
533
622
|
module Ext
|
534
623
|
include Buildr::Extension
|
535
624
|
def example; @example ||= A::Example.new; end
|
@@ -537,22 +626,22 @@ describe "Extension using ArtifactNamespace" do
|
|
537
626
|
Rake::Task.define_task('example') { p.example.doit }
|
538
627
|
end
|
539
628
|
end
|
540
|
-
|
629
|
+
|
541
630
|
REQUIRES = ArtifactNamespace.for(self) do |ns|
|
542
631
|
ns.xmlbeans! 'org.apache.xmlbeans:xmlbeans:jar:2.3.0', '>2'
|
543
632
|
ns.stax_api! 'stax:stax-api:jar:>=1.0.1'
|
544
633
|
end
|
545
634
|
|
546
635
|
attr_reader :options, :requires
|
547
|
-
|
636
|
+
|
548
637
|
def initialize
|
549
638
|
# We could actually use the REQUIRES namespace, but to make things
|
550
|
-
# a bit more interesting, suppose each Example instance can have its
|
639
|
+
# a bit more interesting, suppose each Example instance can have its
|
551
640
|
# own artifact requirements in adition to those specified on REQUIRES.
|
552
641
|
# To achieve this we create an anonymous namespace.
|
553
642
|
@requires = ArtifactNamespace.new # a namespace per instance
|
554
643
|
REQUIRES.each { |requirement| @requires.need requirement }
|
555
|
-
|
644
|
+
|
556
645
|
# For user convenience, we make the options object respond to
|
557
646
|
# :xmlbeans, :xmlbeans=, :xmlbeans?
|
558
647
|
# forwarding them to the namespace.
|
@@ -573,7 +662,7 @@ describe "Extension using ArtifactNamespace" do
|
|
573
662
|
end
|
574
663
|
|
575
664
|
include Spec::Matchers # for assertions
|
576
|
-
|
665
|
+
|
577
666
|
# Called with the ArtifactRequirement that has just been selected
|
578
667
|
# by a user. This allows extension author to selectively perform
|
579
668
|
# some action by inspecting the requirement state.
|
@@ -591,20 +680,20 @@ describe "Extension using ArtifactNamespace" do
|
|
591
680
|
# Now call ant task with our selected artifact and options
|
592
681
|
classpath = requires.map(&:artifact).map(&:to_s).join(File::PATH_SEPARATOR)
|
593
682
|
lambda { ant('thing') { |ant| ant.classpath classpath, :math => options[:math] } }
|
594
|
-
|
683
|
+
|
595
684
|
# We are not a Project instance, hence we have no artifact_ns
|
596
685
|
lambda { artifact_ns }.should raise_error(NameError)
|
597
686
|
|
598
687
|
# Extension authors may NOT rely project's namespaces.
|
599
|
-
# However the ruby-way gives you power and at the same time
|
688
|
+
# However the ruby-way gives you power and at the same time
|
600
689
|
# makes you dangerous, (think open-modules, monkey-patching)
|
601
690
|
# Given that buildr is pure ruby, consider it a sharp-edged sword.
|
602
|
-
# Having said that, you may actually inspect a project's
|
691
|
+
# Having said that, you may actually inspect a project's
|
603
692
|
# namespace, but don't write on it without letting your users
|
604
693
|
# know you will.
|
605
694
|
# This example obtains the current project namespace to make
|
606
695
|
# some assertions.
|
607
|
-
|
696
|
+
|
608
697
|
# To obtain a project's namespace we need either
|
609
698
|
# 1) a reference to the project, and call artifact_ns on it
|
610
699
|
# project.artifact_ns # the namespace for project
|
@@ -627,7 +716,7 @@ describe "Extension using ArtifactNamespace" do
|
|
627
716
|
end
|
628
717
|
end
|
629
718
|
end
|
630
|
-
|
719
|
+
|
631
720
|
define 'foo' do
|
632
721
|
define 'bar' do
|
633
722
|
extend A::Example::Ext
|
@@ -643,7 +732,7 @@ describe "Extension using ArtifactNamespace" do
|
|
643
732
|
|
644
733
|
project('foo:bar').example.requires.should_not == project('foo:baz').example.requires
|
645
734
|
project('foo:bar').example.requires.xmlbeans.should_not == project('foo:baz').example.requires.xmlbeans
|
646
|
-
|
735
|
+
|
647
736
|
# current namespace outside a project is :root, see the stax callback
|
648
737
|
project('foo:baz').example.options.stax_api = '1.6180'
|
649
738
|
# we call the task outside the project, see #doit
|