diff --git a/lib/mailcat.rb b/lib/mailcat.rb index 22ef982..f31d3c4 100644 --- a/lib/mailcat.rb +++ b/lib/mailcat.rb @@ -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 diff --git a/lib/mailcat/delivery_method.rb b/lib/mailcat/delivery_method.rb index 378e090..d1b5356 100644 --- a/lib/mailcat/delivery_method.rb +++ b/lib/mailcat/delivery_method.rb @@ -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) @@ -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, @@ -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, @@ -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) diff --git a/spec/mailcat_spec.rb b/spec/mailcat_spec.rb index 8d6f5d7..1dabdd4 100644 --- a/spec/mailcat_spec.rb +++ b/spec/mailcat_spec.rb @@ -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( @@ -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 @@ -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