Move Mailbluster business logic to services/ instead of helpers/

This commit is contained in:
CactusPuppy 2021-03-31 21:05:59 -07:00
parent 1c1d09fefc
commit f0582c25bf
No known key found for this signature in database
GPG key ID: 4B33B0A3E15E2C82
5 changed files with 57 additions and 9 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View 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

View file

@ -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)