From f0582c25bf5fe75c768c85d92a0b7814617691e3 Mon Sep 17 00:00:00 2001 From: CactusPuppy Date: Wed, 31 Mar 2021 21:05:59 -0700 Subject: [PATCH] Move Mailbluster business logic to services/ instead of helpers/ --- app/jobs/mailbluster_create_lead_job.rb | 2 +- app/jobs/mailbluster_delete_lead_job.rb | 2 +- app/jobs/mailbluster_edit_lead_job.rb | 3 +- app/services/mailbluster_manager.rb | 49 +++++++++++++++++++ .../mailbluster_manager_spec.rb} | 10 ++-- 5 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 app/services/mailbluster_manager.rb rename spec/{helpers/external/mailbluster_helper_spec.rb => services/mailbluster_manager_spec.rb} (92%) diff --git a/app/jobs/mailbluster_create_lead_job.rb b/app/jobs/mailbluster_create_lead_job.rb index 63ef6b33..701719d7 100644 --- a/app/jobs/mailbluster_create_lead_job.rb +++ b/app/jobs/mailbluster_create_lead_job.rb @@ -4,6 +4,6 @@ class MailblusterCreateLeadJob < ApplicationJob queue_as :default def perform(user) - ApplicationController.helpers.create_lead(user) + MailblusterManager.create_lead(user) end end diff --git a/app/jobs/mailbluster_delete_lead_job.rb b/app/jobs/mailbluster_delete_lead_job.rb index 972a2cb6..387d1cc0 100644 --- a/app/jobs/mailbluster_delete_lead_job.rb +++ b/app/jobs/mailbluster_delete_lead_job.rb @@ -2,6 +2,6 @@ class MailblusterDeleteLeadJob < ApplicationJob queue_as :default def perform(user) - ApplicationController.helpers.delete_lead(user) + MailblusterManager.delete_lead(user) end end diff --git a/app/jobs/mailbluster_edit_lead_job.rb b/app/jobs/mailbluster_edit_lead_job.rb index cb0a5832..ff5d07ce 100644 --- a/app/jobs/mailbluster_edit_lead_job.rb +++ b/app/jobs/mailbluster_edit_lead_job.rb @@ -4,7 +4,6 @@ class MailblusterEditLeadJob < ApplicationJob queue_as :default def perform(user, add_tags: [], remove_tags: [], old_email: nil) - ApplicationController.helpers.edit_lead(user, - add_tags: add_tags, remove_tags: remove_tags, old_email: old_email) + MailblusterManager.edit_lead(user, add_tags: add_tags, remove_tags: remove_tags, old_email: old_email) end end diff --git a/app/services/mailbluster_manager.rb b/app/services/mailbluster_manager.rb new file mode 100644 index 00000000..6360413d --- /dev/null +++ b/app/services/mailbluster_manager.rb @@ -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 \ No newline at end of file diff --git a/spec/helpers/external/mailbluster_helper_spec.rb b/spec/services/mailbluster_manager_spec.rb similarity index 92% rename from spec/helpers/external/mailbluster_helper_spec.rb rename to spec/services/mailbluster_manager_spec.rb index 125c862d..8c031df0 100644 --- a/spec/helpers/external/mailbluster_helper_spec.rb +++ b/spec/services/mailbluster_manager_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' require 'webmock/rspec' -describe External::MailblusterHelper, type: :helper do +describe MailblusterManager, type: :model do let!(:user) { create(:user) } before(:each) do @@ -30,7 +30,7 @@ describe External::MailblusterHelper, type: :helper do }" stub_request(:post, url) .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: { 'email': user.email, @@ -64,7 +64,7 @@ describe External::MailblusterHelper, type: :helper do user.save stub_request(:put, url + Digest::MD5.hexdigest(old_email)) .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: { 'email': user.email, @@ -93,7 +93,7 @@ describe External::MailblusterHelper, type: :helper do stub_request(:put, url + Digest::MD5.hexdigest(user.email)) .to_return(body: response_body, status: 200) 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: { 'email': user.email, @@ -115,7 +115,7 @@ describe External::MailblusterHelper, type: :helper do lead_url = url + email_hash.to_s stub_request(:delete, lead_url) .to_return(body: response_body) - response = delete_lead(user) + response = MailblusterManager.delete_lead(user) expect(WebMock).to have_requested(:delete, lead_url) expect(response).to eq(response_body)