smartystreets_ruby_sdk 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/gem-publish.yml +58 -0
  3. data/.gitignore +4 -0
  4. data/CHANGELOG.md +5 -0
  5. data/Dockerfile +10 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.md +202 -0
  8. data/Makefile +33 -0
  9. data/README.md +31 -0
  10. data/Rakefile +5 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/docker-compose.yml +12 -0
  14. data/examples/international_autocomplete_example.rb +47 -0
  15. data/examples/international_example.rb +53 -0
  16. data/examples/us_autocomplete_pro_example.rb +56 -0
  17. data/examples/us_extract_example.rb +63 -0
  18. data/examples/us_reverse_geo_example.rb +47 -0
  19. data/examples/us_street_multiple_address_example.rb +87 -0
  20. data/examples/us_street_single_address_example.rb +67 -0
  21. data/examples/us_zipcode_multiple_lookup_example.rb +80 -0
  22. data/examples/us_zipcode_single_lookup_example.rb +55 -0
  23. data/lib/smartystreets_ruby_sdk/batch.rb +59 -0
  24. data/lib/smartystreets_ruby_sdk/client_builder.rb +188 -0
  25. data/lib/smartystreets_ruby_sdk/custom_header_sender.rb +13 -0
  26. data/lib/smartystreets_ruby_sdk/errors.rb +27 -0
  27. data/lib/smartystreets_ruby_sdk/exceptions.rb +39 -0
  28. data/lib/smartystreets_ruby_sdk/international_autocomplete/client.rb +61 -0
  29. data/lib/smartystreets_ruby_sdk/international_autocomplete/lookup.rb +21 -0
  30. data/lib/smartystreets_ruby_sdk/international_autocomplete/suggestion.rb +16 -0
  31. data/lib/smartystreets_ruby_sdk/international_street/analysis.rb +17 -0
  32. data/lib/smartystreets_ruby_sdk/international_street/candidate.rb +23 -0
  33. data/lib/smartystreets_ruby_sdk/international_street/changes.rb +15 -0
  34. data/lib/smartystreets_ruby_sdk/international_street/client.rb +63 -0
  35. data/lib/smartystreets_ruby_sdk/international_street/components.rb +58 -0
  36. data/lib/smartystreets_ruby_sdk/international_street/language_mode.rb +9 -0
  37. data/lib/smartystreets_ruby_sdk/international_street/lookup.rb +82 -0
  38. data/lib/smartystreets_ruby_sdk/international_street/metadata.rb +17 -0
  39. data/lib/smartystreets_ruby_sdk/international_street/rootlevel.rb +25 -0
  40. data/lib/smartystreets_ruby_sdk/international_street.rb +12 -0
  41. data/lib/smartystreets_ruby_sdk/json_able.rb +19 -0
  42. data/lib/smartystreets_ruby_sdk/license_sender.rb +15 -0
  43. data/lib/smartystreets_ruby_sdk/logger.rb +7 -0
  44. data/lib/smartystreets_ruby_sdk/native_sender.rb +85 -0
  45. data/lib/smartystreets_ruby_sdk/native_serializer.rb +13 -0
  46. data/lib/smartystreets_ruby_sdk/proxy.rb +16 -0
  47. data/lib/smartystreets_ruby_sdk/request.rb +14 -0
  48. data/lib/smartystreets_ruby_sdk/response.rb +11 -0
  49. data/lib/smartystreets_ruby_sdk/retry_sender.rb +39 -0
  50. data/lib/smartystreets_ruby_sdk/shared_credentials.rb +13 -0
  51. data/lib/smartystreets_ruby_sdk/signing_sender.rb +13 -0
  52. data/lib/smartystreets_ruby_sdk/sleeper.rb +7 -0
  53. data/lib/smartystreets_ruby_sdk/static_credentials.rb +13 -0
  54. data/lib/smartystreets_ruby_sdk/status_code_sender.rb +41 -0
  55. data/lib/smartystreets_ruby_sdk/url_prefix_sender.rb +14 -0
  56. data/lib/smartystreets_ruby_sdk/us_autocomplete/client.rb +72 -0
  57. data/lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb +9 -0
  58. data/lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb +38 -0
  59. data/lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb +16 -0
  60. data/lib/smartystreets_ruby_sdk/us_autocomplete.rb +9 -0
  61. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/client.rb +78 -0
  62. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/geolocation_type.rb +8 -0
  63. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/lookup.rb +63 -0
  64. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/suggestion.rb +18 -0
  65. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro.rb +10 -0
  66. data/lib/smartystreets_ruby_sdk/us_extract/address.rb +24 -0
  67. data/lib/smartystreets_ruby_sdk/us_extract/client.rb +49 -0
  68. data/lib/smartystreets_ruby_sdk/us_extract/lookup.rb +22 -0
  69. data/lib/smartystreets_ruby_sdk/us_extract/metadata.rb +17 -0
  70. data/lib/smartystreets_ruby_sdk/us_extract/result.rb +21 -0
  71. data/lib/smartystreets_ruby_sdk/us_extract.rb +10 -0
  72. data/lib/smartystreets_ruby_sdk/us_reverse_geo/address.rb +16 -0
  73. data/lib/smartystreets_ruby_sdk/us_reverse_geo/client.rb +38 -0
  74. data/lib/smartystreets_ruby_sdk/us_reverse_geo/coordinate.rb +25 -0
  75. data/lib/smartystreets_ruby_sdk/us_reverse_geo/lookup.rb +21 -0
  76. data/lib/smartystreets_ruby_sdk/us_reverse_geo/result.rb +20 -0
  77. data/lib/smartystreets_ruby_sdk/us_reverse_geo/us_reverse_geo_response.rb +17 -0
  78. data/lib/smartystreets_ruby_sdk/us_reverse_geo.rb +12 -0
  79. data/lib/smartystreets_ruby_sdk/us_street/analysis.rb +24 -0
  80. data/lib/smartystreets_ruby_sdk/us_street/candidate.rb +27 -0
  81. data/lib/smartystreets_ruby_sdk/us_street/client.rb +78 -0
  82. data/lib/smartystreets_ruby_sdk/us_street/components.rb +35 -0
  83. data/lib/smartystreets_ruby_sdk/us_street/lookup.rb +32 -0
  84. data/lib/smartystreets_ruby_sdk/us_street/match_type.rb +10 -0
  85. data/lib/smartystreets_ruby_sdk/us_street/metadata.rb +30 -0
  86. data/lib/smartystreets_ruby_sdk/us_street.rb +12 -0
  87. data/lib/smartystreets_ruby_sdk/us_zipcode/alternate_county.rb +15 -0
  88. data/lib/smartystreets_ruby_sdk/us_zipcode/city.rb +16 -0
  89. data/lib/smartystreets_ruby_sdk/us_zipcode/client.rb +72 -0
  90. data/lib/smartystreets_ruby_sdk/us_zipcode/lookup.rb +21 -0
  91. data/lib/smartystreets_ruby_sdk/us_zipcode/result.rb +47 -0
  92. data/lib/smartystreets_ruby_sdk/us_zipcode/zip_code.rb +33 -0
  93. data/lib/smartystreets_ruby_sdk/us_zipcode.rb +11 -0
  94. data/lib/smartystreets_ruby_sdk/version.rb +3 -0
  95. data/lib/smartystreets_ruby_sdk.rb +33 -0
  96. data/ruby-sdk-demo.json +354 -0
  97. data/smartystreets_ruby_sdk.gemspec +26 -0
  98. metadata +201 -0
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,20 @@
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
+
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,12 @@
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
+
@@ -0,0 +1,24 @@
1
+ module SmartyStreets
2
+ module USStreet
3
+ # See "https://smartystreets.com/docs/cloud/us-street-api#analysis"
4
+ class Analysis
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
7
+
8
+ def initialize(obj)
9
+ @dpv_match_code = obj['dpv_match_code']
10
+ @dpv_footnotes = obj['dpv_footnotes']
11
+ @cmra = obj['dpv_cmra']
12
+ @vacant = obj['dpv_vacant']
13
+ @no_stat = obj['dpv_no_stat']
14
+ @active = obj['active']
15
+ @is_ews_match = obj['ews_match']
16
+ @footnotes = obj['footnotes']
17
+ @lacs_link_code = obj['lacslink_code']
18
+ @lacs_link_indicator = obj['lacslink_indicator']
19
+ @is_suite_link_match = obj['suitelink_match']
20
+ @enhanced_match = obj['enhanced_match']
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'components'
2
+ require_relative 'metadata'
3
+ require_relative 'analysis'
4
+
5
+ module SmartyStreets
6
+ module USStreet
7
+ # See "https://smartystreets.com/docs/cloud/us-street-api#metadata"
8
+ class Candidate
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
11
+
12
+ def initialize(obj)
13
+ @input_id = obj['input_id']
14
+ @input_index = obj['input_index']
15
+ @candidate_index = obj['candidate_index']
16
+ @addressee = obj['addressee']
17
+ @delivery_line_1 = obj['delivery_line_1']
18
+ @delivery_line_2 = obj['delivery_line_2']
19
+ @last_line = obj['last_line']
20
+ @delivery_point_barcode = obj['delivery_point_barcode']
21
+ @components = Components.new(obj.fetch('components', {}))
22
+ @metadata = Metadata.new(obj.fetch('metadata', {}))
23
+ @analysis = Analysis.new(obj.fetch('analysis', {}))
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,78 @@
1
+ require_relative '../batch'
2
+ require_relative '../request'
3
+ require_relative 'candidate'
4
+
5
+ module SmartyStreets
6
+ module USStreet
7
+ # It is recommended to instantiate this class using ClientBuilder.build_us_street_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 Street API and stores the result in the Lookup's result field.
15
+ def send_lookup(lookup)
16
+ batch = SmartyStreets::Batch.new
17
+ batch.add(lookup)
18
+ send_batch(batch)
19
+ end
20
+
21
+ # Sends a Batch object containing no more than 100 Lookup objects to the US Street API and stores the
22
+ # results in the result field of the Lookup object.
23
+ def send_batch(batch)
24
+ smarty_request = Request.new
25
+
26
+ return if batch.empty?
27
+
28
+ converted_lookups = remap_keys(batch.all_lookups)
29
+
30
+ if batch.size > 1
31
+ smarty_request.payload = @serializer.serialize(converted_lookups)
32
+ else
33
+ smarty_request.parameters = converted_lookups[0]
34
+ end
35
+
36
+ response = @sender.send(smarty_request)
37
+
38
+ raise response.error if response.error
39
+
40
+ candidates = @serializer.deserialize(response.payload)
41
+ candidates = [] if candidates.nil?
42
+
43
+ assign_candidates_to_lookups(batch, candidates)
44
+ end
45
+
46
+ def remap_keys(obj)
47
+ converted_obj = []
48
+ obj.each do |lookup|
49
+ converted_lookup = {}
50
+ lookup.candidates = 5 if lookup.match == "enhanced" && lookup.candidates == 0
51
+
52
+ converted_lookup['input_id'] = lookup.input_id
53
+ converted_lookup['street'] = lookup.street
54
+ converted_lookup['street2'] = lookup.street2
55
+ converted_lookup['secondary'] = lookup.secondary
56
+ converted_lookup['city'] = lookup.city
57
+ converted_lookup['state'] = lookup.state
58
+ converted_lookup['zipcode'] = lookup.zipcode
59
+ converted_lookup['lastline'] = lookup.lastline
60
+ converted_lookup['addressee'] = lookup.addressee
61
+ converted_lookup['urbanization'] = lookup.urbanization
62
+ converted_lookup['match'] = lookup.match
63
+ converted_lookup['candidates'] = lookup.candidates
64
+
65
+ converted_obj.push(converted_lookup)
66
+ end
67
+ converted_obj
68
+ end
69
+
70
+ def assign_candidates_to_lookups(batch, candidates)
71
+ candidates.each do |raw_candidate|
72
+ candidate = Candidate.new(raw_candidate)
73
+ batch[candidate.input_index].result.push(candidate)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,35 @@
1
+ module SmartyStreets
2
+ module USStreet
3
+ # This class contains the matched address broken down into its fundamental pieces.
4
+ #
5
+ # See "https://smartystreets.com/docs/cloud/us-street-api#components"
6
+ class Components
7
+ attr_reader :street_postdirection, :delivery_point_check_digit, :secondary_designator, :secondary_number, :zipcode,
8
+ :pmb_number, :state_abbreviation, :extra_secondary_designator, :urbanization, :street_name, :city_name,
9
+ :default_city_name, :street_suffix, :primary_number, :plus4_code, :street_predirection, :pmb_designator,
10
+ :extra_secondary_number, :delivery_point
11
+
12
+ def initialize(obj)
13
+ @urbanization = obj['urbanization']
14
+ @primary_number = obj['primary_number']
15
+ @street_name = obj['street_name']
16
+ @street_predirection = obj['street_predirection']
17
+ @street_postdirection = obj['street_postdirection']
18
+ @street_suffix = obj['street_suffix']
19
+ @secondary_number = obj['secondary_number']
20
+ @secondary_designator = obj['secondary_designator']
21
+ @extra_secondary_number = obj['extra_secondary_number']
22
+ @extra_secondary_designator = obj['extra_secondary_designator']
23
+ @pmb_designator = obj['pmb_designator']
24
+ @pmb_number = obj['pmb_number']
25
+ @city_name = obj['city_name']
26
+ @default_city_name = obj['default_city_name']
27
+ @state_abbreviation = obj['state_abbreviation']
28
+ @zipcode = obj['zipcode']
29
+ @plus4_code = obj['plus4_code']
30
+ @delivery_point = obj['delivery_point']
31
+ @delivery_point_check_digit = obj['delivery_point_check_digit']
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../json_able'
2
+ module SmartyStreets
3
+ module USStreet
4
+ # In addition to holding all of the input data for this lookup, this class also will contain
5
+ # the result of the lookup after it comes back from the API.
6
+ #
7
+ # See "https://smartystreets.com/docs/cloud/us-street-api#input-fields"
8
+ #
9
+ # @match:: Must be set to 'strict', 'range', or 'invalid'. Constants for these are in match_type.rb
10
+ class Lookup < JSONAble
11
+ attr_accessor :input_id, :street, :street2, :secondary, :city, :state, :zipcode, :lastline, :addressee, :urbanization,
12
+ :match, :candidates, :result
13
+
14
+ def initialize(street=nil, street2=nil, secondary=nil, city=nil, state=nil, zipcode=nil, lastline=nil,
15
+ addressee=nil, urbanization=nil, match=nil, candidates=0, input_id=nil)
16
+ @input_id = input_id
17
+ @street = street
18
+ @street2 = street2
19
+ @secondary = secondary
20
+ @city = city
21
+ @state = state
22
+ @zipcode = zipcode
23
+ @lastline = lastline
24
+ @addressee = addressee
25
+ @urbanization = urbanization
26
+ @match = match
27
+ @candidates = candidates
28
+ @result = []
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ module SmartyStreets
2
+ module USStreet
3
+ module MatchType
4
+ STRICT = 'strict'.freeze
5
+ RANGE = 'range'.freeze # Deprecated
6
+ INVALID = 'invalid'.freeze
7
+ ENHANCED = 'enhanced'.freeze
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,30 @@
1
+ module SmartyStreets
2
+ module USStreet
3
+ # See "https://smartystreets.com/docs/cloud/us-street-api#metadata"
4
+ class Metadata
5
+ attr_reader :elot_sort, :longitude, :elot_sequence, :county_fips, :building_default_indicator, :rdi,
6
+ :congressional_district, :latitude, :precision, :time_zone, :zip_type, :county_name, :utc_offset,
7
+ :record_type, :carrier_route, :obeys_dst, :is_an_ews_match
8
+
9
+ def initialize(obj)
10
+ @record_type = obj['record_type']
11
+ @zip_type = obj['zip_type']
12
+ @county_fips = obj['county_fips']
13
+ @county_name = obj['county_name']
14
+ @carrier_route = obj['carrier_route']
15
+ @congressional_district = obj['congressional_district']
16
+ @building_default_indicator = obj['building_default_indicator']
17
+ @rdi = obj['rdi']
18
+ @elot_sequence = obj['elot_sequence']
19
+ @elot_sort = obj['elot_sort']
20
+ @latitude = obj['latitude']
21
+ @longitude = obj['longitude']
22
+ @precision = obj['precision']
23
+ @time_zone = obj['time_zone']
24
+ @utc_offset = obj['utc_offset']
25
+ @obeys_dst = obj['dst']
26
+ @is_an_ews_match = obj['ews_match']
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ require_relative './us_street/analysis'
2
+ require_relative './us_street/candidate'
3
+ require_relative './us_street/client'
4
+ require_relative './us_street/components'
5
+ require_relative './us_street/lookup'
6
+ require_relative './us_street/metadata'
7
+ require_relative './us_street/match_type'
8
+
9
+ module SmartyStreets
10
+ module USStreet
11
+ end
12
+ end
@@ -0,0 +1,15 @@
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
@@ -0,0 +1,16 @@
1
+ module SmartyStreets
2
+ module USZipcode
3
+ # Known in the SmartyStreets US ZIP Code API documentation as a city_state
4
+ # See "https://smartystreets.com/docs/cloud/us-zipcode-api#cities"
5
+ class City
6
+ attr_reader :mailable_city, :state_abbreviation, :state, :city
7
+
8
+ def initialize(obj)
9
+ @city = obj['city']
10
+ @mailable_city = obj['mailable_city']
11
+ @state_abbreviation = obj['state_abbreviation']
12
+ @state = obj['state']
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,72 @@
1
+ require_relative 'result'
2
+ require_relative '../batch'
3
+ require_relative '../request'
4
+
5
+ module SmartyStreets
6
+ module USZipcode
7
+ # It is recommended to instantiate this class using ClientBuilder.build_us_zipcode_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 ZIP Code API and stores the result in the Lookup's result field.
15
+ def send_lookup(lookup)
16
+ batch = Batch.new
17
+ batch.add(lookup)
18
+ send_batch(batch)
19
+ end
20
+
21
+ # Sends a Batch object containing no more than 100 Lookup objects to the US ZIP Code API and stores the
22
+ # results in the result field of the Lookup object.
23
+ def send_batch(batch)
24
+ smarty_request = Request.new
25
+
26
+ return if batch.empty?
27
+
28
+ converted_lookups = remap_keys(batch.all_lookups)
29
+
30
+ if batch.size > 1
31
+ smarty_request.payload = @serializer.serialize(converted_lookups)
32
+ else
33
+ smarty_request.parameters = converted_lookups[0]
34
+ end
35
+
36
+ response = @sender.send(smarty_request)
37
+
38
+ raise response.error if response.error
39
+
40
+ results = @serializer.deserialize(response.payload)
41
+ results = [] if results.nil?
42
+ assign_results_to_lookups(batch, results)
43
+ end
44
+
45
+ def assign_results_to_lookups(batch, results)
46
+ results.each do |raw_result|
47
+ result = Result.new(raw_result)
48
+ batch[result.input_index].result = result
49
+ end
50
+ end
51
+
52
+ def remap_keys(obj)
53
+ converted_obj = []
54
+ obj.each do |lookup|
55
+ converted_lookup = {}
56
+
57
+ add_field(converted_lookup, 'city', lookup.city)
58
+ add_field(converted_lookup, 'state', lookup.state)
59
+ add_field(converted_lookup, 'zipcode', lookup.zipcode)
60
+
61
+ converted_obj.push(converted_lookup)
62
+ end
63
+
64
+ converted_obj
65
+ end
66
+
67
+ def add_field(converted_lookup, key, value)
68
+ converted_lookup[key] = value unless value.nil? or value.empty?
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../json_able'
2
+
3
+ module SmartyStreets
4
+ module USZipcode
5
+ # In addition to holding all of the input data for this lookup, this class also
6
+ # will contain the result of the lookup after it comes back from the API.
7
+ #
8
+ # See "https://smartystreets.com/docs/cloud/us-zipcode-api#http-request-input-fields"
9
+ class Lookup < JSONAble
10
+ attr_accessor :result, :state, :zipcode, :input_id, :city
11
+
12
+ def initialize(city=nil, state=nil, zipcode=nil, input_id=nil)
13
+ @result = nil
14
+ @input_id = input_id
15
+ @city = city
16
+ @state = state
17
+ @zipcode = zipcode
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'city'
2
+ require_relative 'zip_code'
3
+
4
+ module SmartyStreets
5
+ module USZipcode
6
+ # See "https://smartystreets.com/docs/cloud/us-zipcode-api#root"
7
+ class Result
8
+ attr_reader :reason, :input_id, :input_index, :cities, :zipcodes, :status
9
+
10
+ def initialize(obj)
11
+ @status = obj['status']
12
+ @reason = obj['reason']
13
+ @input_id = obj['input_id']
14
+ @input_index = obj['input_index']
15
+ @cities = obj.fetch('city_states', [])
16
+ @zipcodes = obj.fetch('zipcodes', [])
17
+
18
+ @cities = convert_cities
19
+ @zipcodes = convert_zipcodes
20
+ end
21
+
22
+ def valid?
23
+ @status.nil? and @reason.nil?
24
+ end
25
+
26
+ def convert_cities
27
+ converted_cities = []
28
+
29
+ @cities.each do |city|
30
+ converted_cities.push(City.new(city))
31
+ end
32
+
33
+ converted_cities
34
+ end
35
+
36
+ def convert_zipcodes
37
+ converted_zipcodes = []
38
+
39
+ @zipcodes.each do |zipcode|
40
+ converted_zipcodes.push(ZipCode.new(zipcode))
41
+ end
42
+
43
+ converted_zipcodes
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'alternate_county'
2
+
3
+ module SmartyStreets
4
+ module USZipcode
5
+ # See "https://smartystreets.com/docs/cloud/us-zipcode-api#zipcodes"
6
+ class ZipCode
7
+ attr_reader :longitude, :county_name, :zipcode, :zipcode_type, :county_fips,
8
+ :latitude, :precision, :default_city, :alternate_counties,
9
+ :state_abbreviation, :state
10
+
11
+ def initialize(obj)
12
+ @zipcode = obj['zipcode']
13
+ @zipcode_type = obj['zipcode_type']
14
+ @default_city = obj['default_city']
15
+ @county_fips = obj['county_fips']
16
+ @county_name = obj['county_name']
17
+ @latitude = obj['latitude']
18
+ @longitude = obj['longitude']
19
+ @precision = obj['precision']
20
+ @state = obj['state']
21
+ @state_abbreviation = obj['state_abbreviation']
22
+ alternate_counties = obj.fetch('alternate_counties', [])
23
+
24
+ @alternate_counties = []
25
+
26
+ alternate_counties.each do |county|
27
+ @alternate_counties.push(USZipcode::AlternateCounty.new(county))
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
@@ -0,0 +1,11 @@
1
+ require_relative './us_zipcode/city'
2
+ require_relative './us_zipcode/client'
3
+ require_relative './us_zipcode/lookup'
4
+ require_relative './us_zipcode/result'
5
+ require_relative './us_zipcode/zip_code'
6
+ require_relative './us_zipcode/alternate_county'
7
+
8
+ module SmartyStreets
9
+ module USZipcode
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module SmartyStreets
2
+ VERSION = '0.0.0' # DO NOT EDIT (this is updated by a build job when a new release is published)
3
+ end
@@ -0,0 +1,33 @@
1
+ require 'smartystreets_ruby_sdk/version'
2
+ require 'smartystreets_ruby_sdk/logger'
3
+ require 'smartystreets_ruby_sdk/sleeper'
4
+
5
+ require 'smartystreets_ruby_sdk/batch'
6
+ require 'smartystreets_ruby_sdk/client_builder'
7
+ require 'smartystreets_ruby_sdk/custom_header_sender'
8
+ require 'smartystreets_ruby_sdk/errors'
9
+ require 'smartystreets_ruby_sdk/exceptions'
10
+ require 'smartystreets_ruby_sdk/json_able'
11
+ require 'smartystreets_ruby_sdk/logger'
12
+ require 'smartystreets_ruby_sdk/native_sender'
13
+ require 'smartystreets_ruby_sdk/native_serializer'
14
+ require 'smartystreets_ruby_sdk/request'
15
+ require 'smartystreets_ruby_sdk/response'
16
+ require 'smartystreets_ruby_sdk/retry_sender'
17
+ require 'smartystreets_ruby_sdk/license_sender'
18
+ require 'smartystreets_ruby_sdk/shared_credentials'
19
+ require 'smartystreets_ruby_sdk/signing_sender'
20
+ require 'smartystreets_ruby_sdk/static_credentials'
21
+ require 'smartystreets_ruby_sdk/status_code_sender'
22
+ require 'smartystreets_ruby_sdk/url_prefix_sender'
23
+
24
+ require 'smartystreets_ruby_sdk/us_extract'
25
+ require 'smartystreets_ruby_sdk/us_street'
26
+ require 'smartystreets_ruby_sdk/us_zipcode'
27
+ require 'smartystreets_ruby_sdk/us_autocomplete'
28
+ require 'smartystreets_ruby_sdk/us_autocomplete_pro'
29
+ require 'smartystreets_ruby_sdk/international_street'
30
+ require 'smartystreets_ruby_sdk/us_reverse_geo'
31
+
32
+ module SmartyStreets
33
+ end