rainforest-cli 0.0.12 → 0.0.13
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 +6 -14
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -0
- data/.gitignore +2 -0
- data/.rspec +0 -1
- data/.rvmrc +1 -1
- data/.travis.yml +0 -3
- data/Gemfile +1 -1
- data/lib/rainforest/cli.rb +36 -4
- data/lib/rainforest/cli/csv_importer.rb +55 -0
- data/lib/rainforest/cli/options.rb +9 -1
- data/lib/rainforest/cli/version.rb +1 -1
- data/rainforest-cli.gemspec +7 -2
- data/spec/options_spec.rb +10 -0
- metadata +70 -18
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ODlmZTMzNjIzMzQ1NjhiYTM0ZTZiNWQ5Nzk2ZjE0N2RmODI2Y2VmMGMyNWZl
|
10
|
-
ZDQ0ODljM2FlZDM0OWMxN2E3NjBiNjNkZTQ2MTE2ZGQ5NWRiM2NiYjhjOTA0
|
11
|
-
YTllZWMwMGQwYzQxODI0YTA3NTQ1ODc5YTU5ZmQxMmI2OWRlZWI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZTgzN2M1NzE3N2U1NjQ5Yzg0NmVhNjM3MmFkZTI1YzA3MzhhZTk1YTY4ZDQ0
|
14
|
-
YjQ4OTljZDQ2ZWYwM2QyYTUxMDM5OWIxNWZkMzYwMjQ0ZDA4ZWI5NmQzYmRh
|
15
|
-
Y2Y2ODhmNGYzYTVmZTk4ZDczYzkwYjVhNzBiODY3ZmNlMzIyYzI=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 72def45d00f529b7b7c35d23b097dbe3e0e0ea89
|
4
|
+
data.tar.gz: 0a6312c46e0862e24272881e6adb6fc22c477423
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1a1c28ebb3bce9b4ef7788b75c098055f7b83f588d1797a547d44c65d7490cef80ccb43179873f8fbcbd9d5dac095bc567d40904c3dd596f0d2cb011d9623579
|
7
|
+
data.tar.gz: 4a37fbeb379b70c1f7b8b284ff5f61c56fc02c7a26a35f8b893bdb53879ed48a2ce0fd3954670db3cab7a8f0b24aca467c48fbe34b56e991191b384ba9fbf8b4
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
�?��̛��Ɛe��Q���H���}�I�&O�Hf��A��b�z��V�:�[�����X�߬v���bu�����֬��gR�~��-"дja�0H6`5ާz$�8őP��p�+V[�xq��#)� ��E�J})$�up#�� �!��iս}�XA*��� ���N���l��hwͥ$k��r��i�u(��R������ŗ{y�A�J�L�'���
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm use 1.
|
1
|
+
rvm use 2.1.2@rainforest-cli --create
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/lib/rainforest/cli.rb
CHANGED
@@ -1,14 +1,28 @@
|
|
1
1
|
require "rainforest/cli/version"
|
2
2
|
require "rainforest/cli/options"
|
3
|
+
require "rainforest/cli/csv_importer"
|
3
4
|
require "httparty"
|
4
5
|
require "json"
|
5
6
|
|
6
7
|
module Rainforest
|
7
8
|
module Cli
|
8
|
-
API_URL = 'https://app.rainforestqa.com/api/1
|
9
|
-
|
9
|
+
API_URL = 'https://app.rainforestqa.com/api/1'.freeze
|
10
|
+
|
10
11
|
def self.start(args)
|
11
12
|
@options = OptionParser.new(args)
|
13
|
+
|
14
|
+
if @options.import_file_name && @options.import_name
|
15
|
+
unless File.exists?(@options.import_file_name)
|
16
|
+
puts "Input file: #{@options.import_file_name} not found"
|
17
|
+
exit 2
|
18
|
+
end
|
19
|
+
|
20
|
+
delete_generator(@options.import_name)
|
21
|
+
CSVImporter.new(@options.import_name, @options.import_file_name, @options.token).import
|
22
|
+
elsif @options.import_file_name || @options.import_name
|
23
|
+
puts "You must pass both --import-variable-csv-file and --import-variable-name"
|
24
|
+
exit 2
|
25
|
+
end
|
12
26
|
|
13
27
|
post_opts = {}
|
14
28
|
if !@options.tags.empty?
|
@@ -23,7 +37,7 @@ module Rainforest
|
|
23
37
|
|
24
38
|
puts "Issuing run"
|
25
39
|
|
26
|
-
response = post(API_URL, post_opts)
|
40
|
+
response = post(API_URL + '/runs', post_opts)
|
27
41
|
|
28
42
|
if response['error']
|
29
43
|
puts "Error starting your run: #{response['error']}"
|
@@ -37,7 +51,7 @@ module Rainforest
|
|
37
51
|
|
38
52
|
while running
|
39
53
|
Kernel.sleep 5
|
40
|
-
response = get "#{API_URL}/#{run_id}?gem_version=#{Rainforest::Cli::VERSION}"
|
54
|
+
response = get "#{API_URL}/runs/#{run_id}?gem_version=#{Rainforest::Cli::VERSION}"
|
41
55
|
if response
|
42
56
|
if %w(queued in_progress sending_webhook waiting_for_callback).include?(response["state"])
|
43
57
|
puts "Run #{run_id} is #{response['state']} and is #{response['current_progress']['percent']}% complete"
|
@@ -54,6 +68,24 @@ module Rainforest
|
|
54
68
|
end
|
55
69
|
true
|
56
70
|
end
|
71
|
+
|
72
|
+
def self.list_generators
|
73
|
+
get("#{API_URL}/generators")
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.delete_generator(name)
|
77
|
+
generator = list_generators.find {|g| g['type'] == 'custom' && g['key'] == name }
|
78
|
+
delete("#{API_URL}/generators/#{generator['id']}") if generator
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.delete(url, body = {})
|
82
|
+
response = HTTParty.delete url, {
|
83
|
+
body: body,
|
84
|
+
headers: {"CLIENT_TOKEN" => @options.token}
|
85
|
+
}
|
86
|
+
|
87
|
+
JSON.parse(response.body)
|
88
|
+
end
|
57
89
|
|
58
90
|
def self.post(url, body = {})
|
59
91
|
response = HTTParty.post url, {
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'csv'
|
3
|
+
require 'httparty'
|
4
|
+
require 'parallel'
|
5
|
+
require 'ruby-progressbar'
|
6
|
+
|
7
|
+
module Rainforest
|
8
|
+
module Cli
|
9
|
+
class CSVImporter
|
10
|
+
def initialize name, file, token
|
11
|
+
@generator_name = name
|
12
|
+
@file = file
|
13
|
+
@token = token
|
14
|
+
end
|
15
|
+
|
16
|
+
def post url, body
|
17
|
+
HTTParty.post(Rainforest::Cli::API_URL + url, body: body.to_json, headers: {'Content-Type' => 'application/json', "CLIENT_TOKEN" => @token})
|
18
|
+
end
|
19
|
+
|
20
|
+
def row_data columns, values
|
21
|
+
Hash[(columns.map {|c| c['id']}).zip(values)]
|
22
|
+
end
|
23
|
+
|
24
|
+
def import
|
25
|
+
rows = []
|
26
|
+
CSV.foreach(@file, encoding: 'windows-1251:utf-8') do |row|
|
27
|
+
rows << row
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create the generator
|
31
|
+
columns = rows.shift.map do |column|
|
32
|
+
{name: column.downcase.strip.gsub(/\s/, '_')}
|
33
|
+
end
|
34
|
+
raise 'Invalid schema in CSV. You must include headers in first row.' if not columns
|
35
|
+
|
36
|
+
print "Creating custom step variable"
|
37
|
+
response = post "/generators", { name: @generator_name, description: @generator_name, columns: columns }
|
38
|
+
raise "Error creating custom step variable: #{response.code}, #{response.body}" unless response.code == 201
|
39
|
+
puts "\t[OK]"
|
40
|
+
|
41
|
+
@columns = response['columns']
|
42
|
+
@generator_id = response['id']
|
43
|
+
|
44
|
+
puts "Uploading data..."
|
45
|
+
p = ProgressBar.create(title: 'Rows', total: rows.count, format: '%a %B %p%% %t')
|
46
|
+
|
47
|
+
# Insert the data
|
48
|
+
Parallel.each(rows, in_processes: 16, finish: lambda { |item, i, result| p.increment }) do |row|
|
49
|
+
response = post("/generators/#{@generator_id}/rows", {data: row_data(@columns, row)})
|
50
|
+
raise response.to_json unless response.code == 201
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -10,7 +10,7 @@ module Rainforest
|
|
10
10
|
end
|
11
11
|
|
12
12
|
class OptionParser
|
13
|
-
attr_reader :command, :token, :tags, :conflict, :browsers
|
13
|
+
attr_reader :command, :token, :tags, :conflict, :browsers, :import_file_name, :import_name
|
14
14
|
|
15
15
|
VALID_BROWSERS = %w{chrome firefox safari ie8 ie9}.freeze
|
16
16
|
|
@@ -20,6 +20,14 @@ module Rainforest
|
|
20
20
|
@browsers = nil
|
21
21
|
|
22
22
|
@parsed = ::OptionParser.new do |opts|
|
23
|
+
opts.on("--import-variable-csv-file FILE", "Import step variables; CSV data") do |value|
|
24
|
+
@import_file_name = value
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("--import-variable-name NAME", "Import step variables; Name of variable (note, will be replaced if exists)") do |value|
|
28
|
+
@import_name = value
|
29
|
+
end
|
30
|
+
|
23
31
|
opts.on("--fg", "Run the tests in foreground.") do |value|
|
24
32
|
@foreground = value
|
25
33
|
end
|
data/rainforest-cli.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Rainforest::Cli::VERSION
|
9
9
|
spec.authors = ["Simon Mathieu", "Russell Smith"]
|
10
10
|
spec.email = ["simon@rainforestqa.com", "russ@rainforestqa.com"]
|
11
|
-
spec.description = %q{Command line utility for
|
12
|
-
spec.summary = %q{Command line utility for
|
11
|
+
spec.description = %q{Command line utility for Rainforest QA}
|
12
|
+
spec.summary = %q{Command line utility for Rainforest QA}
|
13
13
|
spec.homepage = "https://www.rainforestqa.com/"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -19,6 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "httparty"
|
22
|
+
spec.add_dependency "parallel"
|
23
|
+
spec.add_dependency "ruby-progressbar"
|
22
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
25
|
spec.add_development_dependency "rake"
|
26
|
+
|
27
|
+
spec.cert_chain = ['certs/ukd1.pem']
|
28
|
+
spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
|
24
29
|
end
|
data/spec/options_spec.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
describe Rainforest::Cli::OptionParser do
|
2
2
|
subject { Rainforest::Cli::OptionParser.new(args) }
|
3
3
|
|
4
|
+
context "importing csv file" do
|
5
|
+
let(:args) { ["--import-variable-csv-file", "some_file.csv"] }
|
6
|
+
its(:import_file_name) { should == "some_file.csv" }
|
7
|
+
end
|
8
|
+
|
9
|
+
context "importing name" do
|
10
|
+
let(:args) { ["--import-variable-name", "some_name"] }
|
11
|
+
its(:import_name) { should == "some_name" }
|
12
|
+
end
|
13
|
+
|
4
14
|
context "run all tests" do
|
5
15
|
let(:args) { ["run", "all"] }
|
6
16
|
its(:tests) { should == ["all"]}
|
metadata
CHANGED
@@ -1,59 +1,110 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainforest-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Mathieu
|
8
8
|
- Russell Smith
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
|
11
|
+
cert_chain:
|
12
|
+
- |
|
13
|
+
-----BEGIN CERTIFICATE-----
|
14
|
+
MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMR0wGwYDVQQDDBRydXNz
|
15
|
+
ZWxsLmhvd2FyZC5zbWl0aDESMBAGCgmSJomT8ixkARkWAm1lMRMwEQYKCZImiZPy
|
16
|
+
LGQBGRYDY29tMB4XDTE0MDgxNDA1Mzc0NloXDTE1MDgxNDA1Mzc0NlowSDEdMBsG
|
17
|
+
A1UEAwwUcnVzc2VsbC5ob3dhcmQuc21pdGgxEjAQBgoJkiaJk/IsZAEZFgJtZTET
|
18
|
+
MBEGCgmSJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
19
|
+
ggEBAKSK3Sfhs+miX1jdDywi9Khl1QjIn2DUM1U+bou6WLkQaOUtqhX/T2jHltQ9
|
20
|
+
Olc7jaz4XO5g+YngELX2tGFA6zbUnvaHXnPz23hPsP5TUErFAI1VJYl9fmQY6sEd
|
21
|
+
komCT8jZwB09Re20iyZtNsEMa8gagR7qX1wgPVqxAncE7OJ5stwHxcSQABfGrInF
|
22
|
+
sdZyjqNE2D0NxWZoWTC7CERaRNUm12y4NpHm6fdvtbgsB14WQjaqOYYUmFffT89Y
|
23
|
+
c0TOOGUV1aMbjpRUZFhu/tAaWGW+GfZnln9F3GWYJMRzC5k8+awB1vXgnfqZH007
|
24
|
+
ef85jyOutXfKKYyXcWlvrDMoTTUCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
|
25
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUFws4YIAtrBiQdbpWgqwcYd/+Hh4wJgYDVR0RBB8w
|
26
|
+
HYEbcnVzc2VsbC5ob3dhcmQuc21pdGhAbWUuY29tMCYGA1UdEgQfMB2BG3J1c3Nl
|
27
|
+
bGwuaG93YXJkLnNtaXRoQG1lLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEADHQJiURU
|
28
|
+
PJbfReV/MgIum917Vktz9Zv1GPzKzY5EkIL34FylaSernkITWe6GcsMb8yNrdG/1
|
29
|
+
eSyAvx32v/L3ef2mp7kHXbtzcXBq3xyCewfH6AfX3dm65CfgaeGx+qK/F/bl0iiZ
|
30
|
+
SQpNWk3RB/7deQThk3SYD8jS8n1d7KSRLogpXnSNWRyaSHtZ2x7T2qVpn4lp1PIi
|
31
|
+
/4Hg5bJrO0VqDlVG8UvsFbFB24ZNDQVq73MLZFNez0UBhOZVo4kBlSUvyEv5YLlA
|
32
|
+
wWdLLpBZZ1O4GE0uzQovmTiis4iyCF+8tFIgjbM/FVwKUBV6OZpxs4FOBtR1mK6L
|
33
|
+
lj0cPcKRm/FZUw==
|
34
|
+
-----END CERTIFICATE-----
|
35
|
+
date: 2014-08-14 00:00:00.000000000 Z
|
13
36
|
dependencies:
|
14
37
|
- !ruby/object:Gem::Dependency
|
15
38
|
name: httparty
|
16
39
|
requirement: !ruby/object:Gem::Requirement
|
17
40
|
requirements:
|
18
|
-
- -
|
41
|
+
- - ">="
|
19
42
|
- !ruby/object:Gem::Version
|
20
43
|
version: '0'
|
21
44
|
type: :runtime
|
22
45
|
prerelease: false
|
23
46
|
version_requirements: !ruby/object:Gem::Requirement
|
24
47
|
requirements:
|
25
|
-
- -
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: parallel
|
53
|
+
requirement: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
type: :runtime
|
59
|
+
prerelease: false
|
60
|
+
version_requirements: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: ruby-progressbar
|
67
|
+
requirement: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
type: :runtime
|
73
|
+
prerelease: false
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
26
77
|
- !ruby/object:Gem::Version
|
27
78
|
version: '0'
|
28
79
|
- !ruby/object:Gem::Dependency
|
29
80
|
name: bundler
|
30
81
|
requirement: !ruby/object:Gem::Requirement
|
31
82
|
requirements:
|
32
|
-
- - ~>
|
83
|
+
- - "~>"
|
33
84
|
- !ruby/object:Gem::Version
|
34
85
|
version: '1.3'
|
35
86
|
type: :development
|
36
87
|
prerelease: false
|
37
88
|
version_requirements: !ruby/object:Gem::Requirement
|
38
89
|
requirements:
|
39
|
-
- - ~>
|
90
|
+
- - "~>"
|
40
91
|
- !ruby/object:Gem::Version
|
41
92
|
version: '1.3'
|
42
93
|
- !ruby/object:Gem::Dependency
|
43
94
|
name: rake
|
44
95
|
requirement: !ruby/object:Gem::Requirement
|
45
96
|
requirements:
|
46
|
-
- -
|
97
|
+
- - ">="
|
47
98
|
- !ruby/object:Gem::Version
|
48
99
|
version: '0'
|
49
100
|
type: :development
|
50
101
|
prerelease: false
|
51
102
|
version_requirements: !ruby/object:Gem::Requirement
|
52
103
|
requirements:
|
53
|
-
- -
|
104
|
+
- - ">="
|
54
105
|
- !ruby/object:Gem::Version
|
55
106
|
version: '0'
|
56
|
-
description: Command line utility for
|
107
|
+
description: Command line utility for Rainforest QA
|
57
108
|
email:
|
58
109
|
- simon@rainforestqa.com
|
59
110
|
- russ@rainforestqa.com
|
@@ -62,10 +113,10 @@ executables:
|
|
62
113
|
extensions: []
|
63
114
|
extra_rdoc_files: []
|
64
115
|
files:
|
65
|
-
- .gitignore
|
66
|
-
- .rspec
|
67
|
-
- .rvmrc
|
68
|
-
- .travis.yml
|
116
|
+
- ".gitignore"
|
117
|
+
- ".rspec"
|
118
|
+
- ".rvmrc"
|
119
|
+
- ".travis.yml"
|
69
120
|
- CHANGELOG.md
|
70
121
|
- Gemfile
|
71
122
|
- LICENSE.txt
|
@@ -73,6 +124,7 @@ files:
|
|
73
124
|
- Rakefile
|
74
125
|
- bin/rainforest
|
75
126
|
- lib/rainforest/cli.rb
|
127
|
+
- lib/rainforest/cli/csv_importer.rb
|
76
128
|
- lib/rainforest/cli/options.rb
|
77
129
|
- lib/rainforest/cli/version.rb
|
78
130
|
- rainforest-cli.gemspec
|
@@ -89,20 +141,20 @@ require_paths:
|
|
89
141
|
- lib
|
90
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
143
|
requirements:
|
92
|
-
- -
|
144
|
+
- - ">="
|
93
145
|
- !ruby/object:Gem::Version
|
94
146
|
version: '0'
|
95
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
148
|
requirements:
|
97
|
-
- -
|
149
|
+
- - ">="
|
98
150
|
- !ruby/object:Gem::Version
|
99
151
|
version: '0'
|
100
152
|
requirements: []
|
101
153
|
rubyforge_project:
|
102
|
-
rubygems_version: 2.
|
154
|
+
rubygems_version: 2.2.2
|
103
155
|
signing_key:
|
104
156
|
specification_version: 4
|
105
|
-
summary: Command line utility for
|
157
|
+
summary: Command line utility for Rainforest QA
|
106
158
|
test_files:
|
107
159
|
- spec/cli_spec.rb
|
108
160
|
- spec/options_spec.rb
|
metadata.gz.sig
ADDED
Binary file
|