cigale 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2eb61ed014851e56049896db0a290096bdefb6a4
4
- data.tar.gz: 7a754966a5b5341078cc55ca3114e09a53755ac5
3
+ metadata.gz: 6e8da52824902b0708fadf47bfc2518f011e8e22
4
+ data.tar.gz: e538664eeb77c7764ad2da5d4942385e3ca74e0a
5
5
  SHA512:
6
- metadata.gz: a3f5c930de2cd19c7e3c032ac494418a51259412f58612d2b09c97b6174a7d26e0e0b40894972019190c3114d12733600b6fcb49fbd23fa5da1875dbd0f8b3c5
7
- data.tar.gz: 2582f5e78e9768a5eb9dfb245ca6f3d96e23d10d073b296799d061a7986e5532b85e7d2fff9c1cc7b1f1b89e2765e4b96317c6099db919bc9128ef99368a03e0
6
+ metadata.gz: f2db3a64ecbb2c7e84f22faded75e2221152f9c1f0e6614cdf90fc837f8bac5ceb9d42765b1f1aa80bdf09f35da2e6b90f09c29734eabba0f8f04b5becf9f296
7
+ data.tar.gz: cf9f8e9df365065e69379772766b90194cfe1c4636910efdc7fd1a4bf6bcc911cbf424eebfed1bec5f45ec10d4ca4105d2b213f0db684d629d1d26cb20d69f87
data/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ # 0.3.0
4
+
5
+ * Add support for splats, see [issue #2](https://github.com/itchio/cigale/issues/2)
6
+
7
+ # 0.2.0
8
+
9
+ * Add support for `skip-tag` in scm/git
10
+
11
+ # 0.1.0
12
+
13
+ * Initial release
14
+ * Compatibility with most jenkins-job-builder fixtures
data/README.md CHANGED
@@ -99,6 +99,56 @@ If you're unsure what something will expand to, you can use the `dump` command:
99
99
  cigale dump my-def.yml -o tmp
100
100
  ```
101
101
 
102
+ ## Splats
103
+
104
+ Sometimes you want to do this:
105
+
106
+ ```yaml
107
+ - :cool-wrappers:
108
+ - ansi-color
109
+ - inject
110
+
111
+ - job:
112
+ name: foobar
113
+ wrappers:
114
+ - .cool-wrappers:
115
+ - xvfb
116
+
117
+ ```
118
+
119
+ But that will expand to:
120
+
121
+ ```yaml
122
+ - job:
123
+ name: foobar
124
+ wrappers:
125
+ - - ansi-color
126
+ - inject
127
+ - xvfb
128
+ ```
129
+
130
+ Which isn't valid. What you want instead is use a splat when calling
131
+ cool-wrappers (see [issue #2](https://github.com/itchio/cigale/issues/2))
132
+
133
+ ```yaml
134
+ - job:
135
+ name: foobar
136
+ wrappers:
137
+ - ..cool-wrappers:
138
+ - xvfb
139
+ ```
140
+
141
+ Which will expand to the expected result:
142
+
143
+ ```yaml
144
+ - job:
145
+ name: foobar
146
+ wrappers:
147
+ - ansi-color
148
+ - inject
149
+ - xvfb
150
+ ```
151
+
102
152
  ## Contributing
103
153
 
104
154
  1. Fork it ( https://github.com/itchio/cigale/fork )
@@ -2,6 +2,16 @@
2
2
  require "cigale/exts"
3
3
 
4
4
  module Cigale
5
+ class Splat
6
+ def initialize (elems)
7
+ @elems = elems
8
+ end
9
+
10
+ def elems
11
+ @elems
12
+ end
13
+ end
14
+
5
15
  class MacroContext < Exts
6
16
  def initialize (options)
7
17
  @library = options[:library]
@@ -21,34 +31,69 @@ module Cigale
21
31
  case entity
22
32
  when Array
23
33
  # list of things, need to expand each individually
24
- entity.map do |x|
25
- expand(x)
34
+ array = []
35
+
36
+ entity.each do |x|
37
+ case child = expand(x)
38
+ when Splat
39
+ array += child.elems
40
+ else
41
+ array << child
42
+ end
26
43
  end
44
+
45
+ array
27
46
  when Hash
28
- entity.map do |k, v|
47
+ pairs = []
48
+
49
+ entity.each do |k, v|
29
50
  case k
30
51
  when /^\.(.*)$/
31
52
  # macro call
32
53
  if expanding?
33
54
  # keep child macro as-is for later expansion
34
- [k, expand(v)]
55
+ pairs << [k, expand(v)]
35
56
  else
36
- mdef = lookup($1)
57
+ splat = false
58
+ mname = $1
59
+
60
+ # cf. https://github.com/itchio/cigale/issues/2 for 'spec'
61
+ if mname =~ /^\./
62
+ mname = mname[1..-1]
63
+ splat = true
64
+ end
65
+
66
+ mdef = lookup(mname)
37
67
 
38
68
  res = self.with_params(v).expand(mdef)
39
69
  case res
40
70
  when Hash
41
- first_pair(res)
42
- when String, Array
43
- return res
71
+ if splat
72
+ raise "Unnecessary use of splat: #{entity.inspect}"
73
+ end
74
+ res.each_pair { |p| pairs << p }
75
+ when Array
76
+ if splat
77
+ if entity.size > 1
78
+ raise "Invalid array splat (needs to be single-pair hash): #{entity.inspect}"
79
+ end
80
+ return Splat.new(res)
81
+ else
82
+ return res
83
+ end
44
84
  else
45
- raise "Invalid macro expansion result: #{res.inspect}"
85
+ if splat
86
+ raise "Invalid macro expansion result for splat: #{res.inspect}"
87
+ end
88
+ return res
46
89
  end
47
90
  end
48
91
  else
49
- [k, expand(v)]
92
+ pairs << [k, expand(v)]
50
93
  end
51
- end.to_h
94
+ end
95
+
96
+ pairs.to_h
52
97
  else
53
98
  # not a list, not a hash
54
99
  interpolate(entity)
@@ -1,3 +1,3 @@
1
1
  module Cigale
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,9 @@
1
+ ---
2
+ job:
3
+ name: splats
4
+ builders:
5
+ - shell: echo 0
6
+ - - shell: echo 1
7
+ - shell: echo 2
8
+ - shell: echo 3
9
+ - shell: echo 4
@@ -0,0 +1,11 @@
1
+ - :multi-shell:
2
+ - shell: "echo 1"
3
+ - shell: "echo 2"
4
+ - shell: "echo 3"
5
+
6
+ - job:
7
+ name: "splats"
8
+ builders:
9
+ - shell: "echo 0"
10
+ - .multi-shell:
11
+ - shell: "echo 4"
@@ -0,0 +1,9 @@
1
+ ---
2
+ job:
3
+ name: splats
4
+ builders:
5
+ - shell: echo 0
6
+ - shell: echo 1
7
+ - shell: echo 2
8
+ - shell: echo 3
9
+ - shell: echo 4
@@ -0,0 +1,11 @@
1
+ - :multi-shell:
2
+ - shell: "echo 1"
3
+ - shell: "echo 2"
4
+ - shell: "echo 3"
5
+
6
+ - job:
7
+ name: "splats"
8
+ builders:
9
+ - shell: "echo 0"
10
+ - ..multi-shell:
11
+ - shell: "echo 4"
@@ -0,0 +1,8 @@
1
+ ---
2
+ job:
3
+ name: splats
4
+ a: A
5
+ b: B
6
+ c: C
7
+ d: D
8
+ e: E
@@ -0,0 +1,10 @@
1
+ - :some-keys:
2
+ b: "B"
3
+ c: "C"
4
+ d: "D"
5
+
6
+ - job:
7
+ name: "splats"
8
+ a: "A"
9
+ .some-keys:
10
+ e: "E"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cigale
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amos Wenger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-08 00:00:00.000000000 Z
11
+ date: 2015-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -132,6 +132,7 @@ extra_rdoc_files: []
132
132
  files:
133
133
  - ".gitignore"
134
134
  - ".travis.yml"
135
+ - CHANGELOG.md
135
136
  - Gemfile
136
137
  - LICENSE.txt
137
138
  - README.md
@@ -333,6 +334,12 @@ files:
333
334
  - spec/fixtures/macros/macro-scm001.yml
334
335
  - spec/fixtures/macros/macro-scm002.expanded.yml
335
336
  - spec/fixtures/macros/macro-scm002.yml
337
+ - spec/fixtures/macros/splats001.expanded.yml
338
+ - spec/fixtures/macros/splats001.yml
339
+ - spec/fixtures/macros/splats002.expanded.yml
340
+ - spec/fixtures/macros/splats002.yml
341
+ - spec/fixtures/macros/splats003.expanded.yml
342
+ - spec/fixtures/macros/splats003.yml
336
343
  - spec/fixtures/parity/builders/__init__.py
337
344
  - spec/fixtures/parity/builders/fixtures/ant001.xml
338
345
  - spec/fixtures/parity/builders/fixtures/ant001.yaml
@@ -1331,6 +1338,12 @@ test_files:
1331
1338
  - spec/fixtures/macros/macro-scm001.yml
1332
1339
  - spec/fixtures/macros/macro-scm002.expanded.yml
1333
1340
  - spec/fixtures/macros/macro-scm002.yml
1341
+ - spec/fixtures/macros/splats001.expanded.yml
1342
+ - spec/fixtures/macros/splats001.yml
1343
+ - spec/fixtures/macros/splats002.expanded.yml
1344
+ - spec/fixtures/macros/splats002.yml
1345
+ - spec/fixtures/macros/splats003.expanded.yml
1346
+ - spec/fixtures/macros/splats003.yml
1334
1347
  - spec/fixtures/parity/builders/__init__.py
1335
1348
  - spec/fixtures/parity/builders/fixtures/ant001.xml
1336
1349
  - spec/fixtures/parity/builders/fixtures/ant001.yaml