Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 14 additions & 9 deletions lib/mailcat.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,26 @@
require "mailcat/delivery_method"
require "mailcat/railtie" if defined?(Rails::Railtie)
require "mailcat/version"
require "active_support"

module Mailcat
class Error < StandardError; end

include ::ActiveSupport::Configurable
class Configuration
attr_accessor :mailcat_api_key, :mailcat_url

config_accessor :mailcat_api_key, default: -> { ENV["MAILCAT_API_KEY"] }
config_accessor :mailcat_url, default: -> { ENV["MAILCAT_URL"] }

def self.mailcat_api_key_raw
config.mailcat_api_key.is_a?(Proc) ? config.mailcat_api_key.call : config.mailcat_api_key
def initialize
@mailcat_api_key = ENV["MAILCAT_API_KEY"]
@mailcat_url = ENV["MAILCAT_URL"]
end
end

def self.mailcat_url_raw
config.mailcat_url.is_a?(Proc) ? config.mailcat_url.call : config.mailcat_url
class << self
def config
@config ||= Configuration.new
end

def configure
yield config
end
end
end
14 changes: 5 additions & 9 deletions lib/mailcat/delivery_method.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@
module Mailcat
# Rails delivery_method for Mailcat.
class DeliveryMethod
attr_accessor :settings

def initialize(...)
self.settings = Mailcat.config
end
def initialize(settings = {}); end

def deliver!(mail)
send_to_mailcat(mail)
Expand All @@ -21,7 +17,7 @@ def send_to_mailcat(mail)
Net::HTTP.start(emails_uri.hostname, emails_uri.port, use_ssl: emails_uri.scheme == "https") do |http|
req = Net::HTTP::Post.new(emails_uri)
req["Content-Type"] = "application/json"
req["X-Api-Key"] = Mailcat.mailcat_api_key_raw
req["X-Api-Key"] = Mailcat.config.mailcat_api_key
email_body = {
from: mail.from.first,
to: mail.to,
Expand Down Expand Up @@ -62,7 +58,7 @@ def upload_attachment(attachment)

req = Net::HTTP::Post.new(direct_uploads_uri)
req["Content-Type"] = "application/json"
req["X-Api-Key"] = Mailcat.mailcat_api_key_raw
req["X-Api-Key"] = Mailcat.config.mailcat_api_key
req.body = {
blob: {
filename: attachment.filename,
Expand All @@ -82,11 +78,11 @@ def upload_attachment(attachment)
end

def emails_uri
@emails_uri ||= URI("#{Mailcat.mailcat_url_raw}/api/emails")
@emails_uri ||= URI("#{Mailcat.config.mailcat_url}/api/emails")
end

def direct_uploads_uri
@direct_uploads_uri ||= URI("#{Mailcat.mailcat_url_raw}/api/direct_uploads")
@direct_uploads_uri ||= URI("#{Mailcat.config.mailcat_url}/api/direct_uploads")
end

def attachment_tempfile(attachment)
Expand Down
10 changes: 5 additions & 5 deletions spec/mailcat_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
expect(Mailcat::VERSION).not_to be nil
end

describe "environment variable loader" do
describe "configuration" do
context "when using the default environment variables" do
before do
stub_const("ENV", ENV.to_h.merge(
Expand All @@ -15,8 +15,8 @@
end

it "uses ENV defaults if not explicitly set" do
expect(Mailcat.mailcat_api_key_raw).to eq("spec_key")
expect(Mailcat.mailcat_url_raw).to eq("https://spec-url.com")
expect(Mailcat.config.mailcat_api_key).to eq("spec_key")
expect(Mailcat.config.mailcat_url).to eq("https://spec-url.com")
end
end

Expand All @@ -29,8 +29,8 @@
end

it "uses explicitly set values" do
expect(Mailcat.mailcat_api_key_raw).to eq("explicit_key")
expect(Mailcat.mailcat_url_raw).to eq("https://explicit-url.com")
expect(Mailcat.config.mailcat_api_key).to eq("explicit_key")
expect(Mailcat.config.mailcat_url).to eq("https://explicit-url.com")
end
end
end
Expand Down