trollolo 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -2
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/README.md +15 -0
- data/lib/burndown_chart.rb +28 -0
- data/lib/burndown_data.rb +1 -0
- data/lib/cli.rb +32 -0
- data/lib/trello_wrapper.rb +25 -0
- data/lib/version.rb +1 -1
- data/spec/integration/command_line_spec.rb +16 -17
- data/spec/integration/create_burndown_spec.rb +10 -12
- data/spec/integration/integration_spec_helper.rb +1 -0
- data/spec/unit/burndown_chart_spec.rb +29 -0
- data/spec/unit/cli_spec.rb +41 -0
- data/spec/unit/trello_wrapper_spec.rb +37 -0
- data/trollolo.gemspec +1 -0
- data/yes_ship_it.conf +2 -9
- metadata +3 -4
- data/spec/integration/support/aruba_hook.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 822cffbe55d2f6d6003d3efe7e5df4afd16a9bc1
|
4
|
+
data.tar.gz: 48ba1dc0d72deb98df2620cb09ac3413a64a682b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80cf5c482a836eba4ed4743693cfb7c0acc459e955aa17c7e33e1b3ab3ade4fb0d2f8babb077f86829aa08ad9821256865c47b28f8ac421f14de4ccf04550753
|
7
|
+
data.tar.gz: 7974a309702986ff401670b20f24cb12c55d23e644e50bce8bbf806ae089bd0b385c6043ca64aab6598770003a5500e47bc28e04d2f6497dda5c26e246e49261
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Trollolo Changelog
|
2
2
|
|
3
|
+
## Version 0.0.7
|
4
|
+
|
5
|
+
* Add set-description command
|
6
|
+
* Add get-description command
|
7
|
+
* Add make-cover command to set an existing image as cover
|
8
|
+
* Add option to push burndown data to an API endpoint
|
9
|
+
|
3
10
|
## Version 0.0.6
|
4
11
|
|
5
12
|
* Track cards with unplanned work separately
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -91,6 +91,21 @@ This will create a new data file for the next sprint number and populate it
|
|
91
91
|
with initial data taken from the Trello board. You are ready to go for the
|
92
92
|
sprint now and can continue with calling `trollolo burndown` after each daily.
|
93
93
|
|
94
|
+
To push the current state of the scrum process (current day) to an api endpoint call:
|
95
|
+
|
96
|
+
trollolo burndown --push-to-api URL
|
97
|
+
|
98
|
+
Trollolo will send a json encoded POST request to `URL` with the same structure as the generated burndown yaml file.
|
99
|
+
|
100
|
+
__Note:__ If no fast lane cards are in this sprint the fast_lane structure won't appear in the json structure
|
101
|
+
|
102
|
+
The specified `URL` can contain placeholders which will be replaced:
|
103
|
+
|
104
|
+
:sprint => Current running sprint
|
105
|
+
:board => Board ID
|
106
|
+
|
107
|
+
|
108
|
+
|
94
109
|
To generate the actual burndown chart, go to the working directory and call:
|
95
110
|
|
96
111
|
trollolo plot SPRINT_NUMBER
|
data/lib/burndown_chart.rb
CHANGED
@@ -106,6 +106,30 @@ class BurndownChart
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
+
|
110
|
+
# Writes a POST request to url
|
111
|
+
def push_to_api(url, burndown_data)
|
112
|
+
|
113
|
+
url = url.gsub(':sprint', sprint.to_s)
|
114
|
+
.gsub(':board', board_id.to_s)
|
115
|
+
|
116
|
+
begin
|
117
|
+
uri = URI.parse(url)
|
118
|
+
push = Net::HTTP::Post.new(uri.path, { 'Content-Type' => 'application/json' })
|
119
|
+
push.body = burndown_data.to_hash.to_json
|
120
|
+
|
121
|
+
Net::HTTP.start(uri.hostname, uri.port) do |http|
|
122
|
+
http.request(push)
|
123
|
+
end
|
124
|
+
rescue StandardError => e
|
125
|
+
# Instead of catching 20 different exceptions which can be
|
126
|
+
# thrown by URI and Http::, StandardError is catched.
|
127
|
+
# Fix this if there is a better solution
|
128
|
+
raise TrolloloError.new("pushing to endpoint failed: #{e.message}")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
109
133
|
def burndown_data_filename
|
110
134
|
"burndown-data-#{sprint.to_s.rjust(2,"0")}.yaml"
|
111
135
|
end
|
@@ -179,6 +203,10 @@ class BurndownChart
|
|
179
203
|
if options[:plot]
|
180
204
|
BurndownChart.plot(self.sprint, options)
|
181
205
|
end
|
206
|
+
|
207
|
+
if options.has_key?('push-to-api')
|
208
|
+
push_to_api(options['push-to-api'], data)
|
209
|
+
end
|
182
210
|
end
|
183
211
|
|
184
212
|
def create_next_sprint(burndown_dir)
|
data/lib/burndown_data.rb
CHANGED
data/lib/cli.rb
CHANGED
@@ -169,6 +169,7 @@ EOT
|
|
169
169
|
option :plot, :type => :boolean, :desc => "also plot the new data"
|
170
170
|
option 'with-fast-lane', :desc => "Plot Fast Lane with new cards bars", :required => false, :type => :boolean
|
171
171
|
option 'no-tasks', :desc => "Do not plot tasks line", :required => false, :type => :boolean
|
172
|
+
option 'push-to-api', :desc => 'Push collected data to api endpoint (in json)', :required => false
|
172
173
|
def burndown
|
173
174
|
process_global_options options
|
174
175
|
require_trello_credentials
|
@@ -235,6 +236,27 @@ EOT
|
|
235
236
|
puts "Home page: #{o.url}"
|
236
237
|
end
|
237
238
|
|
239
|
+
desc "get-description", "Reads description"
|
240
|
+
option "card-id", :desc => "Id of card", :required => true
|
241
|
+
def get_description
|
242
|
+
process_global_options options
|
243
|
+
require_trello_credentials
|
244
|
+
|
245
|
+
trello = TrelloWrapper.new(@@settings)
|
246
|
+
|
247
|
+
puts trello.get_description(options["card-id"])
|
248
|
+
end
|
249
|
+
|
250
|
+
desc "set-description", "Writes description read from standard input"
|
251
|
+
option "card-id", :desc => "Id of card", :required => true
|
252
|
+
def set_description
|
253
|
+
process_global_options options
|
254
|
+
require_trello_credentials
|
255
|
+
|
256
|
+
trello = TrelloWrapper.new(@@settings)
|
257
|
+
trello.set_description(options["card-id"], STDIN.read)
|
258
|
+
end
|
259
|
+
|
238
260
|
desc "organization_members", "Show organization members"
|
239
261
|
option "org-name", :desc => "Name of organization", :required => true
|
240
262
|
def organization_members
|
@@ -261,6 +283,16 @@ EOT
|
|
261
283
|
trello.add_attachment(options["card-id"], filename)
|
262
284
|
end
|
263
285
|
|
286
|
+
desc "make-cover <filename>", "Make existing picture the cover"
|
287
|
+
option "card-id", :desc => "Id of card", :required => true
|
288
|
+
def make_cover(filename)
|
289
|
+
process_global_options(options)
|
290
|
+
require_trello_credentials
|
291
|
+
|
292
|
+
trello = TrelloWrapper.new(@@settings)
|
293
|
+
trello.make_cover(options["card-id"], filename)
|
294
|
+
end
|
295
|
+
|
264
296
|
private
|
265
297
|
|
266
298
|
def process_global_options options
|
data/lib/trello_wrapper.rb
CHANGED
@@ -55,6 +55,31 @@ class TrelloWrapper
|
|
55
55
|
card.add_attachment(File.open(filename, "rb"))
|
56
56
|
end
|
57
57
|
|
58
|
+
def make_cover(card_id, image_name)
|
59
|
+
attachment_id = attachment_id_by_name(card_id, image_name)
|
60
|
+
raise("Error: The attachment with the name '#{image_name}' was not found") if !attachment_id
|
61
|
+
client.put("/cards/#{card_id}/idAttachmentCover?value=#{attachment_id}")
|
62
|
+
end
|
63
|
+
|
64
|
+
def attachment_id_by_name(card_id, image_name)
|
65
|
+
json = JSON.parse(client.get("/cards/#{card_id}/attachments?fields=name"))
|
66
|
+
attachment = json.find{ |e| e["name"] == image_name }
|
67
|
+
if attachment
|
68
|
+
attachment["id"]
|
69
|
+
else
|
70
|
+
nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_description(card_id)
|
75
|
+
card = Trello::Card.find(card_id)
|
76
|
+
card.desc
|
77
|
+
end
|
78
|
+
|
79
|
+
def set_description(card_id, description)
|
80
|
+
client.put("/cards/#{card_id}/desc?value=#{description}")
|
81
|
+
end
|
82
|
+
|
58
83
|
private
|
59
84
|
|
60
85
|
def init_trello
|
data/lib/version.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative 'integration_spec_helper'
|
2
2
|
|
3
3
|
include GivenFilesystemSpecHelpers
|
4
|
+
include CliTester
|
4
5
|
|
5
6
|
def trollolo_cmd
|
6
7
|
File.expand_path('../wrapper/trollolo_wrapper',__FILE__)
|
@@ -17,37 +18,35 @@ end
|
|
17
18
|
describe "command line" do
|
18
19
|
|
19
20
|
it "processes help option" do
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
result = run_command(args: ["-h"])
|
22
|
+
expect(result).to exit_with_success(/Commands:/)
|
23
|
+
expect(result.stdout).to match("trollolo help")
|
24
|
+
expect(result.stdout).to match("Options:")
|
24
25
|
end
|
25
26
|
|
26
27
|
it "throws error on invalid command" do
|
27
|
-
|
28
|
-
|
28
|
+
result = run_command(cmd: trollolo_cmd, args: ["invalid_command"])
|
29
|
+
expect(result).to exit_with_error(1, "Could not find command \"invalid_command\".\n")
|
29
30
|
end
|
30
|
-
|
31
|
+
|
31
32
|
it "asks for authorization data" do
|
32
|
-
|
33
|
-
assert_exit_status 0
|
33
|
+
expect(run_command(cmd: credentials_input_wrapper, args: ["get-cards", "--board-id=myboardid"])).to exit_with_success("")
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "burndown chart" do
|
37
37
|
use_given_filesystem
|
38
|
-
|
38
|
+
|
39
39
|
it "inits burndown directory" do
|
40
40
|
path = given_directory
|
41
|
-
|
42
|
-
|
41
|
+
result = run_command(cmd: trollolo_cmd, args: ["burndown-init", "-o", "#{path}", "--board-id=myboardid"])
|
42
|
+
expect(result).to exit_with_success(/Preparing/)
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
it "fails, if burndown data is not found" do
|
46
46
|
path = given_directory
|
47
|
-
|
48
|
-
|
49
|
-
assert_partial_output "burndown-data-01.yaml' not found", all_stderr
|
47
|
+
result = run_command(cmd: trollolo_cmd, args: ["burndown", "-o", "#{path}"])
|
48
|
+
expect(result).to exit_with_error(1, /burndown-data-01.yaml' not found/)
|
50
49
|
end
|
51
50
|
end
|
52
|
-
|
51
|
+
|
53
52
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative "integration_spec_helper"
|
2
2
|
|
3
3
|
include GivenFilesystemSpecHelpers
|
4
|
+
include CliTester
|
4
5
|
|
5
6
|
HELPER_SCRIPT = File.expand_path("../../../scripts/create_burndown.py", __FILE__)
|
6
7
|
|
@@ -12,9 +13,8 @@ describe "create_burndown.py" do
|
|
12
13
|
given_file("burndown-data-23.yaml", from: "create_burndown_helper/burndown-data-23.yaml")
|
13
14
|
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
assert_exit_status(0)
|
16
|
+
result = run_command(cmd: HELPER_SCRIPT, args: ["23", "--output=#{@working_dir}", "--no-head"])
|
17
|
+
expect(result).to exit_with_success("")
|
18
18
|
expect(File.join(@working_dir, "burndown-23.png")).
|
19
19
|
to be_same_image_as("create_burndown_helper/burndown-23.png")
|
20
20
|
end
|
@@ -24,9 +24,8 @@ describe "create_burndown.py" do
|
|
24
24
|
given_file("burndown-data-31.yaml", from: "create_burndown_helper/burndown-data-31.yaml")
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
assert_exit_status(0)
|
27
|
+
result = run_command(cmd: HELPER_SCRIPT, args: ["31", "--output=#{@working_dir}", "--no-head"])
|
28
|
+
expect(result).to exit_with_success("")
|
30
29
|
expect(File.join(@working_dir, "burndown-31.png")).
|
31
30
|
to be_same_image_as("create_burndown_helper/burndown-31.png")
|
32
31
|
end
|
@@ -36,9 +35,8 @@ describe "create_burndown.py" do
|
|
36
35
|
given_file("burndown-data-35.yaml", from: "create_burndown_helper/burndown-data-35.yaml")
|
37
36
|
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
assert_exit_status(0)
|
38
|
+
result = run_command(cmd: HELPER_SCRIPT, args: ["35", "--output=#{@working_dir}", "--no-head"])
|
39
|
+
expect(result).to exit_with_success("")
|
42
40
|
expect(File.join(@working_dir, "burndown-35.png")).
|
43
41
|
to be_same_image_as("create_burndown_helper/burndown-35.png")
|
44
42
|
end
|
@@ -48,9 +46,9 @@ describe "create_burndown.py" do
|
|
48
46
|
given_file("burndown-data-08.yaml", from: "create_burndown_helper/burndown-data-08.yaml")
|
49
47
|
end
|
50
48
|
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
result = run_command(cmd: HELPER_SCRIPT,
|
50
|
+
args: ["08", "--output=#{@working_dir}", "--no-tasks", "--with-fast-lane", "--no-head"])
|
51
|
+
expect(result).to exit_with_success("")
|
54
52
|
expect(File.join(@working_dir, "burndown-08.png")).
|
55
53
|
to be_same_image_as("create_burndown_helper/burndown-08.png")
|
56
54
|
end
|
@@ -3,10 +3,24 @@ require_relative 'spec_helper'
|
|
3
3
|
include GivenFilesystemSpecHelpers
|
4
4
|
|
5
5
|
describe BurndownChart do
|
6
|
+
|
7
|
+
subject { BurndownChart.new(dummy_settings) }
|
8
|
+
|
9
|
+
let(:burndown_data) do
|
10
|
+
burndown_data = BurndownData.new(dummy_settings)
|
11
|
+
burndown_data.story_points.open = 16
|
12
|
+
burndown_data.story_points.done = 7
|
13
|
+
burndown_data.tasks.open = 10
|
14
|
+
burndown_data.tasks.done = 11
|
15
|
+
burndown_data.date_time = DateTime.parse('2014-05-30')
|
16
|
+
burndown_data
|
17
|
+
end
|
18
|
+
|
6
19
|
before(:each) do
|
7
20
|
@settings = dummy_settings
|
8
21
|
@burndown_data = BurndownData.new(@settings)
|
9
22
|
@chart = BurndownChart.new(@settings)
|
23
|
+
allow(BurndownData).to receive(:new).and_return(burndown_data)
|
10
24
|
full_board_mock
|
11
25
|
end
|
12
26
|
|
@@ -312,6 +326,21 @@ EOT
|
|
312
326
|
expect(File.read(write_path)).to eq expected_file_content
|
313
327
|
end
|
314
328
|
end
|
329
|
+
|
330
|
+
describe '#push_to_api' do
|
331
|
+
let(:sample_url) { 'http://api.somesite.org/push/1/days' }
|
332
|
+
let(:malformed_url) { 'http//api.malformed..urrii/@@@@' }
|
333
|
+
|
334
|
+
it 'check if it raises an expection on malformed url' do
|
335
|
+
expect { subject.push_to_api(malformed_url, burndown_data) }
|
336
|
+
.to raise_error(TrolloloError)
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'push data to api endpoint' do
|
340
|
+
stub_request(:post, sample_url).with(body: @chart.data.to_hash.to_json).to_return(status: 200)
|
341
|
+
subject.push_to_api(sample_url, @chart.data)
|
342
|
+
end
|
343
|
+
end
|
315
344
|
end
|
316
345
|
|
317
346
|
describe "commands" do
|
data/spec/unit/cli_spec.rb
CHANGED
@@ -96,4 +96,45 @@ EOT
|
|
96
96
|
@cli.get_checklists
|
97
97
|
}.to output(expected_output).to_stdout
|
98
98
|
end
|
99
|
+
|
100
|
+
it "gets description" do
|
101
|
+
body = <<-EOT
|
102
|
+
{
|
103
|
+
"id": "54ae8485221b1cc5b173e713",
|
104
|
+
"desc": "haml"
|
105
|
+
}
|
106
|
+
EOT
|
107
|
+
stub_request(
|
108
|
+
:get, "https://api.trello.com/1/cards/54ae8485221b1cc5b173e713?key=mykey&token=mytoken"
|
109
|
+
).with(
|
110
|
+
:headers => {
|
111
|
+
'Accept'=>'*/*; q=0.5, application/xml',
|
112
|
+
'Accept-Encoding'=>'gzip, deflate',
|
113
|
+
'User-Agent'=>'Ruby'
|
114
|
+
}
|
115
|
+
).to_return(:status => 200, :body => body, :headers => {})
|
116
|
+
@cli.options = {"card-id" => "54ae8485221b1cc5b173e713"}
|
117
|
+
expected_output = "haml\n"
|
118
|
+
expect {
|
119
|
+
@cli.get_description
|
120
|
+
}.to output(expected_output).to_stdout
|
121
|
+
end
|
122
|
+
|
123
|
+
it "sets description" do
|
124
|
+
expect(STDIN).to receive(:read).and_return("My description")
|
125
|
+
stub_request(
|
126
|
+
:put, "https://api.trello.com/1/cards/54ae8485221b1cc5b173e713/desc?key=mykey&token=mytoken&value=My%20description"
|
127
|
+
).with(
|
128
|
+
:headers => {
|
129
|
+
'Accept'=>'*/*; q=0.5, application/xml',
|
130
|
+
'Accept-Encoding'=>'gzip, deflate',
|
131
|
+
'Content-Length'=>'0',
|
132
|
+
'Content-Type'=>'application/x-www-form-urlencoded',
|
133
|
+
'User-Agent'=>'Ruby'
|
134
|
+
}
|
135
|
+
).to_return(:status => 200, :body => "", :headers => {})
|
136
|
+
@cli.options = {"card-id" => "54ae8485221b1cc5b173e713"}
|
137
|
+
@cli.set_description
|
138
|
+
expect(WebMock).to have_requested(:put, "https://api.trello.com/1/cards/54ae8485221b1cc5b173e713/desc?key=mykey&token=mytoken&value=My%20description")
|
139
|
+
end
|
99
140
|
end
|
@@ -74,4 +74,41 @@ EOT
|
|
74
74
|
subject.add_attachment("123", path)
|
75
75
|
end
|
76
76
|
end
|
77
|
+
|
78
|
+
describe "#make_cover" do
|
79
|
+
let(:card_id) { "c133a484cff21c7a33ff031f" }
|
80
|
+
let(:image_id) { "484cff21c7a33ff031f997a" }
|
81
|
+
let(:image_name) { "passed.jpg" }
|
82
|
+
let(:client) { double }
|
83
|
+
let(:card_attachments_body) { <<-EOF
|
84
|
+
[
|
85
|
+
{
|
86
|
+
"id":"78d86ae7f25c748559b37ca",
|
87
|
+
"name":"failed.jpg"
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"id":"484cff21c7a33ff031f997a",
|
91
|
+
"name":"passed.jpg"
|
92
|
+
}
|
93
|
+
]
|
94
|
+
EOF
|
95
|
+
}
|
96
|
+
|
97
|
+
before(:each) do
|
98
|
+
stub_request(:get, "https://api.trello.com/1/cards/#{card_id}/attachments?fields=name&key=mykey&token=mytoken").
|
99
|
+
with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>'Ruby'}).
|
100
|
+
to_return(:status => 200, :body => card_attachments_body, :headers => {})
|
101
|
+
stub_request(:put, "https://api.trello.com/1/cards/#{card_id}/idAttachmentCover?key=mykey&token=mytoken&value=#{image_id}").
|
102
|
+
with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'0', 'Content-Type'=>'application/x-www-form-urlencoded', 'User-Agent'=>'Ruby'})
|
103
|
+
end
|
104
|
+
|
105
|
+
it "make the attachment with the file name passed.jpg the cover" do
|
106
|
+
subject.make_cover(card_id, image_name)
|
107
|
+
expect(WebMock).to have_requested(:put, "https://api.trello.com/1/cards/#{card_id}/idAttachmentCover?key=mykey&token=mytoken&value=#{image_id}")
|
108
|
+
end
|
109
|
+
|
110
|
+
it "shows an error if the file was not found in the attachment list" do
|
111
|
+
expect { subject.make_cover(card_id, "non_existing_file.jpg") }.to raise_error(/non_existing_file.jpg/)
|
112
|
+
end
|
113
|
+
end
|
77
114
|
end
|
data/trollolo.gemspec
CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = 'Trello command line client'
|
13
13
|
s.description = 'Trollolo is a command line tool to access Trello and support tasks like generation of burndown charts.'
|
14
14
|
|
15
|
+
s.required_ruby_version = '>= 2.1'
|
15
16
|
s.required_rubygems_version = '>= 1.3.6'
|
16
17
|
s.rubyforge_project = 'trollolo'
|
17
18
|
|
data/yes_ship_it.conf
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trollolo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cornelius Schumacher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -103,7 +103,6 @@ files:
|
|
103
103
|
- spec/integration/command_line_spec.rb
|
104
104
|
- spec/integration/create_burndown_spec.rb
|
105
105
|
- spec/integration/integration_spec_helper.rb
|
106
|
-
- spec/integration/support/aruba_hook.rb
|
107
106
|
- spec/integration/support/custom_matchers.rb
|
108
107
|
- spec/integration/wrapper/credentials_input_wrapper
|
109
108
|
- spec/integration/wrapper/empty_config_trollolo_wrapper
|
@@ -135,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
134
|
requirements:
|
136
135
|
- - ">="
|
137
136
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
137
|
+
version: '2.1'
|
139
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
139
|
requirements:
|
141
140
|
- - ">="
|