snov 0.2.4 → 0.4.1
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/.gitignore +2 -1
- data/.rubocop.yml +1 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +15 -0
- data/README.md +34 -0
- data/lib/snov.rb +1 -0
- data/lib/snov/client.rb +20 -10
- data/lib/snov/domain_search.rb +3 -1
- data/lib/snov/fake_client.rb +43 -5
- data/lib/snov/fake_client/{get_v1_get-user-lists.json → get_v1_get-user-lists/default.json} +0 -0
- data/lib/snov/fake_client/{get_v2_domain-emails-with-info.json → get_v2_domain-emails-with-info/domain=octagon_com.json} +0 -0
- data/lib/snov/fake_client/get_v2_domain-emails-with-info/not_found=true.json +1 -0
- data/lib/snov/fake_client/post_v1_get-profile-by-email/email=lizi_hamer@octagon_com.json +103 -0
- data/lib/snov/fake_client/post_v1_get-profile-by-email/not_found=true.json +4 -0
- 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
- data/lib/snov/fake_client/post_v1_get-prospects-by-email/not_found=true.json +1 -0
- data/lib/snov/fake_client/{post_v1_prospect-list.json → post_v1_prospect-list/listId=1479070&page=1&perPage=100.json} +0 -0
- data/lib/snov/fake_client/post_v1_prospect-list/listId=1505383&page=1&perPage=100.json +55 -0
- data/lib/snov/fake_client/post_v1_prospect-list/listId=1818597&page=1&perPage=100.json +55 -0
- data/lib/snov/get_emails_by_social_url.rb +77 -0
- data/lib/snov/version.rb +1 -1
- data/snov.gemspec +4 -4
- metadata +21 -13
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67d94e3b6c521ed1d7d4d2c85dee46fe46309db78e3323bdd476a8f6fb62c33d
|
4
|
+
data.tar.gz: ce1bb1e0ced90ae3d6f54ae92cc135d84171f5112143af9da3f3027e1cf5ad65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7915a6077c1a7ca1920564060a7a6b298a70e36e10f103c97500bf4b01a6805bfc87e25be700526ad8dc835fc8913f61d253f0bd1b31e26468ee0c7995effd5b
|
7
|
+
data.tar.gz: 1b9250834a8ef6e22928f1e141ad4b6bc126698a5438ad4833734a54ca40043d888f4336349b4ef2e9028cc6d3b307becf8a729be4239cad714d8fc6f1b34ed9
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
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
data/lib/snov/client.rb
CHANGED
@@ -7,23 +7,33 @@ module Snov
|
|
7
7
|
|
8
8
|
class TimedOut < SnovError; end
|
9
9
|
|
10
|
-
class
|
10
|
+
class AuthError < SnovError; end
|
11
11
|
|
12
|
-
class
|
12
|
+
class ResponseError < SnovError
|
13
|
+
attr_reader :response
|
13
14
|
|
14
|
-
|
15
|
+
def initialize(message, response: nil)
|
16
|
+
super(message)
|
17
|
+
@response = response
|
18
|
+
end
|
19
|
+
end
|
15
20
|
|
16
|
-
class
|
21
|
+
class UnauthorizedError < ResponseError; end
|
17
22
|
|
18
|
-
class
|
23
|
+
class BadGatewayError < ResponseError; end
|
19
24
|
|
20
|
-
class
|
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:
|
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
|
-
|
60
|
-
|
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
|
data/lib/snov/domain_search.rb
CHANGED
@@ -4,7 +4,9 @@ require 'camel_snake_struct'
|
|
4
4
|
module Snov
|
5
5
|
class DomainSearch
|
6
6
|
Response = Class.new(CamelSnakeStruct)
|
7
|
-
|
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
|
data/lib/snov/fake_client.rb
CHANGED
@@ -1,14 +1,52 @@
|
|
1
1
|
module Snov
|
2
2
|
class FakeClient
|
3
|
-
def
|
4
|
-
|
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,
|
9
|
-
|
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
|
File without changes
|
File without changes
|
@@ -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
|
+
}
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"success":false,"errors":"Prospect with email 'no.one.home@octagon.com' not found"}
|
File without changes
|
@@ -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
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.
|
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.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grant Petersen-Speelman
|
8
|
-
|
8
|
+
- Bapu Sethi
|
9
|
+
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2021-
|
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/
|
140
|
-
- lib/snov/fake_client/post_v1_get-
|
141
|
-
- lib/snov/fake_client/
|
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.
|
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.
|
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
|
-
}
|