smartystreets_ruby_sdk 6.4.1 → 10.0.0

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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/settings.json +18 -0
  3. data/.github/workflows/ci.yml +10 -0
  4. data/.github/workflows/publish.yml +29 -0
  5. data/.github/workflows/test.yml +21 -0
  6. data/CLAUDE.md +73 -0
  7. data/Makefile +11 -5
  8. data/README.md +2 -0
  9. data/examples/international_autocomplete_example.rb +10 -7
  10. data/examples/international_example.rb +7 -6
  11. data/examples/international_postal_code_example.rb +5 -4
  12. data/examples/us_autocomplete_example.rb +69 -0
  13. data/examples/us_autocomplete_pro_example.rb +10 -12
  14. data/examples/us_enrichment_business_example.rb +72 -0
  15. data/examples/us_enrichment_business_name_search_example.rb +76 -0
  16. data/examples/us_enrichment_etag_example.rb +130 -0
  17. data/examples/us_enrichment_example.rb +130 -44
  18. data/examples/us_extract_example.rb +7 -6
  19. data/examples/us_reverse_geo_example.rb +10 -6
  20. data/examples/us_street_component_analysis_example.rb +2 -1
  21. data/examples/us_street_iana_timezone_example.rb +54 -0
  22. data/examples/us_street_match_strategy_example.rb +85 -0
  23. data/examples/us_street_multiple_address_example.rb +7 -6
  24. data/examples/us_street_single_address_example.rb +7 -6
  25. data/examples/us_zipcode_multiple_lookup_example.rb +7 -6
  26. data/examples/us_zipcode_single_lookup_example.rb +7 -6
  27. data/lib/smartystreets_ruby_sdk/basic_auth_credentials.rb +14 -0
  28. data/lib/smartystreets_ruby_sdk/client_builder.rb +36 -5
  29. data/lib/smartystreets_ruby_sdk/custom_header_sender.rb +16 -2
  30. data/lib/smartystreets_ruby_sdk/errors.rb +16 -11
  31. data/lib/smartystreets_ruby_sdk/exceptions.rb +12 -0
  32. data/lib/smartystreets_ruby_sdk/international_autocomplete/client.rb +2 -0
  33. data/lib/smartystreets_ruby_sdk/international_autocomplete/lookup.rb +4 -2
  34. data/lib/smartystreets_ruby_sdk/international_street/client.rb +10 -1
  35. data/lib/smartystreets_ruby_sdk/international_street/components.rb +8 -3
  36. data/lib/smartystreets_ruby_sdk/international_street/language_mode.rb +20 -3
  37. data/lib/smartystreets_ruby_sdk/international_street/lookup.rb +5 -12
  38. data/lib/smartystreets_ruby_sdk/international_street/rootlevel.rb +1 -5
  39. data/lib/smartystreets_ruby_sdk/native_sender.rb +3 -4
  40. data/lib/smartystreets_ruby_sdk/native_serializer.rb +1 -0
  41. data/lib/smartystreets_ruby_sdk/request.rb +2 -1
  42. data/lib/smartystreets_ruby_sdk/response.rb +13 -0
  43. data/lib/smartystreets_ruby_sdk/retry_sender.rb +32 -13
  44. data/lib/smartystreets_ruby_sdk/status_code_sender.rb +39 -22
  45. data/lib/smartystreets_ruby_sdk/us_autocomplete/client.rb +82 -0
  46. data/lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb +8 -0
  47. data/lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb +73 -0
  48. data/lib/smartystreets_ruby_sdk/us_autocomplete/source_type.rb +8 -0
  49. data/lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb +22 -0
  50. data/lib/smartystreets_ruby_sdk/us_autocomplete.rb +10 -0
  51. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/source_type.rb +8 -0
  52. data/lib/smartystreets_ruby_sdk/us_autocomplete_pro.rb +1 -0
  53. data/lib/smartystreets_ruby_sdk/us_enrichment/business/detail/attributes.rb +241 -0
  54. data/lib/smartystreets_ruby_sdk/us_enrichment/business/detail/response.rb +20 -0
  55. data/lib/smartystreets_ruby_sdk/us_enrichment/business/summary/business_entry.rb +16 -0
  56. data/lib/smartystreets_ruby_sdk/us_enrichment/business/summary/response.rb +24 -0
  57. data/lib/smartystreets_ruby_sdk/us_enrichment/client.rb +99 -30
  58. data/lib/smartystreets_ruby_sdk/us_enrichment/geo_reference/response.rb +2 -3
  59. data/lib/smartystreets_ruby_sdk/us_enrichment/lookup.rb +42 -9
  60. data/lib/smartystreets_ruby_sdk/us_enrichment/property/principal/response.rb +3 -4
  61. data/lib/smartystreets_ruby_sdk/us_enrichment/secondary/count/response.rb +2 -3
  62. data/lib/smartystreets_ruby_sdk/us_enrichment/secondary/response.rb +2 -3
  63. data/lib/smartystreets_ruby_sdk/us_enrichment.rb +6 -5
  64. data/lib/smartystreets_ruby_sdk/us_reverse_geo/source_type.rb +8 -0
  65. data/lib/smartystreets_ruby_sdk/us_reverse_geo/us_reverse_geo_response.rb +1 -1
  66. data/lib/smartystreets_ruby_sdk/us_reverse_geo.rb +1 -0
  67. data/lib/smartystreets_ruby_sdk/us_street/candidate.rb +2 -1
  68. data/lib/smartystreets_ruby_sdk/us_street/client.rb +10 -3
  69. data/lib/smartystreets_ruby_sdk/us_street/metadata.rb +5 -1
  70. data/lib/smartystreets_ruby_sdk/version.rb +1 -1
  71. data/lib/smartystreets_ruby_sdk.rb +2 -0
  72. metadata +27 -6
  73. data/.github/workflows/gem-publish.yml +0 -27
  74. data/lib/smartystreets_ruby_sdk/us_enrichment/risk/attributes.rb +0 -524
  75. data/lib/smartystreets_ruby_sdk/us_enrichment/risk/response.rb +0 -19
@@ -0,0 +1,82 @@
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.search
18
+ raise SmartyStreets::SmartyError, 'Send() must be passed a Lookup with the search 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.any? || lookup.zip_filter.any?
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
+ add_parameter(request, 'exclude', build_filter_string(lookup.exclude, ','))
54
+
55
+ for key in lookup.custom_param_hash.keys do
56
+ add_parameter(request, key, lookup.custom_param_hash[key])
57
+ end
58
+
59
+ request
60
+ end
61
+
62
+ def build_filter_string(filter_list, separator=';')
63
+ filter_list ? filter_list.join(separator) : nil
64
+ end
65
+
66
+ def convert_suggestions(suggestion_hashes)
67
+ converted_suggestions = []
68
+ return converted_suggestions if suggestion_hashes.nil?
69
+
70
+ suggestion_hashes.each do |suggestion|
71
+ converted_suggestions.push(USAutocomplete::Suggestion.new(suggestion))
72
+ end
73
+
74
+ converted_suggestions
75
+ end
76
+
77
+ def add_parameter(request, key, value)
78
+ request.parameters[key] = value unless value.nil? or value.empty?
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,8 @@
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ module GeolocationType
4
+ CITY = 'city'
5
+ NONE = 'none'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,73 @@
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://www.smarty.com/docs/apis/us-autocomplete-v2/reference#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, :exclude, :source, :custom_param_hash
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, exclude=nil, source=nil, custom_param_hash=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
+ @exclude = exclude ? exclude : []
32
+ @source = source
33
+ @custom_param_hash = {}
34
+ end
35
+
36
+ def add_custom_parameter(parameter, value)
37
+ @custom_param_hash[parameter] = value
38
+ end
39
+
40
+ def add_city_filter(city)
41
+ @city_filter.push(city)
42
+ end
43
+
44
+ def add_state_filter(state)
45
+ @state_filter.push(state)
46
+ end
47
+
48
+ def add_zip_filter(zip)
49
+ @zip_filter.push(zip)
50
+ end
51
+
52
+ def add_state_exclusion(state)
53
+ @exclude_states.push(state)
54
+ end
55
+
56
+ def add_preferred_city(city)
57
+ @prefer_cities.push(city)
58
+ end
59
+
60
+ def add_preferred_state(state)
61
+ @prefer_states.push(state)
62
+ end
63
+
64
+ def add_preferred_zip(zip)
65
+ @prefer_zip_codes.push(zip)
66
+ end
67
+
68
+ def add_exclude(exclude_type)
69
+ @exclude.push(exclude_type)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,8 @@
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ module SourceType
4
+ ALL = 'all'.freeze
5
+ POSTAL = 'postal'.freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ # See "https://www.smarty.com/docs/apis/us-autocomplete-v2/reference#http-response-status"
4
+ class Suggestion
5
+
6
+ attr_reader :smarty_key, :entry_id, :urbanization, :street_line, :secondary, :city, :state, :zipcode, :entries, :source
7
+
8
+ def initialize(obj)
9
+ @smarty_key = obj.fetch('smarty_key', nil)
10
+ @entry_id = obj.fetch('entry_id', nil)
11
+ @urbanization = obj.fetch('urbanization', nil)
12
+ @street_line = obj.fetch('street_line', nil)
13
+ @secondary = obj.fetch('secondary', nil)
14
+ @city = obj.fetch('city', nil)
15
+ @state = obj.fetch('state', nil)
16
+ @zipcode = obj.fetch('zipcode', nil)
17
+ @entries = obj.fetch('entries', 0)
18
+ @source = obj.fetch('source', nil)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ require_relative './us_autocomplete/lookup'
2
+ require_relative './us_autocomplete/geolocation_type'
3
+ require_relative './us_autocomplete/source_type'
4
+ require_relative './us_autocomplete/suggestion'
5
+ require_relative './us_autocomplete/client'
6
+
7
+ module SmartyStreets
8
+ module USAutocomplete
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ module SmartyStreets
2
+ module USAutocompletePro
3
+ module SourceType
4
+ ALL = 'all'.freeze
5
+ POSTAL = 'postal'.freeze
6
+ end
7
+ end
8
+ end
@@ -1,5 +1,6 @@
1
1
  require_relative './us_autocomplete_pro/lookup'
2
2
  require_relative './us_autocomplete_pro/geolocation_type'
3
+ require_relative './us_autocomplete_pro/source_type'
3
4
  require_relative './us_autocomplete_pro/suggestion'
4
5
  require_relative './us_autocomplete_pro/client'
5
6
 
@@ -0,0 +1,241 @@
1
+ module SmartyStreets
2
+ module USEnrichment
3
+ module Business
4
+ module Detail
5
+ class Attributes
6
+ attr_reader :accounting_expense_range, :accounting_expense_total, :advertising_expense_range, :advertising_expense_total, :business_insurance_expense_range, :business_insurance_expense_total
7
+ attr_reader :business_status, :business_type, :carrier_route, :census_block, :census_tract, :city_name
8
+ attr_reader :company_name, :company_name_secondary, :contact_first_name, :contact_full_name, :contact_gender, :contact_last_name
9
+ attr_reader :contact_middle_name, :contact_prefix, :contact_professional_title, :contact_suffix, :core_based_stat_area_code, :core_based_stat_area_name
10
+ attr_reader :corporate_employee_count_range, :corporate_employee_count_total, :county_fips, :county_name, :credit_capacity, :credit_capacity_range
11
+ attr_reader :credit_score, :credit_score_description, :date_of_last_update, :delivery_line_1, :delivery_point, :delivery_point_check_digit
12
+ attr_reader :domestic_foreign_owner_indicator, :ein, :email, :email_available_indicator, :executive_department, :executive_level
13
+ attr_reader :executive_verification_type, :fax, :female_owned_indicator, :foreign_parent_city_name, :foreign_parent_company_name, :foreign_parent_country
14
+ attr_reader :fortune_1000_branches, :fortune_1000_indicator, :fortune_1000_rank, :holding_city_name, :holding_company_name, :holding_id
15
+ attr_reader :holding_state_abbreviation, :home_based_business_indicator, :hq_city_name, :hq_company_name, :hq_id, :hq_number_of_companies
16
+ attr_reader :hq_state_abbreviation, :latitude, :legal_expense_range, :legal_expense_total, :linkage_company_name, :linkage_indicator
17
+ attr_reader :linkage_level, :linkage_type, :location_employee_count, :location_employee_count_range, :location_sales_range, :location_sales_total
18
+ attr_reader :longitude, :mail_score_code, :mail_score_description, :mailing_carrier_route, :mailing_city_name, :mailing_delivery_line_1
19
+ attr_reader :mailing_delivery_point, :mailing_delivery_point_check_digit, :mailing_plus4_code, :mailing_state_abbreviation, :mailing_zipcode, :manufacturing_indicator
20
+ attr_reader :minority_owned_indicator, :minority_type, :naics_01_code, :naics_01_description, :naics_02_code, :naics_02_description
21
+ attr_reader :naics_03_code, :naics_03_description, :naics_04_code, :naics_04_description, :naics_05_code, :naics_05_description
22
+ attr_reader :naics_06_code, :naics_06_description, :new_business_indicator, :non_profit_indicator, :num_of_pcs_range, :num_of_pcs_total
23
+ attr_reader :number_of_years_in_business, :number_of_years_in_business_range, :office_equipment_expense_range, :office_equipment_expense_total, :operating_hours_friday, :operating_hours_monday
24
+ attr_reader :operating_hours_saturday, :operating_hours_sunday, :operating_hours_thursday, :operating_hours_tuesday, :operating_hours_wednesday, :phone
25
+ attr_reader :phone_area_code, :phone_secondary, :phone_toll_free, :plus4_code, :population_range, :precision
26
+ attr_reader :primary_executive_indicator, :primary_number, :primary_sic_2digit_code, :primary_sic_2digit_description, :primary_sic_4digit_code, :primary_sic_4digit_description
27
+ attr_reader :primary_sic_code, :primary_sic_description, :public_indicator, :rdi, :rent_expense_range, :rent_expense_total
28
+ attr_reader :secondary_01_sic_7digit_code, :secondary_01_sic_7digit_description, :secondary_02_sic_7digit_code, :secondary_02_sic_7digit_description, :secondary_03_sic_7digit_code, :secondary_03_sic_7digit_description
29
+ attr_reader :secondary_04_sic_7digit_code, :secondary_04_sic_7digit_description, :secondary_05_sic_7digit_code, :secondary_05_sic_7digit_description, :secondary_designator, :secondary_number
30
+ attr_reader :sectional_center_facility, :small_business_indicator, :source_title, :square_footage, :square_footage_range, :standardized_title
31
+ attr_reader :standardized_title_rank, :state_abbreviation, :stock_exchange, :street_name, :street_postdirection, :street_predirection
32
+ attr_reader :street_suffix, :sub_hq_city_name, :sub_hq_company_name, :sub_hq_id, :sub_hq_number_of_companies, :sub_hq_state_abbreviation
33
+ attr_reader :technology_expense_range, :technology_expense_total, :telecom_expense_range, :telecom_expense_total, :ticker_symbol, :time_zone
34
+ attr_reader :url, :url_facebook, :url_instagram, :url_linkedin, :url_twitter, :url_yelp
35
+ attr_reader :url_youtube, :utilities_expense_range, :utilities_expense_total, :webmail_indicator, :year_current, :year_current_employee_count
36
+ attr_reader :year_established, :year_four_prior, :year_four_prior_employee_count, :year_four_prior_employee_growth, :year_one_prior, :year_one_prior_employee_count
37
+ attr_reader :year_one_prior_employee_growth, :year_three_prior, :year_three_prior_employee_count, :year_three_prior_employee_growth, :year_two_prior, :year_two_prior_employee_count
38
+ attr_reader :year_two_prior_employee_growth, :zipcode
39
+
40
+ def initialize(obj)
41
+ return if obj.nil?
42
+ @accounting_expense_range = obj['accounting_expense_range']
43
+ @accounting_expense_total = obj['accounting_expense_total']
44
+ @advertising_expense_range = obj['advertising_expense_range']
45
+ @advertising_expense_total = obj['advertising_expense_total']
46
+ @business_insurance_expense_range = obj['business_insurance_expense_range']
47
+ @business_insurance_expense_total = obj['business_insurance_expense_total']
48
+ @business_status = obj['business_status']
49
+ @business_type = obj['business_type']
50
+ @carrier_route = obj['carrier_route']
51
+ @census_block = obj['census_block']
52
+ @census_tract = obj['census_tract']
53
+ @city_name = obj['city_name']
54
+ @company_name = obj['company_name']
55
+ @company_name_secondary = obj['company_name_secondary']
56
+ @contact_first_name = obj['contact_first_name']
57
+ @contact_full_name = obj['contact_full_name']
58
+ @contact_gender = obj['contact_gender']
59
+ @contact_last_name = obj['contact_last_name']
60
+ @contact_middle_name = obj['contact_middle_name']
61
+ @contact_prefix = obj['contact_prefix']
62
+ @contact_professional_title = obj['contact_professional_title']
63
+ @contact_suffix = obj['contact_suffix']
64
+ @core_based_stat_area_code = obj['core_based_stat_area_code']
65
+ @core_based_stat_area_name = obj['core_based_stat_area_name']
66
+ @corporate_employee_count_range = obj['corporate_employee_count_range']
67
+ @corporate_employee_count_total = obj['corporate_employee_count_total']
68
+ @county_fips = obj['county_fips']
69
+ @county_name = obj['county_name']
70
+ @credit_capacity = obj['credit_capacity']
71
+ @credit_capacity_range = obj['credit_capacity_range']
72
+ @credit_score = obj['credit_score']
73
+ @credit_score_description = obj['credit_score_description']
74
+ @date_of_last_update = obj['date_of_last_update']
75
+ @delivery_line_1 = obj['delivery_line_1']
76
+ @delivery_point = obj['delivery_point']
77
+ @delivery_point_check_digit = obj['delivery_point_check_digit']
78
+ @domestic_foreign_owner_indicator = obj['domestic_foreign_owner_indicator']
79
+ @ein = obj['ein']
80
+ @email = obj['email']
81
+ @email_available_indicator = obj['email_available_indicator']
82
+ @executive_department = obj['executive_department']
83
+ @executive_level = obj['executive_level']
84
+ @executive_verification_type = obj['executive_verification_type']
85
+ @fax = obj['fax']
86
+ @female_owned_indicator = obj['female_owned_indicator']
87
+ @foreign_parent_city_name = obj['foreign_parent_city_name']
88
+ @foreign_parent_company_name = obj['foreign_parent_company_name']
89
+ @foreign_parent_country = obj['foreign_parent_country']
90
+ @fortune_1000_branches = obj['fortune_1000_branches']
91
+ @fortune_1000_indicator = obj['fortune_1000_indicator']
92
+ @fortune_1000_rank = obj['fortune_1000_rank']
93
+ @holding_city_name = obj['holding_city_name']
94
+ @holding_company_name = obj['holding_company_name']
95
+ @holding_id = obj['holding_id']
96
+ @holding_state_abbreviation = obj['holding_state_abbreviation']
97
+ @home_based_business_indicator = obj['home_based_business_indicator']
98
+ @hq_city_name = obj['hq_city_name']
99
+ @hq_company_name = obj['hq_company_name']
100
+ @hq_id = obj['hq_id']
101
+ @hq_number_of_companies = obj['hq_number_of_companies']
102
+ @hq_state_abbreviation = obj['hq_state_abbreviation']
103
+ @latitude = obj['latitude']
104
+ @legal_expense_range = obj['legal_expense_range']
105
+ @legal_expense_total = obj['legal_expense_total']
106
+ @linkage_company_name = obj['linkage_company_name']
107
+ @linkage_indicator = obj['linkage_indicator']
108
+ @linkage_level = obj['linkage_level']
109
+ @linkage_type = obj['linkage_type']
110
+ @location_employee_count = obj['location_employee_count']
111
+ @location_employee_count_range = obj['location_employee_count_range']
112
+ @location_sales_range = obj['location_sales_range']
113
+ @location_sales_total = obj['location_sales_total']
114
+ @longitude = obj['longitude']
115
+ @mail_score_code = obj['mail_score_code']
116
+ @mail_score_description = obj['mail_score_description']
117
+ @mailing_carrier_route = obj['mailing_carrier_route']
118
+ @mailing_city_name = obj['mailing_city_name']
119
+ @mailing_delivery_line_1 = obj['mailing_delivery_line_1']
120
+ @mailing_delivery_point = obj['mailing_delivery_point']
121
+ @mailing_delivery_point_check_digit = obj['mailing_delivery_point_check_digit']
122
+ @mailing_plus4_code = obj['mailing_plus4_code']
123
+ @mailing_state_abbreviation = obj['mailing_state_abbreviation']
124
+ @mailing_zipcode = obj['mailing_zipcode']
125
+ @manufacturing_indicator = obj['manufacturing_indicator']
126
+ @minority_owned_indicator = obj['minority_owned_indicator']
127
+ @minority_type = obj['minority_type']
128
+ @naics_01_code = obj['naics_01_code']
129
+ @naics_01_description = obj['naics_01_description']
130
+ @naics_02_code = obj['naics_02_code']
131
+ @naics_02_description = obj['naics_02_description']
132
+ @naics_03_code = obj['naics_03_code']
133
+ @naics_03_description = obj['naics_03_description']
134
+ @naics_04_code = obj['naics_04_code']
135
+ @naics_04_description = obj['naics_04_description']
136
+ @naics_05_code = obj['naics_05_code']
137
+ @naics_05_description = obj['naics_05_description']
138
+ @naics_06_code = obj['naics_06_code']
139
+ @naics_06_description = obj['naics_06_description']
140
+ @new_business_indicator = obj['new_business_indicator']
141
+ @non_profit_indicator = obj['non_profit_indicator']
142
+ @num_of_pcs_range = obj['num_of_pcs_range']
143
+ @num_of_pcs_total = obj['num_of_pcs_total']
144
+ @number_of_years_in_business = obj['number_of_years_in_business']
145
+ @number_of_years_in_business_range = obj['number_of_years_in_business_range']
146
+ @office_equipment_expense_range = obj['office_equipment_expense_range']
147
+ @office_equipment_expense_total = obj['office_equipment_expense_total']
148
+ @operating_hours_friday = obj['operating_hours_friday']
149
+ @operating_hours_monday = obj['operating_hours_monday']
150
+ @operating_hours_saturday = obj['operating_hours_saturday']
151
+ @operating_hours_sunday = obj['operating_hours_sunday']
152
+ @operating_hours_thursday = obj['operating_hours_thursday']
153
+ @operating_hours_tuesday = obj['operating_hours_tuesday']
154
+ @operating_hours_wednesday = obj['operating_hours_wednesday']
155
+ @phone = obj['phone']
156
+ @phone_area_code = obj['phone_area_code']
157
+ @phone_secondary = obj['phone_secondary']
158
+ @phone_toll_free = obj['phone_toll_free']
159
+ @plus4_code = obj['plus4_code']
160
+ @population_range = obj['population_range']
161
+ @precision = obj['precision']
162
+ @primary_executive_indicator = obj['primary_executive_indicator']
163
+ @primary_number = obj['primary_number']
164
+ @primary_sic_2digit_code = obj['primary_sic_2digit_code']
165
+ @primary_sic_2digit_description = obj['primary_sic_2digit_description']
166
+ @primary_sic_4digit_code = obj['primary_sic_4digit_code']
167
+ @primary_sic_4digit_description = obj['primary_sic_4digit_description']
168
+ @primary_sic_code = obj['primary_sic_code']
169
+ @primary_sic_description = obj['primary_sic_description']
170
+ @public_indicator = obj['public_indicator']
171
+ @rdi = obj['rdi']
172
+ @rent_expense_range = obj['rent_expense_range']
173
+ @rent_expense_total = obj['rent_expense_total']
174
+ @secondary_01_sic_7digit_code = obj['secondary_01_sic_7digit_code']
175
+ @secondary_01_sic_7digit_description = obj['secondary_01_sic_7digit_description']
176
+ @secondary_02_sic_7digit_code = obj['secondary_02_sic_7digit_code']
177
+ @secondary_02_sic_7digit_description = obj['secondary_02_sic_7digit_description']
178
+ @secondary_03_sic_7digit_code = obj['secondary_03_sic_7digit_code']
179
+ @secondary_03_sic_7digit_description = obj['secondary_03_sic_7digit_description']
180
+ @secondary_04_sic_7digit_code = obj['secondary_04_sic_7digit_code']
181
+ @secondary_04_sic_7digit_description = obj['secondary_04_sic_7digit_description']
182
+ @secondary_05_sic_7digit_code = obj['secondary_05_sic_7digit_code']
183
+ @secondary_05_sic_7digit_description = obj['secondary_05_sic_7digit_description']
184
+ @secondary_designator = obj['secondary_designator']
185
+ @secondary_number = obj['secondary_number']
186
+ @sectional_center_facility = obj['sectional_center_facility']
187
+ @small_business_indicator = obj['small_business_indicator']
188
+ @source_title = obj['source_title']
189
+ @square_footage = obj['square_footage']
190
+ @square_footage_range = obj['square_footage_range']
191
+ @standardized_title = obj['standardized_title']
192
+ @standardized_title_rank = obj['standardized_title_rank']
193
+ @state_abbreviation = obj['state_abbreviation']
194
+ @stock_exchange = obj['stock_exchange']
195
+ @street_name = obj['street_name']
196
+ @street_postdirection = obj['street_postdirection']
197
+ @street_predirection = obj['street_predirection']
198
+ @street_suffix = obj['street_suffix']
199
+ @sub_hq_city_name = obj['sub_hq_city_name']
200
+ @sub_hq_company_name = obj['sub_hq_company_name']
201
+ @sub_hq_id = obj['sub_hq_id']
202
+ @sub_hq_number_of_companies = obj['sub_hq_number_of_companies']
203
+ @sub_hq_state_abbreviation = obj['sub_hq_state_abbreviation']
204
+ @technology_expense_range = obj['technology_expense_range']
205
+ @technology_expense_total = obj['technology_expense_total']
206
+ @telecom_expense_range = obj['telecom_expense_range']
207
+ @telecom_expense_total = obj['telecom_expense_total']
208
+ @ticker_symbol = obj['ticker_symbol']
209
+ @time_zone = obj['time_zone']
210
+ @url = obj['url']
211
+ @url_facebook = obj['url_facebook']
212
+ @url_instagram = obj['url_instagram']
213
+ @url_linkedin = obj['url_linkedin']
214
+ @url_twitter = obj['url_twitter']
215
+ @url_yelp = obj['url_yelp']
216
+ @url_youtube = obj['url_youtube']
217
+ @utilities_expense_range = obj['utilities_expense_range']
218
+ @utilities_expense_total = obj['utilities_expense_total']
219
+ @webmail_indicator = obj['webmail_indicator']
220
+ @year_current = obj['year_current']
221
+ @year_current_employee_count = obj['year_current_employee_count']
222
+ @year_established = obj['year_established']
223
+ @year_four_prior = obj['year_four_prior']
224
+ @year_four_prior_employee_count = obj['year_four_prior_employee_count']
225
+ @year_four_prior_employee_growth = obj['year_four_prior_employee_growth']
226
+ @year_one_prior = obj['year_one_prior']
227
+ @year_one_prior_employee_count = obj['year_one_prior_employee_count']
228
+ @year_one_prior_employee_growth = obj['year_one_prior_employee_growth']
229
+ @year_three_prior = obj['year_three_prior']
230
+ @year_three_prior_employee_count = obj['year_three_prior_employee_count']
231
+ @year_three_prior_employee_growth = obj['year_three_prior_employee_growth']
232
+ @year_two_prior = obj['year_two_prior']
233
+ @year_two_prior_employee_count = obj['year_two_prior_employee_count']
234
+ @year_two_prior_employee_growth = obj['year_two_prior_employee_growth']
235
+ @zipcode = obj['zipcode']
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
241
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'attributes'
2
+
3
+ module SmartyStreets
4
+ module USEnrichment
5
+ module Business
6
+ module Detail
7
+ class Response
8
+ attr_reader :smarty_key, :data_set_name, :business_id, :attributes
9
+
10
+ def initialize(obj)
11
+ @smarty_key = obj['smarty_key']
12
+ @data_set_name = obj['data_set_name']
13
+ @business_id = obj['business_id']
14
+ @attributes = Attributes.new(obj['attributes'])
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module SmartyStreets
2
+ module USEnrichment
3
+ module Business
4
+ module Summary
5
+ class BusinessEntry
6
+ attr_reader :company_name, :business_id
7
+
8
+ def initialize(obj)
9
+ @company_name = obj['company_name']
10
+ @business_id = obj['business_id']
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'business_entry'
2
+
3
+ module SmartyStreets
4
+ module USEnrichment
5
+ module Business
6
+ module Summary
7
+ class Response
8
+ attr_reader :smarty_key, :data_set_name, :businesses
9
+
10
+ def initialize(obj)
11
+ @smarty_key = obj['smarty_key']
12
+ @data_set_name = obj['data_set_name']
13
+ @businesses = build_businesses(obj['businesses'])
14
+ end
15
+
16
+ def build_businesses(entries)
17
+ return [] if entries.nil?
18
+ entries.map { |entry| Business::Summary::BusinessEntry.new(entry) }
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end