rainforest-client 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/kureikain/rainforest-gem.png)](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
|