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,19 +1,17 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
hash[var.to_s.delete('@')] = instance_variable_get var
|
9
|
-
end
|
10
|
-
hash.to_json
|
3
|
+
class JSONAble
|
4
|
+
def to_json(options={})
|
5
|
+
hash = {}
|
6
|
+
self.instance_variables.each do |var|
|
7
|
+
hash[var.to_s.delete('@')] = self.instance_variable_get var
|
11
8
|
end
|
9
|
+
hash.to_json
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
12
|
+
def from_json!(string)
|
13
|
+
JSON.load(string).each do |var, val|
|
14
|
+
self.instance_variable_set var, val
|
17
15
|
end
|
18
16
|
end
|
19
|
-
end
|
17
|
+
end
|
@@ -2,84 +2,62 @@ require 'net/http'
|
|
2
2
|
require_relative 'version'
|
3
3
|
require_relative 'response'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@proxy = proxy
|
10
|
-
@debug = debug
|
11
|
-
end
|
12
|
-
|
13
|
-
def send(smarty_request)
|
14
|
-
request = self.class.build_request(smarty_request)
|
15
|
-
|
16
|
-
begin
|
17
|
-
http = build_http(request)
|
18
|
-
http.use_ssl = true
|
19
|
-
http.ssl_version = :TLSv1_2
|
20
|
-
http.open_timeout = @max_timeout
|
21
|
-
http.read_timeout = @max_timeout
|
22
|
-
|
23
|
-
response = http.request(request)
|
24
|
-
|
25
|
-
http.finish if http.started?
|
26
|
-
rescue StandardError => err
|
27
|
-
return Response.new(nil, nil, err)
|
28
|
-
end
|
5
|
+
class NativeSender
|
6
|
+
def initialize(max_timeout=10000)
|
7
|
+
@max_timeout = max_timeout
|
8
|
+
end
|
29
9
|
|
30
|
-
|
31
|
-
|
10
|
+
def send(smarty_request)
|
11
|
+
request = self.class.build_request(smarty_request)
|
12
|
+
uri = request.uri
|
32
13
|
|
33
|
-
|
34
|
-
|
14
|
+
begin
|
15
|
+
http = Net::HTTP.new(uri.hostname, uri.port)
|
16
|
+
http.use_ssl = true
|
17
|
+
http.ssl_version = :TLSv1_2
|
18
|
+
http.read_timeout = @max_timeout
|
35
19
|
|
36
|
-
|
37
|
-
request = Net::HTTP::Get.new(URI.parse("#{smarty_request.url_prefix}?#{query}"))
|
38
|
-
else
|
39
|
-
request = Net::HTTP::Post.new(URI.parse("#{smarty_request.url_prefix}?#{query}"))
|
40
|
-
end
|
20
|
+
response = http.request(request)
|
41
21
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
request['Referer'] = smarty_request.referer unless smarty_request.referer.nil?
|
46
|
-
set_custom_headers(smarty_request.headers, request)
|
47
|
-
request
|
22
|
+
http.finish if http.started?
|
23
|
+
rescue Exception => err
|
24
|
+
return Response.new(nil, nil, err)
|
48
25
|
end
|
49
26
|
|
50
|
-
|
51
|
-
|
52
|
-
end
|
27
|
+
build_smarty_response(response)
|
28
|
+
end
|
53
29
|
|
54
|
-
|
55
|
-
|
30
|
+
def self.build_request(smarty_request)
|
31
|
+
query = create_query(smarty_request)
|
32
|
+
request = Net::HTTP::Post.new(URI.parse("#{smarty_request.url_prefix}?#{query}"))
|
33
|
+
request.content_type = 'application/json'
|
34
|
+
request.body = smarty_request.payload
|
35
|
+
request['User-Agent'] = "smartystreets (sdk:ruby@#{SmartystreetsRubySdk::VERSION})"
|
36
|
+
request['Referer'] = smarty_request.referer if smarty_request.referer != nil
|
37
|
+
set_custom_headers(smarty_request.headers, request)
|
38
|
+
request
|
39
|
+
end
|
56
40
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
http = Net::HTTP.new(uri.hostname, uri.port, @proxy.host,
|
61
|
-
@proxy.port, @proxy.username, @proxy.password)
|
62
|
-
end
|
41
|
+
def build_smarty_response(native_response)
|
42
|
+
Response.new(native_response.body, native_response.code)
|
43
|
+
end
|
63
44
|
|
64
|
-
|
45
|
+
def self.create_query(smarty_request)
|
46
|
+
query_string = ''
|
65
47
|
|
66
|
-
|
48
|
+
smarty_request.parameters.each do |key, value|
|
49
|
+
query_string.concat("&#{key}=#{value}")
|
67
50
|
end
|
68
51
|
|
69
|
-
|
70
|
-
|
71
|
-
|
52
|
+
query_string[0] = ''
|
53
|
+
query_string
|
54
|
+
end
|
72
55
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
request.add_field(key, value)
|
78
|
-
end
|
79
|
-
else
|
80
|
-
request.add_field(key, values)
|
81
|
-
end
|
56
|
+
def self.set_custom_headers(smarty_headers, request)
|
57
|
+
smarty_headers.each do |key, values|
|
58
|
+
values.each do |value|
|
59
|
+
request.add_field(key, value)
|
82
60
|
end
|
83
61
|
end
|
84
62
|
end
|
85
|
-
end
|
63
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
3
|
+
class NativeSerializer
|
4
|
+
def serialize(obj)
|
5
|
+
obj.to_json
|
6
|
+
end
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
end
|
8
|
+
def deserialize(payload)
|
9
|
+
JSON.load(payload)
|
12
10
|
end
|
13
|
-
end
|
11
|
+
end
|
@@ -1,14 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
attr_accessor :parameters, :payload, :url_prefix, :referer, :headers, :content_type
|
1
|
+
class Request
|
2
|
+
attr_accessor :parameters, :payload, :url_prefix, :referer, :headers
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
@content_type = 'application/json'
|
12
|
-
end
|
4
|
+
def initialize
|
5
|
+
@parameters = {}
|
6
|
+
@payload = nil
|
7
|
+
@url_prefix = nil
|
8
|
+
@referer = nil
|
9
|
+
@headers = {}
|
13
10
|
end
|
14
11
|
end
|
@@ -1,11 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
attr_accessor :payload, :status_code, :error
|
1
|
+
class Response
|
2
|
+
attr_accessor :payload, :status_code, :error
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
4
|
+
def initialize(payload, status_code, error=nil)
|
5
|
+
@payload = payload
|
6
|
+
@status_code = status_code
|
7
|
+
@error = error
|
10
8
|
end
|
11
|
-
end
|
9
|
+
end
|
@@ -1,39 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@sleeper = sleeper
|
11
|
-
@logger = logger
|
12
|
-
end
|
13
|
-
|
14
|
-
def send(request)
|
15
|
-
response = @inner.send(request)
|
16
|
-
|
17
|
-
(0..@max_retries-1).each do |i|
|
18
|
-
if response.status_code.to_i == STATUS_TOO_MANY_REQUESTS
|
19
|
-
backoff(5)
|
20
|
-
end
|
21
|
-
|
22
|
-
break if response.status_code.to_i < STATUS_INTERNAL_SERVER_ERROR
|
1
|
+
class RetrySender
|
2
|
+
MAX_BACKOFF_DURATION = 10
|
3
|
+
STATUS_OK = '200'
|
4
|
+
|
5
|
+
def initialize(max_retries, inner, sleeper)
|
6
|
+
@max_retries = max_retries
|
7
|
+
@inner = inner
|
8
|
+
@sleeper = sleeper
|
9
|
+
end
|
23
10
|
|
24
|
-
|
11
|
+
def send(request)
|
12
|
+
response = @inner.send(request)
|
25
13
|
|
26
|
-
|
14
|
+
(0..@max_retries-1).each { |i|
|
15
|
+
if response.status_code == STATUS_OK
|
16
|
+
break
|
27
17
|
end
|
28
18
|
|
29
|
-
|
30
|
-
|
19
|
+
backoff(i)
|
20
|
+
|
21
|
+
response = @inner.send(request)
|
22
|
+
}
|
23
|
+
|
24
|
+
response
|
25
|
+
end
|
31
26
|
|
32
|
-
|
33
|
-
|
27
|
+
def backoff(attempt)
|
28
|
+
backoff_duration = [attempt, MAX_BACKOFF_DURATION].min
|
34
29
|
|
35
|
-
|
36
|
-
|
37
|
-
end
|
30
|
+
puts("There was an error processing the request. Retrying in #{backoff_duration} seconds...")
|
31
|
+
@sleeper.sleep(backoff_duration)
|
38
32
|
end
|
39
|
-
end
|
33
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
1
|
+
class SharedCredentials
|
2
|
+
def initialize(id, host_name)
|
3
|
+
@id = id
|
4
|
+
@host_name = host_name
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
7
|
+
def sign(request)
|
8
|
+
request.parameters['auth-id'] = @id
|
9
|
+
request.referer = @host_name
|
12
10
|
end
|
13
|
-
end
|
11
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
1
|
+
class SigningSender
|
2
|
+
def initialize(signer, inner)
|
3
|
+
@signer = signer
|
4
|
+
@inner = inner
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
7
|
+
def send(request)
|
8
|
+
@signer.sign(request)
|
9
|
+
@inner.send(request)
|
12
10
|
end
|
13
|
-
end
|
11
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
1
|
+
class StaticCredentials
|
2
|
+
def initialize(auth_id, auth_token)
|
3
|
+
@auth_id = auth_id
|
4
|
+
@auth_token = auth_token
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
7
|
+
def sign(request)
|
8
|
+
request.parameters['auth-id'] = @auth_id
|
9
|
+
request.parameters['auth-token'] = @auth_token
|
12
10
|
end
|
13
|
-
end
|
11
|
+
end
|
@@ -1,41 +1,37 @@
|
|
1
1
|
require_relative 'exceptions'
|
2
2
|
require_relative 'errors'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
4
|
+
class StatusCodeSender
|
5
|
+
def initialize(inner)
|
6
|
+
@inner = inner
|
7
|
+
end
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
def send(request)
|
10
|
+
response = @inner.send(request)
|
12
11
|
|
13
|
-
|
12
|
+
assign_exception(response) if response.error == nil
|
14
13
|
|
15
|
-
|
16
|
-
|
14
|
+
response
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
nil
|
38
|
-
end
|
39
|
-
end
|
17
|
+
def assign_exception(response)
|
18
|
+
response.error = case response.status_code
|
19
|
+
when '401'
|
20
|
+
BadCredentialsError.new(BAD_CREDENTIALS)
|
21
|
+
when '402'
|
22
|
+
PaymentRequiredError.new(PAYMENT_REQUIRED)
|
23
|
+
when '413'
|
24
|
+
RequestEntityTooLargeError.new(REQUEST_ENTITY_TOO_LARGE)
|
25
|
+
when '400'
|
26
|
+
BadRequestError.new(BAD_REQUEST)
|
27
|
+
when '429'
|
28
|
+
TooManyRequestsError.new(TOO_MANY_REQUESTS)
|
29
|
+
when '500'
|
30
|
+
InternalServerError.new(INTERNAL_SERVER_ERROR)
|
31
|
+
when '503'
|
32
|
+
ServiceUnavailableError.new(SERVICE_UNAVAILABLE)
|
33
|
+
else
|
34
|
+
nil
|
35
|
+
end
|
40
36
|
end
|
41
|
-
end
|
37
|
+
end
|
@@ -1,14 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
1
|
+
class URLPrefixSender
|
2
|
+
def initialize(url_prefix, inner)
|
3
|
+
@url_prefix = url_prefix
|
4
|
+
@inner = inner
|
5
|
+
end
|
7
6
|
|
8
|
-
|
9
|
-
|
7
|
+
def send(request)
|
8
|
+
request.url_prefix = @url_prefix
|
10
9
|
|
11
|
-
|
12
|
-
end
|
10
|
+
@inner.send(request)
|
13
11
|
end
|
14
|
-
end
|
12
|
+
end
|
@@ -1,24 +1,19 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
attr_reader :lacs_link_code, :active, :footnotes, :lacs_link_indicator, :dpv_match_code, :is_suite_link_match,
|
6
|
-
:is_ews_match, :dpv_footnotes, :cmra, :vacant, :no_stat, :enhanced_match
|
1
|
+
module USStreet
|
2
|
+
class Analysis
|
3
|
+
attr_reader :lacs_link_code, :active, :footnotes, :lacs_link_indicator, :dpv_match_code, :is_suite_link_match,
|
4
|
+
:is_ews_match, :dpv_footnotes, :cmra, :vacant
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@is_suite_link_match = obj['suitelink_match']
|
20
|
-
@enhanced_match = obj['enhanced_match']
|
21
|
-
end
|
6
|
+
def initialize(obj)
|
7
|
+
@dpv_match_code = obj['dpv_match_code']
|
8
|
+
@dpv_footnotes = obj['dpv_footnotes']
|
9
|
+
@cmra = obj['dpv_cmra']
|
10
|
+
@vacant = obj['dpv_vacant']
|
11
|
+
@active = obj['active']
|
12
|
+
@is_ews_match = obj['ews_match']
|
13
|
+
@footnotes = obj['footnotes']
|
14
|
+
@lacs_link_code = obj['lacslink_code']
|
15
|
+
@lacs_link_indicator = obj['lacslink_indicator']
|
16
|
+
@is_suite_link_match = obj['suitelink_match']
|
22
17
|
end
|
23
18
|
end
|
24
|
-
end
|
19
|
+
end
|
@@ -1,27 +1,23 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
1
|
+
require_relative 'Components'
|
2
|
+
require_relative 'Metadata'
|
3
|
+
require_relative 'Analysis'
|
4
4
|
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
attr_reader :input_id, :input_index, :candidate_index, :addressee, :delivery_line_1, :delivery_line_2, :delivery_point_barcode,
|
10
|
-
:last_line, :metadata, :components, :analysis
|
5
|
+
module USStreet
|
6
|
+
class Candidate
|
7
|
+
attr_reader :input_index, :candidate_index, :addressee, :delivery_line_1, :delivery_line_2, :delivery_point_barcode,
|
8
|
+
:last_line, :metadata, :components, :analysis
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
@analysis = Analysis.new(obj.fetch('analysis', {}))
|
24
|
-
end
|
10
|
+
def initialize(obj)
|
11
|
+
@input_index = obj['input_index']
|
12
|
+
@candidate_index = obj['candidate_index']
|
13
|
+
@addressee = obj['addressee']
|
14
|
+
@delivery_line_1 = obj['delivery_line_1']
|
15
|
+
@delivery_line_2 = obj['delivery_line_2']
|
16
|
+
@last_line = obj['last_line']
|
17
|
+
@delivery_point_barcode = obj['delivery_point_barcode']
|
18
|
+
@components = Components.new(obj.fetch('components', {}))
|
19
|
+
@metadata = Metadata.new(obj.fetch('metadata', {}))
|
20
|
+
@analysis = Analysis.new(obj.fetch('analysis', {}))
|
25
21
|
end
|
26
22
|
end
|
27
|
-
end
|
23
|
+
end
|