rainforest-cli 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 854465637763f313d813365ea7996c8aa2d43808
4
- data.tar.gz: 44115420d528b8ee03e501eba5fca683439aecca
3
+ metadata.gz: 572509cbd3863f100fbe585b1bef8cd87b1e6660
4
+ data.tar.gz: 9d1b997c421aee71f56fe5901d77c245d2291130
5
5
  SHA512:
6
- metadata.gz: 6c8ed4a11a1bca3e2b58672f1ebaae2c3e12265d458107bd19082a193f44cc47bb22113c4d9714190e19bff7fa383ebab4d8cc4d5b260ffc28a3462c72dff957
7
- data.tar.gz: 3a335dbc44d8a00c7910d5b1eabb66d6f25e0d7f4d4e9f982b2b246d8450ec78706c189afbbf817559d091eb613a81dc19f80a319b857289ae02848add661f32
6
+ metadata.gz: d3dea6785acb946d8882d5a7ef86bc49e0d3a8fbc95580838de499cee1690502e01c647bdcd696567210d4853fcb77e7d611b29e7e69b64390848c9910b2bcba
7
+ data.tar.gz: 1fde1d05b2894bc0fca33fe018c38afd8469828f29e31416316e9d21fa1f04f04b217a932e2eb03303f345ac18a1aefff8c613f4b80cbf0d833cd4b9a7680b6e
data/CHANGELOG.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # Rainforest CLI Changelog
2
2
 
3
- ## 1.5.0
3
+ ## 1.6.0 - 8th June 2016
4
+ - Add `rm` command to delete tests. (cf077bd440e83852d8d23f66eb72ba94fece0c07, @marktran)
5
+ - New tests use title given when created using `rainforest new [TEST_NAME]`.
6
+ (01e30ba9d97558ba11c239a5c9842192d38dfd3f, @epaulet)
7
+ - Remove static browser list and stop client side validation of browsers for run
8
+ creation. Allow the API to validate against the dynamic list of client browsers
9
+ instead. (48a4d11e524d020e78e14991bf8a0c5bf82b65c9, @epaulet)
10
+
11
+ ## 1.5.0 - 23rd May 2016
4
12
  - Retry on API exceptions when creating a run. (85830adcef426e64bd72c9d6208881e955a5bb0c, @bbeck)
5
13
  - Add `browsers` command. (2a810ec27edfc66ef7bf27d8cb7da1129b05e32b, @epaulet)
6
14
  - Add support for files using `app-source-url`. (562e4772e71e8028209d128091ff644f4ae0a9f6, @marianafranco)
7
15
  - Remove newlines from test actions and questions when exporting. (e28583b553b5f30b33b232b2e377c109123b11ff, @epaulet)
8
16
 
9
- ## 1.4.0
17
+ ## 1.4.0 - 22nd April 2016
10
18
  - Support for new `--version` command. (4362c85fe599a02eaa1b772d184be31e692e934e, @epaulet)
11
19
  - Validate duplicate RFML IDs before uploading. (67f71d053c755eaf92c1bd205931e89e903b88c9, @curtis-rainforestqa)
12
20
  - Add `folders` commands for a folder ID reference. (4ab19fec0924b4764e140fb3c5aa85f1dbfe4006, @epaulet)
data/README.md CHANGED
@@ -51,6 +51,12 @@ Create new Rainforest test in RFML format (Rainforest Markup Language).
51
51
  rainforest new
52
52
  ```
53
53
 
54
+ You may also specify a custom test title or file name.
55
+
56
+ ```bash
57
+ rainforest new "My Awesome Title"
58
+ ```
59
+
54
60
  Upload tests to Rainforest
55
61
 
56
62
  ```bash
@@ -14,6 +14,7 @@ require 'rainforest/cli/test_files'
14
14
  require 'rainforest/cli/remote_tests'
15
15
  require 'rainforest/cli/validator'
16
16
  require 'rainforest/cli/exporter'
17
+ require 'rainforest/cli/deleter'
17
18
  require 'rainforest/cli/uploader'
18
19
  require 'rainforest/cli/resources'
19
20
 
@@ -34,6 +35,7 @@ module RainforestCli
34
35
  when 'new' then TestFiles.new(options).create_file
35
36
  when 'validate' then Validator.new(options).validate
36
37
  when 'upload' then Uploader.new(options).upload
38
+ when 'rm' then Deleter.new(options).delete
37
39
  when 'export' then Exporter.new(options).export
38
40
  when 'sites', 'folders', 'browsers'
39
41
  Resources.new(options).public_send(options.command)
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ require 'rainforest'
3
+
4
+ class RainforestCli::Deleter
5
+ attr_reader :test_files, :remote_tests
6
+
7
+ def initialize(options)
8
+ @file_name = options.file_name
9
+ @test_files = RainforestCli::TestFiles.new(options)
10
+ @remote_tests = RainforestCli::RemoteTests.new(options.token)
11
+ end
12
+
13
+ def delete
14
+ validate_file_extension
15
+ delete_remote_test(test_file)
16
+ delete_local_file(test_file.file_name)
17
+ end
18
+
19
+ private
20
+
21
+ def validate_file_extension
22
+ if !rfml_extension?
23
+ logger.fatal "Error: file extension must be .rfml"
24
+ exit 2
25
+ end
26
+ end
27
+
28
+ def rfml_extension?
29
+ extname = File.extname(@file_name)
30
+ RainforestCli::TestFiles::FILE_EXTENSION == extname
31
+ end
32
+
33
+ def delete_local_file(path_to_file)
34
+ File.delete(path_to_file)
35
+ end
36
+
37
+ def delete_remote_test(rfml_test)
38
+ Rainforest::Test.delete(primary_key_dictionary[rfml_test.rfml_id])
39
+ rescue Exception => e
40
+ logger.fatal "Unable to delete remote rfml test"
41
+ exit 2
42
+ end
43
+
44
+ def test_file
45
+ @test_file ||= rfml_tests.detect do |rfml_test|
46
+ rfml_test.file_name == @file_name
47
+ end
48
+ end
49
+
50
+ def rfml_tests
51
+ @rfml_tests ||= test_files.test_data
52
+ end
53
+
54
+ def primary_key_dictionary
55
+ @primary_key_dictionary ||= remote_tests.primary_key_dictionary
56
+ end
57
+
58
+ def logger
59
+ RainforestCli.logger
60
+ end
61
+ end
@@ -8,39 +8,6 @@ module RainforestCli
8
8
  :import_file_name, :import_name, :custom_url, :description, :folder,
9
9
  :debug, :file_name, :test_folder, :embed_tests, :app_source_url, :crowd
10
10
 
11
- # Note, not all of these may be available to your account
12
- # also, we may remove this in the future.
13
- VALID_BROWSERS = %w{
14
- android_phone_landscape
15
- android_phone_portrait
16
- android_tablet_landscape
17
- android_tablet_portrait
18
- chrome
19
- chrome_1440_900
20
- chrome_adblock
21
- chrome_ghostery
22
- chrome_guru
23
- chrome_ublock
24
- firefox
25
- firefox_1440_900
26
- ie10
27
- ie10_1440_900
28
- ie11
29
- ie11_1440_900
30
- ie8
31
- ie8_1440_900
32
- ie9
33
- ie9_1440_900
34
- ios_iphone4s
35
- office2010
36
- office2013
37
- osx_chrome
38
- osx_firefox
39
- safari
40
- ubuntu_chrome
41
- ubuntu_firefox
42
- iphone_6s_v9_0
43
- }.freeze
44
11
  TOKEN_NOT_REQUIRED = %w{new validate}.freeze
45
12
 
46
13
  def initialize(args)
@@ -152,8 +119,12 @@ module RainforestCli
152
119
 
153
120
  @command = @args.shift
154
121
 
155
- if @command == 'new'
122
+ if ['new', 'rm'].include?(@command)
156
123
  @file_name = @args.shift
124
+
125
+ if @file_name && @command == 'rm'
126
+ @file_name = File.expand_path(@file_name) if @file_name
127
+ end
157
128
  end
158
129
 
159
130
  @tests = @args.dup
@@ -182,10 +153,6 @@ module RainforestCli
182
153
  end
183
154
  end
184
155
 
185
- if browsers
186
- raise BrowserException, browsers unless (browsers - VALID_BROWSERS).empty?
187
- end
188
-
189
156
  if custom_url && site_id.nil?
190
157
  raise ValidationError, 'The site-id and custom-url options are both required.'
191
158
  end
@@ -194,21 +161,18 @@ module RainforestCli
194
161
  unless File.exist?(import_file_name)
195
162
  raise ValidationError, "Input file: #{import_file_name} not found"
196
163
  end
197
-
198
164
  elsif import_file_name || import_name
199
165
  raise ValidationError, 'You must pass both --import-variable-csv-file and --import-variable-name'
200
166
  end
167
+
168
+ if command == 'rm' && file_name.nil?
169
+ raise ValidationError, 'You must include a file name'
170
+ end
171
+
201
172
  true
202
173
  end
203
174
 
204
175
  class ValidationError < RuntimeError
205
176
  end
206
-
207
- class BrowserException < ValidationError
208
- def initialize browsers
209
- invalid_browsers = browsers - OptionParser::VALID_BROWSERS
210
- super "#{invalid_browsers.join(', ')} is not valid. Valid browsers: #{OptionParser::VALID_BROWSERS.join(', ')}"
211
- end
212
- end
213
177
  end
214
178
  end
@@ -4,7 +4,7 @@ class RainforestCli::TestFiles
4
4
  FILE_EXTENSION = '.rfml'
5
5
  SAMPLE_FILE = <<EOF
6
6
  #! %s
7
- # title: New test
7
+ # title: %s
8
8
  # start_uri: /
9
9
  # tags: rfml-test
10
10
  #
@@ -21,7 +21,10 @@ EOF
21
21
 
22
22
  def initialize(options)
23
23
  @options = options
24
- if @options.test_folder.nil?
24
+
25
+ if @options.command == 'rm'
26
+ @test_folder = File.dirname(@options.file_name)
27
+ elsif @options.test_folder.nil?
25
28
  logger.info "No test folder supplied. Using default folder: #{DEFAULT_TEST_FOLDER}"
26
29
  @test_folder = File.expand_path(DEFAULT_TEST_FOLDER)
27
30
  else
@@ -70,20 +73,38 @@ EOF
70
73
  def create_file(file_name = @options.file_name)
71
74
  ensure_directory_exists
72
75
 
73
- uuid = SecureRandom.uuid
76
+ title = file_name || 'Unnamed Test'
77
+ file_path = title.dup
74
78
 
75
- name = file_name || uuid.to_s
76
- name += file_extension unless name[-file_extension.length..-1] == file_extension
77
- name = File.join(test_folder, name)
79
+ if title[-file_extension.length..-1] == file_extension
80
+ title = title[0...-file_extension.length]
81
+ else
82
+ file_path += file_extension
83
+ end
78
84
 
79
- File.open(name, 'w') { |file| file.write(sprintf(SAMPLE_FILE, uuid)) }
85
+ file_path = unique_path(File.join(test_folder, file_path))
80
86
 
81
- logger.info "Created #{name}"
82
- name
87
+ File.open(file_path, 'w') { |file| file.write(sprintf(SAMPLE_FILE, SecureRandom.uuid, title)) }
88
+
89
+ logger.info "Created #{file_path}"
90
+ file_path
83
91
  end
84
92
 
85
93
  private
86
94
 
95
+ def unique_path(file_path)
96
+ path = file_path[0...-file_extension.length]
97
+ identifier = 0
98
+
99
+ loop do
100
+ id_string = (identifier > 0) ? " (#{identifier})" : ''
101
+ test_path = path + id_string + file_extension
102
+
103
+ return test_path unless File.exist?(test_path)
104
+ identifier += 1
105
+ end
106
+ end
107
+
87
108
  def logger
88
109
  RainforestCli.logger
89
110
  end
@@ -79,7 +79,7 @@ module RainforestCli::TestParser
79
79
  @text = File.read(file_name).to_s
80
80
 
81
81
  @test = Test.new
82
- @test.file_name = file_name
82
+ @test.file_name = File.expand_path(file_name)
83
83
  @test.description = ''
84
84
  @test.steps = []
85
85
  @test.errors = {}
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module RainforestCli
3
- VERSION = '1.5.0'
3
+ VERSION = '1.6.0'
4
4
  end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+ describe RainforestCli::Deleter do
3
+ let(:options) do
4
+ instance_double(
5
+ 'RainforestCli::Options',
6
+ token: 'foo',
7
+ test_folder: test_directory,
8
+ command: 'rm',
9
+ file_name: file_name
10
+ )
11
+ end
12
+
13
+ let(:test_directory) do
14
+ File.expand_path(File.join(__FILE__, '../validation-examples/correct-embeds'))
15
+ end
16
+
17
+ before(:each) do
18
+ allow(File).to receive(:delete)
19
+ end
20
+
21
+ subject { described_class.new(options) }
22
+
23
+ describe '#delete' do
24
+ context 'with incorrect file extension' do
25
+ let(:file_name) { 'embedded_test' }
26
+
27
+ it 'exits with the correct error' do
28
+ begin
29
+ expect_any_instance_of(
30
+ Logger
31
+ ).to receive(:fatal).with('Error: file extension must be .rfml')
32
+
33
+ subject.delete
34
+ rescue SystemExit => exception
35
+ expect(exception.status).to eq(2)
36
+ end
37
+ end
38
+ end
39
+
40
+ context 'with correct file extension' do
41
+ let(:file_name) { 'embedded_test.rfml' }
42
+ let(:rfml_id) { 'embedded_test' }
43
+ let(:test_id) { 25 }
44
+ let(:primary_key_dictionary) { Hash[rfml_id, test_id] }
45
+ let(:test_data) do
46
+ [instance_double(RainforestCli::TestParser::Test, file_name: file_name, rfml_id: rfml_id)]
47
+ end
48
+
49
+ context 'with remote rfml test' do
50
+ before do
51
+ allow_any_instance_of(RainforestCli::RemoteTests)
52
+ .to receive(:primary_key_dictionary).and_return(primary_key_dictionary)
53
+ allow_any_instance_of(RainforestCli::TestFiles)
54
+ .to receive(:test_data).and_return(test_data)
55
+ end
56
+
57
+ it 'deletes the remote rfml test' do
58
+ expect(Rainforest::Test).to receive(:delete).with(test_id)
59
+ # make sure that we don't reach SystemExit lines of file
60
+ expect { subject.delete }.to_not raise_error
61
+ end
62
+
63
+ it 'deletes the local file' do
64
+ allow(Rainforest::Test).to receive(:delete).with(test_id).and_return({})
65
+ expect(File).to receive(:delete).with(file_name)
66
+ # make sure that we don't reach SystemExit lines of file
67
+ expect { subject.delete }.to_not raise_error
68
+ end
69
+ end
70
+
71
+ context 'without remote rfml test' do
72
+ let(:test_data) { [OpenStruct.new(file_name: 'foobar.rfml')] }
73
+ let(:test_files) { OpenStruct.new(test_data: test_data) }
74
+
75
+ before do
76
+ allow(RainforestCli::TestFiles).to receive(:new).and_return(test_files)
77
+ end
78
+
79
+ it 'exits with the correct error' do
80
+ begin
81
+ expect_any_instance_of(
82
+ Logger
83
+ ).to receive(:fatal).with('Unable to delete remote rfml test')
84
+
85
+ subject.delete
86
+ rescue SystemExit => exception
87
+ expect(exception.status).to eq(2)
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,7 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
  describe RainforestCli::Exporter do
3
3
  let(:options) do
4
- instance_double('RainforestCli::Options', token: nil, test_folder: nil, debug: nil, embed_tests: nil, tests: [])
4
+ instance_double(
5
+ 'RainforestCli::Options',
6
+ token: nil,
7
+ test_folder: nil,
8
+ command: nil,
9
+ debug: nil,
10
+ embed_tests: nil,
11
+ tests: []
12
+ )
5
13
  end
6
14
  subject { described_class.new(options) }
7
15
 
@@ -124,8 +132,8 @@ describe RainforestCli::Exporter do
124
132
  let(:options) do
125
133
  instance_double(
126
134
  'RainforestCli::Options',
127
- token: nil, test_folder: nil,
128
- debug: nil, embed_tests: true, tests: []
135
+ token: nil, test_folder: nil, command: nil,
136
+ debug: nil, embed_tests: true, tests: [],
129
137
  )
130
138
  end
131
139
 
@@ -141,8 +149,8 @@ describe RainforestCli::Exporter do
141
149
  let(:options) do
142
150
  instance_double(
143
151
  'RainforestCli::Options',
144
- token: nil, test_folder: nil, debug: nil,
145
- embed_tests: nil, tests: tests
152
+ token: nil, test_folder: nil, command: nil,
153
+ debug: nil, embed_tests: nil, tests: tests
146
154
  )
147
155
  end
148
156
 
data/spec/options_spec.rb CHANGED
@@ -24,6 +24,18 @@ describe RainforestCli::OptionParser do
24
24
  its(:crowd) { should == 'some_name' }
25
25
  end
26
26
 
27
+ context 'new' do
28
+ let(:args) { ['new', 'foo.rfml']}
29
+ its(:command) { should == 'new' }
30
+ its(:file_name) { should == 'foo.rfml' }
31
+ end
32
+
33
+ context 'rm' do
34
+ let(:args) { ['rm', 'foo.rfml']}
35
+ its(:command) { should == 'rm' }
36
+ its(:file_name) { should == File.expand_path('foo.rfml') }
37
+ end
38
+
27
39
  context 'app_source_url' do
28
40
  let(:args) { ['--app-source-url', 'some_app'] }
29
41
  its(:app_source_url) { should == 'some_app' }
@@ -134,6 +146,11 @@ describe RainforestCli::OptionParser do
134
146
  it { raises_a_validation_exception }
135
147
  end
136
148
 
149
+ context 'with missing filename' do
150
+ let(:args) { %w(--token foo rm) }
151
+ it { raises_a_validation_exception }
152
+ end
153
+
137
154
  context 'with a custom url but no site id' do
138
155
  let(:args) { %w(--token foo --custom-url http://www.example.com) }
139
156
  it { raises_a_validation_exception }
@@ -155,13 +172,5 @@ describe RainforestCli::OptionParser do
155
172
  it { raises_a_validation_exception }
156
173
  end
157
174
  end
158
-
159
- context 'with invalid browsers' do
160
- let(:args) { %w{run --browsers lulbrowser --token foo} }
161
-
162
- it 'raises an exception' do
163
- expect { subject.validate! }.to raise_error(RainforestCli::OptionParser::BrowserException)
164
- end
165
- end
166
175
  end
167
176
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
  describe RainforestCli::TestFiles do
3
+ let(:options) { instance_double('RainforestCli::Options', test_folder: nil, command: nil) }
4
+ subject { described_class.new(options) }
5
+
3
6
  describe '#test_data' do
4
7
  let(:test_directory) { File.dirname(__FILE__) + '/rainforest-example' }
5
- let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory) }
6
- subject { described_class.new(options) }
8
+ let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, command: nil) }
7
9
 
8
10
  let(:rfml_test) { subject.test_data.first }
9
11
  let(:text_file) { File.read(test_directory + '/example_test.rfml') }
@@ -16,9 +18,6 @@ describe RainforestCli::TestFiles do
16
18
 
17
19
  describe '#test_dictionary' do
18
20
  Test = Struct.new(:rfml_id, :id)
19
-
20
- let(:options) { instance_double('RainforestCli::Options', test_folder: nil) }
21
- subject { described_class.new(options) }
22
21
  let(:tests) { [Test.new('foo', 123), Test.new('bar', 456), Test.new('baz', 789)] }
23
22
 
24
23
  before do
@@ -31,4 +30,36 @@ describe RainforestCli::TestFiles do
31
30
  expect(subject.test_dictionary).to include({})
32
31
  end
33
32
  end
33
+
34
+ describe '#create_file' do
35
+ let(:file) { instance_double('File') }
36
+ let(:test_title) { 'My Test Title' }
37
+
38
+ it 'sets the file name as the given test title' do
39
+ allow(file).to receive(:write)
40
+
41
+ expect(File).to receive(:open).with(a_string_including("#{test_title}.rfml"), 'w').and_yield(file)
42
+ subject.create_file(test_title)
43
+ end
44
+
45
+ it 'sets the title of the test as the given test title' do
46
+ allow(File).to receive(:open).and_yield(file)
47
+
48
+ expect(file).to receive(:write).with(a_string_including("# title: #{test_title}"))
49
+ subject.create_file(test_title)
50
+ end
51
+
52
+ context 'when there is an existing file with the same title' do
53
+ before do
54
+ allow(file).to receive(:write)
55
+ expect(File).to receive(:exist?).twice.and_return(true).ordered
56
+ expect(File).to receive(:exist?).and_return(false).ordered
57
+ end
58
+
59
+ it 'sets the file name as given test title with a number for uniqueness' do
60
+ expect(File).to receive(:open).with(a_string_including("#{test_title} (2).rfml"), 'w').and_yield(file)
61
+ subject.create_file(test_title)
62
+ end
63
+ end
64
+ end
34
65
  end
@@ -26,6 +26,15 @@ describe RainforestCli::TestParser do
26
26
  describe RainforestCli::TestParser::Parser do
27
27
  subject { described_class.new(file_name) }
28
28
 
29
+ describe '#initialize' do
30
+ let(:file_name) { './spec/rainforest-example/example_test.rfml' }
31
+
32
+ it 'expands the file name path' do
33
+ test = subject.instance_variable_get(:@test)
34
+ expect(test.file_name).to eq(File.expand_path(file_name))
35
+ end
36
+ end
37
+
29
38
  describe '#process' do
30
39
  context 'redirection' do
31
40
  context 'step' do
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  describe RainforestCli::Uploader do
3
- let(:options) { instance_double('RainforestCli::Options', token: 'foo', test_folder: test_directory) }
3
+ let(:options) { instance_double('RainforestCli::Options', token: 'foo', test_folder: test_directory, command: '') }
4
4
  subject { described_class.new(options) }
5
5
 
6
6
  before do
@@ -30,7 +30,7 @@ describe RainforestCli::Validator do
30
30
  shared_examples 'it detects all the correct errors' do
31
31
  let(:tested_method) { :validate }
32
32
  let(:raises_error) { false }
33
- let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, token: 'api_token') }
33
+ let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, token: 'api_token', command: '') }
34
34
  subject { described_class.new(options) }
35
35
 
36
36
  before do
@@ -97,7 +97,7 @@ describe RainforestCli::Validator do
97
97
 
98
98
  context 'when multiple tests have the same rfml_ids' do
99
99
  let(:test_directory) { File.expand_path(File.join(__FILE__, '../validation-examples/duplicate_rfml_ids')) }
100
- let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, token: 'api_token') }
100
+ let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, token: 'api_token', command: '') }
101
101
 
102
102
  subject { described_class.new(options) }
103
103
 
@@ -121,7 +121,7 @@ describe RainforestCli::Validator do
121
121
 
122
122
  context 'without a token option' do
123
123
  let(:test_directory) { File.expand_path(File.join(__FILE__, '../validation-examples')) }
124
- let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, token: nil) }
124
+ let(:options) { instance_double('RainforestCli::Options', test_folder: test_directory, token: nil, command: '') }
125
125
  subject { described_class.new(options) }
126
126
 
127
127
  it 'validates locally and tells the user to include a token to valid with server tests as well' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rainforest-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Russell Smith
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-23 00:00:00.000000000 Z
12
+ date: 2016-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -164,6 +164,7 @@ files:
164
164
  - lib/rainforest/cli.rb
165
165
  - lib/rainforest/cli/constants.rb
166
166
  - lib/rainforest/cli/csv_importer.rb
167
+ - lib/rainforest/cli/deleter.rb
167
168
  - lib/rainforest/cli/exporter.rb
168
169
  - lib/rainforest/cli/git_trigger.rb
169
170
  - lib/rainforest/cli/http_client.rb
@@ -179,6 +180,7 @@ files:
179
180
  - rainforest-cli.gemspec
180
181
  - spec/cli_spec.rb
181
182
  - spec/csv_importer_spec.rb
183
+ - spec/deleter_spec.rb
182
184
  - spec/exporter_spec.rb
183
185
  - spec/fixtures/variables.txt
184
186
  - spec/git_trigger_spec.rb
@@ -239,6 +241,7 @@ summary: Command line utility for Rainforest QA
239
241
  test_files:
240
242
  - spec/cli_spec.rb
241
243
  - spec/csv_importer_spec.rb
244
+ - spec/deleter_spec.rb
242
245
  - spec/exporter_spec.rb
243
246
  - spec/fixtures/variables.txt
244
247
  - spec/git_trigger_spec.rb