thecompaniesapi 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.env.example +4 -0
- data/.github/workflows/release.yml +106 -0
- data/.github/workflows/tests.yml +93 -0
- data/.gitignore +146 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +36 -0
- data/LICENSE.txt +21 -0
- data/README.md +551 -0
- data/Rakefile +25 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/thecompaniesapi/client.rb +643 -0
- data/lib/thecompaniesapi/error.rb +28 -0
- data/lib/thecompaniesapi/generated/models/action.rb +91 -0
- data/lib/thecompaniesapi/generated/models/company_v2.rb +136 -0
- data/lib/thecompaniesapi/generated/models/email_pattern.rb +51 -0
- data/lib/thecompaniesapi/generated/models/job_title.rb +81 -0
- data/lib/thecompaniesapi/generated/models/list.rb +141 -0
- data/lib/thecompaniesapi/generated/models/list_analytics.rb +46 -0
- data/lib/thecompaniesapi/generated/models/llmanswer.rb +66 -0
- data/lib/thecompaniesapi/generated/models/nominatim_city.rb +101 -0
- data/lib/thecompaniesapi/generated/models/nominatim_continent.rb +111 -0
- data/lib/thecompaniesapi/generated/models/nominatim_country.rb +121 -0
- data/lib/thecompaniesapi/generated/models/nominatim_county.rb +96 -0
- data/lib/thecompaniesapi/generated/models/nominatim_state.rb +96 -0
- data/lib/thecompaniesapi/generated/models/page_contents_ideated.rb +171 -0
- data/lib/thecompaniesapi/generated/models/page_contents_link.rb +41 -0
- data/lib/thecompaniesapi/generated/models/page_contents_page.rb +71 -0
- data/lib/thecompaniesapi/generated/models/pagination_meta.rb +76 -0
- data/lib/thecompaniesapi/generated/models/prompt.rb +91 -0
- data/lib/thecompaniesapi/generated/models/segmentation_condition.rb +56 -0
- data/lib/thecompaniesapi/generated/models/team.rb +101 -0
- data/lib/thecompaniesapi/generated/models/technology.rb +96 -0
- data/lib/thecompaniesapi/generated/models/user.rb +101 -0
- data/lib/thecompaniesapi/generated/operations_map.rb +11 -0
- data/lib/thecompaniesapi/generated/requests/ask_company_request.rb +60 -0
- data/lib/thecompaniesapi/generated/requests/count_companies_post_request.rb +50 -0
- data/lib/thecompaniesapi/generated/requests/create_list_request.rb +70 -0
- data/lib/thecompaniesapi/generated/requests/export_companies_analytics_request.rb +70 -0
- data/lib/thecompaniesapi/generated/requests/fetch_companies_in_list_post_request.rb +70 -0
- data/lib/thecompaniesapi/generated/requests/product_prompt_request.rb +65 -0
- data/lib/thecompaniesapi/generated/requests/prompt_to_segmentation_request.rb +55 -0
- data/lib/thecompaniesapi/generated/requests/request_action_request.rb +80 -0
- data/lib/thecompaniesapi/generated/requests/retry_action_request.rb +30 -0
- data/lib/thecompaniesapi/generated/requests/search_companies_post_request.rb +90 -0
- data/lib/thecompaniesapi/generated/requests/toggle_companies_in_list_request.rb +50 -0
- data/lib/thecompaniesapi/generated/requests/update_list_request.rb +65 -0
- data/lib/thecompaniesapi/generated/requests/update_team_request.rb +45 -0
- data/lib/thecompaniesapi/generated/responses/ask_company_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/count_companies_post_response.rb +34 -0
- data/lib/thecompaniesapi/generated/responses/count_companies_response.rb +34 -0
- data/lib/thecompaniesapi/generated/responses/create_list_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/delete_list_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/delete_prompt_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/enrich_job_titles_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/export_companies_analytics_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/fetch_actions_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/fetch_api_health_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/fetch_companies_analytics_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/fetch_companies_in_list_post_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/fetch_companies_in_list_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/fetch_company_by_email_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/fetch_company_by_social_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/fetch_company_context_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/fetch_company_email_patterns_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/fetch_company_in_list_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/fetch_company_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/fetch_lists_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/fetch_open_api_response.rb +30 -0
- data/lib/thecompaniesapi/generated/responses/fetch_prompts_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/fetch_team_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/fetch_user_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/product_prompt_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/prompt_to_segmentation_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/request_action_response.rb +34 -0
- data/lib/thecompaniesapi/generated/responses/retry_action_response.rb +34 -0
- data/lib/thecompaniesapi/generated/responses/search_cities_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_companies_by_name_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_companies_by_prompt_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_companies_post_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/search_companies_response.rb +42 -0
- data/lib/thecompaniesapi/generated/responses/search_continents_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_counties_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_countries_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_industries_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_industries_similar_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_similar_companies_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_states_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/search_technologies_response.rb +38 -0
- data/lib/thecompaniesapi/generated/responses/toggle_companies_in_list_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/update_list_response.rb +25 -0
- data/lib/thecompaniesapi/generated/responses/update_team_response.rb +25 -0
- data/lib/thecompaniesapi/http_client.rb +146 -0
- data/lib/thecompaniesapi/version.rb +3 -0
- data/lib/thecompaniesapi.rb +7 -0
- data/script/generate_client.rb +653 -0
- data/thecompaniesapi.gemspec +34 -0
- metadata +188 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TheCompaniesAPI
|
4
|
+
module Generated
|
5
|
+
module Responses
|
6
|
+
##
|
7
|
+
# SearchTechnologiesResponse - API response class
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class SearchTechnologiesResponse
|
12
|
+
# @return [Object] meta
|
13
|
+
attr_reader :meta
|
14
|
+
|
15
|
+
# @return [Array] technologies
|
16
|
+
attr_reader :technologies
|
17
|
+
|
18
|
+
##
|
19
|
+
# Initialize a new SearchTechnologiesResponse
|
20
|
+
#
|
21
|
+
# @param data [Hash] Response data
|
22
|
+
def initialize(data = {})
|
23
|
+
@meta = convert_property(data['meta'], 'meta')
|
24
|
+
@technologies = convert_property(data['technologies'], 'technologies')
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def convert_property(value, property)
|
30
|
+
case property
|
31
|
+
else
|
32
|
+
value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TheCompaniesAPI
|
4
|
+
module Generated
|
5
|
+
module Responses
|
6
|
+
##
|
7
|
+
# ToggleCompaniesInListResponse - API response class
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class ToggleCompaniesInListResponse
|
12
|
+
# @return [Object] Response data
|
13
|
+
attr_reader :data
|
14
|
+
|
15
|
+
##
|
16
|
+
# Initialize a new ToggleCompaniesInListResponse
|
17
|
+
#
|
18
|
+
# @param data [Object] Response data
|
19
|
+
def initialize(data = nil)
|
20
|
+
@data = data
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TheCompaniesAPI
|
4
|
+
module Generated
|
5
|
+
module Responses
|
6
|
+
##
|
7
|
+
# UpdateListResponse - API response class
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class UpdateListResponse
|
12
|
+
# @return [Object] Response data
|
13
|
+
attr_reader :data
|
14
|
+
|
15
|
+
##
|
16
|
+
# Initialize a new UpdateListResponse
|
17
|
+
#
|
18
|
+
# @param data [Object] Response data
|
19
|
+
def initialize(data = nil)
|
20
|
+
@data = data
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TheCompaniesAPI
|
4
|
+
module Generated
|
5
|
+
module Responses
|
6
|
+
##
|
7
|
+
# UpdateTeamResponse - API response class
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
class UpdateTeamResponse
|
12
|
+
# @return [Object] Response data
|
13
|
+
attr_reader :data
|
14
|
+
|
15
|
+
##
|
16
|
+
# Initialize a new UpdateTeamResponse
|
17
|
+
#
|
18
|
+
# @param data [Object] Response data
|
19
|
+
def initialize(data = nil)
|
20
|
+
@data = data
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday/net_http'
|
5
|
+
require 'json'
|
6
|
+
require 'base64'
|
7
|
+
require 'cgi'
|
8
|
+
|
9
|
+
module TheCompaniesAPI
|
10
|
+
class HttpClient
|
11
|
+
DEFAULT_API_URL = 'https://api.thecompaniesapi.com'
|
12
|
+
DEFAULT_TIMEOUT = 300
|
13
|
+
|
14
|
+
attr_reader :api_token, :api_url, :visitor_id, :connection
|
15
|
+
|
16
|
+
def initialize(api_token: nil, api_url: nil, visitor_id: nil)
|
17
|
+
@api_token = api_token
|
18
|
+
@api_url = api_url || DEFAULT_API_URL
|
19
|
+
@visitor_id = visitor_id
|
20
|
+
|
21
|
+
@connection = build_connection
|
22
|
+
end
|
23
|
+
|
24
|
+
# HTTP method helpers
|
25
|
+
def get(path, params: {})
|
26
|
+
handle_response do
|
27
|
+
connection.get(path, params)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def post(path, body: {})
|
32
|
+
handle_response do
|
33
|
+
connection.post(path, body)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def put(path, body: {})
|
38
|
+
handle_response do
|
39
|
+
connection.put(path, body)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def patch(path, body: {})
|
44
|
+
handle_response do
|
45
|
+
connection.patch(path, body)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def delete(path, params: {})
|
50
|
+
handle_response do
|
51
|
+
connection.delete(path, params)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def build_connection
|
58
|
+
Faraday.new(@api_url) do |conn|
|
59
|
+
conn.adapter :net_http
|
60
|
+
conn.options[:timeout] = DEFAULT_TIMEOUT
|
61
|
+
conn.options[:open_timeout] = 30
|
62
|
+
|
63
|
+
# Add authentication and visitor ID headers
|
64
|
+
conn.request :authorization, 'Basic', @api_token if @api_token
|
65
|
+
conn.headers['Tca-Visitor-Id'] = @visitor_id if @visitor_id
|
66
|
+
conn.headers['User-Agent'] = "thecompaniesapi-ruby/#{TheCompaniesAPI::VERSION}"
|
67
|
+
conn.headers['Content-Type'] = 'application/json'
|
68
|
+
|
69
|
+
# Add middleware for request/response handling
|
70
|
+
conn.request :json
|
71
|
+
conn.response :json, content_type: /\bjson$/
|
72
|
+
|
73
|
+
# Custom middleware for query parameter serialization
|
74
|
+
conn.use QuerySerializer
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Custom Faraday middleware for query serialization
|
79
|
+
class QuerySerializer < Faraday::Middleware
|
80
|
+
def call(env)
|
81
|
+
if env.method == :get && env.params && !env.params.empty?
|
82
|
+
env.url.query = serialize_params(env.params)
|
83
|
+
env.params = {}
|
84
|
+
end
|
85
|
+
@app.call(env)
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def serialize_params(params)
|
91
|
+
search_params = []
|
92
|
+
|
93
|
+
params.each do |key, value|
|
94
|
+
case value
|
95
|
+
when Hash, Array
|
96
|
+
# JSON stringify objects and arrays, then URL encode
|
97
|
+
encoded_value = CGI.escape(JSON.generate(value))
|
98
|
+
search_params << "#{key}=#{encoded_value}"
|
99
|
+
when nil
|
100
|
+
# Skip nil values
|
101
|
+
next
|
102
|
+
else
|
103
|
+
# Convert to string and URL encode
|
104
|
+
encoded_value = CGI.escape(value.to_s)
|
105
|
+
search_params << "#{key}=#{encoded_value}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
search_params.join('&')
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def handle_response
|
114
|
+
response = yield
|
115
|
+
|
116
|
+
case response.status
|
117
|
+
when 200..299
|
118
|
+
response.body
|
119
|
+
when 400..499
|
120
|
+
raise TheCompaniesAPI::Error::ClientError.new(
|
121
|
+
"Client error: #{response.status}",
|
122
|
+
response.status,
|
123
|
+
response.body
|
124
|
+
)
|
125
|
+
when 500..599
|
126
|
+
raise TheCompaniesAPI::Error::ServerError.new(
|
127
|
+
"Server error: #{response.status}",
|
128
|
+
response.status,
|
129
|
+
response.body
|
130
|
+
)
|
131
|
+
else
|
132
|
+
raise TheCompaniesAPI::Error::APIError.new(
|
133
|
+
"Unexpected response: #{response.status}",
|
134
|
+
response.status,
|
135
|
+
response.body
|
136
|
+
)
|
137
|
+
end
|
138
|
+
rescue Faraday::TimeoutError => e
|
139
|
+
raise TheCompaniesAPI::Error::TimeoutError.new("Request timeout: #{e.message}")
|
140
|
+
rescue Faraday::ConnectionFailed => e
|
141
|
+
raise TheCompaniesAPI::Error::ConnectionError.new("Connection failed: #{e.message}")
|
142
|
+
rescue => e
|
143
|
+
raise TheCompaniesAPI::Error::APIError.new("Unexpected error: #{e.message}")
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|