zester 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +10 -0
- data/lib/zester/client.rb +11 -3
- data/lib/zester/resource.rb +5 -1
- data/lib/zester/version.rb +1 -1
- data/spec/support/webmock_helper.rb +4 -0
- data/spec/zester/client_spec.rb +35 -22
- data/spec/zester/resource_spec.rb +19 -0
- data/spec/zester/response_spec.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -18,6 +18,16 @@ You do not need to pass the 'zws-id' param to any api calls, this param will be
|
|
18
18
|
|
19
19
|
All other params for each api call are passed as a hash with the keys as strings in the exact same format as specified in the Zillow API docs
|
20
20
|
|
21
|
+
There is also an optional parameter to set the timeout in seconds, passing this will raise a Timeout::Error after that number of seconds
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
zester = Zester::Client.new('your_api_key', 5) # raises a Timeout::Error after 5 seconds with no response
|
25
|
+
```
|
26
|
+
|
27
|
+
Timeout::Errors and other Exceptions are automatically rescued in the Zester::Resource class and will return a
|
28
|
+
fake response telling you 'Web services are currently unavailable' in the @response.error_message method, same as any actual Zillow api error messages.
|
29
|
+
Also, the @response.response_code will be 3.
|
30
|
+
|
21
31
|
### Home Valuation
|
22
32
|
|
23
33
|
Zillow 'Home Valuation' calls are accessed off of the client#valuation method:
|
data/lib/zester/client.rb
CHANGED
@@ -5,15 +5,23 @@ module Zester
|
|
5
5
|
format :xml
|
6
6
|
base_uri "http://www.zillow.com/webservice"
|
7
7
|
|
8
|
-
attr_accessor :zws_id
|
8
|
+
attr_accessor :zws_id, :http_timeout
|
9
9
|
|
10
|
-
def initialize(zws_id)
|
10
|
+
def initialize(zws_id, http_timeout = nil)
|
11
11
|
self.zws_id = zws_id
|
12
|
+
self.http_timeout = http_timeout
|
12
13
|
self.class.default_params "zws-id" => zws_id
|
13
14
|
end
|
14
15
|
|
15
16
|
def perform_get(endpoint, params = {})
|
16
|
-
|
17
|
+
http_params = {}
|
18
|
+
unless params.empty?
|
19
|
+
http_params[:query] = params
|
20
|
+
end
|
21
|
+
unless self.http_timeout.nil?
|
22
|
+
http_params[:timeout] = self.http_timeout
|
23
|
+
end
|
24
|
+
self.class.get("/#{endpoint}.htm", http_params)
|
17
25
|
end
|
18
26
|
|
19
27
|
def property
|
data/lib/zester/resource.rb
CHANGED
@@ -8,7 +8,11 @@ module Zester
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def get_results(endpoint, resource_type, params = {})
|
11
|
-
|
11
|
+
begin
|
12
|
+
Response.new(self.client.perform_get(endpoint, params), resource_type)
|
13
|
+
rescue Timeout::Error, Exception
|
14
|
+
Response.new({resource_type => {:message => {:code => "3", :text => "Web services are currently unavailable"}}}, resource_type)
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
end
|
data/lib/zester/version.rb
CHANGED
data/spec/zester/client_spec.rb
CHANGED
@@ -1,34 +1,47 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Zester::Client do
|
4
|
-
|
4
|
+
context "basic" do
|
5
|
+
let!(:zester) {new_zester}
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
it "should set the zws_id" do
|
8
|
+
zester.zws_id.should == ZWS_ID
|
9
|
+
zester.http_timeout.should be_nil
|
10
|
+
zester.class.default_params.should == {'zws-id' => ZWS_ID}
|
11
|
+
end
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
it "should set the base uri for the client" do
|
14
|
+
zester.class.base_uri.should == "http://www.zillow.com/webservice"
|
15
|
+
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
it "should return an instance of Zester::Valuation for valuation" do
|
18
|
+
zester.valuation.should be_kind_of(Zester::Valuation)
|
19
|
+
zester.valuation.client.should == zester
|
20
|
+
end
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
it "should return an instance of Zester::Valuatiion for property" do
|
23
|
+
zester.property.should be_kind_of(Zester::Property)
|
24
|
+
zester.property.client.should == zester
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return an instance of Zester::Valuatiion for mortgage" do
|
28
|
+
zester.mortgage.should be_kind_of(Zester::Mortgage)
|
29
|
+
zester.mortgage.client.should == zester
|
30
|
+
end
|
24
31
|
|
25
|
-
|
26
|
-
|
27
|
-
|
32
|
+
it "should return an instance of Zester::Valuatiion for neighborhood" do
|
33
|
+
zester.neighborhood.should be_kind_of(Zester::Neighborhood)
|
34
|
+
zester.neighborhood.client.should == zester
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
|
-
|
31
|
-
zester
|
32
|
-
|
38
|
+
context "timeout" do
|
39
|
+
let!(:zester) {new_timeout_zester}
|
40
|
+
|
41
|
+
it "should set the zws_id" do
|
42
|
+
zester.zws_id.should == ZWS_ID
|
43
|
+
zester.http_timeout.should == 5
|
44
|
+
zester.class.default_params.should == {'zws-id' => ZWS_ID}
|
45
|
+
end
|
33
46
|
end
|
34
47
|
end
|
@@ -17,4 +17,23 @@ describe Zester::Resource do
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
context "timeout error" do
|
21
|
+
before(:all) do
|
22
|
+
VCR.turn_off!
|
23
|
+
end
|
24
|
+
|
25
|
+
after(:all) do
|
26
|
+
VCR.turn_on!
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should rescue a timeout error" do
|
30
|
+
stub_request(:get, "http://www.zillow.com/webservice/GetRateSummary.htm?zws-id=#{ZWS_ID}").to_timeout
|
31
|
+
response = resource.get_results('GetRateSummary', :rate_summary)
|
32
|
+
response.success?.should be_false
|
33
|
+
response.message.should_not be_nil
|
34
|
+
response.message.code.should == "3"
|
35
|
+
response.response_code.should == 3
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
20
39
|
end
|
@@ -8,7 +8,7 @@ describe Zester::Response do
|
|
8
8
|
VCR.use_cassette('response') do
|
9
9
|
response = resource.get_results('GetRateSummary', :rate_summary)
|
10
10
|
response.success?.should be_true
|
11
|
-
response.message.should_not
|
11
|
+
response.message.should_not be_nil
|
12
12
|
response.message.code.should == "0"
|
13
13
|
response.response_code.should == 0
|
14
14
|
response.should be_instance_of(Zester::Response)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 2
|
8
9
|
- 1
|
9
|
-
|
10
|
-
version: 0.1.0
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tom Cocca
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-12-20 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :runtime
|