rainforest-cli 0.0.12 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|