snov 0.2.4 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +1 -0
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG.md +15 -0
  6. data/README.md +34 -0
  7. data/lib/snov.rb +1 -0
  8. data/lib/snov/client.rb +20 -10
  9. data/lib/snov/domain_search.rb +3 -1
  10. data/lib/snov/fake_client.rb +43 -5
  11. data/lib/snov/fake_client/{get_v1_get-user-lists.json → get_v1_get-user-lists/default.json} +0 -0
  12. data/lib/snov/fake_client/{get_v2_domain-emails-with-info.json → get_v2_domain-emails-with-info/domain=octagon_com.json} +0 -0
  13. data/lib/snov/fake_client/get_v2_domain-emails-with-info/not_found=true.json +1 -0
  14. data/lib/snov/fake_client/post_v1_get-profile-by-email/email=lizi_hamer@octagon_com.json +103 -0
  15. data/lib/snov/fake_client/post_v1_get-profile-by-email/not_found=true.json +4 -0
  16. data/lib/snov/fake_client/{post_v1_get-prospects-by-email.json → post_v1_get-prospects-by-email/email=gavin_vanrooyen@octagon_com.json} +0 -0
  17. data/lib/snov/fake_client/post_v1_get-prospects-by-email/not_found=true.json +1 -0
  18. data/lib/snov/fake_client/{post_v1_prospect-list.json → post_v1_prospect-list/listId=1479070&page=1&perPage=100.json} +0 -0
  19. data/lib/snov/fake_client/post_v1_prospect-list/listId=1505383&page=1&perPage=100.json +55 -0
  20. data/lib/snov/fake_client/post_v1_prospect-list/listId=1818597&page=1&perPage=100.json +55 -0
  21. data/lib/snov/get_emails_by_social_url.rb +77 -0
  22. data/lib/snov/version.rb +1 -1
  23. data/snov.gemspec +4 -4
  24. metadata +21 -13
  25. data/lib/snov/fake_client/post_v1_get-profile-by-email.json +0 -103
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff67b667ed595a895daa8402e7ea3103ae05375fe25f304aa89c93f5da03ce91
4
- data.tar.gz: bd5d17087cb7e756cfb3cb9efb50373cb86a396db4fb6a31310f1bda71c8afe8
3
+ metadata.gz: 67d94e3b6c521ed1d7d4d2c85dee46fe46309db78e3323bdd476a8f6fb62c33d
4
+ data.tar.gz: ce1bb1e0ced90ae3d6f54ae92cc135d84171f5112143af9da3f3027e1cf5ad65
5
5
  SHA512:
6
- metadata.gz: 1c71b29ab55193fca7630ca47fa64edd84f810780c480e56f2f1e66b18ce1f9d27ffc67604947ed57ffffab3479dbb7cadfae56d1683d1760850f94cee08a290
7
- data.tar.gz: af9e751e32c13f1453a53fbb27da4bcaa143bcd414d259ce15897ba48b210254976d7bb2ecd4fdbde3fef9e1d6f2541591cd426de22226b3665b281bb77df7fa
6
+ metadata.gz: 7915a6077c1a7ca1920564060a7a6b298a70e36e10f103c97500bf4b01a6805bfc87e25be700526ad8dc835fc8913f61d253f0bd1b31e26468ee0c7995effd5b
7
+ data.tar.gz: 1b9250834a8ef6e22928f1e141ad4b6bc126698a5438ad4833734a54ca40043d888f4336349b4ef2e9028cc6d3b307becf8a729be4239cad714d8fc6f1b34ed9
data/.gitignore CHANGED
@@ -10,4 +10,5 @@
10
10
  /.rspec_status
11
11
  /gems.locked
12
12
  /vendor/bundle
13
- /.vscode
13
+ /.vscode
14
+ /spec/snov/moved
data/.rubocop.yml CHANGED
@@ -2,6 +2,7 @@ require:
2
2
  - rubocop-rspec
3
3
 
4
4
  AllCops:
5
+ TargetRubyVersion: 2.5
5
6
  SuggestExtensions: false
6
7
  NewCops: enable
7
8
  Exclude:
data/.travis.yml CHANGED
@@ -3,7 +3,7 @@ language: ruby
3
3
  gemfile: gems.rb
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.4
6
+ - 2.5
7
7
  - 2.7
8
8
  before_install:
9
9
  - yes | gem update --system --force
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [0.4.1]
2
+ * allow forward slash for test response files while using fake client
3
+
4
+ ## [0.4.0]
5
+ * search prospect emails with /v1/get-emails-from-url
6
+
7
+ ## [0.3.2]
8
+ * increase snov timeout to 90 seconds
9
+ ## [0.3.1]
10
+ * fix fake result for /v1/prospect-list
11
+
12
+ ## [0.3.0]
13
+ * add Faraday response into exception
14
+ * fake client to only return success result for selected queries
15
+
1
16
  ## [0.2.4]
2
17
  * Fix DomainSearch to_a
3
18
 
data/README.md CHANGED
@@ -148,6 +148,40 @@ see https://snov.io/api#ViewProspectsInList
148
148
  end
149
149
  ```
150
150
 
151
+ ### GetEmailsBySocialUrl
152
+
153
+ convenience wrapper for `GetEmailsFromUrl` to get a prospect with social url e.g. linkedin profile url
154
+
155
+ see https://snov.io/api#GetEmailsFromUrl
156
+
157
+ ```ruby
158
+ prospect = Snov::GetEmailsBySocialUrl.new(url: "https://www.linkedin.com/in/john-doe-123456/").prospect
159
+
160
+ prospect.data.emails.each do |value|
161
+ puts value.email
162
+ puts value.status
163
+ end
164
+
165
+ prospect.data.previous_jobs.each do |value|
166
+ puts value.company_name
167
+ puts value.company_type
168
+ puts value.position
169
+ puts value.country
170
+ puts value.start_date
171
+ puts value.industry
172
+ puts value.size
173
+ end
174
+
175
+ prospect.data.current_jobs.each do |value|
176
+ puts value.company_name
177
+ puts value.company_type
178
+ puts value.position
179
+ puts value.country
180
+ puts value.start_date
181
+ puts value.industry
182
+ puts value.size
183
+ end
184
+ ```
151
185
 
152
186
  ## Development
153
187
 
data/lib/snov.rb CHANGED
@@ -24,4 +24,5 @@ require 'snov/get_all_prospects_from_list'
24
24
  require 'snov/get_prospects_by_email'
25
25
  require 'snov/get_prospect_list'
26
26
  require 'snov/get_user_lists'
27
+ require 'snov/get_emails_by_social_url'
27
28
  require 'snov/domain_search'
data/lib/snov/client.rb CHANGED
@@ -7,23 +7,33 @@ module Snov
7
7
 
8
8
  class TimedOut < SnovError; end
9
9
 
10
- class UnauthorizedError < SnovError; end
10
+ class AuthError < SnovError; end
11
11
 
12
- class BadGatewayError < SnovError; end
12
+ class ResponseError < SnovError
13
+ attr_reader :response
13
14
 
14
- class ForbiddenError < SnovError; end
15
+ def initialize(message, response: nil)
16
+ super(message)
17
+ @response = response
18
+ end
19
+ end
15
20
 
16
- class GatewayTimeOut < SnovError; end
21
+ class UnauthorizedError < ResponseError; end
17
22
 
18
- class BadRequest < SnovError; end
23
+ class BadGatewayError < ResponseError; end
19
24
 
20
- class AuthError < SnovError; end
25
+ class ForbiddenError < ResponseError; end
26
+
27
+ class GatewayTimeOut < ResponseError; end
28
+
29
+ class BadRequest < ResponseError; end
30
+
31
+ class MethodNotAllowed < ResponseError; end
21
32
 
22
- class MethodNotAllowed < SnovError; end
23
33
  ERROR_CLASSES = { 401 => UnauthorizedError, 502 => BadGatewayError, 403 => ForbiddenError,
24
34
  504 => GatewayTimeOut, 400 => BadRequest, 405 => MethodNotAllowed }
25
35
 
26
- def initialize(client_id:, client_secret:, access_token: nil, timeout_seconds: 60)
36
+ def initialize(client_id:, client_secret:, access_token: nil, timeout_seconds: 90)
27
37
  self.client_id = client_id.to_str
28
38
  self.client_secret = client_secret.to_str
29
39
  @access_token = access_token
@@ -56,8 +66,8 @@ module Snov
56
66
 
57
67
  def parse_response(resp, path, _params)
58
68
  unless resp.success?
59
- raise ERROR_CLASSES.fetch(resp.status, SnovError),
60
- "#{path} (#{resp.status})"
69
+ error_class = ERROR_CLASSES.fetch(resp.status, ResponseError)
70
+ raise error_class.new("#{path} (#{resp.status})", response: resp&.body)
61
71
  end
62
72
  MultiJson.load(resp.body)
63
73
  end
@@ -4,7 +4,9 @@ require 'camel_snake_struct'
4
4
  module Snov
5
5
  class DomainSearch
6
6
  Response = Class.new(CamelSnakeStruct)
7
- Response.example(MultiJson.load(File.read("#{__dir__}/fake_client/get_v2_domain-emails-with-info.json")))
7
+ Dir["#{__dir__}/fake_client/get_v2_domain-emails-with-info/*.json"].each do |example_file|
8
+ Response.example(MultiJson.load(File.read(example_file)))
9
+ end
8
10
  include Enumerable
9
11
 
10
12
  attr_reader :client, :domain, :type, :limit
@@ -1,14 +1,52 @@
1
1
  module Snov
2
2
  class FakeClient
3
- def get(path)
4
- data = File.read("#{__dir__}/fake_client/get#{path.tr("/", "_")}.json")
3
+ def self.folder=(val)
4
+ @folder = val
5
+ FileUtils.mkdir_p(@folder)
6
+ ["post_v1_get-profile-by-email", "get_v2_domain-emails-with-info",
7
+ "post_v1_get-prospects-by-email", "post_v1_prospect-list", "get_v1_get-user-lists"].each do |sub_folder|
8
+ FileUtils.cp_r "#{default_folder}/#{sub_folder}", @folder
9
+ end
10
+ end
11
+
12
+ def self.folder
13
+ @folder || default_folder
14
+ end
15
+
16
+ def self.reset_folder
17
+ @folder = nil
18
+ end
19
+
20
+ def self.default_folder
21
+ "#{__dir__}/fake_client"
22
+ end
23
+
24
+ def get(path, payload_hash = {})
25
+ data = File.read(filename("get", path, payload_hash))
26
+ MultiJson.load(data)
27
+ rescue Errno::ENOENT
28
+ data = File.read(filename("get", path, 'not_found' => 'true'))
5
29
  MultiJson.load(data)
6
30
  end
7
31
 
8
- def post(path, params = {})
9
- params.to_a.map(&:join).join("&")
10
- data = File.read("#{__dir__}/fake_client/post#{path.tr("/", "_")}.json")
32
+ def post(path, payload_hash = {})
33
+ data = File.read(filename("post", path, payload_hash))
11
34
  MultiJson.load(data)
35
+ rescue Errno::ENOENT => e
36
+ file = filename("post", path, 'not_found' => 'true')
37
+ if File.exist?(file)
38
+ MultiJson.load(File.read(file))
39
+ else
40
+ raise Snov::Client::BadRequest, e.message
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def filename(method, path, payload_hash)
47
+ add = payload_hash.to_a.map { |v| v.join("=") }.join("&").tr(".", "_")
48
+ add = "default" if add == ""
49
+ "#{self.class.folder}/#{method}#{path.tr("/", "_")}/#{add.gsub('/', '-')}.json"
12
50
  end
13
51
  end
14
52
  end
@@ -0,0 +1 @@
1
+ {"success":true,"domain":"","webmail":false,"result":0,"lastId":0,"limit":10,"companyName":"","emails":[]}
@@ -0,0 +1,103 @@
1
+ {
2
+ "success": true,
3
+ "id": 301592,
4
+ "source": "linkedIn",
5
+ "name": "Lizi Hamer",
6
+ "firstName": "Lizi",
7
+ "lastName": "Hamer",
8
+ "logo": "https://app.snov.io/img/peoples/010fcf23c70dfa68d880545ec89a9215.jpg",
9
+ "industry": null,
10
+ "country": "Singapore",
11
+ "locality": "Singapore",
12
+ "social": [
13
+ {
14
+ "link": "https://www.linkedin.com/in/lizihamer/",
15
+ "type": "linkedIn"
16
+ },
17
+ {
18
+ "link": "https://twitter.com/LiziHamer",
19
+ "type": "twitter"
20
+ }
21
+ ],
22
+ "currentJobs": [
23
+ {
24
+ "companyName": "Octagon",
25
+ "position": "Regional Creative Director",
26
+ "socialLink": "https://www.linkedin.com/company/165282",
27
+ "site": "www.octagon.com",
28
+ "locality": "Greater New York City Area",
29
+ "state": "Connecticut",
30
+ "city": "Stamford",
31
+ "street": "290 Harbor Dr",
32
+ "street2": "2nd Floor",
33
+ "postal": "06902",
34
+ "founded": "1983",
35
+ "startDate": "2016-01-31",
36
+ "endDate": null,
37
+ "size": "1-10",
38
+ "industry": "Marketing and Advertising",
39
+ "companyType": "Public Company",
40
+ "country": "United States"
41
+ },
42
+ {
43
+ "companyName": "SisuGirls",
44
+ "position": "Co Founder",
45
+ "socialLink": "https://www.linkedin.com/company/3841118",
46
+ "site": "http://www.sisugirls.org",
47
+ "locality": null,
48
+ "state": "SG",
49
+ "city": "Singapore",
50
+ "street": "33-03 Hong Leong Building",
51
+ "street2": null,
52
+ "postal": null,
53
+ "founded": "2014",
54
+ "startDate": "2015-07-31",
55
+ "endDate": null,
56
+ "size": "1-10",
57
+ "industry": "Health, Wellness and Fitness",
58
+ "companyType": null,
59
+ "country": "Singapore"
60
+ }
61
+ ],
62
+ "previousJobs": [
63
+ {
64
+ "companyName": "Fusion Co-innovation Labs",
65
+ "position": "Creative Entrepreneur",
66
+ "socialLink": null,
67
+ "site": null,
68
+ "locality": null,
69
+ "state": null,
70
+ "city": null,
71
+ "street": null,
72
+ "street2": null,
73
+ "postal": null,
74
+ "founded": null,
75
+ "startDate": "2013-05-31",
76
+ "endDate": "2013-10-31",
77
+ "size": null,
78
+ "industry": null,
79
+ "companyType": null,
80
+ "country": null
81
+ },
82
+ {
83
+ "companyName": "Russell Commission",
84
+ "position": "Youth Advisory Board Member",
85
+ "socialLink": null,
86
+ "site": null,
87
+ "locality": null,
88
+ "state": null,
89
+ "city": null,
90
+ "street": null,
91
+ "street2": null,
92
+ "postal": null,
93
+ "founded": null,
94
+ "startDate": "2004-06-30",
95
+ "endDate": "2006-06-30",
96
+ "size": null,
97
+ "industry": null,
98
+ "companyType": null,
99
+ "country": null
100
+ }
101
+ ],
102
+ "lastUpdateDate": "2018-02-07 10:12:28"
103
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "success": true,
3
+ "message": "We couldn't find profile with this email"
4
+ }
@@ -0,0 +1 @@
1
+ {"success":false,"errors":"Prospect with email 'no.one.home@octagon.com' not found"}
@@ -0,0 +1,55 @@
1
+ {
2
+ "success": true,
3
+ "list": {
4
+ "name": "Lead LIST",
5
+ "contacts": 3,
6
+ "creationDate": {
7
+ "date": "2020-05-19 17:34:39.000000",
8
+ "timezone_type": 3,
9
+ "timezone": "UTC"
10
+ },
11
+ "emailsCount": []
12
+ },
13
+ "prospects": [
14
+ {
15
+ "id": "226db935fc93422496fda5d5209e8cbf77cc77ec685891706028009b86608f7ce5877a3faf",
16
+ "name": "Andrew Garfiled",
17
+ "firstName": "Andrew",
18
+ "lastName": "Garfiled",
19
+ "emails": [
20
+ {
21
+ "email": "andrewexp@exp.com",
22
+ "probability": 99,
23
+ "isVerified": null,
24
+ "jobStatus": "any",
25
+ "domainType": "linkedin_email",
26
+ "isValidFormat": null,
27
+ "isDisposable": null,
28
+ "isWebmail": null,
29
+ "isGibberish": null,
30
+ "smtpStatus": null
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "id": "f20d30219b039d1408d837a748a1e2ab843c97e65080f6cf8fa7d948477d9093d87413f05f",
36
+ "name": "John Doe",
37
+ "firstName": "John",
38
+ "lastName": "Doe",
39
+ "emails": [
40
+ {
41
+ "email": "johndoe@gmail.com",
42
+ "probability": 99,
43
+ "isVerified": null,
44
+ "jobStatus": "any",
45
+ "domainType": "linkedin_email",
46
+ "isValidFormat": true,
47
+ "isDisposable": false,
48
+ "isWebmail": true,
49
+ "isGibberish": false,
50
+ "smtpStatus": 3
51
+ }
52
+ ]
53
+ }
54
+ ]
55
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "success": true,
3
+ "list": {
4
+ "name": "Lead LIST",
5
+ "contacts": 3,
6
+ "creationDate": {
7
+ "date": "2020-05-19 17:34:39.000000",
8
+ "timezone_type": 3,
9
+ "timezone": "UTC"
10
+ },
11
+ "emailsCount": []
12
+ },
13
+ "prospects": [
14
+ {
15
+ "id": "226db935fc93422496fda5d5209e8cbf77cc77ec685891706028009b86608f7ce5877a3faf",
16
+ "name": "Andrew Garfiled",
17
+ "firstName": "Andrew",
18
+ "lastName": "Garfiled",
19
+ "emails": [
20
+ {
21
+ "email": "andrewexp@exp.com",
22
+ "probability": 99,
23
+ "isVerified": null,
24
+ "jobStatus": "any",
25
+ "domainType": "linkedin_email",
26
+ "isValidFormat": null,
27
+ "isDisposable": null,
28
+ "isWebmail": null,
29
+ "isGibberish": null,
30
+ "smtpStatus": null
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "id": "f20d30219b039d1408d837a748a1e2ab843c97e65080f6cf8fa7d948477d9093d87413f05f",
36
+ "name": "John Doe",
37
+ "firstName": "John",
38
+ "lastName": "Doe",
39
+ "emails": [
40
+ {
41
+ "email": "johndoe@gmail.com",
42
+ "probability": 99,
43
+ "isVerified": null,
44
+ "jobStatus": "any",
45
+ "domainType": "linkedin_email",
46
+ "isValidFormat": true,
47
+ "isDisposable": false,
48
+ "isWebmail": true,
49
+ "isGibberish": false,
50
+ "smtpStatus": 3
51
+ }
52
+ ]
53
+ }
54
+ ]
55
+ }
@@ -0,0 +1,77 @@
1
+ module Snov
2
+ class GetEmailsBySocialUrl
3
+ attr_reader :client
4
+
5
+ def initialize(client: Snov.client, url:)
6
+ @client = client
7
+ @url = url
8
+ end
9
+
10
+ def prospect
11
+ @prospect ||= ProspectResult.new(raw_result)
12
+ end
13
+
14
+ def raw_result
15
+ @raw_result ||= client.post("/v1/get-emails-from-url", "url" => @url)
16
+ .deep_transform_keys! { |key| key.underscore }
17
+ end
18
+
19
+ class ProspectJob
20
+ include ActiveModel::Model
21
+
22
+ attr_accessor :company_name, :company_type, :position, :social_link, :site, :locality, :state,
23
+ :city, :street, :street2, :country, :start_date, :end_date, :postal, :founded, :size,
24
+ :industry
25
+ end
26
+
27
+ class ProspectJobList
28
+ include ActiveModel::Model
29
+ include Enumerable
30
+
31
+ attr_accessor :jobs
32
+
33
+ def each(&block)
34
+ jobs.each(&block)
35
+ end
36
+ end
37
+
38
+ class ProspectEmail
39
+ include ActiveModel::Model
40
+
41
+ attr_accessor :email, :status
42
+ end
43
+
44
+ class ProspectData
45
+ include ActiveModel::Model
46
+
47
+ attr_reader :emails, :previous_jobs, :current_jobs
48
+ attr_accessor :id, :name, :first_name, :last_name, :source_page, :source, :industry,
49
+ :country, :locality, :last_update_date, :social, :skills, :links
50
+
51
+ def emails=(val)
52
+ @emails = Array.wrap(val).map do |rel|
53
+ ProspectEmail.new(rel)
54
+ end
55
+ end
56
+
57
+ def previous_job=(val)
58
+ @previous_jobs = ProspectJobList.new(jobs: Array.wrap(val).map { |job| ProspectJob.new(job) })
59
+ end
60
+
61
+ def current_job=(val)
62
+ @current_jobs = ProspectJobList.new(jobs: Array.wrap(val).map { |job| ProspectJob.new(job) })
63
+ end
64
+ end
65
+
66
+ class ProspectResult
67
+ include ActiveModel::Model
68
+
69
+ attr_accessor :success, :message
70
+ attr_reader :data
71
+
72
+ def data=(val)
73
+ @data = ProspectData.new(val)
74
+ end
75
+ end
76
+ end
77
+ end
data/lib/snov/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Snov
2
- VERSION = "0.2.4"
2
+ VERSION = "0.4.1"
3
3
  end
data/snov.gemspec CHANGED
@@ -3,18 +3,18 @@ require_relative 'lib/snov/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "snov"
5
5
  spec.version = Snov::VERSION
6
- spec.authors = ["Grant Petersen-Speelman"]
7
- spec.email = ["grantspeelman@gmail.com"]
6
+ spec.authors = ["Grant Petersen-Speelman", "Bapu Sethi"]
7
+ spec.email = ["grantspeelman@gmail.com", "bapu.sethi.03@gmail.com"]
8
8
  spec.license = "MIT"
9
9
 
10
10
  spec.summary = %q{Snov client to interact with snov api}
11
11
  spec.description = %q{Snov client to interact with snov api}
12
12
  spec.homepage = "https://github.com/NEXL-LTS/snov-ruby"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
14
14
 
15
15
  spec.metadata["homepage_uri"] = spec.homepage
16
16
  spec.metadata["source_code_uri"] = "https://github.com/NEXL-LTS/snov-ruby"
17
- spec.metadata["changelog_uri"] = "https://github.com/NEXL-LTS/snov-ruby/CHANGELOG.md"
17
+ spec.metadata["changelog_uri"] = "https://github.com/NEXL-LTS/snov-ruby/blob/main/CHANGELOG.md"
18
18
 
19
19
  # Specify which files should be added to the gem when it is released.
20
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grant Petersen-Speelman
8
- autorequire:
8
+ - Bapu Sethi
9
+ autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2021-01-12 00:00:00.000000000 Z
12
+ date: 2021-05-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activemodel
@@ -113,6 +114,7 @@ dependencies:
113
114
  description: Snov client to interact with snov api
114
115
  email:
115
116
  - grantspeelman@gmail.com
117
+ - bapu.sethi.03@gmail.com
116
118
  executables: []
117
119
  extensions: []
118
120
  extra_rdoc_files: []
@@ -134,12 +136,18 @@ files:
134
136
  - lib/snov/client.rb
135
137
  - lib/snov/domain_search.rb
136
138
  - lib/snov/fake_client.rb
137
- - lib/snov/fake_client/get_v1_get-user-lists.json
138
- - lib/snov/fake_client/get_v2_domain-emails-with-info.json
139
- - lib/snov/fake_client/post_v1_get-profile-by-email.json
140
- - lib/snov/fake_client/post_v1_get-prospects-by-email.json
141
- - lib/snov/fake_client/post_v1_prospect-list.json
139
+ - lib/snov/fake_client/get_v1_get-user-lists/default.json
140
+ - lib/snov/fake_client/get_v2_domain-emails-with-info/domain=octagon_com.json
141
+ - lib/snov/fake_client/get_v2_domain-emails-with-info/not_found=true.json
142
+ - lib/snov/fake_client/post_v1_get-profile-by-email/email=lizi_hamer@octagon_com.json
143
+ - lib/snov/fake_client/post_v1_get-profile-by-email/not_found=true.json
144
+ - lib/snov/fake_client/post_v1_get-prospects-by-email/email=gavin_vanrooyen@octagon_com.json
145
+ - lib/snov/fake_client/post_v1_get-prospects-by-email/not_found=true.json
146
+ - lib/snov/fake_client/post_v1_prospect-list/listId=1479070&page=1&perPage=100.json
147
+ - lib/snov/fake_client/post_v1_prospect-list/listId=1505383&page=1&perPage=100.json
148
+ - lib/snov/fake_client/post_v1_prospect-list/listId=1818597&page=1&perPage=100.json
142
149
  - lib/snov/get_all_prospects_from_list.rb
150
+ - lib/snov/get_emails_by_social_url.rb
143
151
  - lib/snov/get_profile_by_email.rb
144
152
  - lib/snov/get_prospect_list.rb
145
153
  - lib/snov/get_prospects_by_email.rb
@@ -153,8 +161,8 @@ licenses:
153
161
  metadata:
154
162
  homepage_uri: https://github.com/NEXL-LTS/snov-ruby
155
163
  source_code_uri: https://github.com/NEXL-LTS/snov-ruby
156
- changelog_uri: https://github.com/NEXL-LTS/snov-ruby/CHANGELOG.md
157
- post_install_message:
164
+ changelog_uri: https://github.com/NEXL-LTS/snov-ruby/blob/main/CHANGELOG.md
165
+ post_install_message:
158
166
  rdoc_options: []
159
167
  require_paths:
160
168
  - lib
@@ -162,15 +170,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
170
  requirements:
163
171
  - - ">="
164
172
  - !ruby/object:Gem::Version
165
- version: 2.4.0
173
+ version: 2.5.0
166
174
  required_rubygems_version: !ruby/object:Gem::Requirement
167
175
  requirements:
168
176
  - - ">="
169
177
  - !ruby/object:Gem::Version
170
178
  version: '0'
171
179
  requirements: []
172
- rubygems_version: 3.1.4
173
- signing_key:
180
+ rubygems_version: 3.2.3
181
+ signing_key:
174
182
  specification_version: 4
175
183
  summary: Snov client to interact with snov api
176
184
  test_files: []
@@ -1,103 +0,0 @@
1
- {
2
- "success": true,
3
- "id": 301592,
4
- "source": "linkedIn",
5
- "name": "Lizi Hamer",
6
- "firstName": "Lizi",
7
- "lastName": "Hamer",
8
- "logo": "https://app.snov.io/img/peoples/010fcf23c70dfa68d880545ec89a9215.jpg",
9
- "industry": null,
10
- "country": "Singapore",
11
- "locality": "Singapore",
12
- "social": [
13
- {
14
- "link": "https://www.linkedin.com/in/lizihamer/",
15
- "type": "linkedIn"
16
- },
17
- {
18
- "link": "https://twitter.com/LiziHamer",
19
- "type": "twitter"
20
- }
21
- ],
22
- "currentJobs": [
23
- {
24
- "companyName": "Octagon",
25
- "position": "Regional Creative Director",
26
- "socialLink": "https://www.linkedin.com/company/165282",
27
- "site": "www.octagon.com",
28
- "locality": "Greater New York City Area",
29
- "state": "Connecticut",
30
- "city": "Stamford",
31
- "street": "290 Harbor Dr",
32
- "street2": "2nd Floor",
33
- "postal": "06902",
34
- "founded": "1983",
35
- "startDate": "2016-01-31",
36
- "endDate": null,
37
- "size": "1-10",
38
- "industry": "Marketing and Advertising",
39
- "companyType": "Public Company",
40
- "country": "United States"
41
- },
42
- {
43
- "companyName": "SisuGirls",
44
- "position": "Co Founder",
45
- "socialLink": "https://www.linkedin.com/company/3841118",
46
- "site": "http://www.sisugirls.org",
47
- "locality": null,
48
- "state": "SG",
49
- "city": "Singapore",
50
- "street": "33-03 Hong Leong Building",
51
- "street2": null,
52
- "postal": null,
53
- "founded": "2014",
54
- "startDate": "2015-07-31",
55
- "endDate": null,
56
- "size": "1-10",
57
- "industry": "Health, Wellness and Fitness",
58
- "companyType": null,
59
- "country": "Singapore"
60
- }
61
- ],
62
- "previousJobs": [
63
- {
64
- "companyName": "Fusion Co-innovation Labs",
65
- "position": "Creative Entrepreneur",
66
- "socialLink": null,
67
- "site": null,
68
- "locality": null,
69
- "state": null,
70
- "city": null,
71
- "street": null,
72
- "street2": null,
73
- "postal": null,
74
- "founded": null,
75
- "startDate": "2013-05-31",
76
- "endDate": "2013-10-31",
77
- "size": null,
78
- "industry": null,
79
- "companyType": null,
80
- "country": null
81
- },
82
- {
83
- "companyName": "Russell Commission",
84
- "position": "Youth Advisory Board Member",
85
- "socialLink": null,
86
- "site": null,
87
- "locality": null,
88
- "state": null,
89
- "city": null,
90
- "street": null,
91
- "street2": null,
92
- "postal": null,
93
- "founded": null,
94
- "startDate": "2004-06-30",
95
- "endDate": "2006-06-30",
96
- "size": null,
97
- "industry": null,
98
- "companyType": null,
99
- "country": null
100
- }
101
- ],
102
- "lastUpdateDate": "2018-02-07 10:12:28"
103
- }