snov 0.3.0 → 0.5.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: 515392f915f68b6e2215b9d83b0669754972c869bf0760c2183801dba20ee97e
4
- data.tar.gz: d070e267fe2bd7cfa737e06abce73affef3fd1a05b058ed4131a2c5b83025813
3
+ metadata.gz: 29a980f1ec57e85a5f0fbf089fdcb646e5a66454c91515d90e33b7aaec042ac6
4
+ data.tar.gz: 17e52baa847e7f42eba8696e35509f7478582696092a8e0cd229cf108c097d5c
5
5
  SHA512:
6
- metadata.gz: a63119f42ed545a522e3a98783919a2b8b4aa24ff39ab660d7883f8064c8d09aa32bd6dd99add703a11c94341c4468e0169167fbd72b14480c3ed00ffbff6447
7
- data.tar.gz: 65043cedd80d3cac9730b0251b391569770ec8c6700a2c434a35967dba3f3694793f8b7ff5fe279dd93584086f018b19d64d56f9d64fbb89ec64916e810e1593
6
+ metadata.gz: 9ce75c52ecf8c7bd180ad2a2b4ea510acb494b59060f779424c0d5db7888ca18c75d9eb16ed8b66b58e46555a193e89f41b8df760177f0bd70f6076e3b94a9b9
7
+ data.tar.gz: 41e171a1eaa943b01e82369979939f2f28523ed3a2835029453918965b324946a1507e8dae64df88980e603073d50d8d9c1de9612fd9f0017745cfca96733e0b
data/.byebug_history ADDED
@@ -0,0 +1,5 @@
1
+ continue
2
+ subject
3
+ exit
4
+ val["emails"]
5
+ val
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,14 @@
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
+
1
12
  ## [0.3.0]
2
13
  * add Faraday response into exception
3
14
  * fake client to only return success result for selected queries
data/README.md CHANGED
@@ -148,6 +148,55 @@ 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
+ ```
185
+
186
+ ### GetEmailsFromName
187
+
188
+ convenience wrapper for `GetEmailsFromName` to get a prospect with name
189
+
190
+ see https://snov.io/api#EmailFinder
191
+
192
+ ```ruby
193
+ prospect = Snov::GetEmailsFromName.new(first_name: "gavin", last_name: "vanrooyen", domain: "octagon.com").prospect
194
+
195
+ prospect.data.emails.each do |value|
196
+ puts value.email
197
+ puts value.email_status
198
+ end
199
+ ```
151
200
 
152
201
  ## Development
153
202
 
data/lib/snov.rb CHANGED
@@ -24,4 +24,6 @@ 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'
28
+ require 'snov/get_emails_from_name'
27
29
  require 'snov/domain_search'
data/lib/snov/client.rb CHANGED
@@ -33,7 +33,7 @@ module Snov
33
33
  ERROR_CLASSES = { 401 => UnauthorizedError, 502 => BadGatewayError, 403 => ForbiddenError,
34
34
  504 => GatewayTimeOut, 400 => BadRequest, 405 => MethodNotAllowed }
35
35
 
36
- 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)
37
37
  self.client_id = client_id.to_str
38
38
  self.client_secret = client_secret.to_str
39
39
  @access_token = access_token
@@ -67,7 +67,7 @@ module Snov
67
67
  def parse_response(resp, path, _params)
68
68
  unless resp.success?
69
69
  error_class = ERROR_CLASSES.fetch(resp.status, ResponseError)
70
- raise error_class.new("#{path} (#{resp.status})", response: resp)
70
+ raise error_class.new("#{path} (#{resp.status})", response: resp&.body)
71
71
  end
72
72
  MultiJson.load(resp.body)
73
73
  end
@@ -46,7 +46,7 @@ module Snov
46
46
  def filename(method, path, payload_hash)
47
47
  add = payload_hash.to_a.map { |v| v.join("=") }.join("&").tr(".", "_")
48
48
  add = "default" if add == ""
49
- "#{self.class.folder}/#{method}#{path.tr("/", "_")}/#{add}.json"
49
+ "#{self.class.folder}/#{method}#{path.tr("/", "_")}/#{add.gsub('/', '-')}.json"
50
50
  end
51
51
  end
52
52
  end
@@ -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
@@ -0,0 +1,68 @@
1
+ module Snov
2
+ class GetEmailsFromName
3
+ attr_reader :client
4
+
5
+ def initialize(client: Snov.client, first_name:, last_name:, domain:)
6
+ @client = client
7
+ @first_name = first_name
8
+ @last_name = last_name
9
+ @domain = domain
10
+ end
11
+
12
+ def prospect
13
+ @prospect ||= ProspectResult.new(raw_result)
14
+ end
15
+
16
+ def raw_result
17
+ @raw_result ||= client.post("/v1/get-emails-from-names",
18
+ "firstName" => @first_name,
19
+ "lastName" => @last_name,
20
+ "domain" => @domain)
21
+ .deep_transform_keys! { |key| key.underscore }
22
+ end
23
+
24
+ class ProspectData
25
+ include ActiveModel::Model
26
+
27
+ attr_accessor :first_name, :last_name
28
+ attr_reader :emails
29
+
30
+ def emails=(val)
31
+ @emails = Array.wrap(val).map do |rel|
32
+ ProspectEmail.new(rel)
33
+ end
34
+ end
35
+ end
36
+
37
+ class ProspectEmail
38
+ include ActiveModel::Model
39
+
40
+ attr_accessor :email, :email_status
41
+ end
42
+
43
+ class ProspectStatus
44
+ include ActiveModel::Model
45
+
46
+ attr_accessor :identifier, :description
47
+
48
+ def completed?
49
+ identifier == 'complete'
50
+ end
51
+ end
52
+
53
+ class ProspectResult
54
+ include ActiveModel::Model
55
+
56
+ attr_accessor :success, :message, :params
57
+ attr_reader :data, :status
58
+
59
+ def data=(val)
60
+ @data = ProspectData.new(val)
61
+ end
62
+
63
+ def status=(val)
64
+ @status = ProspectStatus.new(val)
65
+ end
66
+ end
67
+ end
68
+ end
data/lib/snov/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Snov
2
- VERSION = "0.3.0"
2
+ VERSION = "0.5.0"
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.3.0
4
+ version: 0.5.0
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-06-18 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activemodel
@@ -113,10 +114,12 @@ 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: []
119
121
  files:
122
+ - ".byebug_history"
120
123
  - ".gitignore"
121
124
  - ".rspec"
122
125
  - ".rubocop.yml"
@@ -141,10 +144,12 @@ files:
141
144
  - lib/snov/fake_client/post_v1_get-profile-by-email/not_found=true.json
142
145
  - lib/snov/fake_client/post_v1_get-prospects-by-email/email=gavin_vanrooyen@octagon_com.json
143
146
  - lib/snov/fake_client/post_v1_get-prospects-by-email/not_found=true.json
144
- - lib/snov/fake_client/post_v1_prospect-list/list_id=1479070&page=1&per_page=100.json
145
- - lib/snov/fake_client/post_v1_prospect-list/list_id=1505383&page=1&per_page=100.json
146
- - lib/snov/fake_client/post_v1_prospect-list/list_id=1818597&page=1&per_page=100.json
147
+ - lib/snov/fake_client/post_v1_prospect-list/listId=1479070&page=1&perPage=100.json
148
+ - lib/snov/fake_client/post_v1_prospect-list/listId=1505383&page=1&perPage=100.json
149
+ - lib/snov/fake_client/post_v1_prospect-list/listId=1818597&page=1&perPage=100.json
147
150
  - lib/snov/get_all_prospects_from_list.rb
151
+ - lib/snov/get_emails_by_social_url.rb
152
+ - lib/snov/get_emails_from_name.rb
148
153
  - lib/snov/get_profile_by_email.rb
149
154
  - lib/snov/get_prospect_list.rb
150
155
  - lib/snov/get_prospects_by_email.rb
@@ -158,8 +163,8 @@ licenses:
158
163
  metadata:
159
164
  homepage_uri: https://github.com/NEXL-LTS/snov-ruby
160
165
  source_code_uri: https://github.com/NEXL-LTS/snov-ruby
161
- changelog_uri: https://github.com/NEXL-LTS/snov-ruby/CHANGELOG.md
162
- post_install_message:
166
+ changelog_uri: https://github.com/NEXL-LTS/snov-ruby/blob/main/CHANGELOG.md
167
+ post_install_message:
163
168
  rdoc_options: []
164
169
  require_paths:
165
170
  - lib
@@ -167,15 +172,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
172
  requirements:
168
173
  - - ">="
169
174
  - !ruby/object:Gem::Version
170
- version: 2.4.0
175
+ version: 2.5.0
171
176
  required_rubygems_version: !ruby/object:Gem::Requirement
172
177
  requirements:
173
178
  - - ">="
174
179
  - !ruby/object:Gem::Version
175
180
  version: '0'
176
181
  requirements: []
177
- rubygems_version: 3.1.4
178
- signing_key:
182
+ rubygems_version: 3.2.15
183
+ signing_key:
179
184
  specification_version: 4
180
185
  summary: Snov client to interact with snov api
181
186
  test_files: []