melissa_data 0.2.2 → 0.2.3
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/.travis.yml +2 -0
- data/README.md +255 -203
- data/lib/melissa_data/version.rb +1 -1
- data/lib/melissa_data/web_smart/client.rb +5 -3
- data/lib/melissa_data/web_smart/response_processor.rb +43 -0
- data/lib/melissa_data.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: df41fc02a5604e66a5f2ea498c71a7573fe063b2
|
|
4
|
+
data.tar.gz: 87ff0bd7e79330ccb429ed3546270ab4e6065ea7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c45cb95cd51bd4e6d13d7d84c4454f4d27750d9a0a77ea424d9a0c8c912d9a28c460e542b45344317aa244d68371271ae1ef605062e8c32fc6f75ef092202477
|
|
7
|
+
data.tar.gz: c497b841a773eb15ed9e664cc3b4d5a65689866463351951f0a045b0a1b95e854c2d1c1ed43cbf426c9cad8b05a253db76a97d88c64aed71aa966177048c9e57
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Melissa Data
|
|
2
2
|
|
|
3
|
+
[](https://travis-ci.org/cometaworks/melissa_data)
|
|
4
|
+
|
|
3
5
|
## Installation
|
|
4
6
|
|
|
5
7
|
Add this line to your application's Gemfile:
|
|
@@ -16,6 +18,23 @@ Or install it yourself as:
|
|
|
16
18
|
|
|
17
19
|
$ gem install melissa_data
|
|
18
20
|
|
|
21
|
+
## Configuration
|
|
22
|
+
|
|
23
|
+
There are two ways to configure the gem.
|
|
24
|
+
|
|
25
|
+
### Block configuration
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
MelissaData.configure do |config|
|
|
29
|
+
config.web_smart_id = ENV['MELISSA_DATA_WEB_SMART_ID']
|
|
30
|
+
end
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### One-liner
|
|
34
|
+
|
|
35
|
+
```ruby
|
|
36
|
+
MelissaData.web_smart_id = ENV['MELISSA_DATA_WEB_SMART_ID']
|
|
37
|
+
```
|
|
19
38
|
## Usage
|
|
20
39
|
|
|
21
40
|
### Smart Web APIs
|
|
@@ -23,229 +42,262 @@ Or install it yourself as:
|
|
|
23
42
|
#### Property
|
|
24
43
|
There is a client included for the property API on Melissa. This requires very little.
|
|
25
44
|
You will need a `MelissaData Web Smart ID`.
|
|
45
|
+
|
|
46
|
+
#### Quick Use
|
|
26
47
|
Once you have these, you may use the following client. To instantiate a client:
|
|
27
48
|
|
|
28
49
|
```ruby
|
|
29
50
|
irb> MelissaData.web_smart_id = ENV['MELISSA_DATA_WEB_SMART_ID']
|
|
30
51
|
irb> client = MelissaData::WebSmart::Client.new
|
|
31
|
-
irb> client.
|
|
52
|
+
irb> client.property_by_apn(fips: some_fips_code, apn: some_apn)
|
|
32
53
|
# => your property data
|
|
33
54
|
# since it uses keyword arguments, order does not matter
|
|
34
|
-
irb> client.
|
|
55
|
+
irb> client.property_by_apn(apn: some_apn, fips: some_fips_code)
|
|
56
|
+
# => your property data
|
|
57
|
+
|
|
58
|
+
# You can also look up an address code and get its `address_key` instead of using
|
|
59
|
+
# an apn and fips code
|
|
60
|
+
irb> key = client.address(address: "158 Thomas Dr", city: "Fremont", state: "Ohio", zip: "43420")[:address_key]
|
|
61
|
+
irb> client.property_by_address_key(key)
|
|
35
62
|
# => your property data
|
|
36
63
|
```
|
|
37
64
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"section": null,
|
|
59
|
-
"quarter_section": null,
|
|
60
|
-
"homestead_exempt": null,
|
|
61
|
-
"absentee_owner_code": null,
|
|
62
|
-
"land_use_code": null,
|
|
63
|
-
"county_land_use1": null,
|
|
64
|
-
"county_land_use2": null,
|
|
65
|
-
"property_indicator_code": null,
|
|
66
|
-
"municipality_name": null,
|
|
67
|
-
"view_code": null,
|
|
68
|
-
"location_influence_code": null,
|
|
69
|
-
"number_of_buildings": null
|
|
70
|
-
},
|
|
71
|
-
"property_address": {
|
|
72
|
-
"address": "8351 Bartholomew Dr",
|
|
73
|
-
"city": "North Fort Myers",
|
|
74
|
-
"state": "FL",
|
|
75
|
-
"zip": "33917-1758",
|
|
76
|
-
"address_key": "33917175851",
|
|
77
|
-
"latitude": "26.72156",
|
|
78
|
-
"longitude": "-81.85911"
|
|
79
|
-
},
|
|
80
|
-
"parsed_property_address": {
|
|
81
|
-
"range": "8351",
|
|
82
|
-
"pre_directional": null,
|
|
83
|
-
"street_name": "Bartholomew",
|
|
84
|
-
"suffix": "Dr",
|
|
85
|
-
"post_directional": null,
|
|
86
|
-
"suite_name": null,
|
|
87
|
-
"suite_range": null
|
|
88
|
-
},
|
|
89
|
-
"owner": {
|
|
90
|
-
"corporate_owner": null,
|
|
91
|
-
"name": "EDWARDS JOHN V",
|
|
92
|
-
"name2": null,
|
|
93
|
-
"unparsed_name1": null,
|
|
94
|
-
"unparsed_name2": null,
|
|
95
|
-
"phone": null,
|
|
96
|
-
"phone_opt_out": null
|
|
97
|
-
},
|
|
98
|
-
"owner_address": {
|
|
99
|
-
"address": null,
|
|
100
|
-
"suite": null,
|
|
101
|
-
"city": null,
|
|
102
|
-
"state": null,
|
|
103
|
-
"zip": null,
|
|
104
|
-
"carrier_route": null,
|
|
105
|
-
"matchcode": null,
|
|
106
|
-
"mail_opt_out": null
|
|
107
|
-
},
|
|
108
|
-
"values": {
|
|
109
|
-
"calculated_total_value": "17300",
|
|
110
|
-
"calculated_land_value": null,
|
|
111
|
-
"calculated_improvement_value": null,
|
|
112
|
-
"calculated_total_value_code": null,
|
|
113
|
-
"calculated_land_value_code": null,
|
|
114
|
-
"calculated_improvement_value_code": null,
|
|
115
|
-
"assessed_total_value": "17300",
|
|
116
|
-
"assessed_land_value": null,
|
|
117
|
-
"assessed_improvement_value": null,
|
|
118
|
-
"market_total_value": null,
|
|
119
|
-
"market_land_value": null,
|
|
120
|
-
"market_improvement_value": null,
|
|
121
|
-
"appraised_total_value": null,
|
|
122
|
-
"appraised_land_value": null,
|
|
123
|
-
"appraised_improvement_value": null,
|
|
124
|
-
"tax_amount": "235.82",
|
|
125
|
-
"tax_year": null
|
|
126
|
-
},
|
|
127
|
-
"current_sale": {
|
|
128
|
-
"transaction_id": null,
|
|
129
|
-
"document_year": null,
|
|
130
|
-
"deed_category_code": null,
|
|
131
|
-
"recording_date": null,
|
|
132
|
-
"sale_date": "19920109",
|
|
133
|
-
"sale_price": "69000",
|
|
134
|
-
"sale_code": null,
|
|
135
|
-
"seller_name": null,
|
|
136
|
-
"multi_apn_code": null,
|
|
137
|
-
"multi_apn_count": null,
|
|
138
|
-
"residental_model": null
|
|
139
|
-
},
|
|
140
|
-
"current_deed": {
|
|
141
|
-
"mortgage_amount": "68900",
|
|
142
|
-
"mortgage_date": null,
|
|
143
|
-
"mortgage_loan_type_code": null,
|
|
144
|
-
"mortgage_deed_type_code": null,
|
|
145
|
-
"mortgage_term_code": null,
|
|
146
|
-
"mortgage_term": null,
|
|
147
|
-
"mortgage_due_date": null,
|
|
148
|
-
"mortgage_assumption_amount": null,
|
|
149
|
-
"lender_code": null,
|
|
150
|
-
"lender_name": null,
|
|
151
|
-
"second_mortgage_amount": null,
|
|
152
|
-
"second_mortgage_loan_type_code": null,
|
|
153
|
-
"second_mortgage_deed_type_code": null
|
|
154
|
-
},
|
|
155
|
-
"prior_sale": {
|
|
156
|
-
"transaction_id": null,
|
|
157
|
-
"document_year": null,
|
|
158
|
-
"deed_category_code": null,
|
|
159
|
-
"recording_date": null,
|
|
160
|
-
"sale_date": null,
|
|
161
|
-
"sale_price": null,
|
|
162
|
-
"sale_code": null,
|
|
163
|
-
"transaction_code": null,
|
|
164
|
-
"multi_apn_code": null,
|
|
165
|
-
"multi_apn_count": null,
|
|
166
|
-
"mortgage_amount": null,
|
|
167
|
-
"deed_type_code": null
|
|
168
|
-
},
|
|
169
|
-
"lot": {
|
|
170
|
-
"front_footage": null,
|
|
171
|
-
"depth_footage": null,
|
|
172
|
-
"acreage": "2.1491",
|
|
173
|
-
"square_footage": "93615"
|
|
174
|
-
},
|
|
175
|
-
"square_footage": {
|
|
176
|
-
"universal_building": null,
|
|
177
|
-
"building_area_code": null,
|
|
178
|
-
"building_area": null,
|
|
179
|
-
"living_space": null,
|
|
180
|
-
"ground_floor": null,
|
|
181
|
-
"gross": null,
|
|
182
|
-
"adjusted_gross": null,
|
|
183
|
-
"basement": null,
|
|
184
|
-
"garage_or_parking": null
|
|
185
|
-
},
|
|
186
|
-
"building": {
|
|
187
|
-
"year_built": null,
|
|
188
|
-
"effective_year_built": null,
|
|
189
|
-
"bed_rooms": "0",
|
|
190
|
-
"total_rooms": "0",
|
|
191
|
-
"total_baths_calculated": null,
|
|
192
|
-
"total_baths": "0.00",
|
|
193
|
-
"full_baths": null,
|
|
194
|
-
"half_baths": null,
|
|
195
|
-
"one_quarter_baths": null,
|
|
196
|
-
"three_quarter_baths": null,
|
|
197
|
-
"bath_fixtures": null,
|
|
198
|
-
"air_conditioning_code": null,
|
|
199
|
-
"basement_code": null,
|
|
200
|
-
"building_code": null,
|
|
201
|
-
"improvement_code": null,
|
|
202
|
-
"condition_code": null,
|
|
203
|
-
"construction_code": null,
|
|
204
|
-
"exterior_wall_code": null,
|
|
205
|
-
"fireplace": null,
|
|
206
|
-
"fireplaces": null,
|
|
207
|
-
"fireplace_code": null,
|
|
208
|
-
"foundation_code": null,
|
|
209
|
-
"flooring_code": null,
|
|
210
|
-
"roof_framing_code": null,
|
|
211
|
-
"garage_code": null,
|
|
212
|
-
"heating_code": null,
|
|
213
|
-
"mobile_home": null,
|
|
214
|
-
"parking_spaces": null,
|
|
215
|
-
"parking_code": null,
|
|
216
|
-
"pool": null,
|
|
217
|
-
"pool_code": null,
|
|
218
|
-
"quality_code": null,
|
|
219
|
-
"roof_cover_code": null,
|
|
220
|
-
"roof_type_code": null,
|
|
221
|
-
"stories_code": null,
|
|
222
|
-
"stories": null,
|
|
223
|
-
"building_style_code": null,
|
|
224
|
-
"units": null,
|
|
225
|
-
"electricity_code": null,
|
|
226
|
-
"fuel_code": null,
|
|
227
|
-
"sewer_code": null,
|
|
228
|
-
"water_code": null
|
|
229
|
-
}
|
|
230
|
-
}
|
|
65
|
+
#### Property Client
|
|
66
|
+
|
|
67
|
+
The following are the main keys returned by the client for a property request:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
record_id
|
|
71
|
+
result
|
|
72
|
+
parcel
|
|
73
|
+
property_address
|
|
74
|
+
parsed_property_address
|
|
75
|
+
owner
|
|
76
|
+
owner_address
|
|
77
|
+
values
|
|
78
|
+
current_sale
|
|
79
|
+
current_deed
|
|
80
|
+
prior_sale
|
|
81
|
+
lot
|
|
82
|
+
square_footage
|
|
83
|
+
building
|
|
84
|
+
success
|
|
231
85
|
```
|
|
232
86
|
|
|
233
|
-
|
|
87
|
+
To request a property's information, you must go through one of two processes. In order to request a property
|
|
88
|
+
by address, there are two steps.
|
|
234
89
|
|
|
235
|
-
|
|
90
|
+
Prepare a client
|
|
236
91
|
|
|
237
|
-
|
|
92
|
+
```ruby
|
|
93
|
+
irb> client = MelissaData::WebSmart::Client.new
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
And next, we call `Client#address` with the keys `address`, `city`, `state`, `zip`, and optionally `country`,
|
|
97
|
+
which defaults to `US` in order to get an address key. If we do not have a `FIPS` and `APN` for the property,
|
|
98
|
+
we must go through this step in order to get the key to pass to the `Client#property` method.
|
|
238
99
|
|
|
239
100
|
```ruby
|
|
240
|
-
|
|
241
|
-
config.web_smart_id = ENV['MELISSA_DATA_WEB_SMART_ID']
|
|
242
|
-
end
|
|
101
|
+
irb. address_key = client.address(address: '158 thomas dr', city: 'fremont', state: 'ohio', zip: '43420')
|
|
243
102
|
```
|
|
244
103
|
|
|
245
|
-
|
|
104
|
+
And now we can call the regular `Client#property` method to get the enriched data for the parcel.
|
|
246
105
|
|
|
247
106
|
```ruby
|
|
248
|
-
|
|
107
|
+
irb> client.property_by_address_key(address_key: address_key)
|
|
108
|
+
# =>
|
|
109
|
+
{:record_id=>nil,
|
|
110
|
+
:result=>
|
|
111
|
+
{:code=>"YS01,YS03,YC01,GS05",
|
|
112
|
+
:description=> "FIPS/APN Match Found. Basic information returned."},
|
|
113
|
+
:parcel=>
|
|
114
|
+
{:fips_code=>"12071",
|
|
115
|
+
:fips_sub_code=>nil,
|
|
116
|
+
:unformatted_apn=>nil,
|
|
117
|
+
:apn_sequence_no=>nil,
|
|
118
|
+
:formatted_apn=>"24-43-24-03-00022.0040",
|
|
119
|
+
:original_apn=>nil,
|
|
120
|
+
:census_tract=>nil,
|
|
121
|
+
:zoning=>nil,
|
|
122
|
+
:range=>nil,
|
|
123
|
+
:township=>nil,
|
|
124
|
+
:section=>nil,
|
|
125
|
+
:quarter_section=>nil,
|
|
126
|
+
:homestead_exempt=>nil,
|
|
127
|
+
:absentee_owner_code=>nil,
|
|
128
|
+
:land_use_code=>nil,
|
|
129
|
+
:county_land_use1=>nil,
|
|
130
|
+
:county_land_use2=>nil,
|
|
131
|
+
:property_indicator_code=>nil,
|
|
132
|
+
:municipality_name=>nil,
|
|
133
|
+
:view_code=>nil,
|
|
134
|
+
:location_influence_code=>nil,
|
|
135
|
+
:number_of_buildings=>nil},
|
|
136
|
+
:property_address=>
|
|
137
|
+
{:address=>"8351 Bartholomew Dr",
|
|
138
|
+
:city=>"North Fort Myers",
|
|
139
|
+
:state=>"FL",
|
|
140
|
+
:zip=>"33917-1758",
|
|
141
|
+
:address_key=>"33917175851",
|
|
142
|
+
:latitude=>"26.72156",
|
|
143
|
+
:longitude=>"-81.85911"},
|
|
144
|
+
:parsed_property_address=>
|
|
145
|
+
{:range=>"8351",
|
|
146
|
+
:pre_directional=>nil,
|
|
147
|
+
:street_name=>"Bartholomew",
|
|
148
|
+
:suffix=>"Dr",
|
|
149
|
+
:post_directional=>nil,
|
|
150
|
+
:suite_name=>nil,
|
|
151
|
+
:suite_range=>nil},
|
|
152
|
+
:owner=>
|
|
153
|
+
{:corporate_owner=>nil,
|
|
154
|
+
:name=>"EDWARDS JOHN V",
|
|
155
|
+
:name2=>nil,
|
|
156
|
+
:unparsed_name1=>nil,
|
|
157
|
+
:unparsed_name2=>nil,
|
|
158
|
+
:phone=>nil,
|
|
159
|
+
:phone_opt_out=>nil},
|
|
160
|
+
:owner_address=>
|
|
161
|
+
{:address=>nil,
|
|
162
|
+
:suite=>nil,
|
|
163
|
+
:city=>nil,
|
|
164
|
+
:state=>nil,
|
|
165
|
+
:zip=>nil,
|
|
166
|
+
:carrier_route=>nil,
|
|
167
|
+
:matchcode=>nil,
|
|
168
|
+
:mail_opt_out=>nil},
|
|
169
|
+
:values=>
|
|
170
|
+
{:calculated_total_value=>"17300",
|
|
171
|
+
:calculated_land_value=>nil,
|
|
172
|
+
:calculated_improvement_value=>nil,
|
|
173
|
+
:calculated_total_value_code=>nil,
|
|
174
|
+
:calculated_land_value_code=>nil,
|
|
175
|
+
:calculated_improvement_value_code=>nil,
|
|
176
|
+
:assessed_total_value=>"17300",
|
|
177
|
+
:assessed_land_value=>nil,
|
|
178
|
+
:assessed_improvement_value=>nil,
|
|
179
|
+
:market_total_value=>nil,
|
|
180
|
+
:market_land_value=>nil,
|
|
181
|
+
:market_improvement_value=>nil,
|
|
182
|
+
:appraised_total_value=>nil,
|
|
183
|
+
:appraised_land_value=>nil,
|
|
184
|
+
:appraised_improvement_value=>nil,
|
|
185
|
+
:tax_amount=>"235.82",
|
|
186
|
+
:tax_year=>nil},
|
|
187
|
+
:current_sale=>
|
|
188
|
+
{:transaction_id=>nil,
|
|
189
|
+
:document_year=>nil,
|
|
190
|
+
:deed_category_code=>nil,
|
|
191
|
+
:recording_date=>nil,
|
|
192
|
+
:sale_date=>"19920109",
|
|
193
|
+
:sale_price=>"69000",
|
|
194
|
+
:sale_code=>nil,
|
|
195
|
+
:seller_name=>nil,
|
|
196
|
+
:multi_apn_code=>nil,
|
|
197
|
+
:multi_apn_count=>nil,
|
|
198
|
+
:residental_model=>nil},
|
|
199
|
+
:current_deed=>
|
|
200
|
+
{:mortgage_amount=>"68900",
|
|
201
|
+
:mortgage_date=>nil,
|
|
202
|
+
:mortgage_loan_type_code=>nil,
|
|
203
|
+
:mortgage_deed_type_code=>nil,
|
|
204
|
+
:mortgage_term_code=>nil,
|
|
205
|
+
:mortgage_term=>nil,
|
|
206
|
+
:mortgage_due_date=>nil,
|
|
207
|
+
:mortgage_assumption_amount=>nil,
|
|
208
|
+
:lender_code=>nil,
|
|
209
|
+
:lender_name=>nil,
|
|
210
|
+
:second_mortgage_amount=>nil,
|
|
211
|
+
:second_mortgage_loan_type_code=>nil,
|
|
212
|
+
:second_mortgage_deed_type_code=>nil},
|
|
213
|
+
:prior_sale=>
|
|
214
|
+
{:transaction_id=>nil,
|
|
215
|
+
:document_year=>nil,
|
|
216
|
+
:deed_category_code=>nil,
|
|
217
|
+
:recording_date=>nil,
|
|
218
|
+
:sale_date=>nil,
|
|
219
|
+
:sale_price=>nil,
|
|
220
|
+
:sale_code=>nil,
|
|
221
|
+
:transaction_code=>nil,
|
|
222
|
+
:multi_apn_code=>nil,
|
|
223
|
+
:multi_apn_count=>nil,
|
|
224
|
+
:mortgage_amount=>nil,
|
|
225
|
+
:deed_type_code=>nil},
|
|
226
|
+
:lot=>
|
|
227
|
+
{:front_footage=>nil,
|
|
228
|
+
:depth_footage=>nil,
|
|
229
|
+
:acreage=>"2.1491",
|
|
230
|
+
:square_footage=>"93615"},
|
|
231
|
+
:square_footage=>
|
|
232
|
+
{:universal_building=>nil,
|
|
233
|
+
:building_area_code=>nil,
|
|
234
|
+
:building_area=>nil,
|
|
235
|
+
:living_space=>nil,
|
|
236
|
+
:ground_floor=>nil,
|
|
237
|
+
:gross=>nil,
|
|
238
|
+
:adjusted_gross=>nil,
|
|
239
|
+
:basement=>nil,
|
|
240
|
+
:garage_or_parking=>nil},
|
|
241
|
+
:building=>
|
|
242
|
+
{:year_built=>nil,
|
|
243
|
+
:effective_year_built=>nil,
|
|
244
|
+
:bed_rooms=>"0",
|
|
245
|
+
:total_rooms=>"0",
|
|
246
|
+
:total_baths_calculated=>nil,
|
|
247
|
+
:total_baths=>"0.00",
|
|
248
|
+
:full_baths=>nil,
|
|
249
|
+
:half_baths=>nil,
|
|
250
|
+
:one_quarter_baths=>nil,
|
|
251
|
+
:three_quarter_baths=>nil,
|
|
252
|
+
:bath_fixtures=>nil,
|
|
253
|
+
:air_conditioning_code=>nil,
|
|
254
|
+
:basement_code=>nil,
|
|
255
|
+
:building_code=>nil,
|
|
256
|
+
:improvement_code=>nil,
|
|
257
|
+
:condition_code=>nil,
|
|
258
|
+
:construction_code=>nil,
|
|
259
|
+
:exterior_wall_code=>nil,
|
|
260
|
+
:fireplace=>nil,
|
|
261
|
+
:fireplaces=>nil,
|
|
262
|
+
:fireplace_code=>nil,
|
|
263
|
+
:foundation_code=>nil,
|
|
264
|
+
:flooring_code=>nil,
|
|
265
|
+
:roof_framing_code=>nil,
|
|
266
|
+
:garage_code=>nil,
|
|
267
|
+
:heating_code=>nil,
|
|
268
|
+
:mobile_home=>nil,
|
|
269
|
+
:parking_spaces=>nil,
|
|
270
|
+
:parking_code=>nil,
|
|
271
|
+
:pool=>nil,
|
|
272
|
+
:pool_code=>nil,
|
|
273
|
+
:quality_code=>nil,
|
|
274
|
+
:roof_cover_code=>nil,
|
|
275
|
+
:roof_type_code=>nil,
|
|
276
|
+
:stories_code=>nil,
|
|
277
|
+
:stories=>nil,
|
|
278
|
+
:building_style_code=>nil,
|
|
279
|
+
:units=>nil,
|
|
280
|
+
:electricity_code=>nil,
|
|
281
|
+
:fuel_code=>nil,
|
|
282
|
+
:sewer_code=>nil,
|
|
283
|
+
:water_code=>nil},
|
|
284
|
+
:success=>
|
|
285
|
+
["FIPS/APN Match found", "Basic information returned"]}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
The alternative method is used if you have a `FIPS` and `APN` available. This is `Client#property_by_apn`.
|
|
290
|
+
|
|
291
|
+
```ruby
|
|
292
|
+
irb> client.property_by_apn(apn: 'my_apn', fips: 'my_fips')
|
|
293
|
+
# => see above return format, it is identical
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
There is an `error` key returned in a hash with the reasons for the failure if an error occurs.
|
|
297
|
+
If there is not an error, there is a `success` key added with some basic logging and information such as:
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
["FIPS/APN Match found", "Basic information returned"]
|
|
249
301
|
```
|
|
250
302
|
|
|
251
303
|
## Development
|
data/lib/melissa_data/version.rb
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
module MelissaData
|
|
2
2
|
module WebSmart
|
|
3
3
|
class Client
|
|
4
|
+
include MelissaData::WebSmart::ResponseProcessor
|
|
5
|
+
|
|
4
6
|
def initialize
|
|
5
7
|
@client = MelissaData::WebSmart::PropertyAPI.new
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
def property_by_apn(fips:, apn:)
|
|
9
|
-
@client.property_by_apn(fips: fips, apn: apn)
|
|
11
|
+
process_property(@client.property_by_apn(fips: fips, apn: apn))
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
def property_by_address_key(address_key:)
|
|
13
|
-
@client.property_by_address_key(address_key: address_key)
|
|
15
|
+
process_property(@client.property_by_address_key(address_key: address_key))
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
def address(address:, city:, state:, zip:, country: "USA")
|
|
17
|
-
@client.address(address: address, city: city, state: state,
|
|
19
|
+
resp = @client.address(address: address, city: city, state: state,
|
|
18
20
|
zip: zip, country: country)
|
|
19
21
|
end
|
|
20
22
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module MelissaData
|
|
2
|
+
module WebSmart
|
|
3
|
+
module ResponseProcessor
|
|
4
|
+
def process_property(response)
|
|
5
|
+
codes = codes(response)
|
|
6
|
+
if has_error_codes?(codes)
|
|
7
|
+
{ errors: codes_for(codes, 'error') }
|
|
8
|
+
else
|
|
9
|
+
response.merge!(success: codes_for(codes, 'success'))
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def codes_for(codes, type)
|
|
14
|
+
codes.map { |c| method("property_#{type}_codes").call[c.to_sym] }.compact
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def codes(response)
|
|
18
|
+
codes = response[:result][:code].split(",")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def has_error_codes? codes
|
|
22
|
+
error_codes?(codes) ? false : true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def error_codes?(codes)
|
|
26
|
+
codes.map { |c| c if property_error_codes.keys.include? c }.compact.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def property_success_codes
|
|
30
|
+
{ YS01: "FIPS/APN Match found",
|
|
31
|
+
YS02: "AddressKey Match found",
|
|
32
|
+
YS03: "Basic information returned",
|
|
33
|
+
YS04: "Detailed information returned" }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def property_error_codes
|
|
37
|
+
{ YE01: "No FIPS/APN or AddressKey provided",
|
|
38
|
+
YE02: "No match found",
|
|
39
|
+
YE03: "Invalid FIPS/APN or AddressKey provided" }
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
data/lib/melissa_data.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: melissa_data
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Robert Grayson
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2015-10-
|
|
12
|
+
date: 2015-10-16 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: nokogiri
|
|
@@ -133,6 +133,7 @@ files:
|
|
|
133
133
|
- lib/melissa_data/version.rb
|
|
134
134
|
- lib/melissa_data/web_smart/client.rb
|
|
135
135
|
- lib/melissa_data/web_smart/property_api.rb
|
|
136
|
+
- lib/melissa_data/web_smart/response_processor.rb
|
|
136
137
|
- lib/melissa_data/web_smart/xml.rb
|
|
137
138
|
- melissa_data.gemspec
|
|
138
139
|
homepage: http://github.com/cometaworks/melissa_data
|
|
@@ -155,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
155
156
|
version: '0'
|
|
156
157
|
requirements: []
|
|
157
158
|
rubyforge_project:
|
|
158
|
-
rubygems_version: 2.4.
|
|
159
|
+
rubygems_version: 2.4.5.1
|
|
159
160
|
signing_key:
|
|
160
161
|
specification_version: 4
|
|
161
162
|
summary: A simple interface to Melissa Data's Web Smart Property API
|