From d29a7129bb0d1878c5613b39987a321c7db504f7 Mon Sep 17 00:00:00 2001 From: "Matt E. Patterson" Date: Mon, 23 Feb 2026 10:55:49 -0500 Subject: [PATCH 1/3] Replace deprecated ActiveSupport::Configurable with mattr_accessor --- lib/mailcat.rb | 14 ++++++++------ lib/mailcat/delivery_method.rb | 6 +----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/mailcat.rb b/lib/mailcat.rb index 22ef982..456ffb6 100644 --- a/lib/mailcat.rb +++ b/lib/mailcat.rb @@ -3,21 +3,23 @@ require "mailcat/delivery_method" require "mailcat/railtie" if defined?(Rails::Railtie) require "mailcat/version" -require "active_support" +require "active_support/core_ext/module/attribute_accessors" module Mailcat class Error < StandardError; end - include ::ActiveSupport::Configurable + mattr_accessor :mailcat_api_key, default: -> { ENV["MAILCAT_API_KEY"] } + mattr_accessor :mailcat_url, default: -> { ENV["MAILCAT_URL"] } - config_accessor :mailcat_api_key, default: -> { ENV["MAILCAT_API_KEY"] } - config_accessor :mailcat_url, default: -> { ENV["MAILCAT_URL"] } + def self.configure + yield self + end def self.mailcat_api_key_raw - config.mailcat_api_key.is_a?(Proc) ? config.mailcat_api_key.call : config.mailcat_api_key + mailcat_api_key.is_a?(Proc) ? mailcat_api_key.call : mailcat_api_key end def self.mailcat_url_raw - config.mailcat_url.is_a?(Proc) ? config.mailcat_url.call : config.mailcat_url + mailcat_url.is_a?(Proc) ? mailcat_url.call : mailcat_url end end diff --git a/lib/mailcat/delivery_method.rb b/lib/mailcat/delivery_method.rb index 378e090..c575369 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) From 055def822ede20f5425c2692dcf56d1a3f9da6d4 Mon Sep 17 00:00:00 2001 From: "Matt E. Patterson" Date: Mon, 23 Feb 2026 12:29:54 -0500 Subject: [PATCH 2/3] use explicit Configuration class instead of mattr_accessor --- lib/mailcat.rb | 23 +++++++++++++---------- lib/mailcat/delivery_method.rb | 8 ++++---- spec/mailcat_spec.rb | 12 +++++++----- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/lib/mailcat.rb b/lib/mailcat.rb index 456ffb6..f31d3c4 100644 --- a/lib/mailcat.rb +++ b/lib/mailcat.rb @@ -3,23 +3,26 @@ require "mailcat/delivery_method" require "mailcat/railtie" if defined?(Rails::Railtie) require "mailcat/version" -require "active_support/core_ext/module/attribute_accessors" module Mailcat class Error < StandardError; end - mattr_accessor :mailcat_api_key, default: -> { ENV["MAILCAT_API_KEY"] } - mattr_accessor :mailcat_url, default: -> { ENV["MAILCAT_URL"] } + class Configuration + attr_accessor :mailcat_api_key, :mailcat_url - def self.configure - yield self + def initialize + @mailcat_api_key = ENV["MAILCAT_API_KEY"] + @mailcat_url = ENV["MAILCAT_URL"] + end end - def self.mailcat_api_key_raw - mailcat_api_key.is_a?(Proc) ? mailcat_api_key.call : mailcat_api_key - end + class << self + def config + @config ||= Configuration.new + end - def self.mailcat_url_raw - mailcat_url.is_a?(Proc) ? mailcat_url.call : mailcat_url + def configure + yield config + end end end diff --git a/lib/mailcat/delivery_method.rb b/lib/mailcat/delivery_method.rb index c575369..d1b5356 100644 --- a/lib/mailcat/delivery_method.rb +++ b/lib/mailcat/delivery_method.rb @@ -17,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, @@ -58,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, @@ -78,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..5fc2c60 100644 --- a/spec/mailcat_spec.rb +++ b/spec/mailcat_spec.rb @@ -5,9 +5,10 @@ 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 + Mailcat.instance_variable_set(:@config, nil) stub_const("ENV", ENV.to_h.merge( "MAILCAT_API_KEY" => "spec_key", "MAILCAT_URL" => "https://spec-url.com" @@ -15,13 +16,14 @@ 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 context "when explicitly set" do before do + Mailcat.instance_variable_set(:@config, nil) described_class.configure do |config| config.mailcat_api_key = "explicit_key" config.mailcat_url = "https://explicit-url.com" @@ -29,8 +31,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 From e7e4961eb5f34475f16ae83ff628638fe4d8717e Mon Sep 17 00:00:00 2001 From: "Matt E. Patterson" Date: Mon, 23 Feb 2026 12:45:21 -0500 Subject: [PATCH 3/3] remove unnecessary config reset in specs --- spec/mailcat_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/mailcat_spec.rb b/spec/mailcat_spec.rb index 5fc2c60..1dabdd4 100644 --- a/spec/mailcat_spec.rb +++ b/spec/mailcat_spec.rb @@ -8,7 +8,6 @@ describe "configuration" do context "when using the default environment variables" do before do - Mailcat.instance_variable_set(:@config, nil) stub_const("ENV", ENV.to_h.merge( "MAILCAT_API_KEY" => "spec_key", "MAILCAT_URL" => "https://spec-url.com" @@ -23,7 +22,6 @@ context "when explicitly set" do before do - Mailcat.instance_variable_set(:@config, nil) described_class.configure do |config| config.mailcat_api_key = "explicit_key" config.mailcat_url = "https://explicit-url.com"