maven-tools 0.29.0
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.
- data/MIT-LICENSE +20 -0
- data/README.md +1 -0
- data/lib/maven-tools.rb +1 -0
- data/lib/maven-tools.rb~ +1 -0
- data/lib/maven/jarfile.rb~ +77 -0
- data/lib/maven/maven_util.rb~ +56 -0
- data/lib/maven/model/dependencies.rb +230 -0
- data/lib/maven/model/dependencies.rb~ +247 -0
- data/lib/maven/model/model.rb +540 -0
- data/lib/maven/model/model.rb~ +528 -0
- data/lib/maven/model/model_utils.rb~ +832 -0
- data/lib/maven/model/utils.rb +343 -0
- data/lib/maven/model/utils.rb~ +322 -0
- data/lib/maven/tools/coordinate.rb +84 -0
- data/lib/maven/tools/coordinate.rb~ +81 -0
- data/lib/maven/tools/execute_in_phase.rb +9 -0
- data/lib/maven/tools/gem_project.rb +503 -0
- data/lib/maven/tools/gem_project.rb~ +498 -0
- data/lib/maven/tools/gemfile_lock.rb +70 -0
- data/lib/maven/tools/gemfile_lock.rb~ +67 -0
- data/lib/maven/tools/jarfile.rb +95 -0
- data/lib/maven/tools/jarfile.rb~ +79 -0
- data/lib/maven/tools/pom_generator.rb +63 -0
- data/lib/maven/tools/rails_project.rb +183 -0
- data/lib/maven/tools/version.rb +5 -0
- data/lib/maven/tools/versions.rb +15 -0
- data/lib/maven/tools/versions.rb~ +13 -0
- data/lib/maven_tools.rb +1 -0
- data/lib/maven_tools.rb~ +1 -0
- data/spec/coordinate_spec.rb +47 -0
- data/spec/jarfile_spec.rb +124 -0
- metadata +118 -0
@@ -0,0 +1,832 @@
|
|
1
|
+
module Maven
|
2
|
+
module Model
|
3
|
+
class Tag
|
4
|
+
|
5
|
+
def self.tags(*tags)
|
6
|
+
if tags.size == 0
|
7
|
+
@tags
|
8
|
+
else
|
9
|
+
#self.send :attr_accessor, *tags
|
10
|
+
tags.each do |tag|
|
11
|
+
eval <<-EOF
|
12
|
+
def #{tag.to_s}(val = nil)
|
13
|
+
@#{tag.to_s} = val if val
|
14
|
+
@#{tag.to_s}
|
15
|
+
end
|
16
|
+
def #{tag.to_s}=(val)
|
17
|
+
@#{tag.to_s} = val
|
18
|
+
end
|
19
|
+
EOF
|
20
|
+
end
|
21
|
+
@tags ||= []
|
22
|
+
if self.superclass.respond_to?:tags
|
23
|
+
@tags = self.superclass.tags || []
|
24
|
+
else
|
25
|
+
@tags ||= []
|
26
|
+
end
|
27
|
+
@tags.replace([ @tags, tags].flatten)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def _name
|
32
|
+
self.class.to_s.downcase.sub(/.*::/, '')
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(args = {})
|
36
|
+
args.each do |k,v|
|
37
|
+
send("#{k}=".to_sym, v)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_xml(buf = "", indent = "")
|
42
|
+
buf << "#{indent}<#{_name}>\n"
|
43
|
+
self.class.tags.each do |var|
|
44
|
+
val = instance_variable_get("@#{var}".to_sym)
|
45
|
+
var = var.to_s.gsub(/_(.)/) { $1.upcase }
|
46
|
+
case val
|
47
|
+
when Array
|
48
|
+
val.flatten!
|
49
|
+
if val.size > 0
|
50
|
+
buf << "#{indent} <#{var}>\n"
|
51
|
+
val.each do |v|
|
52
|
+
if v.is_a? Tag
|
53
|
+
v.to_xml(buf, indent + " ")
|
54
|
+
else
|
55
|
+
buf << "#{indent} <#{var.to_s.sub(/s$/, '')}>#{v}</#{var.to_s.sub(/s$/, '')}>\n"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
buf << "#{indent} </#{var}>\n"
|
59
|
+
end
|
60
|
+
when Hash
|
61
|
+
if val.size > 0
|
62
|
+
buf << "#{indent} <#{var}>\n"
|
63
|
+
val.each do |k, v|
|
64
|
+
if v.is_a? Tag
|
65
|
+
v.to_xml(buf, indent + " ")
|
66
|
+
else
|
67
|
+
buf << "#{indent} <#{k}>#{v}</#{k}>\n"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
buf << "#{indent} </#{var}>\n"
|
71
|
+
end
|
72
|
+
when Tag
|
73
|
+
val.to_xml(buf, indent + " ")
|
74
|
+
else
|
75
|
+
#when String
|
76
|
+
buf << "#{indent} <#{var}>#{val}</#{var}>\n" if val
|
77
|
+
end
|
78
|
+
end
|
79
|
+
buf << "#{indent}</#{_name}>\n"
|
80
|
+
buf
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# class Coordinate < Tag
|
85
|
+
# tags :group_id, :artifact_id, :version
|
86
|
+
# def initialize(args = {})
|
87
|
+
# super
|
88
|
+
# end
|
89
|
+
|
90
|
+
# def ==(other)
|
91
|
+
# group_id == other.group_id && artifact_id == other.artifact_id
|
92
|
+
# end
|
93
|
+
# end
|
94
|
+
|
95
|
+
# class Dependency < Coordinate
|
96
|
+
# tags :type, :scope, :classifier
|
97
|
+
# def initialize(group_id, artifact_id, version = nil, type = nil)
|
98
|
+
# super(:group_id => group_id, :artifact_id => artifact_id, :version => version, :type => type)
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
|
102
|
+
# class Gem < Dependency
|
103
|
+
# tags :dummy
|
104
|
+
# def initialize(gemname, version = nil)
|
105
|
+
# super("rubygems", gemname, version, "gem")
|
106
|
+
# end
|
107
|
+
|
108
|
+
# def _name
|
109
|
+
# "dependency"
|
110
|
+
# end
|
111
|
+
# end
|
112
|
+
|
113
|
+
class NamedArray < Array
|
114
|
+
attr_reader :name
|
115
|
+
def initialize(name, &block)
|
116
|
+
@name = name.to_s
|
117
|
+
if block
|
118
|
+
block.call(self)
|
119
|
+
end
|
120
|
+
self
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# class DepArray < Array
|
125
|
+
# def <<(args)
|
126
|
+
# item =
|
127
|
+
# case args
|
128
|
+
# when Dependency
|
129
|
+
# args
|
130
|
+
# when Array
|
131
|
+
# if args.size == 1
|
132
|
+
# args << "[0.0.0,)"
|
133
|
+
# elsif args.size == 2 && args.last.is_a?(Hash)
|
134
|
+
# args = [args[0], "[0.0.0,)", args[1]]
|
135
|
+
# elsif args.size >= 2
|
136
|
+
# if args[1] =~ /~>/
|
137
|
+
# val = args[1].sub(/~>\s*/, '')
|
138
|
+
# last = val.sub(/\.[^.]+$/, '.99999')
|
139
|
+
# args[1] = "[#{val}, #{last}]"
|
140
|
+
# elsif args[1] =~ />=/
|
141
|
+
# val = args[1].sub(/>=\s*/, '')
|
142
|
+
# args[1] = "[#{val},)"
|
143
|
+
# elsif args[1] =~ /<=/
|
144
|
+
# val = args[1].sub(/<=\s*/, '')
|
145
|
+
# args[1] = "[0.0.0,#{val}]"
|
146
|
+
# elsif args[1] =~ />/
|
147
|
+
# val = args[1].sub(/>\s*/, '')
|
148
|
+
# args[1] = "(#{val},)"
|
149
|
+
# elsif args[1] =~ /</
|
150
|
+
# val = args[1].sub(/<\s*/, '')
|
151
|
+
# args[1] = "[0.0.0,#{val})"
|
152
|
+
# end
|
153
|
+
# end
|
154
|
+
# if args[0] =~ /:/
|
155
|
+
# Dependency.new(args[0].sub(/:[^:]+$/, ''),
|
156
|
+
# args[0].sub(/.*:/, ''),
|
157
|
+
# args[1])
|
158
|
+
# else
|
159
|
+
# args = args.delete(2) if args[2]
|
160
|
+
# Gem.new(*args)
|
161
|
+
# end
|
162
|
+
# when String
|
163
|
+
# if args =~ /:/
|
164
|
+
# Dependency.new(args.sub(/:[^:]+$/, ''),
|
165
|
+
# args.sub(/.*:/, ''))
|
166
|
+
# else
|
167
|
+
# Gem.new(args)
|
168
|
+
# end
|
169
|
+
# else
|
170
|
+
# args
|
171
|
+
# end
|
172
|
+
# super item unless member? item
|
173
|
+
# item
|
174
|
+
# end
|
175
|
+
|
176
|
+
# end
|
177
|
+
|
178
|
+
class Build < Tag
|
179
|
+
tags :finalName, :plugins
|
180
|
+
def plugins(&block)
|
181
|
+
@plugins ||= PluginHash.new
|
182
|
+
if block
|
183
|
+
block.call(@plugins)
|
184
|
+
end
|
185
|
+
@plugins
|
186
|
+
end
|
187
|
+
|
188
|
+
def plugin?(name)
|
189
|
+
plugins.key?(name)
|
190
|
+
end
|
191
|
+
|
192
|
+
def to_xml(buf = "", indent = "")
|
193
|
+
if @finalName.nil? && (@plugins.nil? || @plugins.size == 0)
|
194
|
+
""
|
195
|
+
else
|
196
|
+
super
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
class Plugin < Coordinate
|
202
|
+
tags :extensions, :configuration, :executions, :dependencies
|
203
|
+
def initialize(group_id, artifact_id, version, &block)
|
204
|
+
super(:artifact_id => artifact_id, :version => version)
|
205
|
+
@group_id = group_id if group_id
|
206
|
+
if block
|
207
|
+
block.call(self)
|
208
|
+
end
|
209
|
+
self
|
210
|
+
end
|
211
|
+
|
212
|
+
def dependencies(&block)
|
213
|
+
@dependencies ||= DepArray.new
|
214
|
+
if block
|
215
|
+
block.call(@dependencies)
|
216
|
+
end
|
217
|
+
@dependencies
|
218
|
+
end
|
219
|
+
|
220
|
+
def with(config)
|
221
|
+
self.configuration = config
|
222
|
+
end
|
223
|
+
|
224
|
+
def in_phase(phase, name = nil, &block)
|
225
|
+
name = "in_phase_#{phase.gsub(/-/,'_')}" unless name
|
226
|
+
self.executions.get(name) do |exe|
|
227
|
+
exe.phase = phase
|
228
|
+
block.call(exe) if block
|
229
|
+
exe
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def executions
|
234
|
+
@executions ||= ModelHash.new(Execution)
|
235
|
+
end
|
236
|
+
|
237
|
+
def execution(name = nil, &block)
|
238
|
+
executions.get(name, &block)
|
239
|
+
end
|
240
|
+
|
241
|
+
def configuration=(c)
|
242
|
+
if c.is_a? Hash
|
243
|
+
@configuration = Configuration.new(c)
|
244
|
+
else
|
245
|
+
@configuration = c
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
class Execution < Tag
|
251
|
+
tags :id, :phase, :goals, :inherited, :configuration
|
252
|
+
|
253
|
+
def initialize(id = nil)
|
254
|
+
super({ :id => id })
|
255
|
+
end
|
256
|
+
|
257
|
+
def configuration=(c)
|
258
|
+
if c.is_a? Hash
|
259
|
+
@configuration = Configuration.new(c)
|
260
|
+
else
|
261
|
+
@configuration = c
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def execute_goal(g)
|
266
|
+
self.goals = g
|
267
|
+
self
|
268
|
+
end
|
269
|
+
|
270
|
+
def with(config)
|
271
|
+
self.configuration = config
|
272
|
+
end
|
273
|
+
|
274
|
+
def goals
|
275
|
+
@goals ||= []
|
276
|
+
end
|
277
|
+
|
278
|
+
def goals=(goals)
|
279
|
+
@goals = goals.is_a?(Array) ? goals: [goals]
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
class DependencyManagement < Tag
|
284
|
+
tags :dependencies
|
285
|
+
|
286
|
+
def _name
|
287
|
+
"dependencyManagement"
|
288
|
+
end
|
289
|
+
|
290
|
+
def dependencies(&block)
|
291
|
+
@dependencies ||= DepArray.new
|
292
|
+
if block
|
293
|
+
block.call(@dependencies)
|
294
|
+
end
|
295
|
+
@dependencies
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
class Profile < Tag
|
300
|
+
tags :id, :activation, :dependencies, :dependency_management, :properties, :build
|
301
|
+
|
302
|
+
def initialize(id, &block)
|
303
|
+
super(:id => id)
|
304
|
+
if block
|
305
|
+
block.call(self)
|
306
|
+
end
|
307
|
+
self
|
308
|
+
end
|
309
|
+
|
310
|
+
def properties
|
311
|
+
(@properties || Properties.new).map
|
312
|
+
end
|
313
|
+
|
314
|
+
def properties=(props)
|
315
|
+
if props.is_a? Hash
|
316
|
+
@properties = Properties.new(props)
|
317
|
+
else
|
318
|
+
@properties = props
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def build
|
323
|
+
@build ||= Build.new
|
324
|
+
end
|
325
|
+
|
326
|
+
def activation(name = nil, value = nil, &block)
|
327
|
+
@activation ||= Activation.new
|
328
|
+
if name || value
|
329
|
+
warn "deprecated, use 'property_activation' instead"
|
330
|
+
@activation.property(name, value)
|
331
|
+
else
|
332
|
+
block.call(@activation) if block
|
333
|
+
@activation
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
def default_activation(name = nil, value = nil)
|
338
|
+
warn "deprecated, use 'activation.by_default.property(name.value)' instead"
|
339
|
+
activation.property(name, value).by_default
|
340
|
+
end
|
341
|
+
|
342
|
+
def plugin(*args, &block)
|
343
|
+
build.plugins.get(*args, &block)
|
344
|
+
end
|
345
|
+
|
346
|
+
def dependencies(&block)
|
347
|
+
@dependencies ||= DepArray.new
|
348
|
+
if block
|
349
|
+
block.call(@dependencies)
|
350
|
+
end
|
351
|
+
@dependencies
|
352
|
+
end
|
353
|
+
|
354
|
+
def dependency_management(&block)
|
355
|
+
@dependency_management ||= DependencyManagement.new
|
356
|
+
if block
|
357
|
+
block.call(@dependency_management.dependencies)
|
358
|
+
end
|
359
|
+
@dependency_management.dependencies
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
class ModelHash < Hash
|
364
|
+
|
365
|
+
def initialize(clazz)
|
366
|
+
@clazz = clazz
|
367
|
+
end
|
368
|
+
|
369
|
+
def get(key, &block)
|
370
|
+
key = key.to_sym if key
|
371
|
+
result = self[key]
|
372
|
+
if result.nil?
|
373
|
+
result = (self[key] = @clazz.new(key))
|
374
|
+
end
|
375
|
+
if block
|
376
|
+
block.call(result)
|
377
|
+
end
|
378
|
+
result
|
379
|
+
end
|
380
|
+
alias :new :get
|
381
|
+
|
382
|
+
def default_model
|
383
|
+
@default_model ||=
|
384
|
+
begin
|
385
|
+
model = @clazz.new
|
386
|
+
self[nil] = model
|
387
|
+
model
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
def method_missing(method, *args, &block)
|
392
|
+
default_model.send(method, *args, &block)
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
class DeveloperHash < Hash
|
397
|
+
|
398
|
+
def get(*args, &block)
|
399
|
+
developer = if args.size == 1 && args[0].is_a?(Developer)
|
400
|
+
args[0]
|
401
|
+
else
|
402
|
+
Developer.new(*args)
|
403
|
+
end
|
404
|
+
self[developer.id] = developer
|
405
|
+
if block
|
406
|
+
block.call(developer)
|
407
|
+
end
|
408
|
+
developer
|
409
|
+
end
|
410
|
+
alias :new :get
|
411
|
+
alias :add :get
|
412
|
+
end
|
413
|
+
|
414
|
+
class LicenseHash < Hash
|
415
|
+
|
416
|
+
def get(*args, &block)
|
417
|
+
license = if args.size == 1 && args[0].is_a?(License)
|
418
|
+
args[0]
|
419
|
+
else
|
420
|
+
License.new(*args)
|
421
|
+
end
|
422
|
+
self[license.name] = license
|
423
|
+
if block
|
424
|
+
block.call(license)
|
425
|
+
end
|
426
|
+
license
|
427
|
+
end
|
428
|
+
alias :new :get
|
429
|
+
alias :add :get
|
430
|
+
end
|
431
|
+
|
432
|
+
class PluginHash < Hash
|
433
|
+
|
434
|
+
def adjust_key(name)
|
435
|
+
name = name.to_s
|
436
|
+
if (name =~ /\:/).nil?
|
437
|
+
if [:jruby, :gem, :rspec, :rake, :rails2, :rails3, :gemify, :cucumber, :runit, :bundler].member? name.to_sym
|
438
|
+
"de.saumya.mojo:#{name}-maven-plugin"
|
439
|
+
else
|
440
|
+
"maven-#{name}-plugin"
|
441
|
+
end
|
442
|
+
else
|
443
|
+
name
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
def key?(k)
|
448
|
+
super( adjust_key(k).to_sym )
|
449
|
+
end
|
450
|
+
|
451
|
+
def get(*args, &block)
|
452
|
+
case args.size
|
453
|
+
when 3
|
454
|
+
name = args[0] + ":" + args[1]
|
455
|
+
version = args[2]
|
456
|
+
when 2
|
457
|
+
name = args[0].to_s
|
458
|
+
version = args[1]
|
459
|
+
when 1
|
460
|
+
name = args[0].to_s
|
461
|
+
else
|
462
|
+
raise "need name"
|
463
|
+
end
|
464
|
+
|
465
|
+
name = adjust_key(name)
|
466
|
+
group_id = name =~ /\:/ ? name.sub(/:.+$/, '') : nil
|
467
|
+
artifact_id = name.sub(/^.+:/, '')
|
468
|
+
|
469
|
+
k = "#{group_id}:#{artifact_id}".to_sym
|
470
|
+
result = self[k]
|
471
|
+
if result.nil?
|
472
|
+
result = (self[k] = Plugin.new(group_id, artifact_id, version))
|
473
|
+
end
|
474
|
+
result.version = version if version
|
475
|
+
if block
|
476
|
+
block.call(result)
|
477
|
+
end
|
478
|
+
result
|
479
|
+
end
|
480
|
+
alias :new :get
|
481
|
+
alias :add :get
|
482
|
+
|
483
|
+
end
|
484
|
+
|
485
|
+
class Developer < Tag
|
486
|
+
tags :id, :name, :email
|
487
|
+
|
488
|
+
def initialize(*args)
|
489
|
+
case args.size
|
490
|
+
when 1
|
491
|
+
@email = args[0].sub(/.*</, '').sub(/>.*/, '')
|
492
|
+
@name = args[0].sub(/\s*<.*/, '')
|
493
|
+
when 2
|
494
|
+
@name = args[0]
|
495
|
+
@email = args[1]
|
496
|
+
when 3
|
497
|
+
@id = args[0]
|
498
|
+
@name = args[1]
|
499
|
+
@email = args[2]
|
500
|
+
end
|
501
|
+
@id = @email.sub(/@/, '_at_').gsub(/\./, '_dot_') unless @id
|
502
|
+
self
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
class License < Tag
|
507
|
+
tags :name, :url, :distribution
|
508
|
+
|
509
|
+
def initialize(*args)
|
510
|
+
case args.size
|
511
|
+
when 1
|
512
|
+
@url = args[0]
|
513
|
+
@name = args[0].sub(/.*\//, '').sub(/\.\w+/, '')
|
514
|
+
when 2
|
515
|
+
@url = args[0]
|
516
|
+
@name = args[1]
|
517
|
+
when 3
|
518
|
+
@url = args[0]
|
519
|
+
@name = args[1]
|
520
|
+
@distribution = args[2]
|
521
|
+
end
|
522
|
+
@url = "./#{url}" unless @url =~ /^\.\//
|
523
|
+
@distribution = "repo" unless @distribution
|
524
|
+
self
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
528
|
+
class Project < Tag
|
529
|
+
tags :model_version, :group_id, :artifact_id, :version, :name, :packaging, :description, :url, :developers, :licenses, :repositories, :plugin_repositories, :dependencies, :dependency_management, :properties, :build, :profiles
|
530
|
+
|
531
|
+
def initialize(group_id, artifact_id, version = "0.0.0", &block)
|
532
|
+
super(:model_version => "4.0.0", :artifact_id => artifact_id, :group_id => group_id, :version => version)
|
533
|
+
if block
|
534
|
+
block.call(self)
|
535
|
+
end
|
536
|
+
self
|
537
|
+
end
|
538
|
+
|
539
|
+
def _name
|
540
|
+
"project"
|
541
|
+
end
|
542
|
+
|
543
|
+
def name(val = nil)
|
544
|
+
self.name = val if val
|
545
|
+
@name
|
546
|
+
end
|
547
|
+
|
548
|
+
def name=(val)
|
549
|
+
@name = "<![CDATA[#{val}]]>"
|
550
|
+
end
|
551
|
+
|
552
|
+
def description(val = nil)
|
553
|
+
self.description = val if val
|
554
|
+
@description
|
555
|
+
end
|
556
|
+
|
557
|
+
def description=(val)
|
558
|
+
@description = "<![CDATA[#{val}]]>"
|
559
|
+
end
|
560
|
+
|
561
|
+
def execute_in_phase(phase, name = nil, &block)
|
562
|
+
gem_plugin = plugin("gem")
|
563
|
+
gem_plugin.in_phase(phase.to_s, name).execute_goal("execute_in_phase").with(:file => File.basename(current_file), :phase => phase)
|
564
|
+
executions_in_phase[phase.to_s] = block
|
565
|
+
gem_plugin
|
566
|
+
end
|
567
|
+
|
568
|
+
def executions_in_phase
|
569
|
+
@executions_in_phase ||= {}
|
570
|
+
end
|
571
|
+
|
572
|
+
def plugin(*args, &block)
|
573
|
+
build.plugins.get(*args, &block)
|
574
|
+
end
|
575
|
+
|
576
|
+
def plugin?(name)
|
577
|
+
build.plugin?(name)
|
578
|
+
end
|
579
|
+
|
580
|
+
def profile(*args, &block)
|
581
|
+
profiles.get(*args, &block)
|
582
|
+
end
|
583
|
+
|
584
|
+
def build
|
585
|
+
@build ||= Build.new
|
586
|
+
end
|
587
|
+
|
588
|
+
def developers(&block)
|
589
|
+
@developers ||= DeveloperHash.new
|
590
|
+
if block
|
591
|
+
block.call(@developers)
|
592
|
+
end
|
593
|
+
@developers
|
594
|
+
end
|
595
|
+
|
596
|
+
def licenses(&block)
|
597
|
+
@licenses ||= LicenseHash.new
|
598
|
+
if block
|
599
|
+
block.call(@licenses)
|
600
|
+
end
|
601
|
+
@licenses
|
602
|
+
end
|
603
|
+
|
604
|
+
def repositories(&block)
|
605
|
+
@repositories ||= ModelHash.new(Repository)
|
606
|
+
if block
|
607
|
+
block.call(@repositories)
|
608
|
+
end
|
609
|
+
@repositories
|
610
|
+
end
|
611
|
+
|
612
|
+
def repository(*args, &block)
|
613
|
+
repositories.get(*args, &block)
|
614
|
+
end
|
615
|
+
|
616
|
+
def plugin_repositories(&block)
|
617
|
+
@plugin_repositories ||= ModelHash.new(PluginRepository)
|
618
|
+
if block
|
619
|
+
block.call(@plugin_repositories)
|
620
|
+
end
|
621
|
+
@plugin_repositories
|
622
|
+
end
|
623
|
+
|
624
|
+
def plugin_repository(*args, &block)
|
625
|
+
plugin_repositories.get(*args, &block)
|
626
|
+
end
|
627
|
+
|
628
|
+
def dependencies(&block)
|
629
|
+
@dependencies ||= DepArray.new
|
630
|
+
if block
|
631
|
+
block.call(@dependencies)
|
632
|
+
end
|
633
|
+
@dependencies
|
634
|
+
end
|
635
|
+
|
636
|
+
def dependency_management(&block)
|
637
|
+
@dependency_management ||= DependencyManagement.new
|
638
|
+
if block
|
639
|
+
block.call(@dependency_management.dependencies)
|
640
|
+
end
|
641
|
+
@dependency_management.dependencies
|
642
|
+
end
|
643
|
+
|
644
|
+
def properties
|
645
|
+
@properties ||= Properties.new
|
646
|
+
@properties.map
|
647
|
+
end
|
648
|
+
|
649
|
+
def properties=(props)
|
650
|
+
if props.is_a? Hash
|
651
|
+
@properties = Properties.new(props)
|
652
|
+
else
|
653
|
+
@properties = props
|
654
|
+
end
|
655
|
+
end
|
656
|
+
|
657
|
+
def profiles(&block)
|
658
|
+
@profiles ||= ModelHash.new(Profile)
|
659
|
+
if block
|
660
|
+
block.call(@profiles)
|
661
|
+
end
|
662
|
+
@profiles
|
663
|
+
end
|
664
|
+
end
|
665
|
+
|
666
|
+
class HashTag < Tag
|
667
|
+
|
668
|
+
def initialize(name, args = {})
|
669
|
+
@name = name
|
670
|
+
@props = args
|
671
|
+
end
|
672
|
+
|
673
|
+
def [](key, value)
|
674
|
+
@props ||= {}
|
675
|
+
@props[key] = value
|
676
|
+
end
|
677
|
+
|
678
|
+
def to_xml(buf = "", indent = "")
|
679
|
+
buf << "#{indent}<#{@name}>\n"
|
680
|
+
map_to_xml(buf, indent, @props)
|
681
|
+
buf << "#{indent}</#{@name}>\n"
|
682
|
+
end
|
683
|
+
|
684
|
+
def map_to_xml(buf, indent, map)
|
685
|
+
# sort the hash over the keys
|
686
|
+
map.collect { |k,v| [k.to_s, v]}.sort.each do |k,v|
|
687
|
+
case v
|
688
|
+
when Hash
|
689
|
+
buf << "#{indent} <#{k}>\n"
|
690
|
+
map_to_xml(buf, indent + " ", v)
|
691
|
+
buf << "#{indent} </#{k}>\n"
|
692
|
+
when NamedArray
|
693
|
+
buf << "#{indent} <#{k}>\n"
|
694
|
+
v.each do|i|
|
695
|
+
buf << "#{indent} <#{v.name}>\n"
|
696
|
+
case i
|
697
|
+
when Hash
|
698
|
+
map_to_xml(buf, indent + " ", i)
|
699
|
+
end
|
700
|
+
buf << "#{indent} </#{v.name}>\n"
|
701
|
+
end
|
702
|
+
buf << "#{indent} </#{k}>\n"
|
703
|
+
when Array
|
704
|
+
buf << "#{indent} <#{k}>\n"
|
705
|
+
singular = k.to_s.sub(/s$/, '')
|
706
|
+
v.each do |i|
|
707
|
+
buf << "#{indent} <#{singular}>#{i}</#{singular}>\n"
|
708
|
+
end
|
709
|
+
buf << "#{indent} </#{k}>\n"
|
710
|
+
when /\n$/
|
711
|
+
buf << "#{indent} <#{k}>#{v}"
|
712
|
+
buf << "#{indent} </#{k}>\n"
|
713
|
+
else
|
714
|
+
buf << "#{indent} <#{k}>#{v}</#{k}>\n"
|
715
|
+
end
|
716
|
+
end
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
720
|
+
class Configuration < HashTag
|
721
|
+
|
722
|
+
def initialize(args = {})
|
723
|
+
super("configuration", args)
|
724
|
+
end
|
725
|
+
end
|
726
|
+
|
727
|
+
class Properties < HashTag
|
728
|
+
|
729
|
+
def initialize(args = {})
|
730
|
+
super("properties", args)
|
731
|
+
end
|
732
|
+
|
733
|
+
def map
|
734
|
+
@props
|
735
|
+
end
|
736
|
+
end
|
737
|
+
|
738
|
+
class ListItems < Tag
|
739
|
+
|
740
|
+
def initialize(name = nil)
|
741
|
+
@name = name
|
742
|
+
end
|
743
|
+
|
744
|
+
def add(item)
|
745
|
+
@items ||= Array.new
|
746
|
+
@items << item
|
747
|
+
end
|
748
|
+
alias :<< :add
|
749
|
+
|
750
|
+
def to_xml(buf = "", indent = "")
|
751
|
+
buf << "#{indent}<#{@name}>\n" if @name
|
752
|
+
@items.each do |i|
|
753
|
+
i.to_xml(buf, indent)
|
754
|
+
end
|
755
|
+
buf << "#{indent}</#{@name}>\n" if @name
|
756
|
+
end
|
757
|
+
|
758
|
+
end
|
759
|
+
|
760
|
+
class OS < Tag
|
761
|
+
tags :name, :family, :arch, :version
|
762
|
+
end
|
763
|
+
|
764
|
+
class Activation < Tag
|
765
|
+
tags :activeByDefault, :property, :os
|
766
|
+
def initialize
|
767
|
+
super({})
|
768
|
+
end
|
769
|
+
|
770
|
+
def add_property(name, value)
|
771
|
+
warn "deprecated, use 'property' instead"
|
772
|
+
property(name, value)
|
773
|
+
end
|
774
|
+
|
775
|
+
def property(name, value)
|
776
|
+
if name && value
|
777
|
+
# TODO make more then one property
|
778
|
+
raise "more then one property is not implemented: #{@property.name} => #{@property.value}" if @property
|
779
|
+
@property ||= ListItems.new
|
780
|
+
@property << Property.new(:name => name, :value => value)
|
781
|
+
end
|
782
|
+
self
|
783
|
+
end
|
784
|
+
|
785
|
+
def os(&block)
|
786
|
+
@os ||= OS.new
|
787
|
+
block.call(@os) if block
|
788
|
+
@os
|
789
|
+
end
|
790
|
+
|
791
|
+
def as_default
|
792
|
+
warn "deprecated, use 'by_default' instead"
|
793
|
+
by_default
|
794
|
+
end
|
795
|
+
|
796
|
+
def by_default(value = true)
|
797
|
+
@activeByDefault = value
|
798
|
+
self
|
799
|
+
end
|
800
|
+
end
|
801
|
+
|
802
|
+
class Property < Tag
|
803
|
+
tags :name, :value
|
804
|
+
end
|
805
|
+
|
806
|
+
class Repository < Tag
|
807
|
+
tags :id, :name, :url, :releases, :snapshots
|
808
|
+
def initialize(id, &block)
|
809
|
+
super({:id => id, :url => url})
|
810
|
+
if block
|
811
|
+
block.call(self)
|
812
|
+
end
|
813
|
+
self
|
814
|
+
end
|
815
|
+
|
816
|
+
def releases(args = {})
|
817
|
+
@releases ||= args
|
818
|
+
end
|
819
|
+
|
820
|
+
def snapshots(args = {})
|
821
|
+
@snapshots ||= args
|
822
|
+
end
|
823
|
+
end
|
824
|
+
|
825
|
+
class PluginRepository < Repository
|
826
|
+
tags :dummy
|
827
|
+
def _name
|
828
|
+
"pluginRepository"
|
829
|
+
end
|
830
|
+
end
|
831
|
+
end
|
832
|
+
end
|