cufinder-ruby 1.2.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 +6 -0
- data/README.md +89 -1
- data/cufinder-ruby.gemspec +1 -1
- data/lib/cufinder_ruby/client.rb +32 -0
- data/lib/cufinder_ruby/services.rb +64 -0
- data/lib/cufinder_ruby/types.rb +182 -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
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)
|
|
@@ -87,6 +87,14 @@ This SDK covers all 32 Cufinder API (v2) endpoints:
|
|
|
87
87
|
- **NAC** - [Company Name Normalizer](https://apidoc.cufinder.io/apis/company-name-normalizer)
|
|
88
88
|
- **CAA** - [Company Activities API](https://apidoc.cufinder.io/apis/company-activities-api)
|
|
89
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)
|
|
90
98
|
|
|
91
99
|
|
|
92
100
|
**CUF - Company Name to Domain**
|
|
@@ -389,6 +397,86 @@ result = client.cja(name: "google", country: "united states", page: 1)
|
|
|
389
397
|
puts result
|
|
390
398
|
```
|
|
391
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
|
+
|
|
392
480
|
## Error Handling
|
|
393
481
|
|
|
394
482
|
The SDK provides comprehensive error handling with custom error types:
|
data/cufinder-ruby.gemspec
CHANGED
data/lib/cufinder_ruby/client.rb
CHANGED
|
@@ -157,5 +157,37 @@ module Cufinder
|
|
|
157
157
|
def cja(**params)
|
|
158
158
|
@services.search_company_jobs(params)
|
|
159
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
|
|
160
192
|
end
|
|
161
193
|
end
|
|
@@ -258,6 +258,70 @@ module Cufinder
|
|
|
258
258
|
response = @client.post("/cja", params)
|
|
259
259
|
CjaResponse.new(response)
|
|
260
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
|
|
261
325
|
|
|
262
326
|
private
|
|
263
327
|
|
data/lib/cufinder_ruby/types.rb
CHANGED
|
@@ -743,4 +743,186 @@ module Cufinder
|
|
|
743
743
|
@jobs = (data["jobs"] || []).map { |j| CompanyJob.new(j) }
|
|
744
744
|
end
|
|
745
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
|
|
746
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
|