testingbot 0.1.5 → 0.2.2
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 +7 -0
- data/.github/workflows/test.yml +26 -0
- data/.travis.yml +7 -3
- data/LICENSE +1 -1
- data/README.md +207 -0
- data/bin/testingbot +4 -3
- data/lib/testingbot.rb +1 -5
- data/lib/testingbot/api.rb +153 -35
- data/lib/testingbot/version.rb +1 -1
- data/spec/integration/api_spec.rb +38 -18
- data/spec/resources/test.apk +1 -0
- data/spec/spec_helper.rb +6 -3
- metadata +55 -94
- data/README.rdoc +0 -237
- data/examples/android.rb +0 -14
- data/examples/capybara.rb +0 -22
- data/examples/capybara_multiple_browsers.rb +0 -38
- data/examples/cucumber/README.rdoc +0 -15
- data/examples/cucumber/Rakefile +0 -20
- data/examples/cucumber/features/support/env.rb +0 -13
- data/examples/cucumber/features/youtube.feature +0 -10
- data/examples/cucumber/features/youtube_steps.rb +0 -15
- data/examples/test_rspec.rb +0 -17
- data/examples/test_rspec1.rb +0 -36
- data/examples/test_unit.rb +0 -30
- data/lib/testingbot/capybara.rb +0 -66
- data/lib/testingbot/config.rb +0 -125
- data/lib/testingbot/cucumber.rb +0 -35
- data/lib/testingbot/hooks.rb +0 -287
- data/lib/testingbot/jasmine.rb +0 -29
- data/lib/testingbot/jasmine/README.rdoc +0 -16
- data/lib/testingbot/jasmine/Rakefile +0 -35
- data/lib/testingbot/jasmine/public/javascripts/Player.js +0 -22
- data/lib/testingbot/jasmine/public/javascripts/Song.js +0 -7
- data/lib/testingbot/jasmine/runner.rb +0 -4
- data/lib/testingbot/jasmine/spec/javascripts/PlayerSpec.js +0 -58
- data/lib/testingbot/jasmine/spec/javascripts/helpers/SpecHelper.js +0 -9
- data/lib/testingbot/jasmine/spec/javascripts/support/jasmine.yml +0 -73
- data/lib/testingbot/jasmine/test/Rakefile +0 -9
- data/lib/testingbot/jasmine/test/public/javascripts/Player.js +0 -22
- data/lib/testingbot/jasmine/test/public/javascripts/Song.js +0 -7
- data/lib/testingbot/jasmine/test/spec/javascripts/PlayerSpec.js +0 -58
- data/lib/testingbot/jasmine/test/spec/javascripts/helpers/SpecHelper.js +0 -9
- data/lib/testingbot/jasmine/test/spec/javascripts/support/jasmine.yml +0 -73
- data/lib/testingbot/selenium.rb +0 -127
- data/lib/testingbot/tunnel.rb +0 -104
- data/spec/integration/selenium1_spec.rb +0 -53
- data/spec/integration/selenium2_spec.rb +0 -60
- data/spec/integration/tunnel_spec.rb +0 -84
- data/spec/unit/api_spec.rb +0 -17
- data/spec/unit/config_spec.rb +0 -73
- data/spec/unit/tunnel_spec.rb +0 -41
- data/testingbot.gemspec +0 -25
- data/vendor/Testingbot-Tunnel.jar +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6c1801b21d64a6515b1fd8d1f1a6db23b0915dff62121b49a681d02eff530c2a
|
4
|
+
data.tar.gz: 30edd8ebbc255bf2b14005e9c5ea881b5bfc1ef6a19a1e8b9a24ed2bc2584f59
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 50e9843ec66a235debde34b17f2a40ab05bc545fd175959d14497b5b23a133beb9155408d61363cf307d2463b1aeb23cad50d081d05ff6a40dd431b9b82c3119
|
7
|
+
data.tar.gz: e781af83c71eeb24d0d086e29b1ee1e0bce71263b260045e1d2acc656f7d55409a03991bde4802edfae33bf474648184e45755bb7324ac6c9bcb8b0c1c48fc03
|
@@ -0,0 +1,26 @@
|
|
1
|
+
name: Test Changes
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby: [ '2.5', '2.6' ]
|
11
|
+
name: Ruby ${{ matrix.ruby }} test
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- uses: actions/setup-ruby@v1
|
15
|
+
with:
|
16
|
+
ruby-version: ${{ matrix.ruby }}
|
17
|
+
- name: Build and test
|
18
|
+
run: |
|
19
|
+
sudo apt-get -yqq install libpq-dev
|
20
|
+
gem install bundler
|
21
|
+
bundle install --jobs 3 --retry 3
|
22
|
+
bundle exec rake spec
|
23
|
+
env:
|
24
|
+
TB_KEY: ${{ secrets.TB_KEY }}
|
25
|
+
TB_SECRET: ${{ secrets.TB_SECRET }}
|
26
|
+
|
data/.travis.yml
CHANGED
data/LICENSE
CHANGED
data/README.md
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
[](https://badge.fury.io/rb/testingbot)
|
2
|
+
|
3
|
+
# Testingbot-Ruby
|
4
|
+
|
5
|
+
This is the TestingBot Ruby client which makes it easy to
|
6
|
+
interact with the [TestingBot API](https://testingbot.com/support/api)
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
gem 'testingbot'
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install testingbot
|
21
|
+
|
22
|
+
|
23
|
+
## Configuration
|
24
|
+
|
25
|
+
You'll need a [TestingBot account](https://testingbot.com). TestingBot offers free trials.
|
26
|
+
|
27
|
+
## Setup
|
28
|
+
|
29
|
+
Once you have a TestingBot account, you can retrieve your unique TestingBot Key and Secret from the [TestingBot dashboard](https://testingbot.com/members)
|
30
|
+
|
31
|
+
## Usage
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
@api = TestingBot::Api.new(key, secret)
|
35
|
+
```
|
36
|
+
|
37
|
+
#### Environment variables
|
38
|
+
You can set these environment variables to authenticate with our API:
|
39
|
+
|
40
|
+
```bash
|
41
|
+
TB_KEY=Your TestingBot Key
|
42
|
+
TB_SECRET=Your TestingBot Secret
|
43
|
+
```
|
44
|
+
|
45
|
+
### get_browsers
|
46
|
+
Gets a list of browsers you can test on
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
@api.get_browsers
|
50
|
+
```
|
51
|
+
|
52
|
+
### get_devices
|
53
|
+
Gets a list of (physical) devices you can test on
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
@api.get_devices
|
57
|
+
```
|
58
|
+
|
59
|
+
### get_available_devices
|
60
|
+
Gets a list of available (physical) devices you can test on
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
@api.get_available_devices
|
64
|
+
```
|
65
|
+
|
66
|
+
### get_user_info
|
67
|
+
Gets your user information
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
@api.get_user_info
|
71
|
+
```
|
72
|
+
|
73
|
+
### update_user_info
|
74
|
+
Updates your user information
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
@api.update_user_info({ "first_name" => 'my name' })
|
78
|
+
```
|
79
|
+
|
80
|
+
### update_test
|
81
|
+
Updates a Test with Meta-data to display on TestingBot.
|
82
|
+
For example, you can specify the test name and whether the test succeeded or failed:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
@api.update_test(webdriver_session_id, { :name => new_name, :success => true })
|
86
|
+
```
|
87
|
+
|
88
|
+
### get_test
|
89
|
+
Gets meta information for a test/job by passing in the WebDriver sessionID of the test you ran on TestingBot:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
@api.get_test(webdriver_session_id)
|
93
|
+
```
|
94
|
+
|
95
|
+
### get_tests
|
96
|
+
Gets a list of previous jobs/tests that you ran on TestingBot, order by last run:
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
@api.get_tests(0, 10)
|
100
|
+
```
|
101
|
+
|
102
|
+
### delete_test
|
103
|
+
Deletes a test from TestingBot
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
@api.delete_test(webdriver_session_id)
|
107
|
+
```
|
108
|
+
|
109
|
+
### stop_test
|
110
|
+
Stops a running test on TestingBot
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
@api.stop_test(webdriver_session_id)
|
114
|
+
```
|
115
|
+
|
116
|
+
### get_builds
|
117
|
+
Gets a list of builds that you ran on TestingBot, order by last run:
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
@api.get_builds(0, 10)
|
121
|
+
```
|
122
|
+
|
123
|
+
### get_build
|
124
|
+
Gets a build from TestingBot
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
@api.get_build(build_identifier)
|
128
|
+
```
|
129
|
+
|
130
|
+
### delete_build
|
131
|
+
Deletes a build from TestingBot
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
@api.delete_build(build_identifier)
|
135
|
+
```
|
136
|
+
|
137
|
+
### get_tunnels
|
138
|
+
Gets a list of active tunnels for your account.
|
139
|
+
|
140
|
+
```ruby
|
141
|
+
@api.get_tunnels
|
142
|
+
```
|
143
|
+
|
144
|
+
### delete_tunnel
|
145
|
+
Deletes an active tunnel.
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
@api.delete_tunnel(tunnel_identifier)
|
149
|
+
```
|
150
|
+
|
151
|
+
### upload_local_file
|
152
|
+
Uploads a local file (APK or IPA file) to TestingBot Storage for Mobile App Testing.
|
153
|
+
|
154
|
+
```ruby
|
155
|
+
@api.upload_local_file(localFilePath)
|
156
|
+
```
|
157
|
+
|
158
|
+
### upload_remote_file
|
159
|
+
Uploads a remote file (APK or IPA URL) to TestingBot Storage for Mobile App Testing.
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
@api.upload_remote_file(remoteFileUrl)
|
163
|
+
```
|
164
|
+
|
165
|
+
### get_uploaded_files
|
166
|
+
Retrieves files previously uploaded TestingBot Storage for Mobile App Testing.
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
@api.get_uploaded_files(offset = 0, count = 30)
|
170
|
+
```
|
171
|
+
|
172
|
+
### get_uploaded_file
|
173
|
+
Retrieves meta-data for a file previously uploaded to TestingBot Storage.
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
@api.get_uploaded_file(app_url)
|
177
|
+
```
|
178
|
+
|
179
|
+
### delete_uploaded_file
|
180
|
+
Deletes a previously uploaded file
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
@api.delete_uploaded_file(remoteFileUrl)
|
184
|
+
```
|
185
|
+
|
186
|
+
### upload_remote_file
|
187
|
+
Uploads a remote file (APK or IPA URL) to TestingBot Storage for Mobile App Testing.
|
188
|
+
|
189
|
+
```ruby
|
190
|
+
@api.upload_remote_file(remoteFileUrl)
|
191
|
+
```
|
192
|
+
|
193
|
+
### get_authentication_hash
|
194
|
+
Calculates the hash necessary to share tests with other people
|
195
|
+
|
196
|
+
```ruby
|
197
|
+
@api.get_authentication_hash(identifier)
|
198
|
+
```
|
199
|
+
|
200
|
+
## Contributing
|
201
|
+
|
202
|
+
1. Fork this repository
|
203
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
204
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
205
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
206
|
+
5. Create new Pull Request
|
207
|
+
|
data/bin/testingbot
CHANGED
@@ -4,8 +4,9 @@ if ARGV.any?
|
|
4
4
|
api_key, api_secret = ARGV.first.split(':')
|
5
5
|
else
|
6
6
|
|
7
|
-
p "This utility will help you set up your system to use
|
8
|
-
p "Once you have entered your
|
7
|
+
p "This utility will help you set up your system to use TestingBot's infrastructure."
|
8
|
+
p "Once you have entered your API key and secret you will be ready to use our grid"
|
9
|
+
p "You can get these credentials from the TestingBot dashboard: https://testingbot.com/members"
|
9
10
|
|
10
11
|
p "Please enter your testingbot API KEY:"
|
11
12
|
api_key = gets.chomp
|
@@ -15,4 +16,4 @@ end
|
|
15
16
|
|
16
17
|
File.open(File.expand_path("~/.testingbot"), 'w') {|f| f.write("#{api_key}:#{api_secret}") }
|
17
18
|
|
18
|
-
p "Your system is now ready to use
|
19
|
+
p "Your system is now ready to use TestingBot's grid infrastructure."
|
data/lib/testingbot.rb
CHANGED
data/lib/testingbot/api.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'json'
|
2
|
+
require "rest-client"
|
3
|
+
|
2
4
|
module TestingBot
|
3
5
|
|
4
6
|
class Api
|
@@ -6,16 +8,49 @@ module TestingBot
|
|
6
8
|
VERSION = 1
|
7
9
|
API_URL = "https://api.testingbot.com"
|
8
10
|
|
9
|
-
attr_reader :
|
11
|
+
attr_reader :key, :secret, :options
|
12
|
+
|
13
|
+
def initialize(key = nil, secret = nil, options = {})
|
14
|
+
@key = key
|
15
|
+
@secret = secret
|
16
|
+
@options = {
|
17
|
+
:debug => false
|
18
|
+
}.merge(options)
|
19
|
+
if @key.nil? || @secret.nil?
|
20
|
+
cached_credentials = load_config_file
|
21
|
+
@key, @secret = cached_credentials unless cached_credentials.nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
if @key.nil? || @secret.nil?
|
25
|
+
@key = ENV["TESTINGBOT_KEY"] if ENV["TESTINGBOT_KEY"]
|
26
|
+
@secret = ENV["TESTINGBOT_SECRET"] if ENV["TESTINGBOT_SECRET"]
|
27
|
+
end
|
10
28
|
|
11
|
-
|
12
|
-
|
29
|
+
if @key.nil? || @secret.nil?
|
30
|
+
@key = ENV["TB_KEY"] if ENV["TB_KEY"]
|
31
|
+
@secret = ENV["TB_SECRET"] if ENV["TB_SECRET"]
|
32
|
+
end
|
33
|
+
|
34
|
+
raise "Please supply a TestingBot Key" if @key.nil?
|
35
|
+
raise "Please supply a TestingBot Secret" if @secret.nil?
|
13
36
|
end
|
14
37
|
|
15
38
|
def get_user_info
|
16
39
|
get("/user")
|
17
40
|
end
|
18
41
|
|
42
|
+
def get_browsers
|
43
|
+
get("/browsers")
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_devices
|
47
|
+
get("/devices")
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_available_devices
|
51
|
+
get("/devices/available")
|
52
|
+
end
|
53
|
+
|
19
54
|
def update_user_info(params = {})
|
20
55
|
new_params = {}
|
21
56
|
params.keys.each do |key|
|
@@ -29,7 +64,7 @@ module TestingBot
|
|
29
64
|
get("/tests?offset=#{offset}&count=#{count}")
|
30
65
|
end
|
31
66
|
|
32
|
-
def
|
67
|
+
def get_test(test_id)
|
33
68
|
get("/tests/#{test_id}")
|
34
69
|
end
|
35
70
|
|
@@ -47,19 +82,104 @@ module TestingBot
|
|
47
82
|
response["success"]
|
48
83
|
end
|
49
84
|
|
85
|
+
def stop_test(test_id)
|
86
|
+
response = put("/tests/#{test_id}/stop")
|
87
|
+
response["success"]
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_builds(offset = 0, count = 10)
|
91
|
+
get("/builds?offset=#{offset}&count=#{count}")
|
92
|
+
end
|
93
|
+
|
94
|
+
def get_build(build_identifier)
|
95
|
+
get("/builds/#{build_identifier}")
|
96
|
+
end
|
97
|
+
|
98
|
+
def delete_build(build_identifier)
|
99
|
+
delete("/builds/#{build_identifier}")
|
100
|
+
end
|
101
|
+
|
102
|
+
def get_tunnels
|
103
|
+
get("/tunnel/list")
|
104
|
+
end
|
105
|
+
|
106
|
+
def delete_tunnel(tunnel_identifier)
|
107
|
+
delete("/tunnel/#{tunnel_identifier}")
|
108
|
+
end
|
109
|
+
|
110
|
+
def get_authentication_hash(identifier)
|
111
|
+
Digest::MD5.hexdigest("#{@key}:#{@secret}:#{identifier}")
|
112
|
+
end
|
113
|
+
|
114
|
+
def upload_local_file(file_path)
|
115
|
+
response = RestClient::Request.execute(
|
116
|
+
method: :post,
|
117
|
+
url: API_URL + "/v1/storage",
|
118
|
+
user: @key,
|
119
|
+
password: @secret,
|
120
|
+
timeout: 600,
|
121
|
+
payload: {
|
122
|
+
multipart: true,
|
123
|
+
file: File.new(file_path, 'rb')
|
124
|
+
}
|
125
|
+
)
|
126
|
+
parsed = JSON.parse(response.body)
|
127
|
+
parsed
|
128
|
+
end
|
129
|
+
|
130
|
+
def upload_remote_file(url)
|
131
|
+
post("/storage/", {
|
132
|
+
:url => url
|
133
|
+
})
|
134
|
+
end
|
135
|
+
|
136
|
+
def get_uploaded_files(offset = 0, count = 10)
|
137
|
+
get("/storage?offset=#{offset}&count=#{count}")
|
138
|
+
end
|
139
|
+
|
140
|
+
def get_uploaded_file(app_url)
|
141
|
+
get("/storage/#{app_url.gsub(/tb:\/\//, '')}")
|
142
|
+
end
|
143
|
+
|
144
|
+
def delete_uploaded_file(app_url)
|
145
|
+
response = delete("/storage/#{app_url.gsub(/tb:\/\//, '')}")
|
146
|
+
response["success"]
|
147
|
+
end
|
148
|
+
|
50
149
|
private
|
51
150
|
|
151
|
+
def load_config_file
|
152
|
+
is_windows = false
|
153
|
+
|
154
|
+
begin
|
155
|
+
require 'rbconfig'
|
156
|
+
is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
|
157
|
+
rescue
|
158
|
+
is_windows = (RUBY_PLATFORM =~ /w.*32/) || (ENV["OS"] && ENV["OS"] == "Windows_NT")
|
159
|
+
end
|
160
|
+
|
161
|
+
if is_windows
|
162
|
+
config_file = "#{ENV['HOMEDRIVE']}\\.testingbot"
|
163
|
+
else
|
164
|
+
config_file = File.expand_path("#{Dir.home}/.testingbot")
|
165
|
+
end
|
166
|
+
|
167
|
+
if File.exists?(config_file)
|
168
|
+
str = File.open(config_file) { |f| f.readline }.chomp
|
169
|
+
return str.split(':')
|
170
|
+
end
|
171
|
+
|
172
|
+
return nil
|
173
|
+
end
|
174
|
+
|
52
175
|
def get(url)
|
53
|
-
uri =
|
54
|
-
req = Net::HTTP::Get.new(uri.request_uri)
|
55
|
-
req.basic_auth @config[:client_key], @config[:client_secret]
|
56
|
-
res = Net::HTTP.start(uri.host, uri.port) {|http|
|
57
|
-
http.request(req)
|
58
|
-
}
|
176
|
+
uri = API_URL + '/v' + VERSION.to_s + url
|
59
177
|
|
60
|
-
|
178
|
+
response = RestClient::Request.execute method: :get, url: uri, user: @key, password: @secret
|
179
|
+
parsed = JSON.parse(response.body)
|
61
180
|
|
62
|
-
|
181
|
+
p parsed if @options[:debug]
|
182
|
+
if !parsed.is_a?(Array) && !parsed["error"].nil? && !parsed["error"].empty?
|
63
183
|
raise parsed["error"]
|
64
184
|
end
|
65
185
|
|
@@ -67,17 +187,13 @@ module TestingBot
|
|
67
187
|
end
|
68
188
|
|
69
189
|
def put(url, params = {})
|
70
|
-
uri =
|
71
|
-
req = Net::HTTP::Put.new(uri.request_uri)
|
72
|
-
req.basic_auth @config[:client_key], @config[:client_secret]
|
73
|
-
req.set_form_data(params)
|
74
|
-
res = Net::HTTP.start(uri.host, uri.port) {|http|
|
75
|
-
http.request(req)
|
76
|
-
}
|
190
|
+
uri = API_URL + '/v' + VERSION.to_s + url
|
77
191
|
|
78
|
-
|
192
|
+
response = RestClient::Request.execute method: :put, url: uri, payload: params, user: @key, password: @secret
|
193
|
+
parsed = JSON.parse(response.body)
|
79
194
|
|
80
|
-
|
195
|
+
p parsed if @options[:debug]
|
196
|
+
if !parsed.is_a?(Array) && !parsed["error"].nil? && !parsed["error"].empty?
|
81
197
|
raise parsed["error"]
|
82
198
|
end
|
83
199
|
|
@@ -85,17 +201,12 @@ module TestingBot
|
|
85
201
|
end
|
86
202
|
|
87
203
|
def delete(url, params = {})
|
88
|
-
uri =
|
89
|
-
|
90
|
-
|
91
|
-
req.set_form_data(params)
|
92
|
-
res = Net::HTTP.start(uri.host, uri.port) {|http|
|
93
|
-
http.request(req)
|
94
|
-
}
|
95
|
-
|
96
|
-
parsed = JSON.parse(res.body)
|
204
|
+
uri = API_URL + '/v' + VERSION.to_s + url
|
205
|
+
response = RestClient::Request.execute method: :delete, url: uri, payload: params, user: @key, password: @secret
|
206
|
+
parsed = JSON.parse(response.body)
|
97
207
|
|
98
|
-
|
208
|
+
p parsed if @options[:debug]
|
209
|
+
if !parsed.is_a?(Array) && !parsed["error"].nil? && !parsed["error"].empty?
|
99
210
|
raise parsed["error"]
|
100
211
|
end
|
101
212
|
|
@@ -103,10 +214,17 @@ module TestingBot
|
|
103
214
|
end
|
104
215
|
|
105
216
|
def post(url, params = {})
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
217
|
+
uri = API_URL + '/v' + VERSION.to_s + url
|
218
|
+
|
219
|
+
response = RestClient::Request.execute method: :post, url: uri, payload: params, user: @key, password: @secret
|
220
|
+
parsed = JSON.parse(response.body)
|
221
|
+
|
222
|
+
p parsed if @options[:debug]
|
223
|
+
if !parsed.is_a?(Array) && !parsed["error"].nil? && !parsed["error"].empty?
|
224
|
+
raise parsed["error"]
|
225
|
+
end
|
226
|
+
|
227
|
+
parsed
|
110
228
|
end
|
111
229
|
end
|
112
230
|
end
|