cufinder-ruby 1.1.0 → 1.3.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 +15 -0
- data/README.md +131 -3
- 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 +324 -0
- data/lib/cufinder_ruby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cc7f5e63b564fee6e9888b8bd083c59d0d68a706c30347e577ac5ca5c16156ae
|
|
4
|
+
data.tar.gz: 287db7dcf6eee9afe5accc262dbbc2bfaa12b3f66cac1579fa6241aba21674e0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9312069155fbf85312c434e7f7b5e1609146b4bbfe4953d19868b67a9ac4fb43471e47209125612dde3612d42050304531b0e3cd36e748dc6ba92b2e14f4116e
|
|
7
|
+
data.tar.gz: 705a265b7dd088a5baf4b228006f724e9b34d894906b9cf9605f983925aa1aa322ad3386157d45a43904085ba409a12ec9e2d28d92fc642663565b864d607264
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
# Cufinder Ruby SDK Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## 1.3.0 (August 16, 2026)
|
|
5
|
+
|
|
6
|
+
#### Features
|
|
7
|
+
- **New V2 API services**: Add new V2 services including `PSA`, `CSA`, `JCA`, `CLF`, `NAP`, `NAU`, `GDC` and `COT`
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 1.2.0 (June 21, 2026)
|
|
11
|
+
|
|
12
|
+
#### Features
|
|
13
|
+
- **New V2 API services**: Add new V2 services including `CEF`, `NAC`, `CAA` and `CJA`
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
4
19
|
## 1.1.0 (February 01, 2026)
|
|
5
20
|
|
|
6
21
|
#### Features
|
data/README.md
CHANGED
|
@@ -53,7 +53,7 @@ client = Cufinder::Client.new(
|
|
|
53
53
|
|
|
54
54
|
## API Reference
|
|
55
55
|
|
|
56
|
-
This SDK covers all
|
|
56
|
+
This SDK covers all 40 Cufinder API (v2) endpoints:
|
|
57
57
|
|
|
58
58
|
- **CUF** - [Company Name to Domain](https://apidoc.cufinder.io/apis/company-name-to-domain)
|
|
59
59
|
- **LCUF** - [LinkedIn Company URL Finder](https://apidoc.cufinder.io/apis/company-linkedin-url-finder)
|
|
@@ -83,6 +83,18 @@ This SDK covers all 28 Cufinder API (v2) endpoints:
|
|
|
83
83
|
- **CSN** - [Company Snapshot](https://apidoc.cufinder.io/apis/company-snapshot)
|
|
84
84
|
- **NAO** - [Phone Number Normalizer](https://apidoc.cufinder.io/apis/phone-number-normalizer)
|
|
85
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
|
+
- **PSA** - [Contact Signals API](https://apidoc.cufinder.io/apis/contact-signals-api)
|
|
91
|
+
- **CSA** - [Company Signals API](https://apidoc.cufinder.io/apis/company-signals-api)
|
|
92
|
+
- **JCA** - [Job Changes API](https://apidoc.cufinder.io/apis/job-changes-api)
|
|
93
|
+
- **CLF** - [Contact Lookalikes API](https://apidoc.cufinder.io/apis/contact-lookalikes-api)
|
|
94
|
+
- **NAP** - [Person Name Normalizer](https://apidoc.cufinder.io/apis/person-name-normalizer)
|
|
95
|
+
- **NAU** - [URL Normalizer](https://apidoc.cufinder.io/apis/url-normalizer)
|
|
96
|
+
- **GDC** - [Gives Demo Checker](https://apidoc.cufinder.io/apis/gives-demo-checker)
|
|
97
|
+
- **COT** - [Offers Free Trial Checker](https://apidoc.cufinder.io/apis/offers-free-trial-checker)
|
|
86
98
|
|
|
87
99
|
|
|
88
100
|
**CUF - Company Name to Domain**
|
|
@@ -279,7 +291,7 @@ puts result
|
|
|
279
291
|
|
|
280
292
|
**BCD - B2B Customers Finder**
|
|
281
293
|
|
|
282
|
-
Returns
|
|
294
|
+
Returns B2B customers for a company
|
|
283
295
|
|
|
284
296
|
```ruby
|
|
285
297
|
result = client.bcd(url: "stripe.com")
|
|
@@ -288,7 +300,7 @@ puts result
|
|
|
288
300
|
|
|
289
301
|
**CCP - Company Career Page Finder**
|
|
290
302
|
|
|
291
|
-
Returns
|
|
303
|
+
Returns company's careers page URL
|
|
292
304
|
|
|
293
305
|
```ruby
|
|
294
306
|
result = client.ccp(url: "stripe.com")
|
|
@@ -349,6 +361,122 @@ result = client.naa(address: "1095 avenue of the Americas, 6th Avenue ny 10036")
|
|
|
349
361
|
puts result
|
|
350
362
|
```
|
|
351
363
|
|
|
364
|
+
**CEF - Company Employees Finder**
|
|
365
|
+
|
|
366
|
+
Returns company's employees
|
|
367
|
+
|
|
368
|
+
```ruby
|
|
369
|
+
result = client.cef(query: "cufinder", page: 1)
|
|
370
|
+
puts result
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**NAC - Company Name Normalizer**
|
|
374
|
+
|
|
375
|
+
Returns normalized company name
|
|
376
|
+
|
|
377
|
+
```ruby
|
|
378
|
+
result = client.nac(company: "cufinder inc.")
|
|
379
|
+
puts result
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**CAA - Company Activities API**
|
|
383
|
+
|
|
384
|
+
Returns company's LinkedIn activities
|
|
385
|
+
|
|
386
|
+
```ruby
|
|
387
|
+
result = client.caa(query: "cufinder", page: 1)
|
|
388
|
+
puts result
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**CJA - Company Jobs API**
|
|
392
|
+
|
|
393
|
+
Returns company's job listings
|
|
394
|
+
|
|
395
|
+
```ruby
|
|
396
|
+
result = client.cja(name: "google", country: "united states", page: 1)
|
|
397
|
+
puts result
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**PSA - Contact Signals API**
|
|
401
|
+
|
|
402
|
+
Returns contacts based on company signals
|
|
403
|
+
|
|
404
|
+
```ruby
|
|
405
|
+
result = client.psa(signal_name: "employee_growth", time_frame: 90, bucket: "high", page: 1)
|
|
406
|
+
result.contacts.each do |contact|
|
|
407
|
+
puts "#{contact.full_name} - #{contact.company['name']}"
|
|
408
|
+
end
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**CSA - Company Signals API**
|
|
412
|
+
|
|
413
|
+
Returns companies based on signals
|
|
414
|
+
|
|
415
|
+
```ruby
|
|
416
|
+
result = client.csa(signal_name: "employee_growth", time_frame: 90, bucket: "high", page: 1)
|
|
417
|
+
result.companies.each do |company|
|
|
418
|
+
puts "#{company.name} - #{company.domain}"
|
|
419
|
+
end
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**JCA - Job Changes API**
|
|
423
|
+
|
|
424
|
+
Returns job changes within a date range
|
|
425
|
+
|
|
426
|
+
```ruby
|
|
427
|
+
result = client.jca(start_date: "2026-01-01", end_date: "2026-08-16", type: "promotion")
|
|
428
|
+
result.job_changes.each do |change|
|
|
429
|
+
puts "#{change.type}: #{change.from.title} -> #{change.to.title}"
|
|
430
|
+
end
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
**CLF - Contact Lookalikes API**
|
|
434
|
+
|
|
435
|
+
Returns similar contacts based on a query
|
|
436
|
+
|
|
437
|
+
```ruby
|
|
438
|
+
result = client.clf(query: "linkedin.com/in/mortezaheydari1997")
|
|
439
|
+
result.profiles.each do |profile|
|
|
440
|
+
puts "#{profile.full_name} - #{profile.company_name}"
|
|
441
|
+
end
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
**NAP - Person Name Normalizer**
|
|
445
|
+
|
|
446
|
+
Normalizes a person name
|
|
447
|
+
|
|
448
|
+
```ruby
|
|
449
|
+
result = client.nap(person_name: "morteza heydari")
|
|
450
|
+
puts result.normalized_name
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
**NAU - URL Normalizer**
|
|
454
|
+
|
|
455
|
+
Normalizes a URL
|
|
456
|
+
|
|
457
|
+
```ruby
|
|
458
|
+
result = client.nau(url: "https://www.cufinder.io/about-us")
|
|
459
|
+
puts result.normalized_url
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
**GDC - Gives Demo Checker**
|
|
463
|
+
|
|
464
|
+
Checks if a company offers demos
|
|
465
|
+
|
|
466
|
+
```ruby
|
|
467
|
+
result = client.gdc(url: "https://www.stripe.com")
|
|
468
|
+
puts result.offers_demo
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
**COT - Offers Free Trial Checker**
|
|
472
|
+
|
|
473
|
+
Checks if a company offers a free trial
|
|
474
|
+
|
|
475
|
+
```ruby
|
|
476
|
+
result = client.cot(url: "https://www.stripe.com")
|
|
477
|
+
puts result.offers_free_trial
|
|
478
|
+
```
|
|
479
|
+
|
|
352
480
|
## Error Handling
|
|
353
481
|
|
|
354
482
|
The SDK provides comprehensive error handling with custom error types:
|
data/cufinder-ruby.gemspec
CHANGED
data/lib/cufinder_ruby/client.rb
CHANGED
|
@@ -141,5 +141,53 @@ module Cufinder
|
|
|
141
141
|
def naa(address:)
|
|
142
142
|
@services.normalize_address(address: address)
|
|
143
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
|
|
160
|
+
|
|
161
|
+
def psa(**params)
|
|
162
|
+
@services.get_contact_signals(params)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def csa(**params)
|
|
166
|
+
@services.get_company_signals(params)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def jca(**params)
|
|
170
|
+
@services.get_job_changes(params)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def clf(**params)
|
|
174
|
+
@services.find_contact_lookalikes(params)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def nap(**params)
|
|
178
|
+
@services.normalize_person_name(params)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def nau(**params)
|
|
182
|
+
@services.normalize_url(params)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def gdc(**params)
|
|
186
|
+
@services.gives_demo(params)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def cot(**params)
|
|
190
|
+
@services.offers_free_trial(params)
|
|
191
|
+
end
|
|
144
192
|
end
|
|
145
193
|
end
|
|
@@ -228,6 +228,100 @@ module Cufinder
|
|
|
228
228
|
response = @client.post("/naa", params)
|
|
229
229
|
NaaResponse.new(response)
|
|
230
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
|
|
261
|
+
|
|
262
|
+
# PSA Service - Contact Signals API
|
|
263
|
+
def get_contact_signals(params)
|
|
264
|
+
validate_required(params, [:signal_name, :time_frame, :bucket])
|
|
265
|
+
|
|
266
|
+
response = @client.post("/psa", params)
|
|
267
|
+
PsaResponse.new(response)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# CSA Service - Company Signals API
|
|
271
|
+
def get_company_signals(params)
|
|
272
|
+
validate_required(params, [:signal_name, :time_frame, :bucket])
|
|
273
|
+
|
|
274
|
+
response = @client.post("/csa", params)
|
|
275
|
+
CsaResponse.new(response)
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# JCA Service - Job Changes API
|
|
279
|
+
def get_job_changes(params)
|
|
280
|
+
validate_required(params, [:start_date, :end_date])
|
|
281
|
+
|
|
282
|
+
response = @client.post("/jca", params)
|
|
283
|
+
JcaResponse.new(response)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# CLF Service - Contact Lookalikes API
|
|
287
|
+
def find_contact_lookalikes(params)
|
|
288
|
+
validate_required(params, [:query])
|
|
289
|
+
|
|
290
|
+
response = @client.post("/clf", params)
|
|
291
|
+
ClfResponse.new(response)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
# NAP Service - Person Name Normalizer
|
|
295
|
+
def normalize_person_name(params)
|
|
296
|
+
validate_required(params, [:person_name])
|
|
297
|
+
|
|
298
|
+
response = @client.post("/nap", params)
|
|
299
|
+
NapResponse.new(response)
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# NAU Service - URL Normalizer
|
|
303
|
+
def normalize_url(params)
|
|
304
|
+
validate_required(params, [:url])
|
|
305
|
+
|
|
306
|
+
response = @client.post("/nau", params)
|
|
307
|
+
NauResponse.new(response)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# GDC Service - Gives Demo Checker
|
|
311
|
+
def gives_demo(params)
|
|
312
|
+
validate_required(params, [:url])
|
|
313
|
+
|
|
314
|
+
response = @client.post("/gdc", params)
|
|
315
|
+
GdcResponse.new(response)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# COT Service - Offers Free Trial Checker
|
|
319
|
+
def offers_free_trial(params)
|
|
320
|
+
validate_required(params, [:url])
|
|
321
|
+
|
|
322
|
+
response = @client.post("/cot", params)
|
|
323
|
+
CotResponse.new(response)
|
|
324
|
+
end
|
|
231
325
|
|
|
232
326
|
private
|
|
233
327
|
|
data/lib/cufinder_ruby/types.rb
CHANGED
|
@@ -601,4 +601,328 @@ module Cufinder
|
|
|
601
601
|
@address = data["address"]
|
|
602
602
|
end
|
|
603
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
|
|
746
|
+
|
|
747
|
+
# Signal model
|
|
748
|
+
class Signal
|
|
749
|
+
attr_accessor :name, :time_frame, :bucket
|
|
750
|
+
|
|
751
|
+
def initialize(data = {})
|
|
752
|
+
@name = data["name"]
|
|
753
|
+
@time_frame = data["time_frame"]
|
|
754
|
+
@bucket = data["bucket"]
|
|
755
|
+
end
|
|
756
|
+
end
|
|
757
|
+
|
|
758
|
+
# PSA Contact Signal
|
|
759
|
+
class ContactSignal
|
|
760
|
+
attr_accessor :full_name, :current_job, :company, :location, :social, :signal
|
|
761
|
+
|
|
762
|
+
def initialize(data = {})
|
|
763
|
+
@full_name = data["full_name"]
|
|
764
|
+
@current_job = data["current_job"]
|
|
765
|
+
@company = data["company"]
|
|
766
|
+
@location = data["location"]
|
|
767
|
+
@social = data["social"]
|
|
768
|
+
@signal = data["signal"] ? Signal.new(data["signal"]) : nil
|
|
769
|
+
end
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
class PsaResponse < BaseResponse
|
|
773
|
+
attr_accessor :contacts
|
|
774
|
+
|
|
775
|
+
def initialize(data = {})
|
|
776
|
+
super(data)
|
|
777
|
+
@contacts = (data["contacts"] || []).map { |c| ContactSignal.new(c) }
|
|
778
|
+
end
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
# CSA Company Signal
|
|
782
|
+
class CompanySignal
|
|
783
|
+
attr_accessor :name, :website, :domain, :employees, :industry, :overview,
|
|
784
|
+
:type, :main_location, :social, :signal
|
|
785
|
+
|
|
786
|
+
def initialize(data = {})
|
|
787
|
+
@name = data["name"]
|
|
788
|
+
@website = data["website"]
|
|
789
|
+
@domain = data["domain"]
|
|
790
|
+
@employees = data["employees"]
|
|
791
|
+
@industry = data["industry"]
|
|
792
|
+
@overview = data["overview"]
|
|
793
|
+
@type = data["type"]
|
|
794
|
+
@main_location = data["main_location"] ? MainLocation.new(data["main_location"]) : nil
|
|
795
|
+
@social = data["social"]
|
|
796
|
+
@signal = data["signal"] ? Signal.new(data["signal"]) : nil
|
|
797
|
+
end
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
class CsaResponse < BaseResponse
|
|
801
|
+
attr_accessor :companies
|
|
802
|
+
|
|
803
|
+
def initialize(data = {})
|
|
804
|
+
super(data)
|
|
805
|
+
@companies = (data["companies"] || []).map { |c| CompanySignal.new(c) }
|
|
806
|
+
end
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
# JCA Job Change company snapshot
|
|
810
|
+
class JobChangeCompanySnapshot
|
|
811
|
+
attr_accessor :company_linkedin_url, :company_linkedin_id, :company_name, :title
|
|
812
|
+
|
|
813
|
+
def initialize(data = {})
|
|
814
|
+
@company_linkedin_url = data["company_linkedin_url"]
|
|
815
|
+
@company_linkedin_id = data["company_linkedin_id"]
|
|
816
|
+
@company_name = data["company_name"]
|
|
817
|
+
@title = data["title"]
|
|
818
|
+
end
|
|
819
|
+
end
|
|
820
|
+
|
|
821
|
+
# JCA Job Change
|
|
822
|
+
class JobChange
|
|
823
|
+
attr_accessor :type, :linkedin_url, :detected_at, :from, :to
|
|
824
|
+
|
|
825
|
+
def initialize(data = {})
|
|
826
|
+
@type = data["type"]
|
|
827
|
+
@linkedin_url = data["linkedin_url"]
|
|
828
|
+
@detected_at = data["detected_at"]
|
|
829
|
+
@from = data["from"] ? JobChangeCompanySnapshot.new(data["from"]) : nil
|
|
830
|
+
@to = data["to"] ? JobChangeCompanySnapshot.new(data["to"]) : nil
|
|
831
|
+
end
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
class JcaResponse < BaseResponse
|
|
835
|
+
attr_accessor :job_changes
|
|
836
|
+
|
|
837
|
+
def initialize(data = {})
|
|
838
|
+
super(data)
|
|
839
|
+
@job_changes = (data["job_changes"] || []).map { |j| JobChange.new(j) }
|
|
840
|
+
end
|
|
841
|
+
end
|
|
842
|
+
|
|
843
|
+
# CLF Contact Lookalike profile
|
|
844
|
+
class ClfProfile
|
|
845
|
+
attr_accessor :first_name, :last_name, :full_name, :linkedin_url, :summary,
|
|
846
|
+
:followers_count, :facebook, :twitter, :avatar, :country, :state,
|
|
847
|
+
:city, :job_title, :job_title_categories, :company_name,
|
|
848
|
+
:company_linkedin, :company_website, :company_size,
|
|
849
|
+
:company_industry, :company_facebook, :company_twitter,
|
|
850
|
+
:company_country, :company_state, :company_city
|
|
851
|
+
|
|
852
|
+
def initialize(data = {})
|
|
853
|
+
@first_name = data["first_name"]
|
|
854
|
+
@last_name = data["last_name"]
|
|
855
|
+
@full_name = data["full_name"]
|
|
856
|
+
@linkedin_url = data["linkedin_url"]
|
|
857
|
+
@summary = data["summary"]
|
|
858
|
+
@followers_count = data["followers_count"]
|
|
859
|
+
@facebook = data["facebook"]
|
|
860
|
+
@twitter = data["twitter"]
|
|
861
|
+
@avatar = data["avatar"]
|
|
862
|
+
@country = data["country"]
|
|
863
|
+
@state = data["state"]
|
|
864
|
+
@city = data["city"]
|
|
865
|
+
@job_title = data["job_title"]
|
|
866
|
+
@job_title_categories = data["job_title_categories"]
|
|
867
|
+
@company_name = data["company_name"]
|
|
868
|
+
@company_linkedin = data["company_linkedin"]
|
|
869
|
+
@company_website = data["company_website"]
|
|
870
|
+
@company_size = data["company_size"]
|
|
871
|
+
@company_industry = data["company_industry"]
|
|
872
|
+
@company_facebook = data["company_facebook"]
|
|
873
|
+
@company_twitter = data["company_twitter"]
|
|
874
|
+
@company_country = data["company_country"]
|
|
875
|
+
@company_state = data["company_state"]
|
|
876
|
+
@company_city = data["company_city"]
|
|
877
|
+
end
|
|
878
|
+
end
|
|
879
|
+
|
|
880
|
+
class ClfResponse < BaseResponse
|
|
881
|
+
attr_accessor :profiles
|
|
882
|
+
|
|
883
|
+
def initialize(data = {})
|
|
884
|
+
super(data)
|
|
885
|
+
@profiles = (data["profiles"] || []).map { |p| ClfProfile.new(p) }
|
|
886
|
+
end
|
|
887
|
+
end
|
|
888
|
+
|
|
889
|
+
# NAP - Person Name Normalizer
|
|
890
|
+
class NapResponse < BaseResponse
|
|
891
|
+
attr_accessor :normalized_name
|
|
892
|
+
|
|
893
|
+
def initialize(data = {})
|
|
894
|
+
super(data)
|
|
895
|
+
@normalized_name = data["normalized_name"]
|
|
896
|
+
end
|
|
897
|
+
end
|
|
898
|
+
|
|
899
|
+
# NAU - URL Normalizer
|
|
900
|
+
class NauResponse < BaseResponse
|
|
901
|
+
attr_accessor :normalized_url
|
|
902
|
+
|
|
903
|
+
def initialize(data = {})
|
|
904
|
+
super(data)
|
|
905
|
+
@normalized_url = data["normalized_url"]
|
|
906
|
+
end
|
|
907
|
+
end
|
|
908
|
+
|
|
909
|
+
# GDC - Gives Demo Checker
|
|
910
|
+
class GdcResponse < BaseResponse
|
|
911
|
+
attr_accessor :offers_demo
|
|
912
|
+
|
|
913
|
+
def initialize(data = {})
|
|
914
|
+
super(data)
|
|
915
|
+
@offers_demo = data["offers_demo"]
|
|
916
|
+
end
|
|
917
|
+
end
|
|
918
|
+
|
|
919
|
+
# COT - Offers Free Trial Checker
|
|
920
|
+
class CotResponse < BaseResponse
|
|
921
|
+
attr_accessor :offers_free_trial
|
|
922
|
+
|
|
923
|
+
def initialize(data = {})
|
|
924
|
+
super(data)
|
|
925
|
+
@offers_free_trial = data["offers_free_trial"]
|
|
926
|
+
end
|
|
927
|
+
end
|
|
604
928
|
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.3.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: 2026-
|
|
11
|
+
date: 2026-08-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: httparty
|