scalingo-ruby-api 1.0.0.alpha1 → 1.0.0.alpha2
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 +4 -4
- data/Rakefile +15 -0
- data/lib/scalingo/configuration.rb +6 -1
- data/lib/scalingo/connection.rb +3 -6
- data/lib/scalingo/endpoint.rb +1 -1
- data/lib/scalingo/error.rb +3 -0
- data/lib/scalingo/logs.rb +1 -4
- data/lib/scalingo/version.rb +1 -1
- data/test/connection_test.rb +24 -0
- data/test/endpoint_base_test.rb +52 -0
- data/test/endpoint_collection_test.rb +78 -0
- data/test/endpoint_resource_test.rb +16 -0
- data/test/request_test.rb +63 -0
- data/test/scalingo_test.rb +25 -0
- data/test/test_helper.rb +42 -0
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e9e1714f5175b4ee396f6b2fcca6c5b0aed7dfd
|
4
|
+
data.tar.gz: c9b1bcd3fcc9f48c21b9bc82a96f2fdc06052af7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e367baa5b74001b704192efcecf7cbe5591de034494c672301baf2b82e8d9cf434af9132532c45e29478caea6a21cf4487ac24ea3c7e36eee3ce63612f8f401
|
7
|
+
data.tar.gz: 551dfa973509fc74c8a035628378fad2b18ced9815c070b904b0af0fa256cc18d41fddc1e4c6c4b104149a2fe59dbed478a6a3b8435ead0564cddb3b26756044
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Run tests'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/**/*_test.rb'
|
13
|
+
t.verbose = true
|
14
|
+
end
|
15
|
+
|
@@ -10,7 +10,8 @@ module Scalingo
|
|
10
10
|
:token,
|
11
11
|
:endpoint,
|
12
12
|
:user_agent,
|
13
|
-
:proxy
|
13
|
+
:proxy,
|
14
|
+
:parse_json,
|
14
15
|
].freeze
|
15
16
|
|
16
17
|
# The adapter that will be used to connect if none is set
|
@@ -32,6 +33,9 @@ module Scalingo
|
|
32
33
|
# The user agent that will be sent to the Api endpoint if none is set
|
33
34
|
DEFAULT_USER_AGENT = "Scalingo Ruby Gem #{Scalingo::VERSION}".freeze
|
34
35
|
|
36
|
+
# Parse json by default, only changed when getting text result (e.g. Logs)
|
37
|
+
DEFAULT_PARSE_JSON = true
|
38
|
+
|
35
39
|
# @private
|
36
40
|
attr_accessor *VALID_OPTIONS_KEYS
|
37
41
|
|
@@ -59,6 +63,7 @@ module Scalingo
|
|
59
63
|
self.endpoint = DEFAULT_ENDPOINT
|
60
64
|
self.user_agent = DEFAULT_USER_AGENT
|
61
65
|
self.proxy = DEFAULT_PROXY
|
66
|
+
self.parse_json = DEFAULT_PARSE_JSON
|
62
67
|
end
|
63
68
|
end
|
64
69
|
end
|
data/lib/scalingo/connection.rb
CHANGED
@@ -3,13 +3,10 @@ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
|
|
3
3
|
|
4
4
|
module Scalingo
|
5
5
|
module Connection
|
6
|
-
protected
|
7
|
-
def parse_json
|
8
|
-
true
|
9
|
-
end
|
10
|
-
|
11
6
|
private
|
12
7
|
def connection
|
8
|
+
raise MissingToken.new if !token
|
9
|
+
|
13
10
|
options = {
|
14
11
|
:headers => {
|
15
12
|
'Accept' => 'application/json; charset=utf-8',
|
@@ -26,7 +23,7 @@ module Scalingo
|
|
26
23
|
connection.use Faraday::Response::ParseJson if parse_json
|
27
24
|
connection.use FaradayMiddleware::RaiseHttpException
|
28
25
|
connection.adapter(adapter)
|
29
|
-
connection.basic_auth('', token)
|
26
|
+
connection.basic_auth('', token)
|
30
27
|
end
|
31
28
|
end
|
32
29
|
end
|
data/lib/scalingo/endpoint.rb
CHANGED
data/lib/scalingo/error.rb
CHANGED
@@ -2,6 +2,9 @@ module Scalingo
|
|
2
2
|
# Custom error class for rescuing from all Scalingo errors
|
3
3
|
class Error < StandardError; end
|
4
4
|
|
5
|
+
# Raised when Scalingo try a connection without any token
|
6
|
+
class MissingToken < Error; end
|
7
|
+
|
5
8
|
# Raised when Scalingo returns the HTTP status code 400
|
6
9
|
class BadRequest < Error; end
|
7
10
|
|
data/lib/scalingo/logs.rb
CHANGED
@@ -6,6 +6,7 @@ module Scalingo
|
|
6
6
|
|
7
7
|
def initialize(app)
|
8
8
|
super({endpoint: ''})
|
9
|
+
self.parse_json = false
|
9
10
|
@app = app
|
10
11
|
end
|
11
12
|
|
@@ -23,10 +24,6 @@ module Scalingo
|
|
23
24
|
@log_token = log_token.split('=').last
|
24
25
|
end
|
25
26
|
|
26
|
-
def parse_json
|
27
|
-
false
|
28
|
-
end
|
29
|
-
|
30
27
|
def request(method, path, options)
|
31
28
|
options.merge!(token: log_token)
|
32
29
|
super(method, path, options)
|
data/lib/scalingo/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConnectionTest < BaseTestCase
|
4
|
+
test 'missing token' do
|
5
|
+
Scalingo.token = nil
|
6
|
+
assert_raise(Scalingo::MissingToken) do
|
7
|
+
Scalingo.apps.all
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'parse_json' do
|
12
|
+
stub(:get, 'parse_json').to_return(body: {hello: :world}.to_json)
|
13
|
+
result = Scalingo.get('parse_json')
|
14
|
+
assert_equal({"hello" => "world"}, result)
|
15
|
+
end
|
16
|
+
|
17
|
+
test 'parse_json false' do
|
18
|
+
Scalingo.parse_json = false
|
19
|
+
stub(:get, 'parse_json').to_return(body: {hello: :world}.to_json)
|
20
|
+
result = Scalingo.get('parse_json')
|
21
|
+
assert_equal('{"hello":"world"}', result)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class EndpointBaseTest < BaseTestCase
|
4
|
+
class ApiMock
|
5
|
+
attr_accessor :method_called
|
6
|
+
|
7
|
+
Scalingo::Request::REQUEST_METHODS.each do |method|
|
8
|
+
define_method(method) do |path, options = {}|
|
9
|
+
self.method_called = OpenStruct.new(http_method: method, path: path, options: options)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
class EndpointBaseClass
|
14
|
+
include Scalingo::Endpoint::Base
|
15
|
+
end
|
16
|
+
|
17
|
+
setup do
|
18
|
+
@api = ApiMock.new
|
19
|
+
@prefix = 'hello'
|
20
|
+
@base = EndpointBaseClass.new(@api, @prefix)
|
21
|
+
end
|
22
|
+
|
23
|
+
Scalingo::Request::REQUEST_METHODS.each do |method|
|
24
|
+
test "#{method}" do
|
25
|
+
@base.send(method)
|
26
|
+
assert_equal method, @api.method_called.http_method
|
27
|
+
assert_equal "#{@prefix}/", @api.method_called.path
|
28
|
+
assert_equal({}, @api.method_called.options)
|
29
|
+
|
30
|
+
@base.send(method, 'test')
|
31
|
+
assert_equal method, @api.method_called.http_method
|
32
|
+
assert_equal "#{@prefix}/test", @api.method_called.path
|
33
|
+
assert_equal({}, @api.method_called.options)
|
34
|
+
|
35
|
+
@base.send(method, nil, {a: 1})
|
36
|
+
assert_equal method, @api.method_called.http_method
|
37
|
+
assert_equal "#{@prefix}/", @api.method_called.path
|
38
|
+
assert_equal({a: 1}, @api.method_called.options)
|
39
|
+
|
40
|
+
@base.send(method, 'test', {a: 1})
|
41
|
+
assert_equal method, @api.method_called.http_method
|
42
|
+
assert_equal "#{@prefix}/test", @api.method_called.path
|
43
|
+
assert_equal({a: 1}, @api.method_called.options)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'initialize without prefix' do
|
48
|
+
@base = EndpointBaseClass.new(@api)
|
49
|
+
assert_equal 'endpoint_base_classes', @base.prefix
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Scalingo::Endpoint::TestEndpoint
|
4
|
+
end
|
5
|
+
|
6
|
+
class EndpointCollectionTest < BaseTestCase
|
7
|
+
class ApiMock
|
8
|
+
def get(path, options = {})
|
9
|
+
path = path[0..-2]
|
10
|
+
{
|
11
|
+
path => collection,
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def collection
|
16
|
+
[
|
17
|
+
{
|
18
|
+
id: 1,
|
19
|
+
name: 'test1',
|
20
|
+
},
|
21
|
+
{
|
22
|
+
id: 2,
|
23
|
+
name: 'test2',
|
24
|
+
},
|
25
|
+
{
|
26
|
+
id: 4,
|
27
|
+
name: 'test4',
|
28
|
+
},
|
29
|
+
{
|
30
|
+
id: 5,
|
31
|
+
name: 'test5',
|
32
|
+
},
|
33
|
+
]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class CollectionTests < Scalingo::Endpoint::Collection
|
38
|
+
end
|
39
|
+
|
40
|
+
setup do
|
41
|
+
@api = ApiMock.new
|
42
|
+
@collection = CollectionTests.new(@api)
|
43
|
+
end
|
44
|
+
|
45
|
+
test 'all' do
|
46
|
+
result = @collection.all
|
47
|
+
assert_equal Array, result.class
|
48
|
+
assert @collection.class < Enumerable
|
49
|
+
assert_equal @api.collection.count, @collection.count
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'find' do
|
53
|
+
result = @collection.find(2)
|
54
|
+
assert_equal 2, result.id
|
55
|
+
assert_equal 'test2', result.name
|
56
|
+
end
|
57
|
+
|
58
|
+
test 'collection_name' do
|
59
|
+
assert_equal 'collection_tests', @collection.collection_name
|
60
|
+
end
|
61
|
+
|
62
|
+
test 'resource_class' do
|
63
|
+
assert_equal Scalingo::Endpoint::Resource, @collection.resource_class
|
64
|
+
end
|
65
|
+
|
66
|
+
class TestEndpoints < Scalingo::Endpoint::Collection
|
67
|
+
end
|
68
|
+
|
69
|
+
test 'resource_class if singular class exists' do
|
70
|
+
@collection = TestEndpoints.new(@api, @prefix)
|
71
|
+
assert_equal Scalingo::Endpoint::TestEndpoint, @collection.resource_class
|
72
|
+
end
|
73
|
+
|
74
|
+
test 'find_by' do
|
75
|
+
assert_equal 'id', @collection.find_by
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class EndpointResourceTest < BaseTestCase
|
4
|
+
test 'initialize' do
|
5
|
+
resource = Scalingo::Endpoint::Resource.new('api', 'prefix', {hello: :world, world: :hello})
|
6
|
+
assert_equal 'api', resource.api
|
7
|
+
assert_equal 'prefix', resource.prefix
|
8
|
+
|
9
|
+
assert resource.respond_to?(:hello)
|
10
|
+
assert_equal :world, resource.hello
|
11
|
+
|
12
|
+
assert resource.respond_to?(:world)
|
13
|
+
assert_equal :hello, resource.world
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RequestTest < BaseTestCase
|
4
|
+
setup do
|
5
|
+
@request = nil
|
6
|
+
stub(:any, /.*/).to_return do |request|
|
7
|
+
@request = OpenStruct.new(
|
8
|
+
body: request.body,
|
9
|
+
http_method: request.method,
|
10
|
+
headers: request.headers,
|
11
|
+
uri: request.uri,
|
12
|
+
query: request.uri.query ? Hash[request.uri.query.split('&').map{|q| q.split('=')}] : {},
|
13
|
+
path: request.uri.path[4..-1],
|
14
|
+
)
|
15
|
+
{status: 200}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
[:get, :delete].each do |sym|
|
20
|
+
test "#{sym}" do
|
21
|
+
Scalingo.public_send(sym, '')
|
22
|
+
assert_equal sym, @request.http_method
|
23
|
+
assert_equal({}, @request.query)
|
24
|
+
assert_equal '', @request.path
|
25
|
+
assert_equal nil, @request.body
|
26
|
+
|
27
|
+
Scalingo.public_send(sym, 'hello')
|
28
|
+
assert_equal sym, @request.http_method
|
29
|
+
assert_equal({}, @request.query)
|
30
|
+
assert_equal 'hello', @request.path
|
31
|
+
assert_equal nil, @request.body
|
32
|
+
|
33
|
+
Scalingo.public_send(sym, 'hello', {hello: :world})
|
34
|
+
assert_equal sym, @request.http_method
|
35
|
+
assert_equal({"hello" => "world"}, @request.query)
|
36
|
+
assert_equal 'hello', @request.path
|
37
|
+
assert_equal nil, @request.body
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
[:post, :patch, :put].each do |sym|
|
42
|
+
test "#{sym}" do
|
43
|
+
Scalingo.public_send(sym, '')
|
44
|
+
assert_equal sym, @request.http_method
|
45
|
+
assert_equal({}, @request.query)
|
46
|
+
assert_equal '', @request.path
|
47
|
+
assert_equal '', @request.body
|
48
|
+
|
49
|
+
Scalingo.public_send(sym, 'hello')
|
50
|
+
assert_equal sym, @request.http_method
|
51
|
+
assert_equal({}, @request.query)
|
52
|
+
assert_equal 'hello', @request.path
|
53
|
+
assert_equal '', @request.body
|
54
|
+
|
55
|
+
Scalingo.public_send(sym, 'hello', {hello: :world})
|
56
|
+
assert_equal sym, @request.http_method
|
57
|
+
assert_equal({}, @request.query)
|
58
|
+
assert_equal 'hello', @request.path
|
59
|
+
assert_equal({hello: :world}, @request.body)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ScalingoTest < BaseTestCase
|
4
|
+
test 'configure' do
|
5
|
+
Scalingo.configure do |config|
|
6
|
+
config.token = 'CONFIGURE_TEST'
|
7
|
+
end
|
8
|
+
assert_equal 'CONFIGURE_TEST', Scalingo.token
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'client' do
|
12
|
+
assert_equal Scalingo::Client, Scalingo.client.class
|
13
|
+
end
|
14
|
+
|
15
|
+
test 'respond_to' do
|
16
|
+
assert !Scalingo.methods.include?(:get)
|
17
|
+
assert Scalingo.respond_to?(:get)
|
18
|
+
end
|
19
|
+
|
20
|
+
test 'method_missing' do
|
21
|
+
stub(:get, '').to_return(status: 200)
|
22
|
+
assert_equal Scalingo.client.get(''), Scalingo.get('')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'simplecov'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
SimpleCov.configure do
|
6
|
+
add_filter '/test/'
|
7
|
+
end
|
8
|
+
SimpleCov.start if ENV['COVERAGE']
|
9
|
+
|
10
|
+
require 'minitest/autorun'
|
11
|
+
require 'webmock/minitest'
|
12
|
+
require 'active_support'
|
13
|
+
ActiveSupport.test_order = :random
|
14
|
+
|
15
|
+
require File.expand_path("../../lib/scalingo", __FILE__)
|
16
|
+
|
17
|
+
WebMock.disable_net_connect!
|
18
|
+
|
19
|
+
class BaseTestCase < ActiveSupport::TestCase
|
20
|
+
setup do
|
21
|
+
Scalingo.reset
|
22
|
+
Scalingo.token = 'EXAMPLE_TOKEN'
|
23
|
+
end
|
24
|
+
|
25
|
+
teardown do
|
26
|
+
WebMock.reset!
|
27
|
+
end
|
28
|
+
|
29
|
+
def endpoint_uri
|
30
|
+
Scalingo.endpoint.split('://').join("://:#{Scalingo.token}@")
|
31
|
+
end
|
32
|
+
|
33
|
+
def stub(method, path)
|
34
|
+
case path
|
35
|
+
when String
|
36
|
+
stub_request(method, "#{endpoint_uri}#{path}")
|
37
|
+
when Regexp
|
38
|
+
stub_request(method, /#{Regexp.quote(endpoint_uri)}#{path}/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scalingo-ruby-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.alpha2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geoffroy Planquart
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -84,14 +84,14 @@ dependencies:
|
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: '
|
87
|
+
version: '4'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
92
|
- - ~>
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
94
|
+
version: '4'
|
95
95
|
description: Ruby wrapper around the web API of scalingo.io
|
96
96
|
email:
|
97
97
|
- geoffroy@planquart.fr
|
@@ -99,6 +99,7 @@ executables: []
|
|
99
99
|
extensions: []
|
100
100
|
extra_rdoc_files: []
|
101
101
|
files:
|
102
|
+
- Rakefile
|
102
103
|
- lib/faraday/raise_http_exception.rb
|
103
104
|
- lib/scalingo.rb
|
104
105
|
- lib/scalingo/api.rb
|
@@ -121,6 +122,13 @@ files:
|
|
121
122
|
- lib/scalingo/realtime/logs.rb
|
122
123
|
- lib/scalingo/request.rb
|
123
124
|
- lib/scalingo/version.rb
|
125
|
+
- test/connection_test.rb
|
126
|
+
- test/endpoint_base_test.rb
|
127
|
+
- test/endpoint_collection_test.rb
|
128
|
+
- test/endpoint_resource_test.rb
|
129
|
+
- test/request_test.rb
|
130
|
+
- test/scalingo_test.rb
|
131
|
+
- test/test_helper.rb
|
124
132
|
homepage: https://github.com/Aethelflaed/scalingo-ruby-api
|
125
133
|
licenses:
|
126
134
|
- MIT
|
@@ -145,5 +153,12 @@ rubygems_version: 2.4.6
|
|
145
153
|
signing_key:
|
146
154
|
specification_version: 4
|
147
155
|
summary: Ruby API for the awesome scalingo project !
|
148
|
-
test_files:
|
156
|
+
test_files:
|
157
|
+
- test/connection_test.rb
|
158
|
+
- test/request_test.rb
|
159
|
+
- test/endpoint_resource_test.rb
|
160
|
+
- test/endpoint_base_test.rb
|
161
|
+
- test/endpoint_collection_test.rb
|
162
|
+
- test/scalingo_test.rb
|
163
|
+
- test/test_helper.rb
|
149
164
|
has_rdoc:
|