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.
@@ -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