rainforest-client 0.0.10
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/.gitignore +34 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +8 -0
- data/README.md +71 -0
- data/Rakefile +21 -0
- data/lib/rainforest/client.rb +70 -0
- data/lib/rainforest/client/version.rb +5 -0
- data/lib/rainforest/resource/base.rb +40 -0
- data/lib/rainforest/resource/runs.rb +17 -0
- data/lib/rainforest_client.rb +1 -0
- data/rainforest-client.gemspec +23 -0
- data/spec/rainforest/client_spec.rb +93 -0
- data/spec/spec_helper.rb +13 -0
- metadata +107 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 67f3f0495908c60093c5dcd1df844643a51d064a
|
4
|
+
data.tar.gz: 6e2d86568a94f96bf25dfcf85acefe5b6dd40f25
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8fd7080807a7dd2a5656d3031f106bbecb36edf547141b0fbe8d595a6ebc39cbcf778704290fb9e23f8c9813aae692fe43310ad5ca2a29595b1fe3917289ee81
|
7
|
+
data.tar.gz: bb592ed884c0b1f4c645f46c2a140ece3af78d0f7905569542840c7e952035741a521220f14afe3dfea9c7b4e0183791fcd88dad5cf375b63777f7166c470358
|
data/.gitignore
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swo
|
15
|
+
*.swp
|
16
|
+
|
17
|
+
## PROJECT::GENERAL
|
18
|
+
config/mixpanel.yml
|
19
|
+
coverage
|
20
|
+
rdoc
|
21
|
+
pkg
|
22
|
+
doc
|
23
|
+
.yardoc
|
24
|
+
|
25
|
+
## PROJECT::SPECIFIC
|
26
|
+
test/
|
27
|
+
tmp/
|
28
|
+
|
29
|
+
## Bundler/Gems
|
30
|
+
*.gem
|
31
|
+
.bundle
|
32
|
+
Gemfile.lock
|
33
|
+
pkg/*
|
34
|
+
bin/*
|
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rainforest-client
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p247
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
[](https://travis-ci.org/kureikain/rainforest-gem)
|
2
|
+
|
3
|
+
# Rainforest-client
|
4
|
+
|
5
|
+
API Client for RainForest
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
$ gem install rainforest-client
|
10
|
+
|
11
|
+
or if you use a Gemfile
|
12
|
+
|
13
|
+
gem 'rainforest_client'
|
14
|
+
|
15
|
+
or you can use direcly from github
|
16
|
+
|
17
|
+
gem 'rainforest-client',
|
18
|
+
:git => 'https://github.com/kureikain/rainforest-gem',
|
19
|
+
:branch => 'master'
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
You can access end-point directly, via request method and receive JSON data back. Or use resource wrapper.
|
24
|
+
|
25
|
+
### Access API directly
|
26
|
+
|
27
|
+
require 'rubygems'
|
28
|
+
require 'rainforest-client'
|
29
|
+
|
30
|
+
Rainforest::Client.api_key="1f98f025af50d0d6732e79625abb5a06"
|
31
|
+
|
32
|
+
api = Rainforest::Client.new
|
33
|
+
payload = {tests: [2286]}
|
34
|
+
|
35
|
+
runs = api.request('runs', payload)
|
36
|
+
puts runs
|
37
|
+
|
38
|
+
# Or to get runs
|
39
|
+
runs = api.request('runs', payload, :get)
|
40
|
+
puts runs
|
41
|
+
|
42
|
+
# Get a particular resource
|
43
|
+
|
44
|
+
runs = api.request('runs/2286', nil, :get)
|
45
|
+
puts runs
|
46
|
+
|
47
|
+
### Or via object/resource wrapper
|
48
|
+
|
49
|
+
runs = Rainforest::Runs.new
|
50
|
+
puts runs.retrieve
|
51
|
+
|
52
|
+
puts runs.retrieve 4208898
|
53
|
+
puts runs.delete
|
54
|
+
|
55
|
+
# These are not implemented yet
|
56
|
+
test = Rainforest::Tests.new
|
57
|
+
test.create
|
58
|
+
|
59
|
+
puts runs.retrieve 4208898
|
60
|
+
|
61
|
+
## Test
|
62
|
+
$ rake spec
|
63
|
+
|
64
|
+
## Changelog
|
65
|
+
|
66
|
+
### v0.0.2
|
67
|
+
* Separate API client and resource
|
68
|
+
* Add error handle via parsing response from API endpoint
|
69
|
+
|
70
|
+
### v0.0.1
|
71
|
+
* Experimental
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake'
|
4
|
+
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
|
9
|
+
desc 'Run all default tests'
|
10
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
11
|
+
#spec.pattern = 'spec/**/*_spec.rb'
|
12
|
+
spec.rspec_opts = ['--format doc --color']
|
13
|
+
end
|
14
|
+
|
15
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
16
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
17
|
+
spec.rcov = true
|
18
|
+
end
|
19
|
+
|
20
|
+
task :spec
|
21
|
+
task :default => :spec
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require "rainforest/client/version"
|
2
|
+
require "rainforest/resource/base"
|
3
|
+
require "rainforest/resource/runs"
|
4
|
+
require "httparty"
|
5
|
+
require "json"
|
6
|
+
|
7
|
+
module Rainforest
|
8
|
+
class ConfigurationError < StandardError; end
|
9
|
+
|
10
|
+
class Client
|
11
|
+
@@api_key = nil
|
12
|
+
API_END_POINT = 'https://app.rainforestqa.com/api/1/'
|
13
|
+
|
14
|
+
def self.api_key=(api_key)
|
15
|
+
@@api_key = api_key
|
16
|
+
end
|
17
|
+
def self.api_key
|
18
|
+
@@api_key
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
end
|
23
|
+
|
24
|
+
# More information about resource at: https://app.rainforestqa.com/docs
|
25
|
+
def build_request_uri(resource)
|
26
|
+
_resource = resource.split('/')[0]
|
27
|
+
raise ArgumentError, 'resource is invalid' unless ['auth', 'clients', 'runs', 'tests', 'environments', 'pricing_plan'].include? _resource
|
28
|
+
return "#{API_END_POINT}#{resource}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def request(cmd, payload, method = :post)
|
32
|
+
raise Rainforest::ConfigurationError, "Client token is missing" if @@api_key == nil
|
33
|
+
|
34
|
+
url = build_request_uri(cmd)
|
35
|
+
payload = payload.to_json if payload.class == Hash
|
36
|
+
|
37
|
+
if [:get, :post, :put, :delete].include? method
|
38
|
+
case method
|
39
|
+
when :get
|
40
|
+
response = HTTParty.get url, {
|
41
|
+
body: payload,
|
42
|
+
headers: {"CLIENT_TOKEN" => @@api_key, "Content-type" => "application/json"}
|
43
|
+
}
|
44
|
+
when :post
|
45
|
+
response = HTTParty.post url, {
|
46
|
+
body: payload,
|
47
|
+
headers: {"CLIENT_TOKEN" => @@api_key, "Content-type" => "application/json"}
|
48
|
+
}
|
49
|
+
when :put
|
50
|
+
response = HTTParty.put url, {
|
51
|
+
body: payload,
|
52
|
+
headers: {"CLIENT_TOKEN" => @@api_key, "Content-type" => "application/json"}
|
53
|
+
}
|
54
|
+
when :delete
|
55
|
+
response = HTTParty.delete url, {
|
56
|
+
body: payload,
|
57
|
+
headers: {"CLIENT_TOKEN" => @@api_key, "Content-type" => "application/json"}
|
58
|
+
}
|
59
|
+
end
|
60
|
+
body = JSON.parse(response.body)
|
61
|
+
if body.include? 'error'
|
62
|
+
raise body['error']
|
63
|
+
end
|
64
|
+
return JSON.parse(response.body)
|
65
|
+
end
|
66
|
+
raise ArgumentError, "Invalid Method. We support only: :get, :post, :put, :delete"
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Rainforest
|
4
|
+
class Resource
|
5
|
+
|
6
|
+
def initialize(hash=nil)
|
7
|
+
if hash.class == Hash
|
8
|
+
hash.each do |k,v|
|
9
|
+
self.instance_variable_set("@#{k}", v)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
@api_client = Rainforest::Client.new
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
# Get resource
|
17
|
+
def retrieve(id=nil)
|
18
|
+
if id.is_a? Integer
|
19
|
+
object = self.class.name.split('::')[-1].downcase + '/' + id.to_s
|
20
|
+
@api_client.request(object, nil, :get)
|
21
|
+
else
|
22
|
+
object = self.class.name.split('::')[-1].downcase + '/' + id.to_s
|
23
|
+
@api_client.request(object, nil, :get)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Create resource
|
28
|
+
def create
|
29
|
+
end
|
30
|
+
|
31
|
+
# Delete resource
|
32
|
+
def delete
|
33
|
+
end
|
34
|
+
|
35
|
+
# @TODO
|
36
|
+
def update
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require "rainforest/client"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rainforest/client/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rainforest-client"
|
8
|
+
spec.version = Rainforest::Client::VERSION
|
9
|
+
spec.authors = ["Simon Mathieu", "Russell Smith", "kureikain"]
|
10
|
+
spec.email = ["simon@rainforestqa.com", "russ@rainforestqa.com"]
|
11
|
+
spec.description = %q{API Client for RainforestQA}
|
12
|
+
spec.summary = %q{API Client for RainforestQA}
|
13
|
+
spec.homepage = "https://www.rainforestqa.com/"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency "httparty"
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
describe Rainforest::Client do
|
5
|
+
# Should keep this API key for tets only
|
6
|
+
let(:api_key) { '1f98f025af50d0d6732e79625abb5a06'}
|
7
|
+
subject do
|
8
|
+
Rainforest::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should create a new instance" do
|
12
|
+
subject.should be_an_instance_of Rainforest::Client
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should update API key' do
|
16
|
+
Rainforest::Client.api_key = api_key
|
17
|
+
Rainforest::Client.api_key.should == api_key
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#build_request_uri' do
|
21
|
+
it "should throw error with nil resource" do
|
22
|
+
expect { subject.build_request_uri}.to raise_error ArgumentError
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should throw error with empty resource" do
|
26
|
+
expect { subject.build_request_uri(' ')}.to raise_error ArgumentError
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should throw error with invalid resource" do
|
30
|
+
expect { subject.build_request_uri('unknow resource')}.to raise_error ArgumentError
|
31
|
+
end
|
32
|
+
|
33
|
+
it "build correct end point" do
|
34
|
+
subject.build_request_uri('runs').should == 'https://app.rainforestqa.com/api/1/runs'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#request' do
|
39
|
+
context "with invalid param" do
|
40
|
+
it "should raise error without an API token" do
|
41
|
+
Rainforest::Client.api_key = nil
|
42
|
+
expect { subject.request('runs', {}, :get)}.to raise_error Rainforest::ConfigurationError
|
43
|
+
end
|
44
|
+
it "should raise error with input argument" do
|
45
|
+
Rainforest::Client.api_key = api_key
|
46
|
+
expect { subject.request('lopruns', {}, :invalid)}.to raise_error ArgumentError
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with valid param" do
|
51
|
+
before(:each) do
|
52
|
+
Rainforest::Client.api_key = api_key
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should retrieve all runs" do
|
56
|
+
payload = {tests: [2286]}
|
57
|
+
uri = subject.build_request_uri('runs')
|
58
|
+
HTTParty.stub(:get).with(uri, {body: "{}", headers: {"CLIENT_TOKEN" => api_key, "Content-type" => "application/json"}}) do
|
59
|
+
OpenStruct.new({body: '[{"id":4337,"object":"Run","created_at":"2013-11-16T08:30:36Z","environment_id":1235,"test_count":1,"state_log":[{"created_at":"2013-11-16T08:30:46Z","event":"validate_run!","from":"queued","id":11846764,"state_column":"state","stateful_id":4337,"stateful_type":"Run","to":"validating","transitioned_at":"2013-11-16T08:30:46Z","updated_at":"2013-11-16T08:30:46Z"},{"created_at":"2013-11-16T08:30:46Z","event":"validated!","from":"validating","id":11846763,"state_column":"state","stateful_id":4337,"stateful_type":"Run","to":"in_progress","transitioned_at":"2013-11-16T08:30:46Z","updated_at":"2013-11-16T08:30:46Z"}],"state":"in_progress","result":"no_result","expected_wait_time":5400.0,"browsers":[{"name":"chrome","state":"enabled"},{"name":"firefox","state":"enabled"},{"name":"ie8","state":"enabled"},{"name":"ie9","state":"enabled"},{"name":"safari","state":"enabled"}],"requested_tests":[2286]},{"id":4270,"object":"Run","created_at":"2013-11-14T05:47:46Z","environment_id":1235,"test_count":1,"state_log":[{"created_at":"2013-11-14T06:06:54Z","event":"complete!","from":"in_progress","id":11780317,"state_column":"state","stateful_id":4270,"stateful_type":"Run","to":"complete","transitioned_at":"2013-11-14T06:06:54Z","updated_at":"2013-11-14T06:06:54Z"},{"created_at":"2013-11-14T06:06:44Z","event":"failed!","from":"no_result","id":11780303,"state_column":"result","stateful_id":4270,"stateful_type":"Run","to":"failed","transitioned_at":"2013-11-14T06:06:44Z","updated_at":"2013-11-14T06:06:44Z"},{"created_at":"2013-11-14T06:06:43Z","event":"failed!","from":"no_result","id":11780301,"state_column":"result","stateful_id":4270,"stateful_type":"Run","to":"failed","transitioned_at":"2013-11-14T06:06:43Z","updated_at":"2013-11-14T06:06:43Z"},{"created_at":"2013-11-14T05:48:05Z","event":"validate_run!","from":"queued","id":11779865,"state_column":"state","stateful_id":4270,"stateful_type":"Run","to":"validating","transitioned_at":"2013-11-14T05:48:05Z","updated_at":"2013-11-14T05:48:05Z"},{"created_at":"2013-11-14T05:48:05Z","event":"validated!","from":"validating","id":11779864,"state_column":"state","stateful_id":4270,"stateful_type":"Run","to":"in_progress","transitioned_at":"2013-11-14T05:48:05Z","updated_at":"2013-11-14T05:48:05Z"}],"state":"complete","result":"failed","expected_wait_time":5400.0,"browsers":[{"name":"chrome","state":"enabled"},{"name":"firefox","state":"enabled"},{"name":"ie8","state":"enabled"},{"name":"ie9","state":"enabled"},{"name":"safari","state":"enabled"}],"requested_tests":[2286]},{"id":4269,"object":"Run","created_at":"2013-11-14T05:30:51Z","environment_id":1235,"test_count":1,"state_log":[{"created_at":"2013-11-14T05:54:29Z","event":"complete!","from":"in_progress","id":11780079,"state_column":"state","stateful_id":4269,"stateful_type":"Run","to":"complete","transitioned_at":"2013-11-14T05:54:29Z","updated_at":"2013-11-14T05:54:29Z"},{"created_at":"2013-11-14T05:48:01Z","event":"failed!","from":"failed","id":11779840,"state_column":"result","stateful_id":4269,"stateful_type":"Run","to":"failed","transitioned_at":"2013-11-14T05:48:01Z","updated_at":"2013-11-14T05:48:01Z"},{"created_at":"2013-11-14T05:36:19Z","event":"failed!","from":"no_result","id":11779597,"state_column":"result","stateful_id":4269,"stateful_type":"Run","to":"failed","transitioned_at":"2013-11-14T05:36:19Z","updated_at":"2013-11-14T05:36:19Z"},{"created_at":"2013-11-14T05:36:18Z","event":"failed!","from":"no_result","id":11779595,"state_column":"result","stateful_id":4269,"stateful_type":"Run","to":"failed","transitioned_at":"2013-11-14T05:36:18Z","updated_at":"2013-11-14T05:36:18Z"},{"created_at":"2013-11-14T05:31:05Z","event":"validate_run!","from":"queued","id":11779400,"state_column":"state","stateful_id":4269,"stateful_type":"Run","to":"validating","transitioned_at":"2013-11-14T05:31:05Z","updated_at":"2013-11-14T05:31:05Z"},{"created_at":"2013-11-14T05:31:05Z","event":"validated!","from":"validating","id":11779399,"state_column":"state","stateful_id":4269,"stateful_type":"Run","to":"in_progress","transitioned_at":"2013-11-14T05:31:05Z","updated_at":"2013-11-14T05:31:05Z"}],"state":"complete","result":"failed","expected_wait_time":5400.0,"browsers":[{"name":"chrome","state":"enabled"},{"name":"firefox","state":"enabled"},{"name":"ie8","state":"enabled"},{"name":"ie9","state":"enabled"},{"name":"safari","state":"enabled"}],"requested_tests":[2285]}]'})
|
60
|
+
end
|
61
|
+
runs = subject.request('runs', {}, :get)
|
62
|
+
expect(runs.count).to eq(3)
|
63
|
+
expect(runs[0]['id']).to eq(4337)
|
64
|
+
expect(runs[0]['object']).to eq('Run')
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should create a run" do
|
68
|
+
payload = {tests: [2286]}
|
69
|
+
uri = subject.build_request_uri('runs')
|
70
|
+
HTTParty.stub(:post).with(uri, {body: payload.to_json, headers: {"CLIENT_TOKEN" => api_key, "Content-type" => "application/json"}}) do
|
71
|
+
OpenStruct.new({:body=> '{"id":4338,"object":"Run","created_at":"2013-11-16T09:03:19Z","environment_id":1235,"test_count":0,"state_log":[],"state":"queued","result":"no_result","expected_wait_time":5400.0,"browsers":[{"name":"chrome","state":"disabled"},{"name":"firefox","state":"disabled"},{"name":"ie8","state":"disabled"},{"name":"ie9","state":"disabled"},{"name":"safari","state":"disabled"}],"requested_tests":[2286]}'})
|
72
|
+
end
|
73
|
+
runs = subject.request('runs', payload, :post)
|
74
|
+
expect(runs['id']).to eq(4338)
|
75
|
+
expect(runs['object']).to eq('Run')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should abort a run" do
|
79
|
+
run_id = 4338
|
80
|
+
payload = {:run => run_id}
|
81
|
+
uri = subject.build_request_uri('runs/4338')
|
82
|
+
HTTParty.stub(:delete).with(uri, {body: payload.to_json, headers: {"CLIENT_TOKEN" => api_key, "Content-type" => "application/json"}}) do
|
83
|
+
OpenStruct.new({:body=> '{"id":4338,"object":"Run","created_at":"2013-11-16T09:03:19Z","environment_id":1235,"test_count":1,"state_log":[{"created_at":"2013-11-16T09:14:13Z","event":"abort!","from":"in_progress","id":11847319,"state_column":"state","stateful_id":4338,"stateful_type":"Run","to":"aborted","transitioned_at":"2013-11-16T09:14:13Z","updated_at":"2013-11-16T09:14:13Z"},{"created_at":"2013-11-16T09:03:39Z","event":"validate_run!","from":"queued","id":11847142,"state_column":"state","stateful_id":4338,"stateful_type":"Run","to":"validating","transitioned_at":"2013-11-16T09:03:39Z","updated_at":"2013-11-16T09:03:39Z"},{"created_at":"2013-11-16T09:03:39Z","event":"validated!","from":"validating","id":11847141,"state_column":"state","stateful_id":4338,"stateful_type":"Run","to":"in_progress","transitioned_at":"2013-11-16T09:03:39Z","updated_at":"2013-11-16T09:03:39Z"}],"state":"aborted","result":"no_result","expected_wait_time":5400.0,"browsers":[{"name":"chrome","state":"enabled"},{"name":"firefox","state":"enabled"},{"name":"ie8","state":"enabled"},{"name":"ie9","state":"enabled"},{"name":"safari","state":"enabled"}],"requested_tests":[2286]}'})
|
84
|
+
end
|
85
|
+
runs = subject.request('runs/4338', payload, :delete)
|
86
|
+
expect(runs['id']).to eq(4338)
|
87
|
+
expect(runs['state']).to eq('aborted')
|
88
|
+
expect(runs['state_log'][0]['to']).to eq('aborted')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "rainforest_client"
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
5
|
+
config.run_all_when_everything_filtered = true
|
6
|
+
config.filter_run :focus
|
7
|
+
|
8
|
+
# Run specs in random order to surface order dependencies. If you find an
|
9
|
+
# order dependency and want to debug it, you can fix the order by providing
|
10
|
+
# the seed, which is printed after each run.
|
11
|
+
# --seed 1234
|
12
|
+
config.order = 'random'
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rainforest-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.10
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simon Mathieu
|
8
|
+
- Russell Smith
|
9
|
+
- kureikain
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-11-16 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: httparty
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: bundler
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '1.3'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.3'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rake
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
description: API Client for RainforestQA
|
58
|
+
email:
|
59
|
+
- simon@rainforestqa.com
|
60
|
+
- russ@rainforestqa.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- .rspec
|
67
|
+
- .ruby-gemset
|
68
|
+
- .ruby-version
|
69
|
+
- .travis.yml
|
70
|
+
- Gemfile
|
71
|
+
- README.md
|
72
|
+
- Rakefile
|
73
|
+
- lib/rainforest/client.rb
|
74
|
+
- lib/rainforest/client/version.rb
|
75
|
+
- lib/rainforest/resource/base.rb
|
76
|
+
- lib/rainforest/resource/runs.rb
|
77
|
+
- lib/rainforest_client.rb
|
78
|
+
- rainforest-client.gemspec
|
79
|
+
- spec/rainforest/client_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
81
|
+
homepage: https://www.rainforestqa.com/
|
82
|
+
licenses:
|
83
|
+
- MIT
|
84
|
+
metadata: {}
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 2.1.5
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: API Client for RainforestQA
|
105
|
+
test_files:
|
106
|
+
- spec/rainforest/client_spec.rb
|
107
|
+
- spec/spec_helper.rb
|