Move Mailbluster business logic to services/ instead of helpers/
This commit is contained in:
parent
1c1d09fefc
commit
f0582c25bf
5 changed files with 57 additions and 9 deletions
|
|
@ -4,6 +4,6 @@ class MailblusterCreateLeadJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(user)
|
def perform(user)
|
||||||
ApplicationController.helpers.create_lead(user)
|
MailblusterManager.create_lead(user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,6 @@ class MailblusterDeleteLeadJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(user)
|
def perform(user)
|
||||||
ApplicationController.helpers.delete_lead(user)
|
MailblusterManager.delete_lead(user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ class MailblusterEditLeadJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(user, add_tags: [], remove_tags: [], old_email: nil)
|
def perform(user, add_tags: [], remove_tags: [], old_email: nil)
|
||||||
ApplicationController.helpers.edit_lead(user,
|
MailblusterManager.edit_lead(user, add_tags: add_tags, remove_tags: remove_tags, old_email: old_email)
|
||||||
add_tags: add_tags, remove_tags: remove_tags, old_email: old_email)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
49
app/services/mailbluster_manager.rb
Normal file
49
app/services/mailbluster_manager.rb
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
class MailblusterManager
|
||||||
|
include HTTParty
|
||||||
|
base_uri 'https://api.mailbluster.com/api/leads/'
|
||||||
|
|
||||||
|
def self.create_lead(user)
|
||||||
|
options = {
|
||||||
|
headers: {
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'Authorization' => ENV['MAILBLUSTER_API_KEY']
|
||||||
|
},
|
||||||
|
body: {
|
||||||
|
'email' => user.email,
|
||||||
|
'firstName' => user.name,
|
||||||
|
'overrideExisting' => true,
|
||||||
|
'subscribed' => true,
|
||||||
|
'tags' => [ENV['OSEM_NAME'] || 'snapcon']
|
||||||
|
}.to_json
|
||||||
|
}
|
||||||
|
post('/', options).parsed_response
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.edit_lead(user, add_tags: [], remove_tags: [], old_email: nil)
|
||||||
|
options = {
|
||||||
|
headers: {
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'Authorization' => ENV['MAILBLUSTER_API_KEY']
|
||||||
|
},
|
||||||
|
body: {
|
||||||
|
'email' => user.email,
|
||||||
|
'firstName' => user.name,
|
||||||
|
'addTags' => add_tags,
|
||||||
|
'removeTags' => remove_tags
|
||||||
|
}.to_json
|
||||||
|
}
|
||||||
|
email_hash = Digest::MD5.hexdigest(old_email.presence || user.email)
|
||||||
|
put("/#{email_hash}", options).parsed_response
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.delete_lead(user)
|
||||||
|
email_hash = Digest::MD5.hexdigest user.email
|
||||||
|
options = {
|
||||||
|
headers: {
|
||||||
|
'Content-Type' => 'application/json',
|
||||||
|
'Authorization' => ENV['MAILBLUSTER_API_KEY']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete("/#{email_hash}", options).parsed_response
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
require 'webmock/rspec'
|
require 'webmock/rspec'
|
||||||
|
|
||||||
describe External::MailblusterHelper, type: :helper do
|
describe MailblusterManager, type: :model do
|
||||||
let!(:user) { create(:user) }
|
let!(:user) { create(:user) }
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
|
|
@ -30,7 +30,7 @@ describe External::MailblusterHelper, type: :helper do
|
||||||
}"
|
}"
|
||||||
stub_request(:post, url)
|
stub_request(:post, url)
|
||||||
.to_return(body: response_body, status: 200)
|
.to_return(body: response_body, status: 200)
|
||||||
response = create_lead(user)
|
response = MailblusterManager.create_lead(user)
|
||||||
|
|
||||||
expect(WebMock).to have_requested(:post, url).with(body: {
|
expect(WebMock).to have_requested(:post, url).with(body: {
|
||||||
'email': user.email,
|
'email': user.email,
|
||||||
|
|
@ -64,7 +64,7 @@ describe External::MailblusterHelper, type: :helper do
|
||||||
user.save
|
user.save
|
||||||
stub_request(:put, url + Digest::MD5.hexdigest(old_email))
|
stub_request(:put, url + Digest::MD5.hexdigest(old_email))
|
||||||
.to_return(body: response_body, status: 200)
|
.to_return(body: response_body, status: 200)
|
||||||
response = edit_lead(user, old_email: old_email)
|
response = MailblusterManager.edit_lead(user, old_email: old_email)
|
||||||
|
|
||||||
expect(WebMock).to have_requested(:put, url + Digest::MD5.hexdigest(old_email)).with(body: {
|
expect(WebMock).to have_requested(:put, url + Digest::MD5.hexdigest(old_email)).with(body: {
|
||||||
'email': user.email,
|
'email': user.email,
|
||||||
|
|
@ -93,7 +93,7 @@ describe External::MailblusterHelper, type: :helper do
|
||||||
stub_request(:put, url + Digest::MD5.hexdigest(user.email))
|
stub_request(:put, url + Digest::MD5.hexdigest(user.email))
|
||||||
.to_return(body: response_body, status: 200)
|
.to_return(body: response_body, status: 200)
|
||||||
add_tags = ['2021']
|
add_tags = ['2021']
|
||||||
response = edit_lead(user, add_tags: add_tags)
|
response = MailblusterManager.edit_lead(user, add_tags: add_tags)
|
||||||
|
|
||||||
expect(WebMock).to have_requested(:put, url + Digest::MD5.hexdigest(user.email)).with(body: {
|
expect(WebMock).to have_requested(:put, url + Digest::MD5.hexdigest(user.email)).with(body: {
|
||||||
'email': user.email,
|
'email': user.email,
|
||||||
|
|
@ -115,7 +115,7 @@ describe External::MailblusterHelper, type: :helper do
|
||||||
lead_url = url + email_hash.to_s
|
lead_url = url + email_hash.to_s
|
||||||
stub_request(:delete, lead_url)
|
stub_request(:delete, lead_url)
|
||||||
.to_return(body: response_body)
|
.to_return(body: response_body)
|
||||||
response = delete_lead(user)
|
response = MailblusterManager.delete_lead(user)
|
||||||
|
|
||||||
expect(WebMock).to have_requested(:delete, lead_url)
|
expect(WebMock).to have_requested(:delete, lead_url)
|
||||||
expect(response).to eq(response_body)
|
expect(response).to eq(response_body)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue