cufinder-ruby 1.0.0 → 1.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +407 -83
- data/cufinder-ruby.gemspec +1 -1
- data/lib/cufinder_ruby/client.rb +48 -0
- data/lib/cufinder_ruby/services.rb +94 -0
- data/lib/cufinder_ruby/types.rb +225 -0
- data/lib/cufinder_ruby/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 44b98b86c620454eac62fab4ba87a4c2e49aaa710d4096825932e6294d037bd9
|
|
4
|
+
data.tar.gz: 574b9c457d9a3fbbbc0602617ba323ba7930499055b485ec162763185dce5305
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2a786c6a1b6f151223eff85114283d736e24e93ee0e946b0eac1900a2b57952261ee7eccb947ca5129fc735ba636c5d259c2cd0ff21aa4a54597801db5bd48c1
|
|
7
|
+
data.tar.gz: 29967a91c181832949a7f9092d96507a3a4cad5bc140cfb5d262fdf2f2b0a0c203d109c790893593a2f22813b16381fcc7d22d125367f2e006db3115f55ae5cc
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Cufinder Ruby SDK Changelog
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## 1.2.0 (June 21, 2026)
|
|
5
|
+
|
|
6
|
+
#### Features
|
|
7
|
+
- **New V2 API services**: Add new V2 services including `CEF`, `NAC`, `CAA` and `CJA`
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## 1.1.0 (February 01, 2026)
|
|
14
|
+
|
|
15
|
+
#### Features
|
|
16
|
+
- **New V2 API services**: Add new V2 services including `BCD`, `CCP`, `ISC`, `CBC`, `CSC`, `CSN`, `NAO` and `NAA`
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#### Documentation
|
|
20
|
+
- **Updated README.md**: Add API reference for all new services
|
data/README.md
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
# CUFinder Ruby
|
|
1
|
+
# CUFinder Ruby SDK
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/cufinder/cufinder-ruby)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://rubygems.org/gems/cufinder-ruby)
|
|
6
|
+
|
|
7
|
+
A Ruby SDK for the CUFinder API that provides access to all company and person enrichment services.
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
- [Installation](#installation)
|
|
12
|
+
- [Usage](#usage)
|
|
13
|
+
- [API Reference](#api-reference)
|
|
14
|
+
- [Error Handling](#error-handling)
|
|
15
|
+
- [Types](#types)
|
|
16
|
+
- [Support](#support)
|
|
4
17
|
|
|
5
18
|
## Installation
|
|
6
19
|
|
|
@@ -24,168 +37,479 @@ gem install cufinder-ruby
|
|
|
24
37
|
|
|
25
38
|
## Usage
|
|
26
39
|
|
|
27
|
-
### Basic Setup
|
|
28
|
-
|
|
29
40
|
```ruby
|
|
30
41
|
require 'cufinder_ruby'
|
|
31
42
|
|
|
32
|
-
# Initialize the client
|
|
43
|
+
# Initialize the client
|
|
33
44
|
client = Cufinder::Client.new(api_key: 'your-api-key-here')
|
|
45
|
+
|
|
46
|
+
# Initialize with more options
|
|
47
|
+
client = Cufinder::Client.new(
|
|
48
|
+
api_key: 'your-api-key-here',
|
|
49
|
+
timeout: 60,
|
|
50
|
+
max_retries: 3
|
|
51
|
+
)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## API Reference
|
|
55
|
+
|
|
56
|
+
This SDK covers all 32 Cufinder API (v2) endpoints:
|
|
57
|
+
|
|
58
|
+
- **CUF** - [Company Name to Domain](https://apidoc.cufinder.io/apis/company-name-to-domain)
|
|
59
|
+
- **LCUF** - [LinkedIn Company URL Finder](https://apidoc.cufinder.io/apis/company-linkedin-url-finder)
|
|
60
|
+
- **DTC** - [Domain to Company Name](https://apidoc.cufinder.io/apis/domain-to-company-name)
|
|
61
|
+
- **DTE** - [Company Email Finder](https://apidoc.cufinder.io/apis/company-email-finder)
|
|
62
|
+
- **NTP** - [Company Phone Finder](https://apidoc.cufinder.io/apis/company-phone-finder)
|
|
63
|
+
- **REL** - [Reverse Email Lookup](https://apidoc.cufinder.io/apis/reverse-email-lookup)
|
|
64
|
+
- **FCL** - [Company Lookalikes Finder](https://apidoc.cufinder.io/apis/company-lookalikes-finder)
|
|
65
|
+
- **ELF** - [Company Fundraising](https://apidoc.cufinder.io/apis/company-fundraising)
|
|
66
|
+
- **CAR** - [Company Revenue Finder](https://apidoc.cufinder.io/apis/company-revenue-finder)
|
|
67
|
+
- **FCC** - [Company Subsidiaries Finder](https://apidoc.cufinder.io/apis/company-subsidiaries-finder)
|
|
68
|
+
- **FTS** - [Company Tech Stack Finder](https://apidoc.cufinder.io/apis/company-tech-stack-finder)
|
|
69
|
+
- **EPP** - [LinkedIn Profile Enrichment](https://apidoc.cufinder.io/apis/linkedin-profile-enrichment)
|
|
70
|
+
- **FWE** - [LinkedIn Profile Email Finder](https://apidoc.cufinder.io/apis/linkedin-profile-email-finder)
|
|
71
|
+
- **TEP** - [Person Enrichment](https://apidoc.cufinder.io/apis/person-enrichment)
|
|
72
|
+
- **ENC** - [Company Enrichment](https://apidoc.cufinder.io/apis/company-enrichment)
|
|
73
|
+
- **CEC** - [Company Employee Count](https://apidoc.cufinder.io/apis/company-employee-count)
|
|
74
|
+
- **CLO** - [Company Locations](https://apidoc.cufinder.io/apis/company-locations)
|
|
75
|
+
- **CSE** - [Company Search](https://apidoc.cufinder.io/apis/company-search)
|
|
76
|
+
- **PSE** - [Person Search](https://apidoc.cufinder.io/apis/person-search)
|
|
77
|
+
- **LBS** - [Local Business Search (Google Maps Search API)](https://apidoc.cufinder.io/apis/local-business-search-google-maps-search-api)
|
|
78
|
+
- **BCD** - [B2B Customers Finder](https://apidoc.cufinder.io/apis/b2b-customers-finder)
|
|
79
|
+
- **CCP** - [Company Career Page Finder](https://apidoc.cufinder.io/apis/company-career-page-finder)
|
|
80
|
+
- **ISC** - [Company Saas Checker](https://apidoc.cufinder.io/apis/company-saas-checker)
|
|
81
|
+
- **CBC** - [Company B2B or B2C Checker](https://apidoc.cufinder.io/apis/company-b2b-or-b2c-checker)
|
|
82
|
+
- **CSC** - [Company Mission Statement](https://apidoc.cufinder.io/apis/company-mission-statement)
|
|
83
|
+
- **CSN** - [Company Snapshot](https://apidoc.cufinder.io/apis/company-snapshot)
|
|
84
|
+
- **NAO** - [Phone Number Normalizer](https://apidoc.cufinder.io/apis/phone-number-normalizer)
|
|
85
|
+
- **NAA** - [Address Normalizer](https://apidoc.cufinder.io/apis/address-normalizer)
|
|
86
|
+
- **CEF** - [Company Employees Finder](https://apidoc.cufinder.io/apis/company-employees-finder)
|
|
87
|
+
- **NAC** - [Company Name Normalizer](https://apidoc.cufinder.io/apis/company-name-normalizer)
|
|
88
|
+
- **CAA** - [Company Activities API](https://apidoc.cufinder.io/apis/company-activities-api)
|
|
89
|
+
- **CJA** - [Company Jobs API](https://apidoc.cufinder.io/apis/company-jobs-api)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
**CUF - Company Name to Domain**
|
|
93
|
+
|
|
94
|
+
Returns the official website URL of a company based on its name.
|
|
95
|
+
|
|
96
|
+
```ruby
|
|
97
|
+
result = client.cuf(company_name: 'cufinder', country_code: 'US')
|
|
98
|
+
puts result
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**LCUF - LinkedIn Company URL Finder**
|
|
102
|
+
|
|
103
|
+
Finds the official LinkedIn company profile URL from a company name.
|
|
104
|
+
|
|
105
|
+
```ruby
|
|
106
|
+
result = client.lcuf(company_name: 'cufinder')
|
|
107
|
+
puts result
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**DTC - Domain to Company Name**
|
|
111
|
+
|
|
112
|
+
Retrieves the registered company name associated with a given website domain.
|
|
113
|
+
|
|
114
|
+
```ruby
|
|
115
|
+
result = client.dtc(company_website: 'cufinder.io')
|
|
116
|
+
puts result
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**DTE - Company Email Finder**
|
|
120
|
+
|
|
121
|
+
Returns up to five general or role-based business email addresses for a company.
|
|
122
|
+
|
|
123
|
+
```ruby
|
|
124
|
+
result = client.dte(company_website: 'cufinder.io')
|
|
125
|
+
puts result
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**NTP - Company Phone Finder**
|
|
129
|
+
|
|
130
|
+
Returns up to two verified phone numbers for a company.
|
|
131
|
+
|
|
132
|
+
```ruby
|
|
133
|
+
result = client.ntp(company_name: 'apple')
|
|
134
|
+
puts result
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**REL - Reverse Email Lookup**
|
|
138
|
+
|
|
139
|
+
Enriches an email address with detailed person and company information.
|
|
140
|
+
|
|
141
|
+
```ruby
|
|
142
|
+
result = client.rel(email: 'iain.mckenzie@stripe.com')
|
|
143
|
+
puts result
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**FCL - Company Lookalikes Finder**
|
|
147
|
+
|
|
148
|
+
Provides a list of similar companies based on an input company's profile.
|
|
149
|
+
|
|
150
|
+
```ruby
|
|
151
|
+
result = client.fcl(query: 'apple')
|
|
152
|
+
puts result
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**ELF - Company Fundraising**
|
|
156
|
+
|
|
157
|
+
Returns detailed funding information about a company.
|
|
158
|
+
|
|
159
|
+
```ruby
|
|
160
|
+
result = client.elf(query: 'cufinder')
|
|
161
|
+
puts result
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**CAR - Company Revenue Finder**
|
|
165
|
+
|
|
166
|
+
Estimates a company's annual revenue based on name.
|
|
167
|
+
|
|
168
|
+
```ruby
|
|
169
|
+
result = client.car(query: 'apple')
|
|
170
|
+
puts result
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**FCC - Company Subsidiaries Finder**
|
|
174
|
+
|
|
175
|
+
Identifies known subsidiaries of a parent company.
|
|
176
|
+
|
|
177
|
+
```ruby
|
|
178
|
+
result = client.fcc(query: 'amazon')
|
|
179
|
+
puts result
|
|
34
180
|
```
|
|
35
181
|
|
|
36
|
-
|
|
182
|
+
**FTS - Company Tech Stack Finder**
|
|
37
183
|
|
|
38
|
-
|
|
184
|
+
Detects the technologies a company uses.
|
|
39
185
|
|
|
40
|
-
#### 1. CUF - Company URL Finder
|
|
41
186
|
```ruby
|
|
42
|
-
result = client.
|
|
43
|
-
puts result
|
|
187
|
+
result = client.fts(query: 'cufinder')
|
|
188
|
+
puts result
|
|
44
189
|
```
|
|
45
190
|
|
|
46
|
-
|
|
191
|
+
**EPP - LinkedIn Profile Enrichment**
|
|
192
|
+
|
|
193
|
+
Takes a LinkedIn profile URL and returns enriched person and company data.
|
|
194
|
+
|
|
47
195
|
```ruby
|
|
48
|
-
result = client.
|
|
49
|
-
puts result
|
|
196
|
+
result = client.epp(linkedin_url: 'linkedin.com/in/iain-mckenzie')
|
|
197
|
+
puts result
|
|
50
198
|
```
|
|
51
199
|
|
|
52
|
-
|
|
200
|
+
**FWE - LinkedIn Profile Email Finder**
|
|
201
|
+
|
|
202
|
+
Extracts a verified business email address from a LinkedIn profile URL.
|
|
203
|
+
|
|
204
|
+
```ruby
|
|
205
|
+
result = client.fwe(linkedin_url: 'linkedin.com/in/iain-mckenzie')
|
|
206
|
+
puts result
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**TEP - Person Enrichment**
|
|
210
|
+
|
|
211
|
+
Returns enriched person data based on full name and company name.
|
|
212
|
+
|
|
213
|
+
```ruby
|
|
214
|
+
result = client.tep(full_name: 'iain mckenzie', company: 'stripe')
|
|
215
|
+
puts result
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**ENC - Company Enrichment**
|
|
219
|
+
|
|
220
|
+
Provides a complete company profile from a company name.
|
|
221
|
+
|
|
53
222
|
```ruby
|
|
54
|
-
result = client.
|
|
55
|
-
puts result
|
|
223
|
+
result = client.enc(query: 'cufinder')
|
|
224
|
+
puts result
|
|
56
225
|
```
|
|
57
226
|
|
|
58
|
-
|
|
227
|
+
**CEC - Company Employee Count**
|
|
228
|
+
|
|
229
|
+
Returns an estimated number of employees for a company.
|
|
230
|
+
|
|
59
231
|
```ruby
|
|
60
|
-
result = client.
|
|
61
|
-
puts result
|
|
232
|
+
result = client.cec(query: 'cufinder')
|
|
233
|
+
puts result
|
|
62
234
|
```
|
|
63
235
|
|
|
64
|
-
|
|
236
|
+
**CLO - Company Locations**
|
|
237
|
+
|
|
238
|
+
Returns the known physical office locations of a company.
|
|
239
|
+
|
|
65
240
|
```ruby
|
|
66
|
-
result = client.
|
|
67
|
-
puts result
|
|
241
|
+
result = client.clo(query: 'apple')
|
|
242
|
+
puts result
|
|
68
243
|
```
|
|
69
244
|
|
|
70
|
-
|
|
245
|
+
**CSE - Company Search**
|
|
246
|
+
|
|
247
|
+
Search for companies by keyword, partial name, industry, location, or other filters.
|
|
248
|
+
|
|
71
249
|
```ruby
|
|
72
|
-
result = client.
|
|
73
|
-
|
|
250
|
+
result = client.cse(
|
|
251
|
+
name: 'cufinder',
|
|
252
|
+
country: 'germany',
|
|
253
|
+
state: 'hamburg',
|
|
254
|
+
city: 'hamburg'
|
|
255
|
+
)
|
|
256
|
+
puts result
|
|
74
257
|
```
|
|
75
258
|
|
|
76
|
-
|
|
259
|
+
**PSE - Person Search**
|
|
260
|
+
|
|
261
|
+
Search for people by name, company, job title, location, or other filters.
|
|
262
|
+
|
|
77
263
|
```ruby
|
|
78
|
-
result = client.
|
|
79
|
-
|
|
264
|
+
result = client.pse(
|
|
265
|
+
full_name: 'iain mckenzie',
|
|
266
|
+
company_name: 'stripe'
|
|
267
|
+
)
|
|
268
|
+
puts result
|
|
80
269
|
```
|
|
81
270
|
|
|
82
|
-
|
|
271
|
+
**LBS - Local Business Search (Google Maps Search API)**
|
|
272
|
+
|
|
273
|
+
Search for local businesses by location, industry, or name.
|
|
274
|
+
|
|
83
275
|
```ruby
|
|
84
|
-
result = client.
|
|
85
|
-
|
|
276
|
+
result = client.lbs(
|
|
277
|
+
country: 'united states',
|
|
278
|
+
state: 'california',
|
|
279
|
+
page: 1
|
|
280
|
+
)
|
|
281
|
+
puts result
|
|
86
282
|
```
|
|
87
283
|
|
|
88
|
-
|
|
284
|
+
**BCD - B2B Customers Finder**
|
|
285
|
+
|
|
286
|
+
Returns B2B customers for a company
|
|
287
|
+
|
|
89
288
|
```ruby
|
|
90
|
-
result = client.
|
|
91
|
-
puts result
|
|
289
|
+
result = client.bcd(url: "stripe.com")
|
|
290
|
+
puts result
|
|
92
291
|
```
|
|
93
292
|
|
|
94
|
-
|
|
293
|
+
**CCP - Company Career Page Finder**
|
|
294
|
+
|
|
295
|
+
Returns company's careers page URL
|
|
296
|
+
|
|
95
297
|
```ruby
|
|
96
|
-
result = client.
|
|
97
|
-
puts result
|
|
298
|
+
result = client.ccp(url: "stripe.com")
|
|
299
|
+
puts result
|
|
98
300
|
```
|
|
99
301
|
|
|
100
|
-
|
|
302
|
+
**ISC - Company Saas Checker**
|
|
303
|
+
|
|
304
|
+
Returns is company SaaS or not
|
|
305
|
+
|
|
101
306
|
```ruby
|
|
102
|
-
result = client.
|
|
103
|
-
puts result
|
|
307
|
+
result = client.isc(url: "stripe.com")
|
|
308
|
+
puts result
|
|
104
309
|
```
|
|
105
310
|
|
|
106
|
-
|
|
311
|
+
**CBC - Company B2B or B2C Checker**
|
|
312
|
+
|
|
313
|
+
Returns company's business type
|
|
314
|
+
|
|
107
315
|
```ruby
|
|
108
|
-
result = client.
|
|
109
|
-
puts result
|
|
316
|
+
result = client.cbc(url: "stripe.com")
|
|
317
|
+
puts result
|
|
110
318
|
```
|
|
111
319
|
|
|
112
|
-
|
|
320
|
+
**CSC - Company Mission Statement**
|
|
321
|
+
|
|
322
|
+
Returns company's mission statement
|
|
323
|
+
|
|
113
324
|
```ruby
|
|
114
|
-
result = client.
|
|
115
|
-
puts result
|
|
325
|
+
result = client.csc(url: "stripe.com")
|
|
326
|
+
puts result
|
|
116
327
|
```
|
|
117
328
|
|
|
118
|
-
|
|
329
|
+
**CSN - Company Snapshot**
|
|
330
|
+
|
|
331
|
+
Returns company's snapshot information
|
|
332
|
+
|
|
119
333
|
```ruby
|
|
120
|
-
result = client.
|
|
121
|
-
puts result
|
|
122
|
-
puts result.person.phone # => "+1-408-996-1010"
|
|
334
|
+
result = client.csn(url: "stripe.com")
|
|
335
|
+
puts result
|
|
123
336
|
```
|
|
124
337
|
|
|
125
|
-
|
|
338
|
+
**NAO - Phone Number Normalizer**
|
|
339
|
+
|
|
340
|
+
Returns normalized phone
|
|
341
|
+
|
|
126
342
|
```ruby
|
|
127
|
-
result = client.
|
|
128
|
-
puts result
|
|
343
|
+
result = client.nao(phone: "+18006676389")
|
|
344
|
+
puts result
|
|
129
345
|
```
|
|
130
346
|
|
|
131
|
-
|
|
347
|
+
**NAA - Address Normalizer**
|
|
348
|
+
|
|
349
|
+
Returns normalized address
|
|
350
|
+
|
|
132
351
|
```ruby
|
|
133
|
-
result = client.
|
|
134
|
-
puts result
|
|
352
|
+
result = client.naa(address: "1095 avenue of the Americas, 6th Avenue ny 10036")
|
|
353
|
+
puts result
|
|
135
354
|
```
|
|
136
355
|
|
|
137
|
-
|
|
356
|
+
**CEF - Company Employees Finder**
|
|
357
|
+
|
|
358
|
+
Returns company's employees
|
|
359
|
+
|
|
138
360
|
```ruby
|
|
139
|
-
result = client.
|
|
140
|
-
puts result
|
|
361
|
+
result = client.cef(query: "cufinder", page: 1)
|
|
362
|
+
puts result
|
|
141
363
|
```
|
|
142
364
|
|
|
143
|
-
|
|
365
|
+
**NAC - Company Name Normalizer**
|
|
366
|
+
|
|
367
|
+
Returns normalized company name
|
|
368
|
+
|
|
144
369
|
```ruby
|
|
145
|
-
result = client.
|
|
146
|
-
puts result
|
|
370
|
+
result = client.nac(company: "cufinder inc.")
|
|
371
|
+
puts result
|
|
147
372
|
```
|
|
148
373
|
|
|
149
|
-
|
|
374
|
+
**CAA - Company Activities API**
|
|
375
|
+
|
|
376
|
+
Returns company's LinkedIn activities
|
|
377
|
+
|
|
150
378
|
```ruby
|
|
151
|
-
result = client.
|
|
152
|
-
puts result
|
|
379
|
+
result = client.caa(query: "cufinder", page: 1)
|
|
380
|
+
puts result
|
|
153
381
|
```
|
|
154
382
|
|
|
155
|
-
|
|
383
|
+
**CJA - Company Jobs API**
|
|
384
|
+
|
|
385
|
+
Returns company's job listings
|
|
386
|
+
|
|
156
387
|
```ruby
|
|
157
|
-
result = client.
|
|
158
|
-
puts result
|
|
388
|
+
result = client.cja(name: "google", country: "united states", page: 1)
|
|
389
|
+
puts result
|
|
159
390
|
```
|
|
160
391
|
|
|
161
|
-
|
|
392
|
+
## Error Handling
|
|
162
393
|
|
|
163
|
-
The
|
|
394
|
+
The SDK provides comprehensive error handling with custom error types:
|
|
164
395
|
|
|
165
396
|
```ruby
|
|
397
|
+
require 'cufinder_ruby'
|
|
398
|
+
|
|
166
399
|
begin
|
|
167
|
-
result = client.cuf(company_name:
|
|
400
|
+
result = client.cuf(company_name: 'cufinder', country_code: 'US')
|
|
168
401
|
rescue Cufinder::AuthenticationError => e
|
|
402
|
+
# 401 - Invalid API key
|
|
169
403
|
puts "Authentication failed: #{e.message}"
|
|
404
|
+
rescue Cufinder::CreditLimitError => e
|
|
405
|
+
# 400 - Not enough credit
|
|
406
|
+
puts "Not enough credit: #{e.message}"
|
|
407
|
+
rescue Cufinder::NotFoundError => e
|
|
408
|
+
# 404 - Not found result
|
|
409
|
+
puts "Not found result: #{e.message}"
|
|
410
|
+
rescue Cufinder::PayloadError => e
|
|
411
|
+
# 422 - Error in the payload
|
|
412
|
+
puts "Payload error: #{e.message}"
|
|
170
413
|
rescue Cufinder::RateLimitError => e
|
|
414
|
+
# 429 - Rate limit exceeded
|
|
171
415
|
puts "Rate limit exceeded: #{e.message}"
|
|
172
|
-
rescue Cufinder::
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
416
|
+
rescue Cufinder::ServerError => e
|
|
417
|
+
# 500, 501, ... - Server errors
|
|
418
|
+
puts "Server error (#{e.status}): #{e.message}"
|
|
419
|
+
rescue Cufinder::NetworkError => e
|
|
420
|
+
puts "Network error: #{e.message}"
|
|
176
421
|
rescue Cufinder::ValidationError => e
|
|
177
422
|
puts "Validation error: #{e.message}"
|
|
423
|
+
rescue Cufinder::ApiError => e
|
|
424
|
+
puts "Unknown error: #{e.message}"
|
|
178
425
|
end
|
|
179
426
|
```
|
|
180
427
|
|
|
181
|
-
|
|
428
|
+
## Types
|
|
182
429
|
|
|
183
|
-
|
|
430
|
+
The SDK exports comprehensive Ruby classes for all API requests and responses:
|
|
184
431
|
|
|
185
432
|
```ruby
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
433
|
+
# Response classes
|
|
434
|
+
class BaseResponse
|
|
435
|
+
attr_reader :query, :credit_count
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
# Model classes
|
|
439
|
+
class Company
|
|
440
|
+
# The Company class contains all returned company data.
|
|
441
|
+
attr_reader :name, :domain, :website, :linkedin_url
|
|
442
|
+
attr_reader :country, :state, :city, :address
|
|
443
|
+
attr_reader :industry, :company_size, :revenue
|
|
444
|
+
attr_reader :employee_count, :subsidiaries, :tech_stack
|
|
445
|
+
attr_reader :emails, :phones, :description
|
|
446
|
+
attr_reader :locations, :founded_year, :logo_url
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
class Person
|
|
450
|
+
# The Person class contains all returned person data.
|
|
451
|
+
attr_reader :full_name, :first_name, :last_name
|
|
452
|
+
attr_reader :company_name, :company_domain, :job_title
|
|
453
|
+
attr_reader :country, :state, :city
|
|
454
|
+
attr_reader :email, :phone, :description, :linkedin_url
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
class LookalikeCompany
|
|
458
|
+
# The LookalikeCompany class contains all returned lookalike company data.
|
|
459
|
+
attr_reader :name, :domain, :website, :linkedin_url
|
|
460
|
+
attr_reader :country, :state, :city, :address
|
|
461
|
+
attr_reader :industry, :company_size, :revenue
|
|
462
|
+
attr_reader :employee_count, :subsidiaries, :tech_stack
|
|
463
|
+
attr_reader :emails, :phones, :description
|
|
464
|
+
attr_reader :locations, :founded_year, :logo_url
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
class FundraisingInfo
|
|
468
|
+
attr_reader :funding_last_round_type
|
|
469
|
+
attr_reader :funding_ammount_currency_code
|
|
470
|
+
attr_reader :funding_money_raised
|
|
471
|
+
attr_reader :funding_last_round_investors_url
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
class CompanyLocation
|
|
475
|
+
# The CompanyLocation class contains all returned company location data.
|
|
476
|
+
attr_reader :country, :state, :city, :postal_code
|
|
477
|
+
attr_reader :line1, :line2, :latitude, :longitude
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
class CompanySearchResult
|
|
481
|
+
attr_reader :companies, :total_results, :page
|
|
482
|
+
attr_reader :query, :credit_count
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
class PersonSearchResult
|
|
486
|
+
attr_reader :peoples, :total_results, :page
|
|
487
|
+
attr_reader :query, :credit_count
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
class LocalBusinessResult
|
|
491
|
+
attr_reader :businesses, :total_results, :page
|
|
492
|
+
attr_reader :query, :credit_count
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
# Configuration
|
|
496
|
+
class ClientConfig
|
|
497
|
+
attr_accessor :api_key, :base_url, :timeout, :max_retries
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
# Error classes
|
|
501
|
+
class CufinderError < StandardError; end
|
|
502
|
+
class AuthenticationError < CufinderError; end
|
|
503
|
+
class CreditLimitError < CufinderError; end
|
|
504
|
+
class NotFoundError < CufinderError; end
|
|
505
|
+
class PayloadError < CufinderError; end
|
|
506
|
+
class RateLimitError < CufinderError; end
|
|
507
|
+
class ServerError < CufinderError; end
|
|
508
|
+
class NetworkError < CufinderError; end
|
|
509
|
+
class ValidationError < CufinderError; end
|
|
510
|
+
class ApiError < CufinderError; end
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## Support
|
|
514
|
+
|
|
515
|
+
For support, please open an issue on the [GitHub repository](https://github.com/cufinder/cufinder-ruby/issues).
|
data/cufinder-ruby.gemspec
CHANGED
data/lib/cufinder_ruby/client.rb
CHANGED
|
@@ -109,5 +109,53 @@ module Cufinder
|
|
|
109
109
|
def lbs(**params)
|
|
110
110
|
@services.search_local_businesses(params)
|
|
111
111
|
end
|
|
112
|
+
|
|
113
|
+
def bcd(url:)
|
|
114
|
+
@services.extract_b2b_customers(url: url)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def ccp(url:)
|
|
118
|
+
@services.find_company_careers_page(url: url)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def isc(url:)
|
|
122
|
+
@services.is_saas(url: url)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def cbc(url:)
|
|
126
|
+
@services.get_company_business_type(url: url)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def csc(url:)
|
|
130
|
+
@services.get_company_mission_statement(url: url)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def csn(url:)
|
|
134
|
+
@services.get_company_snapshot(url: url)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def nao(phone:)
|
|
138
|
+
@services.normalize_phone(phone: phone)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def naa(address:)
|
|
142
|
+
@services.normalize_address(address: address)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def cef(query:, page:)
|
|
146
|
+
@services.find_company_employees(query: query, page: page)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def nac(company:)
|
|
150
|
+
@services.normalize_company_name(company: company)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def caa(query:, page:)
|
|
154
|
+
@services.get_company_activities(query: query, page: page)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def cja(**params)
|
|
158
|
+
@services.search_company_jobs(params)
|
|
159
|
+
end
|
|
112
160
|
end
|
|
113
161
|
end
|
|
@@ -164,6 +164,100 @@ module Cufinder
|
|
|
164
164
|
response = @client.post("/lbs", params)
|
|
165
165
|
LbsResponse.new(response)
|
|
166
166
|
end
|
|
167
|
+
|
|
168
|
+
# BCD Service - B2B Customers Finder
|
|
169
|
+
def extract_b2b_customers(params)
|
|
170
|
+
validate_required(params, [:url])
|
|
171
|
+
|
|
172
|
+
response = @client.post("/bcd", params)
|
|
173
|
+
BcdResponse.new(response)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# CCP Service - Company Career Page Finder
|
|
177
|
+
def find_company_careers_page(params)
|
|
178
|
+
validate_required(params, [:url])
|
|
179
|
+
|
|
180
|
+
response = @client.post("/ccp", params)
|
|
181
|
+
CcpResponse.new(response)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# ISC Service - Company Saas Checker
|
|
185
|
+
def is_saas(params)
|
|
186
|
+
validate_required(params, [:url])
|
|
187
|
+
|
|
188
|
+
response = @client.post("/isc", params)
|
|
189
|
+
IscResponse.new(response)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# CBC Service - Company B2B or B2C Checker
|
|
193
|
+
def get_company_business_type(params)
|
|
194
|
+
validate_required(params, [:url])
|
|
195
|
+
|
|
196
|
+
response = @client.post("/cbc", params)
|
|
197
|
+
CbcResponse.new(response)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# CSC Service - Company Mission Statement
|
|
201
|
+
def get_company_mission_statement(params)
|
|
202
|
+
validate_required(params, [:url])
|
|
203
|
+
|
|
204
|
+
response = @client.post("/csc", params)
|
|
205
|
+
CscResponse.new(response)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
# CSN Service - Company Snapshot
|
|
209
|
+
def get_company_snapshot(params)
|
|
210
|
+
validate_required(params, [:url])
|
|
211
|
+
|
|
212
|
+
response = @client.post("/csn", params)
|
|
213
|
+
CsnResponse.new(response)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Nao Service - Phone Number Normalizer
|
|
217
|
+
def normalize_phone(params)
|
|
218
|
+
validate_required(params, [:phone])
|
|
219
|
+
|
|
220
|
+
response = @client.post("/nao", params)
|
|
221
|
+
NaoResponse.new(response)
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Naa Service - Address Normalizer
|
|
225
|
+
def normalize_address(params)
|
|
226
|
+
validate_required(params, [:address])
|
|
227
|
+
|
|
228
|
+
response = @client.post("/naa", params)
|
|
229
|
+
NaaResponse.new(response)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# CEF Service - Company Employees Finder
|
|
233
|
+
def find_company_employees(params)
|
|
234
|
+
validate_required(params, [:query, :page])
|
|
235
|
+
|
|
236
|
+
response = @client.post("/cef", params)
|
|
237
|
+
CefResponse.new(response)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# NAC Service - Company Name Normalizer
|
|
241
|
+
def normalize_company_name(params)
|
|
242
|
+
validate_required(params, [:company])
|
|
243
|
+
|
|
244
|
+
response = @client.post("/nac", params)
|
|
245
|
+
NacResponse.new(response)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# CAA Service - Company Activities API
|
|
249
|
+
def get_company_activities(params)
|
|
250
|
+
validate_required(params, [:query, :page])
|
|
251
|
+
|
|
252
|
+
response = @client.post("/caa", params)
|
|
253
|
+
CaaResponse.new(response)
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# CJA Service - Company Jobs API
|
|
257
|
+
def search_company_jobs(params)
|
|
258
|
+
response = @client.post("/cja", params)
|
|
259
|
+
CjaResponse.new(response)
|
|
260
|
+
end
|
|
167
261
|
|
|
168
262
|
private
|
|
169
263
|
|
data/lib/cufinder_ruby/types.rb
CHANGED
|
@@ -518,4 +518,229 @@ module Cufinder
|
|
|
518
518
|
@companies = (data["companies"] || []).map { |c| Company.new(c) }
|
|
519
519
|
end
|
|
520
520
|
end
|
|
521
|
+
|
|
522
|
+
class BcdResponse < BaseResponse
|
|
523
|
+
attr_accessor :customers
|
|
524
|
+
|
|
525
|
+
def initialize(data = {})
|
|
526
|
+
super(data)
|
|
527
|
+
@customers = data["customers"] || []
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
class CcpResponse < BaseResponse
|
|
532
|
+
attr_accessor :customers
|
|
533
|
+
|
|
534
|
+
def initialize(data = {})
|
|
535
|
+
super(data)
|
|
536
|
+
@careers_page_url = data["careers_page_url"]
|
|
537
|
+
end
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
class IscResponse < BaseResponse
|
|
541
|
+
attr_accessor :is_saas
|
|
542
|
+
|
|
543
|
+
def initialize(data = {})
|
|
544
|
+
super(data)
|
|
545
|
+
@is_saas = data["is_saas"]
|
|
546
|
+
end
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
class CbcResponse < BaseResponse
|
|
550
|
+
attr_accessor :business_type
|
|
551
|
+
|
|
552
|
+
def initialize(data = {})
|
|
553
|
+
super(data)
|
|
554
|
+
@business_type = data["business_type"]
|
|
555
|
+
end
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
class CscResponse < BaseResponse
|
|
559
|
+
attr_accessor :mission_statement
|
|
560
|
+
|
|
561
|
+
def initialize(data = {})
|
|
562
|
+
super(data)
|
|
563
|
+
@mission_statement = data["mission_statement"]
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
class CsnSnapshotInfo
|
|
568
|
+
attr_accessor :icp, :target_industries, :target_personas, :value_proposition
|
|
569
|
+
|
|
570
|
+
def initialize(data = {})
|
|
571
|
+
@icp = data["icp"]
|
|
572
|
+
@target_industries = data["target_industries"] || []
|
|
573
|
+
@target_personas = data["target_personas"]
|
|
574
|
+
@value_proposition = data["value_proposition"]
|
|
575
|
+
end
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
class CsnResponse < BaseResponse
|
|
579
|
+
attr_accessor :company_snapshot
|
|
580
|
+
|
|
581
|
+
def initialize(data = {})
|
|
582
|
+
super(data)
|
|
583
|
+
@company_snapshot = data["company_snapshot"] ? CsnSnapshotInfo.new(data["company_snapshot"]) : nil
|
|
584
|
+
end
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
class NaoResponse < BaseResponse
|
|
588
|
+
attr_accessor :phone
|
|
589
|
+
|
|
590
|
+
def initialize(data = {})
|
|
591
|
+
super(data)
|
|
592
|
+
@phone = data["phone"]
|
|
593
|
+
end
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
class NaaResponse < BaseResponse
|
|
597
|
+
attr_accessor :address
|
|
598
|
+
|
|
599
|
+
def initialize(data = {})
|
|
600
|
+
super(data)
|
|
601
|
+
@address = data["address"]
|
|
602
|
+
end
|
|
603
|
+
end
|
|
604
|
+
|
|
605
|
+
# CEF Employee
|
|
606
|
+
class CefEmployee
|
|
607
|
+
attr_accessor :full_name, :first_name, :last_name, :linkedin_url, :summary,
|
|
608
|
+
:avatar, :country, :state, :city, :job_title,
|
|
609
|
+
:job_title_categories, :company_name, :company_linkedin,
|
|
610
|
+
:company_website, :company_size, :company_industry,
|
|
611
|
+
:company_facebook, :company_twitter, :company_country,
|
|
612
|
+
:company_state, :company_city
|
|
613
|
+
|
|
614
|
+
def initialize(data = {})
|
|
615
|
+
@full_name = data["full_name"]
|
|
616
|
+
@first_name = data["first_name"]
|
|
617
|
+
@last_name = data["last_name"]
|
|
618
|
+
@linkedin_url = data["linkedin_url"]
|
|
619
|
+
@summary = data["summary"]
|
|
620
|
+
@avatar = data["avatar"]
|
|
621
|
+
@country = data["country"]
|
|
622
|
+
@state = data["state"]
|
|
623
|
+
@city = data["city"]
|
|
624
|
+
@job_title = data["job_title"]
|
|
625
|
+
@job_title_categories = data["job_title_categories"]
|
|
626
|
+
@company_name = data["company_name"]
|
|
627
|
+
@company_linkedin = data["company_linkedin"]
|
|
628
|
+
@company_website = data["company_website"]
|
|
629
|
+
@company_size = data["company_size"]
|
|
630
|
+
@company_industry = data["company_industry"]
|
|
631
|
+
@company_facebook = data["company_facebook"]
|
|
632
|
+
@company_twitter = data["company_twitter"]
|
|
633
|
+
@company_country = data["company_country"]
|
|
634
|
+
@company_state = data["company_state"]
|
|
635
|
+
@company_city = data["company_city"]
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
class CefResponse < BaseResponse
|
|
640
|
+
attr_accessor :employees
|
|
641
|
+
|
|
642
|
+
def initialize(data = {})
|
|
643
|
+
super(data)
|
|
644
|
+
@employees = (data["employees"] || []).map { |e| CefEmployee.new(e) }
|
|
645
|
+
end
|
|
646
|
+
end
|
|
647
|
+
|
|
648
|
+
class NacResponse < BaseResponse
|
|
649
|
+
attr_accessor :company
|
|
650
|
+
|
|
651
|
+
def initialize(data = {})
|
|
652
|
+
super(data)
|
|
653
|
+
@company = data["company"]
|
|
654
|
+
end
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
# CAA Activity
|
|
658
|
+
class CaaActivity
|
|
659
|
+
attr_accessor :activity_url, :activity_id, :author_name, :author_type, :author_url,
|
|
660
|
+
:activity_comments_count, :activity_hashtags, :activity_headline,
|
|
661
|
+
:activity_images, :activity_is_video, :activity_posted_at,
|
|
662
|
+
:activity_reactions_count, :activity_reposts_count, :activity_text,
|
|
663
|
+
:activity_top_comments, :activity_videos
|
|
664
|
+
|
|
665
|
+
def initialize(data = {})
|
|
666
|
+
@activity_url = data["activity_url"]
|
|
667
|
+
@activity_id = data["activity_id"]
|
|
668
|
+
@author_name = data["author_name"]
|
|
669
|
+
@author_type = data["author_type"]
|
|
670
|
+
@author_url = data["author_url"]
|
|
671
|
+
@activity_comments_count = data["activity_comments_count"]
|
|
672
|
+
@activity_hashtags = data["activity_hashtags"] || []
|
|
673
|
+
@activity_headline = data["activity_headline"]
|
|
674
|
+
@activity_images = data["activity_images"] || []
|
|
675
|
+
@activity_is_video = data["activity_is_video"]
|
|
676
|
+
@activity_posted_at = data["activity_posted_at"]
|
|
677
|
+
@activity_reactions_count = data["activity_reactions_count"]
|
|
678
|
+
@activity_reposts_count = data["activity_reposts_count"]
|
|
679
|
+
@activity_text = data["activity_text"]
|
|
680
|
+
@activity_top_comments = data["activity_top_comments"] || []
|
|
681
|
+
@activity_videos = data["activity_videos"] || []
|
|
682
|
+
end
|
|
683
|
+
end
|
|
684
|
+
|
|
685
|
+
class CaaResponse < BaseResponse
|
|
686
|
+
attr_accessor :activities
|
|
687
|
+
|
|
688
|
+
def initialize(data = {})
|
|
689
|
+
super(data)
|
|
690
|
+
@activities = (data["activities"] || []).map { |a| CaaActivity.new(a) }
|
|
691
|
+
end
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
# CJA Company (within job listing)
|
|
695
|
+
class CjaCompany
|
|
696
|
+
attr_accessor :name, :industry, :website, :linkedin, :followers_count,
|
|
697
|
+
:employees, :founded_date, :annual_revenue, :funding_amount,
|
|
698
|
+
:main_location
|
|
699
|
+
|
|
700
|
+
def initialize(data = {})
|
|
701
|
+
@name = data["name"]
|
|
702
|
+
@industry = data["industry"]
|
|
703
|
+
@website = data["website"]
|
|
704
|
+
@linkedin = data["linkedin"]
|
|
705
|
+
@followers_count = data["followers_count"]
|
|
706
|
+
@employees = data["employees"]
|
|
707
|
+
@founded_date = data["founded_date"]
|
|
708
|
+
@annual_revenue = data["annual_revenue"]
|
|
709
|
+
@funding_amount = data["funding_amount"]
|
|
710
|
+
@main_location = data["main_location"] ? MainLocation.new(data["main_location"]) : nil
|
|
711
|
+
end
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
# CJA Job listing
|
|
715
|
+
class CjaJob
|
|
716
|
+
attr_accessor :job_id, :title, :url, :location, :posted_at, :posted_at_text
|
|
717
|
+
|
|
718
|
+
def initialize(data = {})
|
|
719
|
+
@job_id = data["job_id"]
|
|
720
|
+
@title = data["title"]
|
|
721
|
+
@url = data["url"]
|
|
722
|
+
@location = data["location"]
|
|
723
|
+
@posted_at = data["posted_at"]
|
|
724
|
+
@posted_at_text = data["posted_at_text"]
|
|
725
|
+
end
|
|
726
|
+
end
|
|
727
|
+
|
|
728
|
+
# CJA Company Job (combined company + job)
|
|
729
|
+
class CompanyJob
|
|
730
|
+
attr_accessor :company, :job
|
|
731
|
+
|
|
732
|
+
def initialize(data = {})
|
|
733
|
+
@company = data["company"] ? CjaCompany.new(data["company"]) : nil
|
|
734
|
+
@job = data["job"] ? CjaJob.new(data["job"]) : nil
|
|
735
|
+
end
|
|
736
|
+
end
|
|
737
|
+
|
|
738
|
+
class CjaResponse < BaseResponse
|
|
739
|
+
attr_accessor :jobs
|
|
740
|
+
|
|
741
|
+
def initialize(data = {})
|
|
742
|
+
super(data)
|
|
743
|
+
@jobs = (data["jobs"] || []).map { |j| CompanyJob.new(j) }
|
|
744
|
+
end
|
|
745
|
+
end
|
|
521
746
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cufinder-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- CUFinder Team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-06-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: httparty
|
|
@@ -89,6 +89,7 @@ extra_rdoc_files: []
|
|
|
89
89
|
files:
|
|
90
90
|
- ".gitignore"
|
|
91
91
|
- ".rspec"
|
|
92
|
+
- CHANGELOG.md
|
|
92
93
|
- Gemfile
|
|
93
94
|
- LICENSE
|
|
94
95
|
- README.md
|