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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 933505a753cc67ab4e2311cb44741da6ce2c89f186e2eaa36efad0adc2044a63
4
- data.tar.gz: 8025f9c7eb01e26078c870967aba4d68af22ecab84242c93706279735620f555
3
+ metadata.gz: cc7f5e63b564fee6e9888b8bd083c59d0d68a706c30347e577ac5ca5c16156ae
4
+ data.tar.gz: 287db7dcf6eee9afe5accc262dbbc2bfaa12b3f66cac1579fa6241aba21674e0
5
5
  SHA512:
6
- metadata.gz: dcde541a1672ea1b08e82dade2fa76f5c7c5a2aecc81dff9900875b7acd15794e58ffc8b3bbea0aca6e71cafb23e230bd097c767b9665cd6da1c6f78115ded29
7
- data.tar.gz: 2c6b4ff7797fe5b818d57673fcd06c9c3ea810f909ff1598763424bdb281d85c79ca44933f40a123ca20f35fce8870d5cfcbe6e670e63d198b025312ee433203
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 28 Cufinder API (v2) endpoints:
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 company's careers page
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 is company SaaS or not
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:
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "cufinder-ruby"
3
- spec.version = "1.1.0"
3
+ spec.version = "1.3.0"
4
4
  spec.authors = ["CUFinder Team"]
5
5
  spec.email = ["support@cufinder.io"]
6
6
 
@@ -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
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Cufinder
2
- VERSION = "1.1.0"
2
+ VERSION = "1.3.0"
3
3
  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.1.0
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-02-01 00:00:00.000000000 Z
11
+ date: 2026-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty