zester 0.1.0 → 0.2.1
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.
- 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
|