smartystreets_ruby_sdk 0.0.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/{LICENSE.md → LICENSE.txt} +1 -1
- data/Makefile +17 -31
- data/README.md +6 -9
- data/Rakefile +2 -5
- data/examples/us_street_multiple_address_example.rb +15 -40
- data/examples/us_street_single_address_example.rb +8 -32
- data/examples/us_zipcode_multiple_lookup_example.rb +9 -21
- data/examples/us_zipcode_single_lookup_example.rb +6 -18
- data/lib/smartystreets_ruby_sdk/batch.rb +38 -45
- data/lib/smartystreets_ruby_sdk/core_client_builder.rb +56 -0
- data/lib/smartystreets_ruby_sdk/custom_header_sender.rb +8 -10
- data/lib/smartystreets_ruby_sdk/errors.rb +11 -21
- data/lib/smartystreets_ruby_sdk/exceptions.rb +16 -27
- data/lib/smartystreets_ruby_sdk/json_able.rb +11 -13
- data/lib/smartystreets_ruby_sdk/match_type.rb +5 -0
- data/lib/smartystreets_ruby_sdk/native_sender.rb +43 -65
- data/lib/smartystreets_ruby_sdk/native_serializer.rb +7 -9
- data/lib/smartystreets_ruby_sdk/request.rb +8 -11
- data/lib/smartystreets_ruby_sdk/response.rb +7 -9
- data/lib/smartystreets_ruby_sdk/retry_sender.rb +26 -32
- data/lib/smartystreets_ruby_sdk/shared_credentials.rb +9 -11
- data/lib/smartystreets_ruby_sdk/signing_sender.rb +9 -11
- data/lib/smartystreets_ruby_sdk/sleeper.rb +3 -5
- data/lib/smartystreets_ruby_sdk/static_credentials.rb +9 -11
- data/lib/smartystreets_ruby_sdk/status_code_sender.rb +29 -33
- data/lib/smartystreets_ruby_sdk/url_prefix_sender.rb +9 -11
- data/lib/smartystreets_ruby_sdk/us_street/analysis.rb +16 -21
- data/lib/smartystreets_ruby_sdk/us_street/candidate.rb +19 -23
- data/lib/smartystreets_ruby_sdk/us_street/client.rb +47 -60
- data/lib/smartystreets_ruby_sdk/us_street/client_builder.rb +15 -0
- data/lib/smartystreets_ruby_sdk/us_street/components.rb +27 -32
- data/lib/smartystreets_ruby_sdk/us_street/lookup.rb +20 -27
- data/lib/smartystreets_ruby_sdk/us_street/metadata.rb +23 -27
- data/lib/smartystreets_ruby_sdk/us_street.rb +3 -5
- data/lib/smartystreets_ruby_sdk/us_zipcode/city.rb +8 -14
- data/lib/smartystreets_ruby_sdk/us_zipcode/client.rb +36 -51
- data/lib/smartystreets_ruby_sdk/us_zipcode/client_builder.rb +15 -0
- data/lib/smartystreets_ruby_sdk/us_zipcode/lookup.rb +9 -16
- data/lib/smartystreets_ruby_sdk/us_zipcode/result.rb +30 -34
- data/lib/smartystreets_ruby_sdk/us_zipcode/zip_code.rb +14 -32
- data/lib/smartystreets_ruby_sdk/us_zipcode.rb +3 -5
- data/lib/smartystreets_ruby_sdk/version.rb +2 -2
- data/lib/smartystreets_ruby_sdk.rb +1 -30
- data/smartystreets_ruby_sdk.gemspec +12 -3
- metadata +15 -61
- data/.github/workflows/gem-publish.yml +0 -58
- data/CHANGELOG.md +0 -5
- data/Dockerfile +0 -10
- data/docker-compose.yml +0 -12
- data/examples/international_autocomplete_example.rb +0 -47
- data/examples/international_example.rb +0 -53
- data/examples/us_autocomplete_pro_example.rb +0 -56
- data/examples/us_extract_example.rb +0 -63
- data/examples/us_reverse_geo_example.rb +0 -47
- data/lib/smartystreets_ruby_sdk/client_builder.rb +0 -188
- data/lib/smartystreets_ruby_sdk/international_autocomplete/client.rb +0 -61
- data/lib/smartystreets_ruby_sdk/international_autocomplete/lookup.rb +0 -21
- data/lib/smartystreets_ruby_sdk/international_autocomplete/suggestion.rb +0 -16
- data/lib/smartystreets_ruby_sdk/international_street/analysis.rb +0 -17
- data/lib/smartystreets_ruby_sdk/international_street/candidate.rb +0 -23
- data/lib/smartystreets_ruby_sdk/international_street/changes.rb +0 -15
- data/lib/smartystreets_ruby_sdk/international_street/client.rb +0 -63
- data/lib/smartystreets_ruby_sdk/international_street/components.rb +0 -58
- data/lib/smartystreets_ruby_sdk/international_street/language_mode.rb +0 -9
- data/lib/smartystreets_ruby_sdk/international_street/lookup.rb +0 -82
- data/lib/smartystreets_ruby_sdk/international_street/metadata.rb +0 -17
- data/lib/smartystreets_ruby_sdk/international_street/rootlevel.rb +0 -25
- data/lib/smartystreets_ruby_sdk/international_street.rb +0 -12
- data/lib/smartystreets_ruby_sdk/license_sender.rb +0 -15
- data/lib/smartystreets_ruby_sdk/logger.rb +0 -7
- data/lib/smartystreets_ruby_sdk/proxy.rb +0 -16
- data/lib/smartystreets_ruby_sdk/us_autocomplete/client.rb +0 -72
- data/lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb +0 -9
- data/lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb +0 -38
- data/lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb +0 -16
- data/lib/smartystreets_ruby_sdk/us_autocomplete.rb +0 -9
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/client.rb +0 -78
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/geolocation_type.rb +0 -8
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/lookup.rb +0 -63
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/suggestion.rb +0 -18
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro.rb +0 -10
- data/lib/smartystreets_ruby_sdk/us_extract/address.rb +0 -24
- data/lib/smartystreets_ruby_sdk/us_extract/client.rb +0 -49
- data/lib/smartystreets_ruby_sdk/us_extract/lookup.rb +0 -22
- data/lib/smartystreets_ruby_sdk/us_extract/metadata.rb +0 -17
- data/lib/smartystreets_ruby_sdk/us_extract/result.rb +0 -21
- data/lib/smartystreets_ruby_sdk/us_extract.rb +0 -10
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/address.rb +0 -16
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/client.rb +0 -38
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/coordinate.rb +0 -25
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/lookup.rb +0 -21
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/result.rb +0 -20
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/us_reverse_geo_response.rb +0 -17
- data/lib/smartystreets_ruby_sdk/us_reverse_geo.rb +0 -12
- data/lib/smartystreets_ruby_sdk/us_street/match_type.rb +0 -10
- data/lib/smartystreets_ruby_sdk/us_zipcode/alternate_county.rb +0 -15
- data/ruby-sdk-demo.json +0 -354
@@ -1,72 +0,0 @@
|
|
1
|
-
require_relative '../request'
|
2
|
-
require_relative '../exceptions'
|
3
|
-
require_relative 'geolocation_type'
|
4
|
-
require_relative 'suggestion'
|
5
|
-
|
6
|
-
module SmartyStreets
|
7
|
-
module USAutocomplete
|
8
|
-
# It is recommended to instantiate this class using ClientBuilder.build_us_autocomplete_api_client
|
9
|
-
class Client
|
10
|
-
def initialize(sender, serializer)
|
11
|
-
@sender = sender
|
12
|
-
@serializer = serializer
|
13
|
-
end
|
14
|
-
|
15
|
-
# Sends a Lookup object to the US Autocomplete API and stores the result in the Lookup's result field.
|
16
|
-
def send(lookup)
|
17
|
-
if not lookup or not lookup.prefix
|
18
|
-
raise SmartyStreets::SmartyError, 'Send() must be passed a Lookup with the prefix field set.'
|
19
|
-
end
|
20
|
-
|
21
|
-
request = build_request(lookup)
|
22
|
-
|
23
|
-
response = @sender.send(request)
|
24
|
-
|
25
|
-
raise response.error if response.error
|
26
|
-
|
27
|
-
result = @serializer.deserialize(response.payload)
|
28
|
-
suggestions = convert_suggestions(result.fetch('suggestions', []))
|
29
|
-
lookup.result = suggestions
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
def build_request(lookup)
|
34
|
-
request = Request.new
|
35
|
-
|
36
|
-
add_parameter(request, 'prefix', lookup.prefix)
|
37
|
-
add_parameter(request, 'suggestions', lookup.max_suggestions.to_s)
|
38
|
-
add_parameter(request, 'city_filter', build_filter_string(lookup.city_filter))
|
39
|
-
add_parameter(request, 'state_filter', build_filter_string(lookup.state_filter))
|
40
|
-
add_parameter(request, 'prefer', build_filter_string(lookup.prefer))
|
41
|
-
add_parameter(request, 'prefer_ratio', lookup.prefer_ratio.to_s)
|
42
|
-
if lookup.geolocate_type != GeolocationType::NONE
|
43
|
-
request.parameters['geolocate'] = 'true'
|
44
|
-
request.parameters['geolocate_precision'] = lookup.geolocate_type
|
45
|
-
else
|
46
|
-
request.parameters['geolocate'] = 'false'
|
47
|
-
end
|
48
|
-
|
49
|
-
request
|
50
|
-
end
|
51
|
-
|
52
|
-
def build_filter_string(filter_list)
|
53
|
-
filter_list ? filter_list.join(',') : nil
|
54
|
-
end
|
55
|
-
|
56
|
-
def convert_suggestions(suggestion_hashes)
|
57
|
-
converted_suggestions = []
|
58
|
-
return converted_suggestions if suggestion_hashes.nil?
|
59
|
-
|
60
|
-
suggestion_hashes.each do |suggestion|
|
61
|
-
converted_suggestions.push(USAutocomplete::Suggestion.new(suggestion))
|
62
|
-
end
|
63
|
-
|
64
|
-
converted_suggestions
|
65
|
-
end
|
66
|
-
|
67
|
-
def add_parameter(request, key, value)
|
68
|
-
request.parameters[key] = value unless value.nil? or value.empty?
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require_relative '../json_able'
|
2
|
-
|
3
|
-
module SmartyStreets
|
4
|
-
module USAutocomplete
|
5
|
-
# In addition to holding all of the input data for this lookup, this class also will contain the result
|
6
|
-
# of the lookup after it comes back from the API.
|
7
|
-
#
|
8
|
-
# See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-request-input-fields"
|
9
|
-
class Lookup < JSONAble
|
10
|
-
|
11
|
-
attr_accessor :result, :prefix, :state_filter, :prefer, :prefer_ratio, :max_suggestions, :geolocate_type, :city_filter
|
12
|
-
|
13
|
-
def initialize(prefix=nil, suggestions=nil, city_filter=nil, state_filter=nil,
|
14
|
-
prefer=nil, prefer_ratio=nil, geolocate_type=nil)
|
15
|
-
@result = []
|
16
|
-
@prefix = prefix
|
17
|
-
@max_suggestions = suggestions
|
18
|
-
@city_filter = city_filter ? city_filter : []
|
19
|
-
@state_filter = state_filter ? state_filter : []
|
20
|
-
@prefer = prefer ? prefer : []
|
21
|
-
@prefer_ratio = prefer_ratio
|
22
|
-
@geolocate_type = geolocate_type
|
23
|
-
end
|
24
|
-
|
25
|
-
def add_city_filter(city)
|
26
|
-
@city_filter.push(city)
|
27
|
-
end
|
28
|
-
|
29
|
-
def add_state_filter(state)
|
30
|
-
@state_filter.push(state)
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_prefer(prefer)
|
34
|
-
@prefer.push(prefer)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USAutocomplete
|
3
|
-
# See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-response"
|
4
|
-
class Suggestion
|
5
|
-
|
6
|
-
attr_reader :text, :street_line, :state, :city
|
7
|
-
|
8
|
-
def initialize(obj)
|
9
|
-
@text = obj.fetch('text', nil)
|
10
|
-
@street_line = obj.fetch('street_line', nil)
|
11
|
-
@city = obj.fetch('city', nil)
|
12
|
-
@state = obj.fetch('state', nil)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require_relative '../request'
|
2
|
-
require_relative '../exceptions'
|
3
|
-
require_relative 'geolocation_type'
|
4
|
-
require_relative 'suggestion'
|
5
|
-
|
6
|
-
module SmartyStreets
|
7
|
-
module USAutocompletePro
|
8
|
-
# It is recommended to instantiate this class using ClientBuilder.build_us_autocomplete_pro_api_client
|
9
|
-
class Client
|
10
|
-
def initialize(sender, serializer)
|
11
|
-
@sender = sender
|
12
|
-
@serializer = serializer
|
13
|
-
end
|
14
|
-
|
15
|
-
# Sends a Lookup object to the US Autocomplete Pro API and stores the result in the Lookup's result field.
|
16
|
-
def send(lookup)
|
17
|
-
if not lookup or not lookup.search
|
18
|
-
raise SmartyStreets::SmartyError, 'Send() must be passed a Lookup with the prefix field set.'
|
19
|
-
end
|
20
|
-
|
21
|
-
request = build_request(lookup)
|
22
|
-
|
23
|
-
response = @sender.send(request)
|
24
|
-
|
25
|
-
raise response.error if response.error
|
26
|
-
|
27
|
-
result = @serializer.deserialize(response.payload)
|
28
|
-
suggestions = convert_suggestions(result.fetch('suggestions', []))
|
29
|
-
lookup.result = suggestions
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
def build_request(lookup)
|
34
|
-
request = Request.new
|
35
|
-
|
36
|
-
add_parameter(request, 'search', lookup.search)
|
37
|
-
add_parameter(request, 'max_results', lookup.max_results.to_s)
|
38
|
-
add_parameter(request, 'include_only_cities', build_filter_string(lookup.city_filter))
|
39
|
-
add_parameter(request, 'include_only_states', build_filter_string(lookup.state_filter))
|
40
|
-
add_parameter(request, 'include_only_zip_codes', build_filter_string(lookup.zip_filter))
|
41
|
-
add_parameter(request, 'exclude_states', build_filter_string(lookup.exclude_states))
|
42
|
-
add_parameter(request, 'prefer_cities', build_filter_string(lookup.prefer_cities))
|
43
|
-
add_parameter(request, 'prefer_states', build_filter_string(lookup.prefer_states))
|
44
|
-
add_parameter(request, 'prefer_zip_codes', build_filter_string(lookup.prefer_zip_codes))
|
45
|
-
add_parameter(request, 'prefer_ratio', lookup.prefer_ratio.to_s)
|
46
|
-
add_parameter(request, 'source', lookup.source)
|
47
|
-
if lookup.prefer_zip_codes or lookup.zip_filter
|
48
|
-
request.parameters['prefer_geolocation'] = GeolocationType::NONE
|
49
|
-
else
|
50
|
-
add_parameter(request, 'prefer_geolocation', lookup.prefer_geolocation)
|
51
|
-
end
|
52
|
-
add_parameter(request, 'selected', lookup.selected)
|
53
|
-
|
54
|
-
request
|
55
|
-
end
|
56
|
-
|
57
|
-
def build_filter_string(filter_list)
|
58
|
-
filter_list ? filter_list.join(';') : nil
|
59
|
-
end
|
60
|
-
|
61
|
-
def convert_suggestions(suggestion_hashes)
|
62
|
-
converted_suggestions = []
|
63
|
-
return converted_suggestions if suggestion_hashes.nil?
|
64
|
-
|
65
|
-
suggestion_hashes.each do |suggestion|
|
66
|
-
converted_suggestions.push(USAutocompletePro::Suggestion.new(suggestion))
|
67
|
-
end
|
68
|
-
|
69
|
-
converted_suggestions
|
70
|
-
end
|
71
|
-
|
72
|
-
def add_parameter(request, key, value)
|
73
|
-
request.parameters[key] = value unless value.nil? or value.empty?
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require_relative '../json_able'
|
2
|
-
|
3
|
-
module SmartyStreets
|
4
|
-
module USAutocompletePro
|
5
|
-
# In addition to holding all of the input data for this lookup, this class also will contain the result
|
6
|
-
# of the lookup after it comes back from the API.
|
7
|
-
#
|
8
|
-
# See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-request-input-fields"
|
9
|
-
class Lookup < JSONAble
|
10
|
-
|
11
|
-
attr_accessor :result, :search, :max_results, :city_filter, :state_filter, :zip_filter,
|
12
|
-
:exclude_states, :prefer_cities, :prefer_states, :prefer_zip_codes, :prefer_ratio,
|
13
|
-
:prefer_geolocation, :selected, :source
|
14
|
-
|
15
|
-
def initialize(search=nil, max_results=nil, city_filter=nil, state_filter=nil, zip_filter=nil,
|
16
|
-
exclude_states=nil, prefer_cities=nil, prefer_states=nil, prefer_zips=nil, prefer_ratio=nil,
|
17
|
-
prefer_geolocation=nil, selected=nil, source=nil)
|
18
|
-
@result = []
|
19
|
-
@search = search
|
20
|
-
@max_results = max_results
|
21
|
-
@city_filter = city_filter ? city_filter : []
|
22
|
-
@state_filter = state_filter ? state_filter : []
|
23
|
-
@zip_filter = zip_filter ? zip_filter : []
|
24
|
-
@exclude_states = exclude_states ? exclude_states : []
|
25
|
-
@prefer_cities = prefer_cities ? prefer_cities : []
|
26
|
-
@prefer_states = prefer_states ? prefer_states : []
|
27
|
-
@prefer_zip_codes = prefer_zips ? prefer_zips : []
|
28
|
-
@prefer_ratio = prefer_ratio
|
29
|
-
@prefer_geolocation = prefer_geolocation
|
30
|
-
@selected = selected
|
31
|
-
@source = source
|
32
|
-
end
|
33
|
-
|
34
|
-
def add_city_filter(city)
|
35
|
-
@city_filter.push(city)
|
36
|
-
end
|
37
|
-
|
38
|
-
def add_state_filter(state)
|
39
|
-
@state_filter.push(state)
|
40
|
-
end
|
41
|
-
|
42
|
-
def add_zip_filter(zip)
|
43
|
-
@zip_filter.push(zip)
|
44
|
-
end
|
45
|
-
|
46
|
-
def add_state_exclusion(state)
|
47
|
-
@exclude_states.push(state)
|
48
|
-
end
|
49
|
-
|
50
|
-
def add_preferred_city(city)
|
51
|
-
@prefer_cities.push(city)
|
52
|
-
end
|
53
|
-
|
54
|
-
def add_preferred_state(state)
|
55
|
-
@prefer_states.push(state)
|
56
|
-
end
|
57
|
-
|
58
|
-
def add_preferred_zip(zip)
|
59
|
-
@prefer_zip_codes.push(zip)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USAutocompletePro
|
3
|
-
# See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-response"
|
4
|
-
class Suggestion
|
5
|
-
|
6
|
-
attr_reader :street_line, :secondary, :city, :state, :zipcode, :entries
|
7
|
-
|
8
|
-
def initialize(obj)
|
9
|
-
@street_line = obj.fetch('street_line', nil)
|
10
|
-
@secondary = obj.fetch('secondary', nil)
|
11
|
-
@city = obj.fetch('city', nil)
|
12
|
-
@state = obj.fetch('state', nil)
|
13
|
-
@zipcode = obj.fetch('zipcode', nil)
|
14
|
-
@entries = obj.fetch('entries', 0)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require_relative './us_autocomplete_pro/lookup'
|
2
|
-
require_relative './us_autocomplete_pro/geolocation_type'
|
3
|
-
require_relative './us_autocomplete_pro/suggestion'
|
4
|
-
require_relative './us_autocomplete_pro/client'
|
5
|
-
|
6
|
-
module SmartyStreets
|
7
|
-
module USAutocompletePro
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require_relative '../us_street/candidate'
|
2
|
-
|
3
|
-
module SmartyStreets
|
4
|
-
module USExtract
|
5
|
-
# See "https://smartystreets.com/docs/cloud/us-extract-api#http-response-status"
|
6
|
-
class Address
|
7
|
-
attr_reader :text, :start, :verified, :end, :line, :candidates
|
8
|
-
|
9
|
-
def initialize(obj)
|
10
|
-
@text = obj['text']
|
11
|
-
@verified = obj['verified']
|
12
|
-
@line = obj['line']
|
13
|
-
@start = obj['start']
|
14
|
-
@end = obj['end']
|
15
|
-
candidates = obj.fetch('api_output', [])
|
16
|
-
@candidates = []
|
17
|
-
|
18
|
-
candidates.each {|candidate|
|
19
|
-
@candidates.push(USStreet::Candidate.new(candidate))
|
20
|
-
}
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require_relative '../request'
|
2
|
-
require_relative '../exceptions'
|
3
|
-
require_relative 'result'
|
4
|
-
|
5
|
-
module SmartyStreets
|
6
|
-
module USExtract
|
7
|
-
# It is recommended to instantiate this class using ClientBuilder.build_us_extract_api_client()
|
8
|
-
class Client
|
9
|
-
def initialize(sender, serializer)
|
10
|
-
@sender = sender
|
11
|
-
@serializer = serializer
|
12
|
-
end
|
13
|
-
|
14
|
-
# Sends a Lookup object to the US Extract Code API and stores the result in the Lookup's result field.
|
15
|
-
# It also returns the result directly.
|
16
|
-
def send(lookup)
|
17
|
-
if lookup.nil? or lookup.text.nil? or not lookup.text.is_a? String or lookup.text.empty?
|
18
|
-
raise SmartyError, 'Client.send() requires a Lookup with the "text" field set'
|
19
|
-
end
|
20
|
-
|
21
|
-
request = build_request(lookup)
|
22
|
-
response = @sender.send(request)
|
23
|
-
raise response.error if response.error
|
24
|
-
result = USExtract::Result.new(@serializer.deserialize(response.payload))
|
25
|
-
|
26
|
-
lookup.result = result
|
27
|
-
end
|
28
|
-
|
29
|
-
def build_request(lookup)
|
30
|
-
request = Request.new
|
31
|
-
request.content_type = 'text/plain'
|
32
|
-
request.payload = lookup.text
|
33
|
-
|
34
|
-
add_parameter(request, 'html', lookup.html.to_s)
|
35
|
-
add_parameter(request, 'aggressive', lookup.aggressive.to_s)
|
36
|
-
add_parameter(request, 'addr_line_breaks', lookup.addresses_have_line_breaks.to_s)
|
37
|
-
add_parameter(request, 'addr_per_line', lookup.addresses_per_line.to_s)
|
38
|
-
|
39
|
-
request
|
40
|
-
end
|
41
|
-
|
42
|
-
def add_parameter(request, key, value)
|
43
|
-
if value and not value.empty?
|
44
|
-
request.parameters[key] = value
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative '../json_able'
|
2
|
-
|
3
|
-
module SmartyStreets
|
4
|
-
module USExtract
|
5
|
-
# In addition to holding all of the input data for this lookup, this class also will contain the result
|
6
|
-
# of the lookup after it comes back from the API.
|
7
|
-
#
|
8
|
-
# See "https://smartystreets.com/docs/cloud/us-extract-api#http-request-input-fields"
|
9
|
-
class Lookup < JSONAble
|
10
|
-
attr_accessor :text, :result, :aggressive, :addresses_per_line, :html, :addresses_have_line_breaks
|
11
|
-
|
12
|
-
def initialize(text=nil, html=nil, aggressive=nil, addresses_have_line_breaks=nil, addresses_per_line=nil)
|
13
|
-
@text = text
|
14
|
-
@html = html
|
15
|
-
@aggressive = aggressive
|
16
|
-
@addresses_have_line_breaks = addresses_have_line_breaks
|
17
|
-
@addresses_per_line = addresses_per_line
|
18
|
-
@result = nil
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USExtract
|
3
|
-
# See "https://smartystreets.com/docs/cloud/us-extract-api#http-response-status"
|
4
|
-
class Metadata
|
5
|
-
attr_reader :unicode, :lines, :verified_count, :character_count, :bytes, :address_count
|
6
|
-
|
7
|
-
def initialize(obj)
|
8
|
-
@lines = obj['lines']
|
9
|
-
@unicode = obj['unicode']
|
10
|
-
@address_count = obj['address_count']
|
11
|
-
@verified_count = obj['verified_count']
|
12
|
-
@bytes = obj['bytes']
|
13
|
-
@character_count = obj['character_count']
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require_relative './address'
|
2
|
-
require_relative './metadata'
|
3
|
-
|
4
|
-
module SmartyStreets
|
5
|
-
module USExtract
|
6
|
-
# See "https://smartystreets.com/docs/cloud/us-extract-api#http-response-status"
|
7
|
-
class Result
|
8
|
-
attr_reader :metadata, :addresses
|
9
|
-
|
10
|
-
def initialize(obj)
|
11
|
-
@metadata = USExtract::Metadata.new(obj.fetch('meta', {}))
|
12
|
-
addresses = obj.fetch('addresses', [])
|
13
|
-
@addresses = []
|
14
|
-
|
15
|
-
addresses.each {|address|
|
16
|
-
@addresses.push(SmartyStreets::USExtract::Address.new(address))
|
17
|
-
}
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require_relative './us_extract/lookup'
|
2
|
-
require_relative './us_extract/address'
|
3
|
-
require_relative './us_extract/metadata'
|
4
|
-
require_relative './us_extract/result'
|
5
|
-
require_relative './us_extract/client'
|
6
|
-
|
7
|
-
module SmartyStreets
|
8
|
-
module USExtract
|
9
|
-
end
|
10
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USReverseGeo
|
3
|
-
# See "https://smartystreets.com/docs/cloud/us-reverse-geo-api#address"
|
4
|
-
class Address
|
5
|
-
attr_reader :street, :city, :state_abbreviation, :zipcode
|
6
|
-
|
7
|
-
def initialize(obj)
|
8
|
-
@street = obj['street']
|
9
|
-
@city = obj['city']
|
10
|
-
@state_abbreviation = obj['state_abbreviation']
|
11
|
-
@zipcode = obj['zipcode']
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require_relative '../request'
|
2
|
-
require_relative 'us_reverse_geo_response'
|
3
|
-
|
4
|
-
module SmartyStreets
|
5
|
-
module USReverseGeo
|
6
|
-
# It is recommended to instantiate this class using ClientBuilder.build_us_reverse_geo_api_client()
|
7
|
-
class Client
|
8
|
-
def initialize(sender, serializer)
|
9
|
-
@sender = sender
|
10
|
-
@serializer = serializer
|
11
|
-
end
|
12
|
-
|
13
|
-
# Sends a Lookup object to the US Reverse Geo API and stores the result in the Lookup's response field.
|
14
|
-
def send(lookup)
|
15
|
-
request = build_request(lookup)
|
16
|
-
|
17
|
-
response = @sender.send(request)
|
18
|
-
|
19
|
-
raise response.error if response.error
|
20
|
-
|
21
|
-
lookup.response = Response.new(@serializer.deserialize(response.payload))
|
22
|
-
end
|
23
|
-
|
24
|
-
def build_request(lookup)
|
25
|
-
request = SmartyStreets::Request.new
|
26
|
-
|
27
|
-
add_parameter(request, 'latitude', lookup.latitude)
|
28
|
-
add_parameter(request, 'longitude', lookup.longitude)
|
29
|
-
|
30
|
-
request
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_parameter(request, key, value)
|
34
|
-
request.parameters[key] = value unless value.nil? or value.empty?
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USReverseGeo
|
3
|
-
# See "https://smartystreets.com/docs/cloud/us-reverse-geo-api#coordinate"
|
4
|
-
class Coordinate
|
5
|
-
attr_reader :latitude, :longitude, :accuracy, :license
|
6
|
-
|
7
|
-
def initialize(obj)
|
8
|
-
@latitude = obj.fetch('latitude', nil)
|
9
|
-
@longitude = obj.fetch('longitude', nil)
|
10
|
-
@accuracy = obj.fetch('accuracy', nil)
|
11
|
-
@license = obj.fetch('license', nil)
|
12
|
-
end
|
13
|
-
|
14
|
-
def get_license()
|
15
|
-
case @license
|
16
|
-
when 1
|
17
|
-
return "SmartyStreets Proprietary"
|
18
|
-
else
|
19
|
-
return "SmartyStreets"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USReverseGeo
|
3
|
-
# In addition to holding all of the input data for this lookup, this class also will contain the
|
4
|
-
# result of the lookup after it comes back from the API.
|
5
|
-
#
|
6
|
-
# Note: Lookups must have certain required fields set with non-blank values.
|
7
|
-
# These can be found at the URL below.
|
8
|
-
#
|
9
|
-
# See "https://smartystreets.com/docs/cloud/us-reverse-geo-api#http-request-input-fields"
|
10
|
-
|
11
|
-
class Lookup
|
12
|
-
|
13
|
-
attr_accessor :latitude, :longitude, :response
|
14
|
-
|
15
|
-
def initialize(latitude, longitude)
|
16
|
-
@latitude = sprintf('%.8f', latitude)
|
17
|
-
@longitude = sprintf('%.8f', longitude)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require_relative 'coordinate'
|
2
|
-
require_relative 'address'
|
3
|
-
|
4
|
-
module SmartyStreets
|
5
|
-
module USReverseGeo
|
6
|
-
# A result is a possible match for an geocode that was submitted. A lookup can have multiple results.
|
7
|
-
#
|
8
|
-
# See "https://smartystreets.com/docs/cloud/us-reverse-geo-api#result"
|
9
|
-
class Result
|
10
|
-
attr_reader :address, :coordinate, :distance
|
11
|
-
|
12
|
-
def initialize(obj)
|
13
|
-
@address = Address.new(obj.fetch('address', {}))
|
14
|
-
@coordinate = Coordinate.new(obj.fetch('coordinate', {}))
|
15
|
-
@distance = obj['distance']
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require_relative 'result'
|
2
|
-
|
3
|
-
module SmartyStreets
|
4
|
-
module USReverseGeo
|
5
|
-
class Response
|
6
|
-
attr_reader :results
|
7
|
-
|
8
|
-
def initialize(obj)
|
9
|
-
@results = []
|
10
|
-
|
11
|
-
obj['results'].each do |result|
|
12
|
-
@results.push(Result.new(result))
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require_relative './us_reverse_geo/address'
|
2
|
-
require_relative './us_reverse_geo/client'
|
3
|
-
require_relative './us_reverse_geo/coordinate'
|
4
|
-
require_relative './us_reverse_geo/lookup'
|
5
|
-
require_relative './us_reverse_geo/result'
|
6
|
-
require_relative './us_reverse_geo/us_reverse_geo_response'
|
7
|
-
|
8
|
-
module SmartyStreets
|
9
|
-
module USReverseGeo
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module SmartyStreets
|
2
|
-
module USZipcode
|
3
|
-
# See "https://smartystreets.com/docs/cloud/us-zipcode-api#zipcodes"
|
4
|
-
class AlternateCounty
|
5
|
-
attr_reader :state_abbreviation, :state, :county_name, :county_fips
|
6
|
-
|
7
|
-
def initialize(obj)
|
8
|
-
@county_fips = obj.fetch('county_fips', nil)
|
9
|
-
@county_name = obj.fetch('county_name', nil)
|
10
|
-
@state_abbreviation = obj.fetch('state_abbreviation', nil)
|
11
|
-
@state = obj.fetch('state', nil)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|