tddium_client 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/Gemfile.lock +1 -1
- data/lib/tddium_client.rb +62 -15
- data/lib/tddium_client/version.rb +1 -1
- data/spec/tddium_client_spec.rb +50 -5
- metadata +3 -2
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile.lock
CHANGED
data/lib/tddium_client.rb
CHANGED
@@ -12,13 +12,29 @@ module TddiumClient
|
|
12
12
|
|
13
13
|
class Error < RuntimeError; end
|
14
14
|
class TimeoutError < TddiumClient::Error; end
|
15
|
-
|
15
|
+
|
16
16
|
class APIError < TddiumClient::Error
|
17
17
|
attr_accessor :tddium_result
|
18
18
|
|
19
19
|
def initialize(result)
|
20
20
|
self.tddium_result = result
|
21
21
|
end
|
22
|
+
|
23
|
+
def http_code
|
24
|
+
self.tddium_result.http_code if self.tddium_result
|
25
|
+
end
|
26
|
+
|
27
|
+
def http_result
|
28
|
+
self.tddium_result.http_result if self.tddium_result
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
"#{http_code} #{http_result} (#{self.tddium_result.status}) #{self.tddium_result.explanation}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def message
|
36
|
+
"API Error: #{to_s}"
|
37
|
+
end
|
22
38
|
end
|
23
39
|
|
24
40
|
class ServerError < TddiumClient::Error
|
@@ -28,6 +44,14 @@ module TddiumClient
|
|
28
44
|
self.http_code = http_code
|
29
45
|
self.http_result = http_result
|
30
46
|
end
|
47
|
+
|
48
|
+
def to_s
|
49
|
+
"#{http_code} #{http_result}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def message
|
53
|
+
"Server Error: #{to_s}"
|
54
|
+
end
|
31
55
|
end
|
32
56
|
|
33
57
|
class Result
|
@@ -40,15 +64,35 @@ module TddiumClient
|
|
40
64
|
end
|
41
65
|
|
42
66
|
def success?
|
43
|
-
|
67
|
+
has_response? && response["status"] == 0
|
68
|
+
end
|
69
|
+
|
70
|
+
def has_response?
|
71
|
+
!response.nil? && response.is_a?(Hash)
|
72
|
+
end
|
73
|
+
|
74
|
+
def status
|
75
|
+
has_response? ? response["status"] : nil
|
76
|
+
end
|
77
|
+
|
78
|
+
def explanation
|
79
|
+
has_response? ? response["explanation"] : nil
|
44
80
|
end
|
45
81
|
end
|
46
82
|
|
47
83
|
class Client
|
48
|
-
|
84
|
+
attr_reader :environment
|
49
85
|
|
50
86
|
def initialize(env = :development)
|
51
|
-
|
87
|
+
@all_config = YAML.load(File.read(config_path))
|
88
|
+
self.environment = env.to_s
|
89
|
+
end
|
90
|
+
|
91
|
+
def environment=(new_environment)
|
92
|
+
env = new_environment.to_s
|
93
|
+
raise ArgumentError, "Invalid environment #{env}" unless @all_config[env]
|
94
|
+
@tddium_config = @all_config[env]
|
95
|
+
@environment = env
|
52
96
|
end
|
53
97
|
|
54
98
|
def call_api(method, api_path, params = {}, api_key = nil, retries = 5)
|
@@ -83,17 +127,20 @@ module TddiumClient
|
|
83
127
|
|
84
128
|
private
|
85
129
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
130
|
+
def tddium_uri(path)
|
131
|
+
uri = URI.parse("")
|
132
|
+
uri.host = tddium_config["api"]["host"]
|
133
|
+
uri.port = tddium_config["api"]["port"]
|
134
|
+
uri.scheme = tddium_config["api"]["scheme"]
|
135
|
+
URI.join(uri.to_s, "#{tddium_config["api"]["version"]}/#{path}").to_s
|
136
|
+
end
|
93
137
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
138
|
+
def config_path
|
139
|
+
File.join(File.dirname(__FILE__), "..", "config", "environment.yml")
|
140
|
+
end
|
141
|
+
|
142
|
+
def tddium_config
|
143
|
+
@tddium_config
|
144
|
+
end
|
98
145
|
end
|
99
146
|
end
|
data/spec/tddium_client_spec.rb
CHANGED
@@ -6,6 +6,23 @@ require "spec_helper"
|
|
6
6
|
|
7
7
|
module TddiumClient
|
8
8
|
describe Result do
|
9
|
+
describe "#has_response?" do
|
10
|
+
it "should be true with a reponse" do
|
11
|
+
result = TddiumClient::Result.new 200, "OK", {"status" => 0}
|
12
|
+
result.should be_has_response
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be false without a response" do
|
16
|
+
result = TddiumClient::Result.new 200, "OK", nil
|
17
|
+
result.should_not be_has_response
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be false with a nonhash response" do
|
21
|
+
result = TddiumClient::Result.new 200, "OK", "a"
|
22
|
+
result.should_not be_has_response
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
9
26
|
describe "#success?" do
|
10
27
|
context "with successful params" do
|
11
28
|
it "should be true" do
|
@@ -28,6 +45,27 @@ module TddiumClient
|
|
28
45
|
end
|
29
46
|
end
|
30
47
|
|
48
|
+
describe ServerError do
|
49
|
+
it "should stringify with code and result" do
|
50
|
+
code = 404
|
51
|
+
message = 'Not Found'
|
52
|
+
e = TddiumClient::ServerError.new(code, message)
|
53
|
+
e.message.should =~ /#{code}/
|
54
|
+
e.message.should =~ /#{message}/
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe APIError do
|
59
|
+
it "should stringify with explanation" do
|
60
|
+
obj = {"status" => 1, "explanation"=>"oops"}
|
61
|
+
result = TddiumClient::Result.new(200, "OK", obj)
|
62
|
+
result.should_not be_success
|
63
|
+
e = TddiumClient::APIError.new(result)
|
64
|
+
e.message.should =~ /#{obj["status"]}/
|
65
|
+
e.message.should =~ /#{obj["explanation"]}/
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
31
69
|
describe Client do
|
32
70
|
include FakeFS::SpecHelpers
|
33
71
|
include TddiumSpecHelpers
|
@@ -48,14 +86,21 @@ module TddiumClient
|
|
48
86
|
|
49
87
|
let(:tddium_client) { TddiumClient::Client.new }
|
50
88
|
|
51
|
-
it "should set the default environment to :development" do
|
52
|
-
tddium_client.environment.should == :development
|
53
|
-
end
|
54
|
-
|
55
89
|
describe "#environment" do
|
90
|
+
before(:each) do
|
91
|
+
stub_tddium_client_config
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should raise on init if environment can't be found" do
|
95
|
+
expect { TddiumClient::Client.new('foobar') }.to raise_error(ArgumentError)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should set the default environment to :development" do
|
99
|
+
tddium_client.environment.should == 'development'
|
100
|
+
end
|
56
101
|
it "should set the environment" do
|
57
102
|
tddium_client.environment = :production
|
58
|
-
tddium_client.environment.should ==
|
103
|
+
tddium_client.environment.should == 'production'
|
59
104
|
end
|
60
105
|
end
|
61
106
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tddium_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jay Moorthi
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-28 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -112,6 +112,7 @@ extra_rdoc_files: []
|
|
112
112
|
|
113
113
|
files:
|
114
114
|
- .gitignore
|
115
|
+
- .rspec
|
115
116
|
- Gemfile
|
116
117
|
- Gemfile.lock
|
117
118
|
- README
|