rubillow 0.0.5 → 0.0.6
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/CHANGELOG.md +7 -1
- data/Gemfile.lock +37 -21
- data/README.md +3 -0
- data/Rakefile +3 -22
- data/lib/rubillow/helpers/xml_parsing_helper.rb +15 -0
- data/lib/rubillow/models.rb +4 -1
- data/lib/rubillow/models/addressable.rb +6 -6
- data/lib/rubillow/models/chart.rb +3 -3
- data/lib/rubillow/models/deep_search_result.rb +8 -8
- data/lib/rubillow/models/property_basics.rb +7 -7
- data/lib/rubillow/models/region.rb +1 -1
- data/lib/rubillow/models/updated_property_details.rb +8 -8
- data/lib/rubillow/models/zestimateable.rb +16 -17
- data/lib/rubillow/models/zpidable.rb +1 -1
- data/lib/rubillow/version.rb +1 -1
- data/rubillow.gemspec +9 -7
- data/spec/rubillow/models/deep_search_results_spec.rb +50 -1
- data/spec/rubillow/models/search_result_spec.rb +8 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/xml/get_deep_search_results_duplicated.xml +123 -0
- data/spec/xml/get_deep_search_results_missing_data.xml +58 -0
- data/spec/xml/get_zestimate_missing_value_duration.xml +64 -0
- metadata +52 -22
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.0.6 / 2013-04-10
|
2
|
+
|
3
|
+
* Fix case where Zillow returns multiple results for an address -- assume first address for result
|
4
|
+
* Fix RentZestimate bug when valueChange doesn't have a duration.
|
5
|
+
* Fix common scenarios where xml nodes are not present
|
6
|
+
|
1
7
|
## 0.0.5 / 2013-01-12
|
2
8
|
|
3
9
|
* Include RentZestimate if available
|
@@ -22,4 +28,4 @@
|
|
22
28
|
## 0.0.1 / 2011-08-27
|
23
29
|
|
24
30
|
* Covers all Zillow API endpoints
|
25
|
-
* Code documentation
|
31
|
+
* Code documentation
|
data/Gemfile.lock
CHANGED
@@ -1,34 +1,50 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubillow (0.0.
|
5
|
-
nokogiri (~> 1.5
|
4
|
+
rubillow (0.0.6)
|
5
|
+
nokogiri (~> 1.5)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
bluecloth (2.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
10
|
+
bluecloth (2.2.0)
|
11
|
+
colorize (0.5.8)
|
12
|
+
coveralls (0.6.0)
|
13
|
+
colorize
|
14
|
+
multi_json (~> 1.3)
|
15
|
+
rest-client
|
16
|
+
simplecov (>= 0.7)
|
17
|
+
thor
|
18
|
+
diff-lcs (1.2.1)
|
19
|
+
mime-types (1.21)
|
20
|
+
multi_json (1.6.1)
|
21
|
+
nokogiri (1.5.9)
|
22
|
+
rake (10.0.3)
|
23
|
+
rest-client (1.6.7)
|
24
|
+
mime-types (>= 1.16)
|
25
|
+
rspec (2.13.0)
|
26
|
+
rspec-core (~> 2.13.0)
|
27
|
+
rspec-expectations (~> 2.13.0)
|
28
|
+
rspec-mocks (~> 2.13.0)
|
29
|
+
rspec-core (2.13.0)
|
30
|
+
rspec-expectations (2.13.0)
|
31
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
32
|
+
rspec-mocks (2.13.0)
|
33
|
+
simplecov (0.7.1)
|
34
|
+
multi_json (~> 1.0)
|
35
|
+
simplecov-html (~> 0.7.1)
|
36
|
+
simplecov-html (0.7.1)
|
37
|
+
thor (0.17.0)
|
38
|
+
yard (0.8.5.2)
|
24
39
|
|
25
40
|
PLATFORMS
|
26
41
|
ruby
|
27
42
|
|
28
43
|
DEPENDENCIES
|
29
|
-
bluecloth (
|
30
|
-
|
31
|
-
|
32
|
-
rspec (~> 2.
|
44
|
+
bluecloth (~> 2.2)
|
45
|
+
coveralls (~> 0.6)
|
46
|
+
rake (~> 10.0)
|
47
|
+
rspec (~> 2.12)
|
33
48
|
rubillow!
|
34
|
-
|
49
|
+
simplecov (~> 0.7)
|
50
|
+
yard (~> 0.8)
|
data/README.md
CHANGED
@@ -61,8 +61,11 @@ You should find the documentation for your version of Rubillow on [Rubygems](htt
|
|
61
61
|
|
62
62
|
# Build & Dependency Status
|
63
63
|
|
64
|
+
[](http://badge.fury.io/rb/rubillow)
|
64
65
|
[](https://travis-ci.org/synewaves/rubillow)
|
65
66
|
[](https://gemnasium.com/synewaves/rubillow)
|
67
|
+
[](https://codeclimate.com/github/synewaves/rubillow)
|
68
|
+
[](https://coveralls.io/r/synewaves/rubillow)
|
66
69
|
|
67
70
|
# License
|
68
71
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
|
-
# require 'rcov/rcovtask'
|
4
3
|
require "yard"
|
5
4
|
|
6
5
|
desc "Run specs"
|
@@ -9,29 +8,11 @@ RSpec::Core::RakeTask.new do |t|
|
|
9
8
|
end
|
10
9
|
|
11
10
|
desc "Run specs with coverage"
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
t.rcov_opts = %w{--exclude spec,gems}
|
16
|
-
t.rcov_opts << %[-o "coverage"]
|
11
|
+
task :coverage do
|
12
|
+
ENV['COVERAGE'] = 'true'
|
13
|
+
Rake::Task["spec"].execute
|
17
14
|
end
|
18
15
|
|
19
|
-
# RSpec::Rake::SpecTask.new("rcov_spec") do |t|
|
20
|
-
# t.spec_files = FileList['spec/**/*_spec.rb']
|
21
|
-
# t.spec_opts = ['--color']
|
22
|
-
# t.rcov = true
|
23
|
-
# t.rcov_opts = ['--exclude', '^spec,/gems/']
|
24
|
-
# end
|
25
|
-
|
26
|
-
# desc 'Performs code coverage.'
|
27
|
-
# Rcov::RcovTask.new do |t|
|
28
|
-
# t.test_files = FileList['spec/*_spec.rb']
|
29
|
-
# t.verbose = true
|
30
|
-
# end
|
31
|
-
|
32
|
-
# desc "Clean files generated by rake tasks"
|
33
|
-
# task :clobber => [:clobber_rcov]
|
34
|
-
|
35
16
|
YARD::Rake::YardocTask.new do |t|
|
36
17
|
end
|
37
18
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Helper methods for parsing XML.
|
2
|
+
module XmlParsingHelper
|
3
|
+
# @param path [String] Xpath query to find the node in XML.
|
4
|
+
# @param attribute [Symbol] Attribute on the node to call and return as the value.
|
5
|
+
# @param xml [Nokogiri::XML] A nokogiri parser object to call #xpath.
|
6
|
+
# @param nil_value (optional) A value to return if the attribute on the node
|
7
|
+
# is nil or if the node is not present.
|
8
|
+
#
|
9
|
+
# @return [String] Value from an attribute of an xpath node, if present.
|
10
|
+
# If the node is not present, return nil or nil_value if specified.
|
11
|
+
def xpath_if_present(path, attribute, xml, nil_value = nil)
|
12
|
+
text = xml.xpath(path).first.send(attribute) unless xml.xpath(path).empty?
|
13
|
+
text ||= nil_value
|
14
|
+
end
|
15
|
+
end
|
data/lib/rubillow/models.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require "nokogiri"
|
2
|
+
require "rubillow/helpers/xml_parsing_helper"
|
2
3
|
|
3
4
|
module Rubillow
|
4
5
|
# Sub module for returned and parsed web service data
|
5
6
|
module Models
|
6
7
|
# Base class for data models
|
7
8
|
class Base
|
9
|
+
include XmlParsingHelper
|
10
|
+
|
8
11
|
# @return [String] the raw XML content from the service
|
9
12
|
attr_accessor :xml
|
10
13
|
|
@@ -82,4 +85,4 @@ require "rubillow/models/demographics"
|
|
82
85
|
require "rubillow/models/demographic_value"
|
83
86
|
require "rubillow/models/region_children"
|
84
87
|
require "rubillow/models/region_chart"
|
85
|
-
require "rubillow/models/region"
|
88
|
+
require "rubillow/models/region"
|
@@ -24,12 +24,12 @@ module Rubillow
|
|
24
24
|
address = xml.xpath('//address')
|
25
25
|
if !address.empty?
|
26
26
|
@address = {
|
27
|
-
:street => address.xpath('//street').text,
|
28
|
-
:city => address.xpath('//city').text,
|
29
|
-
:state => address.xpath('//state').text,
|
30
|
-
:zipcode => address.xpath('//zipcode').text,
|
31
|
-
:latitude => address.xpath('//latitude').text,
|
32
|
-
:longitude => address.xpath('//longitude').text,
|
27
|
+
:street => address.xpath('//street').first.text,
|
28
|
+
:city => address.xpath('//city').first.text,
|
29
|
+
:state => address.xpath('//state').first.text,
|
30
|
+
:zipcode => address.xpath('//zipcode').first.text,
|
31
|
+
:latitude => address.xpath('//latitude').first.text,
|
32
|
+
:longitude => address.xpath('//longitude').first.text,
|
33
33
|
}
|
34
34
|
end
|
35
35
|
end
|
@@ -25,9 +25,9 @@ module Rubillow
|
|
25
25
|
|
26
26
|
return if !success?
|
27
27
|
|
28
|
-
@height = @parser.xpath('//request/height').text.to_i
|
29
|
-
@width = @parser.xpath('//request/width').text.to_i
|
30
|
-
@url = @parser.xpath('//response/url').text
|
28
|
+
@height = @parser.xpath('//request/height').first.text.to_i
|
29
|
+
@width = @parser.xpath('//request/width').first.text.to_i
|
30
|
+
@url = @parser.xpath('//response/url').first.text
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -3,6 +3,7 @@ module Rubillow
|
|
3
3
|
# Get a property's information with deeper data.
|
4
4
|
class DeepSearchResult < SearchResult
|
5
5
|
include PropertyBasics
|
6
|
+
include XmlParsingHelper
|
6
7
|
|
7
8
|
# @return [String] FIPS county code. See {http://www.itl.nist.gov/fipspubs/fip6-4.htm}.
|
8
9
|
attr_accessor :fips_county
|
@@ -31,16 +32,15 @@ module Rubillow
|
|
31
32
|
return if !success?
|
32
33
|
|
33
34
|
extract_property_basics(@parser)
|
34
|
-
|
35
|
-
@
|
36
|
-
@
|
37
|
-
@
|
38
|
-
|
39
|
-
if tmp = @parser.xpath('//lastSoldDate').text and tmp.strip.length > 0
|
35
|
+
@fips_county = xpath_if_present('//FIPScounty', :text, @parser, "")
|
36
|
+
@tax_assessment_year = xpath_if_present('//taxAssessmentYear', :text, @parser)
|
37
|
+
@tax_assessment = xpath_if_present('//taxAssessment', :text, @parser)
|
38
|
+
@year_built = xpath_if_present('//yearBuilt', :text, @parser)
|
39
|
+
if tmp = xpath_if_present('//lastSoldDate', :text, @parser) and tmp.strip.length > 0
|
40
40
|
@last_sold_date = Date.strptime(tmp, "%m/%d/%Y")
|
41
41
|
end
|
42
|
-
@last_sold_price =
|
42
|
+
@last_sold_price = xpath_if_present('//lastSoldPrice', :text, @parser)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
|
-
end
|
46
|
+
end
|
@@ -24,13 +24,13 @@ module Rubillow
|
|
24
24
|
|
25
25
|
# @private
|
26
26
|
def extract_property_basics(xml)
|
27
|
-
@use_code =
|
28
|
-
@lot_size_square_feet =
|
29
|
-
@finished_square_feet =
|
30
|
-
@bathrooms =
|
31
|
-
@bedrooms =
|
32
|
-
@total_rooms =
|
27
|
+
@use_code = xpath_if_present('//useCode', :text, xml, "")
|
28
|
+
@lot_size_square_feet = xpath_if_present('//lotSizeSqFt', :text, xml, "")
|
29
|
+
@finished_square_feet = xpath_if_present('//finishedSqFt', :text, xml, "")
|
30
|
+
@bathrooms = xpath_if_present('//bathrooms', :text, xml, "")
|
31
|
+
@bedrooms = xpath_if_present('//bedrooms', :text, xml, "")
|
32
|
+
@total_rooms = xpath_if_present('//totalRooms', :text, xml, "")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
|
-
end
|
36
|
+
end
|
@@ -31,7 +31,7 @@ module Rubillow
|
|
31
31
|
|
32
32
|
return if !success?
|
33
33
|
|
34
|
-
@id = @parser.xpath('//id').text
|
34
|
+
@id = @parser.xpath('//id').first.text
|
35
35
|
@state = @parser.xpath('//state').text
|
36
36
|
@city = @parser.xpath('//city').text
|
37
37
|
@neighborhood = @parser.xpath('//neighborhood').text
|
@@ -62,15 +62,15 @@ module Rubillow
|
|
62
62
|
extract_images(@parser)
|
63
63
|
|
64
64
|
@page_views = {
|
65
|
-
:current_month => @parser.xpath('//pageViewCount/currentMonth').text,
|
66
|
-
:total => @parser.xpath('//pageViewCount/total').text
|
65
|
+
:current_month => @parser.xpath('//pageViewCount/currentMonth').first.text,
|
66
|
+
:total => @parser.xpath('//pageViewCount/total').first.text
|
67
67
|
}
|
68
|
-
@price = @parser.xpath('//price').text
|
69
|
-
@neighborhood = @parser.xpath('//neighborhood').text
|
70
|
-
@school_district = @parser.xpath('//schoolDistrict').text
|
71
|
-
@elementary_school = @parser.xpath('//elementarySchool').text
|
72
|
-
@middle_school = @parser.xpath('//middleSchool').text
|
73
|
-
@home_description = @parser.xpath('//homeDescription').text
|
68
|
+
@price = @parser.xpath('//price').first.text
|
69
|
+
@neighborhood = @parser.xpath('//neighborhood').first.text
|
70
|
+
@school_district = @parser.xpath('//schoolDistrict').first.text
|
71
|
+
@elementary_school = @parser.xpath('//elementarySchool').first.text
|
72
|
+
@middle_school = @parser.xpath('//middleSchool').first.text
|
73
|
+
@home_description = @parser.xpath('//homeDescription').first.text
|
74
74
|
|
75
75
|
@posting = {}
|
76
76
|
@parser.xpath('//posting').children.each do |elm|
|
@@ -55,23 +55,22 @@ module Rubillow
|
|
55
55
|
extract_links(xml)
|
56
56
|
extract_address(xml)
|
57
57
|
|
58
|
-
@price = xml.xpath('//zestimate/amount').text
|
59
|
-
@last_updated = Date.strptime(xml.xpath('//zestimate/last-updated').text, "%m/%d/%Y")
|
58
|
+
@price = xml.xpath('//zestimate/amount').first.text
|
59
|
+
@last_updated = Date.strptime(xml.xpath('//zestimate/last-updated').first.text, "%m/%d/%Y")
|
60
60
|
@valuation_range = {
|
61
|
-
:low => xml.xpath('//zestimate/valuationRange/low').text,
|
62
|
-
:high => xml.xpath('//zestimate/valuationRange/high').text,
|
61
|
+
:low => xml.xpath('//zestimate/valuationRange/low').first.text,
|
62
|
+
:high => xml.xpath('//zestimate/valuationRange/high').first.text,
|
63
63
|
}
|
64
|
-
@change = xml.xpath('//zestimate/valueChange').text
|
65
|
-
|
64
|
+
@change = xml.xpath('//zestimate/valueChange').first.text
|
66
65
|
if xml.xpath('//rentzestimate/amount').text.length > 0
|
67
66
|
@rent_zestimate = {
|
68
|
-
:price => xml.xpath('//rentzestimate/amount').text,
|
69
|
-
:last_updated => xml.xpath('//rentzestimate/last-updated').text,
|
70
|
-
:value_change => xml.xpath('//rentzestimate/valueChange').text,
|
71
|
-
:value_duration => xml.xpath('//rentzestimate
|
67
|
+
:price => xml.xpath('//rentzestimate/amount').first.text,
|
68
|
+
:last_updated => xml.xpath('//rentzestimate/last-updated').first.text,
|
69
|
+
:value_change => xml.xpath('//rentzestimate/valueChange').first.text,
|
70
|
+
:value_duration => xml.xpath('//rentzestimate').first.xpath("//valueChange").first.attr("duration").chomp,
|
72
71
|
:valuation_range => {
|
73
|
-
:low => xml.xpath('//rentzestimate/valuationRange/low').text,
|
74
|
-
:high => xml.xpath('//rentzestimate/valuationRange/high').text
|
72
|
+
:low => xml.xpath('//rentzestimate/valuationRange/low').first.text,
|
73
|
+
:high => xml.xpath('//rentzestimate/valuationRange/high').first.text
|
75
74
|
},
|
76
75
|
:percentile => xml.xpath('//rentzestimate/percentile').text
|
77
76
|
}
|
@@ -82,7 +81,7 @@ module Rubillow
|
|
82
81
|
if tmp = xml.xpath('//zestimate/valueChange').attr('duration')
|
83
82
|
@change_duration = tmp.value
|
84
83
|
end
|
85
|
-
@percentile = xml.xpath('//zestimate/percentile').text
|
84
|
+
@percentile = xml.xpath('//zestimate/percentile').first.text
|
86
85
|
|
87
86
|
if xml.at_xpath('//localRealEstate/region')
|
88
87
|
@region = xml.xpath('//localRealEstate/region').attribute('name').value
|
@@ -90,12 +89,12 @@ module Rubillow
|
|
90
89
|
@region_type = xml.xpath('//localRealEstate/region').attribute('type').value
|
91
90
|
|
92
91
|
@local_real_estate = {
|
93
|
-
:overview => xml.xpath('//localRealEstate/region/links/overview').text,
|
94
|
-
:for_sale_by_owner => xml.xpath('//localRealEstate/region/links/forSaleByOwner').text,
|
95
|
-
:for_sale => xml.xpath('//localRealEstate/region/links/forSale').text,
|
92
|
+
:overview => xml.xpath('//localRealEstate/region/links/overview').first.text,
|
93
|
+
:for_sale_by_owner => xml.xpath('//localRealEstate/region/links/forSaleByOwner').first.text,
|
94
|
+
:for_sale => xml.xpath('//localRealEstate/region/links/forSale').first.text,
|
96
95
|
}
|
97
96
|
end
|
98
97
|
end
|
99
98
|
end
|
100
99
|
end
|
101
|
-
end
|
100
|
+
end
|
data/lib/rubillow/version.rb
CHANGED
data/rubillow.gemspec
CHANGED
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.homepage = "https://github.com/synewaves/rubillow"
|
11
11
|
s.summary = "Ruby library to access the Zillow API"
|
12
12
|
s.description = "Ruby library to access the Zillow API"
|
13
|
+
s.license = "MIT"
|
13
14
|
|
14
15
|
s.rubyforge_project = "rubillow"
|
15
16
|
|
@@ -18,11 +19,12 @@ Gem::Specification.new do |s|
|
|
18
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
20
|
s.require_paths = ["lib"]
|
20
21
|
|
21
|
-
s.
|
22
|
-
|
23
|
-
s.add_development_dependency "
|
24
|
-
s.add_development_dependency "
|
25
|
-
s.add_development_dependency "
|
26
|
-
|
27
|
-
s.
|
22
|
+
s.add_dependency "nokogiri", "~> 1.5"
|
23
|
+
|
24
|
+
s.add_development_dependency "rake", "~> 10.0"
|
25
|
+
s.add_development_dependency "rspec", "~> 2.12"
|
26
|
+
s.add_development_dependency "yard", "~> 0.8"
|
27
|
+
s.add_development_dependency "bluecloth", "~> 2.2"
|
28
|
+
s.add_development_dependency "simplecov", "~> 0.7"
|
29
|
+
s.add_development_dependency "coveralls", "~> 0.6"
|
28
30
|
end
|
@@ -44,4 +44,53 @@ describe Rubillow::Models::DeepSearchResult do
|
|
44
44
|
data.last_sold_price.should == "1025000"
|
45
45
|
data.use_code.should == "SingleFamily"
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
|
+
it "populates the data" do
|
49
|
+
data = Rubillow::Models::DeepSearchResult.new(get_xml('get_deep_search_results_duplicated.xml'))
|
50
|
+
|
51
|
+
data.zpid.should == '66109976'
|
52
|
+
data.links.count.should == 4
|
53
|
+
data.links[:homedetails].should == "http://www.zillow.com/homedetails/3651-Louisiana-St-APT-205-San-Diego-CA-92104/2126762315_zpid/"
|
54
|
+
data.links[:graphsanddata].should == "http://www.zillow.com/homedetails/3651-Louisiana-St-APT-205-San-Diego-CA-92104/66109976_zpid/#charts-and-data"
|
55
|
+
data.links[:mapthishome].should == "http://www.zillow.com/homes/2126762315_zpid/"
|
56
|
+
data.links[:comparables].should == "http://www.zillow.com/homes/comps/2126762315_zpid/"
|
57
|
+
data.address[:street].should == "3651 Louisiana St APT 205"
|
58
|
+
data.address[:city].should == "San Diego"
|
59
|
+
data.address[:state].should == "CA"
|
60
|
+
data.address[:zipcode].should == "92104"
|
61
|
+
data.address[:latitude].should == "32.744895"
|
62
|
+
data.address[:longitude].should == "-117.139743"
|
63
|
+
data.price.should == "249461"
|
64
|
+
data.percentile.should == "0"
|
65
|
+
data.last_updated.strftime("%m/%d/%Y").should == "04/02/2013"
|
66
|
+
data.valuation_range[:low].should == "219526"
|
67
|
+
data.valuation_range[:high].should == "271912"
|
68
|
+
data.change.should == "20262"
|
69
|
+
data.change_duration.should == "30"
|
70
|
+
data.local_real_estate.count.should == 3
|
71
|
+
data.local_real_estate[:overview].should == "http://www.zillow.com/local-info/CA-San-Diego/North-Park/r_274717/"
|
72
|
+
data.local_real_estate[:for_sale_by_owner].should == "http://www.zillow.com/north-park-san-diego-ca/fsbo/"
|
73
|
+
data.local_real_estate[:for_sale].should == "http://www.zillow.com/north-park-san-diego-ca/"
|
74
|
+
data.region.should == "North Park"
|
75
|
+
data.region_type.should == "neighborhood"
|
76
|
+
data.region_id.should == "274717"
|
77
|
+
data.fips_county.should == "6073"
|
78
|
+
data.tax_assessment_year.should == "2012"
|
79
|
+
data.tax_assessment.should == "180539.0"
|
80
|
+
data.year_built.should == "1985"
|
81
|
+
data.lot_size_square_feet.should == ""
|
82
|
+
data.finished_square_feet.should == "800"
|
83
|
+
data.bathrooms.should == "2.0"
|
84
|
+
data.bedrooms.should == "2"
|
85
|
+
data.total_rooms.should == ""
|
86
|
+
data.last_sold_date.strftime("%m/%d/%Y").should == "06/10/2011"
|
87
|
+
data.last_sold_price.should == "186000"
|
88
|
+
data.use_code.should == "Condominium"
|
89
|
+
end
|
90
|
+
|
91
|
+
it "doesn't raise an error when data is missing" do
|
92
|
+
lambda {
|
93
|
+
Rubillow::Models::DeepSearchResult.new(get_xml("get_deep_search_results_missing_data.xml"))
|
94
|
+
}.should_not raise_error
|
95
|
+
end
|
96
|
+
end
|
@@ -97,4 +97,12 @@ describe Rubillow::Models::SearchResult do
|
|
97
97
|
data.local_real_estate.should == nil
|
98
98
|
data.region.should == nil
|
99
99
|
end
|
100
|
+
|
101
|
+
it "populates the results from GetZestimate with missing valueDuration data" do
|
102
|
+
data = Rubillow::Models::SearchResult.new(get_xml('get_zestimate_missing_value_duration.xml'))
|
103
|
+
|
104
|
+
data.zpid.should == '29366758'
|
105
|
+
data.rent_zestimate.should be_a Hash
|
106
|
+
data.rent_zestimate[:value_duration].should be == '30'
|
107
|
+
end
|
100
108
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'coveralls'
|
3
|
+
|
4
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
5
|
+
SimpleCov::Formatter::HTMLFormatter,
|
6
|
+
Coveralls::SimpleCov::Formatter
|
7
|
+
]
|
8
|
+
SimpleCov.start
|
9
|
+
|
1
10
|
require File.expand_path("../../lib/rubillow", __FILE__)
|
2
11
|
require 'rspec'
|
3
12
|
|
@@ -0,0 +1,123 @@
|
|
1
|
+
<SearchResults:searchresults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SearchResults="http://www.zillow.com/static/xsd/SearchResults.xsd" xsi:schemaLocation="http://www.zillow.com/static/xsd/SearchResults.xsd http://www.zillowstatic.com/vstatic/aef8ddf0c58c6e153fc4285eac934229/static/xsd/SearchResults.xsd">
|
2
|
+
<request>
|
3
|
+
<address>3651 louisiana st 205 san diego ca</address>
|
4
|
+
<citystatezip>92104</citystatezip>
|
5
|
+
</request>
|
6
|
+
<message>
|
7
|
+
<text>Request successfully processed</text>
|
8
|
+
<code>0</code>
|
9
|
+
</message>
|
10
|
+
<response>
|
11
|
+
<results>
|
12
|
+
<result>
|
13
|
+
<zpid>66109976</zpid>
|
14
|
+
<links>
|
15
|
+
<homedetails>http://www.zillow.com/homedetails/3651-Louisiana-St-APT-205-San-Diego-CA-92104/66109976_zpid/</homedetails>
|
16
|
+
<graphsanddata>http://www.zillow.com/homedetails/3651-Louisiana-St-APT-205-San-Diego-CA-92104/66109976_zpid/#charts-and-data</graphsanddata>
|
17
|
+
<mapthishome>http://www.zillow.com/homes/66109976_zpid/</mapthishome>
|
18
|
+
<comparables>http://www.zillow.com/homes/comps/66109976_zpid/</comparables>
|
19
|
+
</links>
|
20
|
+
<address>
|
21
|
+
<street>3651 Louisiana St APT 205</street>
|
22
|
+
<zipcode>92104</zipcode>
|
23
|
+
<city>San Diego</city>
|
24
|
+
<state>CA</state>
|
25
|
+
<latitude>32.744895</latitude>
|
26
|
+
<longitude>-117.139743</longitude>
|
27
|
+
</address>
|
28
|
+
<FIPScounty>6073</FIPScounty>
|
29
|
+
<useCode>Condominium</useCode>
|
30
|
+
<taxAssessmentYear>2012</taxAssessmentYear>
|
31
|
+
<taxAssessment>180539.0</taxAssessment>
|
32
|
+
<yearBuilt>1985</yearBuilt>
|
33
|
+
<finishedSqFt>800</finishedSqFt>
|
34
|
+
<bathrooms>2.0</bathrooms>
|
35
|
+
<bedrooms>2</bedrooms>
|
36
|
+
<lastSoldDate>06/10/2011</lastSoldDate>
|
37
|
+
<lastSoldPrice currency="USD">186000</lastSoldPrice>
|
38
|
+
<zestimate>
|
39
|
+
<amount currency="USD">249461</amount>
|
40
|
+
<last-updated>04/02/2013</last-updated>
|
41
|
+
<oneWeekChange deprecated="true"/>
|
42
|
+
<valueChange duration="30" currency="USD">20262</valueChange>
|
43
|
+
<valuationRange>
|
44
|
+
<low currency="USD">219526</low>
|
45
|
+
<high currency="USD">271912</high>
|
46
|
+
</valuationRange>
|
47
|
+
<percentile>0</percentile>
|
48
|
+
</zestimate>
|
49
|
+
<rentzestimate>
|
50
|
+
<amount currency="USD">1483</amount>
|
51
|
+
<last-updated>04/01/2013</last-updated>
|
52
|
+
<oneWeekChange deprecated="true"/>
|
53
|
+
<valueChange/>
|
54
|
+
<valuationRange>
|
55
|
+
<low currency="USD">1201</low>
|
56
|
+
<high currency="USD">1883</high>
|
57
|
+
</valuationRange>
|
58
|
+
</rentzestimate>
|
59
|
+
<localRealEstate>
|
60
|
+
<region id="274717" type="neighborhood" name="North Park">
|
61
|
+
<links>
|
62
|
+
<overview>http://www.zillow.com/local-info/CA-San-Diego/North-Park/r_274717/</overview>
|
63
|
+
<forSaleByOwner>http://www.zillow.com/north-park-san-diego-ca/fsbo/</forSaleByOwner>
|
64
|
+
<forSale>http://www.zillow.com/north-park-san-diego-ca/</forSale>
|
65
|
+
</links>
|
66
|
+
</region>
|
67
|
+
</localRealEstate>
|
68
|
+
</result>
|
69
|
+
<result>
|
70
|
+
<zpid>2126762315</zpid>
|
71
|
+
<links>
|
72
|
+
<homedetails>http://www.zillow.com/homedetails/3651-Louisiana-St-APT-205-San-Diego-CA-92104/2126762315_zpid/</homedetails>
|
73
|
+
<mapthishome>http://www.zillow.com/homes/2126762315_zpid/</mapthishome>
|
74
|
+
<comparables>http://www.zillow.com/homes/comps/2126762315_zpid/</comparables>
|
75
|
+
</links>
|
76
|
+
<address>
|
77
|
+
<street>3651 Louisiana St APT 205</street>
|
78
|
+
<zipcode>92104</zipcode>
|
79
|
+
<city>San Diego</city>
|
80
|
+
<state>CA</state>
|
81
|
+
<latitude>32.7447</latitude>
|
82
|
+
<longitude>-117.13995</longitude>
|
83
|
+
</address>
|
84
|
+
<FIPScounty>6073</FIPScounty>
|
85
|
+
<useCode>Condominium</useCode>
|
86
|
+
<yearBuilt>1985</yearBuilt>
|
87
|
+
<finishedSqFt>800</finishedSqFt>
|
88
|
+
<bathrooms>1.5</bathrooms>
|
89
|
+
<bedrooms>2</bedrooms>
|
90
|
+
<zestimate>
|
91
|
+
<amount currency="USD">246695</amount>
|
92
|
+
<last-updated>04/02/2013</last-updated>
|
93
|
+
<oneWeekChange deprecated="true"/>
|
94
|
+
<valueChange duration="30" currency="USD">19294</valueChange>
|
95
|
+
<valuationRange>
|
96
|
+
<low currency="USD">214625</low>
|
97
|
+
<high currency="USD">288633</high>
|
98
|
+
</valuationRange>
|
99
|
+
<percentile>0</percentile>
|
100
|
+
</zestimate>
|
101
|
+
<rentzestimate>
|
102
|
+
<amount currency="USD">1343</amount>
|
103
|
+
<last-updated>04/01/2013</last-updated>
|
104
|
+
<oneWeekChange deprecated="true"/>
|
105
|
+
<valueChange/>
|
106
|
+
<valuationRange>
|
107
|
+
<low currency="USD">1222</low>
|
108
|
+
<high currency="USD">1800</high>
|
109
|
+
</valuationRange>
|
110
|
+
</rentzestimate>
|
111
|
+
<localRealEstate>
|
112
|
+
<region id="274717" type="neighborhood" name="North Park">
|
113
|
+
<links>
|
114
|
+
<overview>http://www.zillow.com/local-info/CA-San-Diego/North-Park/r_274717/</overview>
|
115
|
+
<forSaleByOwner>http://www.zillow.com/north-park-san-diego-ca/fsbo/</forSaleByOwner>
|
116
|
+
<forSale>http://www.zillow.com/north-park-san-diego-ca/</forSale>
|
117
|
+
</links>
|
118
|
+
</region>
|
119
|
+
</localRealEstate>
|
120
|
+
</result>
|
121
|
+
</results>
|
122
|
+
</response>
|
123
|
+
</SearchResults:searchresults>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<SearchResults:searchresults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zillow.com/static/xsd/SearchResults.xsd http://www.zillowstatic.com/vstatic/ff767ff8bf412f0cf22b5c412ec1cc5a/static/xsd/SearchResults.xsd" xmlns:SearchResults="http://www.zillow.com/static/xsd/SearchResults.xsd">
|
3
|
+
<request>
|
4
|
+
<address>23366-Torrey-St</address>
|
5
|
+
<citystatezip>Armada MI 48005</citystatezip>
|
6
|
+
</request>
|
7
|
+
<message>
|
8
|
+
<text>Request successfully processed</text>
|
9
|
+
<code>0</code>
|
10
|
+
</message>
|
11
|
+
<response>
|
12
|
+
<results>
|
13
|
+
<result>
|
14
|
+
<zpid>83624854</zpid>
|
15
|
+
<links>
|
16
|
+
<homedetails>http://www.zillow.com/homedetails/23366-Torrey-St-Armada-MI-48005/83624854_zpid/</homedetails>
|
17
|
+
<graphsanddata>http://www.zillow.com/homedetails/23366-Torrey-St-Armada-MI-48005/83624854_zpid/#charts-and-data</graphsanddata>
|
18
|
+
<mapthishome>http://www.zillow.com/homes/83624854_zpid/</mapthishome>
|
19
|
+
<comparables>http://www.zillow.com/homes/comps/83624854_zpid/</comparables>
|
20
|
+
</links>
|
21
|
+
<address>
|
22
|
+
<street>23366 Torrey St</street>
|
23
|
+
<zipcode>48005</zipcode>
|
24
|
+
<city>Armada</city>
|
25
|
+
<state>MI</state>
|
26
|
+
<latitude>42.842281</latitude>
|
27
|
+
<longitude>-82.88019</longitude>
|
28
|
+
</address>
|
29
|
+
<FIPScounty>26099</FIPScounty>
|
30
|
+
<useCode>SingleFamily</useCode>
|
31
|
+
<taxAssessmentYear>2011</taxAssessmentYear>
|
32
|
+
<taxAssessment>100376.0</taxAssessment>
|
33
|
+
<lotSizeSqFt>14810</lotSizeSqFt>
|
34
|
+
<zestimate>
|
35
|
+
<amount currency="USD">89301</amount>
|
36
|
+
<last-updated>04/09/2013</last-updated>
|
37
|
+
<oneWeekChange deprecated="true"></oneWeekChange>
|
38
|
+
<valueChange duration="30" currency="USD">-1566</valueChange>
|
39
|
+
<valuationRange>
|
40
|
+
<low currency="USD">74120</low>
|
41
|
+
<high currency="USD">108947</high>
|
42
|
+
</valuationRange>
|
43
|
+
<percentile>0</percentile>
|
44
|
+
</zestimate>
|
45
|
+
<localRealEstate>
|
46
|
+
<region id="50765" type="city" name="Armada">
|
47
|
+
<links>
|
48
|
+
<overview>http://www.zillow.com/local-info/MI-Armada/r_50765/</overview>
|
49
|
+
<forSaleByOwner>http://www.zillow.com/armada-mi/fsbo/</forSaleByOwner>
|
50
|
+
<forSale>http://www.zillow.com/armada-mi/</forSale>
|
51
|
+
</links>
|
52
|
+
</region>
|
53
|
+
</localRealEstate>
|
54
|
+
</result>
|
55
|
+
</results>
|
56
|
+
</response>
|
57
|
+
</SearchResults:searchresults>
|
58
|
+
<!-- H:003 T:32ms S:983 R:Wed Apr 10 13:55:59 PDT 2013 B:3.0.189437.20130408124808855-comp_rel_b.189437.20130408124954685-comp_rel_b -->
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<Zestimate:zestimate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Zestimate="http://www.zillow.com/static/xsd/Zestimate.xsd" xsi:schemaLocation="http://www.zillow.com/static/xsd/Zestimate.xsd http://www.zillowstatic.com/vstatic/ff767ff8bf412f0cf22b5c412ec1cc5a/static/xsd/Zestimate.xsd">
|
3
|
+
<request>
|
4
|
+
<zpid>29366758</zpid>
|
5
|
+
</request>
|
6
|
+
<message>
|
7
|
+
<text>Request successfully processed</text>
|
8
|
+
<code>0</code>
|
9
|
+
</message>
|
10
|
+
<response>
|
11
|
+
<zpid>29366758</zpid>
|
12
|
+
<links>
|
13
|
+
<homedetails>http://www.zillow.com/homedetails/7500-Blue-Beach-Cv-Austin-TX-78759/29366758_zpid/</homedetails>
|
14
|
+
<graphsanddata>http://www.zillow.com/homedetails/7500-Blue-Beach-Cv-Austin-TX-78759/29366758_zpid/#charts-and-data</graphsanddata>
|
15
|
+
<mapthishome>http://www.zillow.com/homes/29366758_zpid/</mapthishome>
|
16
|
+
<comparables>http://www.zillow.com/homes/comps/29366758_zpid/</comparables>
|
17
|
+
</links>
|
18
|
+
<address>
|
19
|
+
<street>7500 Blue Beach Cv</street>
|
20
|
+
<zipcode>78759</zipcode>
|
21
|
+
<city>Austin</city>
|
22
|
+
<state>TX</state>
|
23
|
+
<latitude>30.414619</latitude>
|
24
|
+
<longitude>-97.777438</longitude>
|
25
|
+
</address>
|
26
|
+
<zestimate>
|
27
|
+
<amount currency="USD">382942</amount>
|
28
|
+
<last-updated>04/09/2013</last-updated>
|
29
|
+
<oneWeekChange deprecated="true"></oneWeekChange>
|
30
|
+
<valueChange duration="30" currency="USD">4774</valueChange>
|
31
|
+
<valuationRange>
|
32
|
+
<low currency="USD">329330</low>
|
33
|
+
<high currency="USD">436554</high>
|
34
|
+
</valuationRange>
|
35
|
+
<percentile>73</percentile>
|
36
|
+
</zestimate>
|
37
|
+
<rentzestimate>
|
38
|
+
<amount currency="USD">2505</amount>
|
39
|
+
<last-updated>04/01/2013</last-updated>
|
40
|
+
<oneWeekChange deprecated="true"></oneWeekChange>
|
41
|
+
<valueChange></valueChange>
|
42
|
+
<valuationRange>
|
43
|
+
<low currency="USD">1979</low>
|
44
|
+
<high currency="USD">3056</high>
|
45
|
+
</valuationRange>
|
46
|
+
</rentzestimate>
|
47
|
+
<localRealEstate>
|
48
|
+
<region id="10221" type="city" name="Austin">
|
49
|
+
<links>
|
50
|
+
<overview>http://www.zillow.com/local-info/TX-Austin/r_10221/</overview>
|
51
|
+
<forSaleByOwner>http://www.zillow.com/austin-tx/fsbo/</forSaleByOwner>
|
52
|
+
<forSale>http://www.zillow.com/austin-tx/</forSale>
|
53
|
+
</links>
|
54
|
+
</region>
|
55
|
+
</localRealEstate>
|
56
|
+
<regions>
|
57
|
+
<zipcode-id>92668</zipcode-id>
|
58
|
+
<city-id>10221</city-id>
|
59
|
+
<county-id>1440</county-id>
|
60
|
+
<state-id>54</state-id>
|
61
|
+
</regions>
|
62
|
+
</response>
|
63
|
+
</Zestimate:zestimate>
|
64
|
+
<!-- H:003 T:6ms S:1133 R:Wed Apr 10 10:53:47 PDT 2013 B:3.0.189437.20130408124808855-comp_rel_b.189437.20130408124954685-comp_rel_b -->
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubillow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nokogiri
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.5'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.5'
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: rake
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -18,7 +34,7 @@ dependencies:
|
|
18
34
|
requirements:
|
19
35
|
- - ~>
|
20
36
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0
|
37
|
+
version: '10.0'
|
22
38
|
type: :development
|
23
39
|
prerelease: false
|
24
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +42,7 @@ dependencies:
|
|
26
42
|
requirements:
|
27
43
|
- - ~>
|
28
44
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0
|
45
|
+
version: '10.0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: rspec
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +50,7 @@ dependencies:
|
|
34
50
|
requirements:
|
35
51
|
- - ~>
|
36
52
|
- !ruby/object:Gem::Version
|
37
|
-
version: '2.
|
53
|
+
version: '2.12'
|
38
54
|
type: :development
|
39
55
|
prerelease: false
|
40
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,47 +58,47 @@ dependencies:
|
|
42
58
|
requirements:
|
43
59
|
- - ~>
|
44
60
|
- !ruby/object:Gem::Version
|
45
|
-
version: '2.
|
61
|
+
version: '2.12'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: yard
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
49
65
|
none: false
|
50
66
|
requirements:
|
51
|
-
- -
|
67
|
+
- - ~>
|
52
68
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
69
|
+
version: '0.8'
|
54
70
|
type: :development
|
55
71
|
prerelease: false
|
56
72
|
version_requirements: !ruby/object:Gem::Requirement
|
57
73
|
none: false
|
58
74
|
requirements:
|
59
|
-
- -
|
75
|
+
- - ~>
|
60
76
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
77
|
+
version: '0.8'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: bluecloth
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
65
81
|
none: false
|
66
82
|
requirements:
|
67
|
-
- -
|
83
|
+
- - ~>
|
68
84
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.
|
85
|
+
version: '2.2'
|
70
86
|
type: :development
|
71
87
|
prerelease: false
|
72
88
|
version_requirements: !ruby/object:Gem::Requirement
|
73
89
|
none: false
|
74
90
|
requirements:
|
75
|
-
- -
|
91
|
+
- - ~>
|
76
92
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.
|
93
|
+
version: '2.2'
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
95
|
+
name: simplecov
|
80
96
|
requirement: !ruby/object:Gem::Requirement
|
81
97
|
none: false
|
82
98
|
requirements:
|
83
99
|
- - ~>
|
84
100
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.
|
101
|
+
version: '0.7'
|
86
102
|
type: :development
|
87
103
|
prerelease: false
|
88
104
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,23 +106,23 @@ dependencies:
|
|
90
106
|
requirements:
|
91
107
|
- - ~>
|
92
108
|
- !ruby/object:Gem::Version
|
93
|
-
version: 0.
|
109
|
+
version: '0.7'
|
94
110
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
111
|
+
name: coveralls
|
96
112
|
requirement: !ruby/object:Gem::Requirement
|
97
113
|
none: false
|
98
114
|
requirements:
|
99
115
|
- - ~>
|
100
116
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
102
|
-
type: :
|
117
|
+
version: '0.6'
|
118
|
+
type: :development
|
103
119
|
prerelease: false
|
104
120
|
version_requirements: !ruby/object:Gem::Requirement
|
105
121
|
none: false
|
106
122
|
requirements:
|
107
123
|
- - ~>
|
108
124
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
125
|
+
version: '0.6'
|
110
126
|
description: Ruby library to access the Zillow API
|
111
127
|
email:
|
112
128
|
- rubillow@matthewvince.com
|
@@ -126,6 +142,7 @@ files:
|
|
126
142
|
- Rakefile
|
127
143
|
- lib/rubillow.rb
|
128
144
|
- lib/rubillow/configuration.rb
|
145
|
+
- lib/rubillow/helpers/xml_parsing_helper.rb
|
129
146
|
- lib/rubillow/home_valuation.rb
|
130
147
|
- lib/rubillow/models.rb
|
131
148
|
- lib/rubillow/models/addressable.rb
|
@@ -186,6 +203,8 @@ files:
|
|
186
203
|
- spec/xml/get_comps.xml
|
187
204
|
- spec/xml/get_deep_comps.xml
|
188
205
|
- spec/xml/get_deep_search_results.xml
|
206
|
+
- spec/xml/get_deep_search_results_duplicated.xml
|
207
|
+
- spec/xml/get_deep_search_results_missing_data.xml
|
189
208
|
- spec/xml/get_demographics.xml
|
190
209
|
- spec/xml/get_monthly_payments.xml
|
191
210
|
- spec/xml/get_rate_summary.xml
|
@@ -196,9 +215,11 @@ files:
|
|
196
215
|
- spec/xml/get_updated_property_details.xml
|
197
216
|
- spec/xml/get_zestimate.xml
|
198
217
|
- spec/xml/get_zestimate_missing_region.xml
|
218
|
+
- spec/xml/get_zestimate_missing_value_duration.xml
|
199
219
|
- spec/xml/near_limit.xml
|
200
220
|
homepage: https://github.com/synewaves/rubillow
|
201
|
-
licenses:
|
221
|
+
licenses:
|
222
|
+
- MIT
|
202
223
|
post_install_message:
|
203
224
|
rdoc_options: []
|
204
225
|
require_paths:
|
@@ -209,12 +230,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
230
|
- - ! '>='
|
210
231
|
- !ruby/object:Gem::Version
|
211
232
|
version: '0'
|
233
|
+
segments:
|
234
|
+
- 0
|
235
|
+
hash: -2902501168936957997
|
212
236
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
237
|
none: false
|
214
238
|
requirements:
|
215
239
|
- - ! '>='
|
216
240
|
- !ruby/object:Gem::Version
|
217
241
|
version: '0'
|
242
|
+
segments:
|
243
|
+
- 0
|
244
|
+
hash: -2902501168936957997
|
218
245
|
requirements: []
|
219
246
|
rubyforge_project: rubillow
|
220
247
|
rubygems_version: 1.8.23
|
@@ -251,6 +278,8 @@ test_files:
|
|
251
278
|
- spec/xml/get_comps.xml
|
252
279
|
- spec/xml/get_deep_comps.xml
|
253
280
|
- spec/xml/get_deep_search_results.xml
|
281
|
+
- spec/xml/get_deep_search_results_duplicated.xml
|
282
|
+
- spec/xml/get_deep_search_results_missing_data.xml
|
254
283
|
- spec/xml/get_demographics.xml
|
255
284
|
- spec/xml/get_monthly_payments.xml
|
256
285
|
- spec/xml/get_rate_summary.xml
|
@@ -261,5 +290,6 @@ test_files:
|
|
261
290
|
- spec/xml/get_updated_property_details.xml
|
262
291
|
- spec/xml/get_zestimate.xml
|
263
292
|
- spec/xml/get_zestimate_missing_region.xml
|
293
|
+
- spec/xml/get_zestimate_missing_value_duration.xml
|
264
294
|
- spec/xml/near_limit.xml
|
265
295
|
has_rdoc:
|