ivy4r 0.2.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,30 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Cachepath < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:pathid, true),
8
+ Parameter.new(:conf, false),
9
+ Parameter.new(:inline, false),
10
+ Parameter.new(:organisation, false),
11
+ Parameter.new(:module, false),
12
+ Parameter.new(:revision, false),
13
+ Parameter.new(:branch, false),
14
+ Parameter.new(:type, false),
15
+ Parameter.new(:settingsRef, false),
16
+ ]
17
+ end
18
+
19
+ def create_return_values
20
+ path = ant_references.find { |current| current[0] == params[:pathid] }[1]
21
+ raise "Could not get path for confs: #{params.inspect}" unless path && path.respond_to?(:list)
22
+ path.list.map {|a| a.to_s }
23
+ end
24
+
25
+ protected
26
+ def execute_ivy
27
+ call_nested :ivy_cachepath => params
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Cleancache < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:settingsRef, false)
8
+ ]
9
+ end
10
+
11
+ protected
12
+ def execute_ivy
13
+ call_nested :ivy_cleancache => params
14
+ end
15
+
16
+ def create_return_values
17
+ nil
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Configure < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:id, false),
8
+ Parameter.new(:file, false),
9
+ Parameter.new(:url, false),
10
+ Parameter.new(:host, false),
11
+ Parameter.new(:realm,false),
12
+ Parameter.new(:username, false),
13
+ Parameter.new(:passwd, false)
14
+ ]
15
+ end
16
+
17
+ def result_property_values
18
+ property = params[:id] || 'ivy.instance'
19
+ [
20
+ ResultValue.new(/.*\.#{property}/, nil)
21
+ ]
22
+ end
23
+
24
+ protected
25
+ def execute_ivy
26
+ call_nested :ivy_configure => params
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Findrevision < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:organisation, true),
8
+ Parameter.new(:module, true),
9
+ Parameter.new(:branch, false),
10
+ Parameter.new(:revision, true),
11
+ Parameter.new(:property, false),
12
+ Parameter.new(:settingsRef, false)
13
+ ]
14
+ end
15
+
16
+ def result_property_values
17
+ property = params[:property] || 'ivy.revision'
18
+ [
19
+ ResultValue.new("#{property}", nil)
20
+ ]
21
+ end
22
+
23
+ protected
24
+ def execute_ivy
25
+ call_nested :ivy_findrevision => params
26
+ end
27
+
28
+ def create_return_values
29
+ values = result_properties.values
30
+ raise "Could not retrieve revision for '#{params.inspect}'" if values.size > 1
31
+ values.size == 1 ? values[0] : nil
32
+ end
33
+ end
34
+ end
data/lib/ivy/info.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Info < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:file, true),
8
+ Parameter.new(:organisation, false),
9
+ Parameter.new(:module, false),
10
+ Parameter.new(:branch, false),
11
+ Parameter.new(:revision, false),
12
+ Parameter.new(:property, false),
13
+ Parameter.new(:settingsRef, false)
14
+ ]
15
+ end
16
+
17
+ def result_property_values
18
+ property = params[:property] || 'ivy'
19
+ [
20
+ ResultValue.new("#{property}.organisation", nil),
21
+ ResultValue.new("#{property}.module", nil),
22
+ ResultValue.new("#{property}.branch", nil),
23
+ ResultValue.new("#{property}.revision", nil),
24
+ ResultValue.new("#{property}.status", nil),
25
+ ResultValue.new(/#{property}.extra\..*/, nil),
26
+ ResultValue.new("#{property}.configurations", Ivy::COMMA_SPLITTER),
27
+ ResultValue.new("#{property}.public.configurations", Ivy::COMMA_SPLITTER)
28
+ ]
29
+ end
30
+
31
+ protected
32
+ def execute_ivy
33
+ call_nested :ivy_info => params
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Listmodules < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:organisation, true),
8
+ Parameter.new(:module, true),
9
+ Parameter.new(:branch, false),
10
+ Parameter.new(:revision, true),
11
+ Parameter.new(:matcher, false),
12
+ Parameter.new(:property, true),
13
+ Parameter.new(:value, true),
14
+ Parameter.new(:settingsRef, false),
15
+ ]
16
+ end
17
+
18
+ protected
19
+ def before_hook
20
+ @cached_property_names = ant_properties.map {|key, value| key }
21
+ end
22
+
23
+ def after_hook
24
+ @cached_property_names = nil
25
+ end
26
+
27
+ def execute_ivy
28
+ call_nested :ivy_listmodules => params
29
+ end
30
+
31
+ def create_return_values
32
+ ant_properties.reject { |key, value| @cached_property_names.member? key }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Makepom < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:ivyfile, true),
8
+ Parameter.new(:pomfile, true),
9
+ Parameter.new(:nested, true),
10
+ Parameter.new(:settingsRef, false)
11
+ ]
12
+ end
13
+
14
+ protected
15
+ def execute_ivy
16
+ call_nested :ivy_makepom => params
17
+ end
18
+
19
+ def create_return_values
20
+ IO.read(params[:pomfile])
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Publish < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:artifactspattern, false),
8
+ Parameter.new(:resolver, true),
9
+ Parameter.new(:pubrevision, false),
10
+ Parameter.new(:pubbranch, false),
11
+ Parameter.new(:forcedeliver, false),
12
+ Parameter.new(:update, false),
13
+ Parameter.new(:validate, false),
14
+ Parameter.new(:replacedynamicrev, false),
15
+ Parameter.new(:publishivy, false),
16
+ Parameter.new(:conf, false),
17
+ Parameter.new(:overwrite, false),
18
+ Parameter.new(:warnonmissing, false),
19
+ Parameter.new(:srcivypattern, false),
20
+ Parameter.new(:srcivypattern, false),
21
+ Parameter.new(:pubdate, false),
22
+ Parameter.new(:status, false),
23
+ Parameter.new(:delivertarget, false),
24
+ Parameter.new(:settingsRef, false)
25
+ ]
26
+ end
27
+
28
+ protected
29
+ def execute_ivy
30
+ call_nested :ivy_publish => params
31
+ end
32
+
33
+ def create_return_values
34
+ nil
35
+ end
36
+ end
37
+ end
data/lib/ivy/report.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Report < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:todir, false),
8
+ Parameter.new(:nested, false),
9
+ Parameter.new(:outputpattern, false),
10
+ Parameter.new(:xsl, false),
11
+ Parameter.new(:xml, false),
12
+ Parameter.new(:graph, false),
13
+ Parameter.new(:dot, false),
14
+ Parameter.new(:conf, false),
15
+ Parameter.new(:organisation, false),
16
+ Parameter.new(:module, false),
17
+ Parameter.new(:validate, false),
18
+ Parameter.new(:xslfile, false),
19
+ Parameter.new(:settingsRef, false),
20
+ Parameter.new(:resolveId, false)
21
+ ]
22
+ end
23
+
24
+ protected
25
+ def execute_ivy
26
+ call_nested :ivy_report => params
27
+ end
28
+
29
+ def create_return_values
30
+ nil
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Resolve < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:file, false),
8
+ Parameter.new(:conf, false),
9
+ Parameter.new(:refresh, false),
10
+ Parameter.new(:resolveMode, false),
11
+ Parameter.new(:inline, false),
12
+ Parameter.new(:keep, false),
13
+ Parameter.new(:organisation, false),
14
+ Parameter.new(:module, false),
15
+ Parameter.new(:revision, false),
16
+ Parameter.new(:branch, false),
17
+ Parameter.new(:type, false),
18
+ Parameter.new(:haltonfailure, false),
19
+ Parameter.new(:failureproperty, false),
20
+ Parameter.new(:transitive, false),
21
+ Parameter.new(:showprogress, false),
22
+ Parameter.new(:validate, false),
23
+ Parameter.new(:settingsRef, false),
24
+ Parameter.new(:resolveId, false),
25
+ Parameter.new(:log, false)
26
+ ]
27
+ end
28
+
29
+ def result_property_values
30
+ property = params[:resolveId] ? ".#{params[:resolveId]}" : ''
31
+ [
32
+ ResultValue.new("ivy.organisation#{property}", nil),
33
+ ResultValue.new("ivy.module#{property}", nil),
34
+ ResultValue.new("ivy.revision#{property}", nil),
35
+ ResultValue.new("ivy.resolved.configurations#{property}", Ivy::COMMA_SPLITTER)
36
+ ]
37
+ end
38
+
39
+ protected
40
+ def execute_ivy
41
+ call_nested :ivy_resolve => params
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Retrieve < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:pattern, false),
8
+ Parameter.new(:ivypattern, false),
9
+ Parameter.new(:conf, false),
10
+ Parameter.new(:sync, false),
11
+ Parameter.new(:type, false),
12
+ Parameter.new(:symlink, false),
13
+ Parameter.new(:settingsRef, false),
14
+ Parameter.new(:log, false)
15
+ ]
16
+ end
17
+
18
+ protected
19
+ def execute_ivy
20
+ call_nested :ivy_retrieve => params
21
+ end
22
+
23
+ def create_return_values
24
+ nil
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require 'ivy/configure'
2
+
3
+ module Ivy
4
+ class Settings < Ivy::Configure
5
+
6
+ def create_return_values
7
+ nil
8
+ end
9
+
10
+ protected
11
+ def execute_ivy
12
+ call_nested :ivy_settings => params
13
+ end
14
+ end
15
+ end
data/lib/ivy/target.rb ADDED
@@ -0,0 +1,128 @@
1
+ require 'facets'
2
+
3
+ module Ivy
4
+
5
+ # Base class with general logic to call a Ivy ant target
6
+ class Target
7
+ attr_reader :params
8
+
9
+ def initialize(ant)
10
+ @ant = ant
11
+ end
12
+
13
+ # Executes this ivy target with given parameters returning a result.
14
+ # __params__ can be a single Hash or an Array with or without a Hash as last value.
15
+ # every value in array will be converted to string and set to __true__.
16
+ #
17
+ # I.e. <tt>[:force, 'validate', {'name' => 'Blub'}]</tt>
18
+ # results in parameters <tt>{'force'=>true, 'validate' => true, 'name'=>'Blub'}</tt>
19
+ def execute(*params)
20
+ @params = {}
21
+ params.pop.each { |key, value| @params[key] = value } if Hash === params.last
22
+ params.each { |key| @params[key.to_s] = true }
23
+
24
+ validate
25
+ before_hook
26
+ execute_ivy
27
+ create_return_values
28
+ ensure
29
+ after_hook
30
+ end
31
+
32
+ protected
33
+
34
+ # Validates provided hash of parameters, raises an exception if any mandatory parameter is
35
+ # missing or an unknown parameter has been provided.
36
+ def validate
37
+ unknown = params.keys - symbols(parameter)
38
+ raise ArgumentError, "Unknown parameters '#{unknown.join(', ')}' for #{self.class}" unless unknown.empty?
39
+ missing = symbols(mandatory_parameter).find_all { |p| params.keys.member?(p) == false }
40
+ raise ArgumentError, "Missing mandatory parameters '#{missing.join(', ')}' for #{self.class}" unless missing.empty?
41
+ end
42
+
43
+ # Hook method called after validation but before #execute_ivy
44
+ # overwrite for special actions needed
45
+ def before_hook
46
+ end
47
+
48
+ # After hook is always called for #execute within +ensure+ block
49
+ # overwrite for special clean up
50
+ def after_hook
51
+ end
52
+
53
+ # Helper to call the nested ant targets recursively if nessecary. Must be called within +do+ +end+
54
+ # block of ant target to work.
55
+ def call_nested(nested)
56
+ if nested
57
+ nested.each do |method, paramlist|
58
+ [paramlist].flatten.each do |params|
59
+ if params.member? :nested
60
+ p = params.dup
61
+ nest = p.delete(:nested)
62
+ @ant.send(method, p, &lambda {call_nested(nest)})
63
+ else
64
+ @ant.send(method, params)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ # Creates the result for the execution by default it iterates of the ant properties and fetches
72
+ # all properties that match the result properties for target as a hash. Overwrite to provide
73
+ # a different result
74
+ def create_return_values
75
+ result_properties
76
+ end
77
+
78
+ # Fetches all result properties for called target and returns them as hash
79
+ def result_properties
80
+ result = ant_properties.map do |p|
81
+ rp = result_property_values.find { |rp| rp.matcher === p[0] }
82
+ rp ? [p[0], rp.parse(p[1])].flatten : nil
83
+ end.compact.to_h(:multi)
84
+ result.update_values do |v|
85
+ case v.size
86
+ when 0
87
+ nil
88
+ when 1
89
+ v[0]
90
+ else
91
+ v
92
+ end
93
+ end
94
+
95
+ result
96
+ end
97
+
98
+ def mandatory_parameter
99
+ parameter.find_all {|p| p.mandatory? }
100
+ end
101
+
102
+ def symbols(params)
103
+ params.map{|p| p.symbol}
104
+ end
105
+
106
+ def ant_properties
107
+ @ant.project.properties
108
+ end
109
+
110
+ def ant_references
111
+ @ant.project.references
112
+ end
113
+ end
114
+
115
+ COMMA_SPLITTER = Proc.new {|value| value.to_s.split(',').map(&:strip)}
116
+
117
+ Parameter = Struct.new(:symbol, :mandatory) do
118
+ def mandatory?
119
+ mandatory
120
+ end
121
+ end
122
+
123
+ ResultValue = Struct.new(:matcher, :parser) do
124
+ def parse(value)
125
+ parser ? parser.call(value) : value
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,49 @@
1
+ require 'ivy/target'
2
+ require 'ivy/info'
3
+ require 'ivy/settings'
4
+ require 'ivy/configure'
5
+ require 'ivy/cleancache'
6
+ require 'ivy/resolve'
7
+ require 'ivy/makepom'
8
+ require 'ivy/cachepath'
9
+ #require 'ivy/listmodules'
10
+ require 'ivy/artifactproperty'
11
+ require 'ivy/artifactreport'
12
+ require 'ivy/findrevision'
13
+ require 'ivy/buildnumber'
14
+ require 'ivy/retrieve'
15
+ require 'ivy/publish'
16
+ require 'ivy/report'
17
+ require 'ivy/buildlist'
18
+
19
+ =begin
20
+ finished
21
+ * info
22
+ * settings
23
+ * configure
24
+ * cleancache
25
+ * buildnumber
26
+ * findrevision
27
+ * cachepath
28
+ * artifactreport
29
+ * resolve
30
+ * makepom
31
+ * retrieve
32
+ * publish
33
+ * artifactproperty
34
+ * report
35
+ o Using yEd to layout report graphs
36
+ * buildlist
37
+
38
+ TODO
39
+ * deliver
40
+ * install
41
+ * repreport
42
+
43
+ not working:
44
+ * listmodules
45
+
46
+ makes no sense:
47
+ * cachefileset
48
+ * var
49
+ =end