diff --git a/lib/mailgun-ruby.rb b/lib/mailgun-ruby.rb index be20eca4..caefcf73 100644 --- a/lib/mailgun-ruby.rb +++ b/lib/mailgun-ruby.rb @@ -1,2 +1,2 @@ -require 'mailgun' -require 'railgun' if defined?(Rails) && defined?(ActionMailer) +require_relative 'mailgun' +require_relative 'railgun' if defined?(Rails) && defined?(ActionMailer) diff --git a/lib/mailgun.rb b/lib/mailgun.rb index e5eabed4..03d70c79 100644 --- a/lib/mailgun.rb +++ b/lib/mailgun.rb @@ -1,25 +1,40 @@ +# require ruby dependencies +require 'json' +require 'openssl' require 'tempfile' -require 'faraday' +require 'time' +require 'uri' require 'yaml' -require 'json' -require 'mailgun/version' -require 'mailgun/client' -require 'mailgun/response' -require 'mailgun/chains' -require 'mailgun/address' -require 'mailgun/lists/opt_in_handler' -require 'mailgun/messages/batch_message' -require 'mailgun/messages/message_builder' -require 'mailgun/events/events' +# require external dependencies +require 'faraday' +require 'faraday/multipart' +require 'mini_mime' +require 'zeitwerk' + require 'mailgun/exceptions/exceptions' -require 'mailgun/domains/domains' -require 'mailgun/webhooks/webhooks' -require 'mailgun/templates/templates' -require 'mailgun/subaccounts/subaccounts' -require 'mailgun/tags/tags' -require 'mailgun/metrics/metrics' -require 'mailgun/logs/logs' +require 'mailgun/helpers/api_version_checker' + +# load zeitwerk +Zeitwerk::Loader.for_gem.tap do |loader| # rubocop:disable Style/SymbolProc + loader.ignore("#{__dir__}/mailgun-ruby.rb") + loader.ignore("#{__dir__}/railgun.rb") + loader.ignore("#{__dir__}/railgun") + + loader.collapse("#{__dir__}/mailgun/domains") + loader.collapse("#{__dir__}/mailgun/events") + loader.collapse("#{__dir__}/mailgun/exceptions") + loader.collapse("#{__dir__}/mailgun/helpers") + loader.collapse("#{__dir__}/mailgun/lists") + loader.collapse("#{__dir__}/mailgun/logs") + loader.collapse("#{__dir__}/mailgun/messages") + loader.collapse("#{__dir__}/mailgun/metrics") + loader.collapse("#{__dir__}/mailgun/subaccounts") + loader.collapse("#{__dir__}/mailgun/tags") + loader.collapse("#{__dir__}/mailgun/templates") + loader.collapse("#{__dir__}/mailgun/webhooks") + loader.setup +end # Module for interacting with the sweet Mailgun API. # diff --git a/lib/mailgun/address.rb b/lib/mailgun/address.rb index c46be75d..1ea3511b 100644 --- a/lib/mailgun/address.rb +++ b/lib/mailgun/address.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # Mailgun::Address is a simple interface to the Email Validation API. diff --git a/lib/mailgun/client.rb b/lib/mailgun/client.rb index d8e31c57..6cd6d16b 100644 --- a/lib/mailgun/client.rb +++ b/lib/mailgun/client.rb @@ -1,7 +1,3 @@ -require 'mailgun/chains' -require 'mailgun/suppressions' -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Client object is used to communicate with the Mailgun API. It is a # wrapper around Faraday so you don't have to worry about the HTTP aspect @@ -32,14 +28,7 @@ def initialize(api_key = Mailgun.api_key, } request_options.merge!(request: {timeout: timeout}) if timeout - @http_client = Faraday.new(request_options) do |conn| - conn.request :multipart - conn.request :authorization, :basic, 'api', api_key - conn.request :url_encoded - conn.response :raise_error, include_request: true - conn.adapter Faraday.default_adapter - conn.options.params_encoder = Faraday::FlatParamsEncoder - end + @http_client = build_http_client(api_key, request_options) @test_mode = test_mode @api_version = api_version @@ -262,5 +251,16 @@ def perform_data_validation(working_domain, data) working_domain ) if message.fetch('from', []).empty? && message.fetch(:from, []).empty? end + + def build_http_client(api_key, request_options) + Faraday.new(request_options) do |conn| + conn.request :multipart + conn.request :authorization, :basic, 'api', api_key + conn.request :url_encoded + conn.response :raise_error, include_request: true + conn.adapter Faraday.default_adapter + conn.options.params_encoder = Faraday::FlatParamsEncoder + end + end end end diff --git a/lib/mailgun/domains/domains.rb b/lib/mailgun/domains/domains.rb index 3cd03461..401e125c 100644 --- a/lib/mailgun/domains/domains.rb +++ b/lib/mailgun/domains/domains.rb @@ -1,6 +1,3 @@ -require 'mailgun/exceptions/exceptions' -require 'mailgun/helpers/api_version_checker' - module Mailgun # A Mailgun::Domains object is a simple CRUD interface to Mailgun Domains. diff --git a/lib/mailgun/events/events.rb b/lib/mailgun/events/events.rb index 44558234..b5e4b2c9 100644 --- a/lib/mailgun/events/events.rb +++ b/lib/mailgun/events/events.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Events object makes it really simple to consume diff --git a/lib/mailgun/lists/opt_in_handler.rb b/lib/mailgun/lists/opt_in_handler.rb index 21f08e76..e436737e 100644 --- a/lib/mailgun/lists/opt_in_handler.rb +++ b/lib/mailgun/lists/opt_in_handler.rb @@ -1,6 +1,3 @@ -require 'uri' -require 'openssl' - module Mailgun # Public: Provides methods for creating and handling opt-in URLs, diff --git a/lib/mailgun/logs/logs.rb b/lib/mailgun/logs/logs.rb index 7c4e7424..d4d41cc7 100644 --- a/lib/mailgun/logs/logs.rb +++ b/lib/mailgun/logs/logs.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Logs object is a simple interface to Mailgun Logs. # Uses Mailgun diff --git a/lib/mailgun/messages/batch_message.rb b/lib/mailgun/messages/batch_message.rb index bb81c56e..dae331e3 100644 --- a/lib/mailgun/messages/batch_message.rb +++ b/lib/mailgun/messages/batch_message.rb @@ -1,5 +1,3 @@ -require 'mailgun/messages/message_builder' - module Mailgun # A Mailgun::BatchMessage object is used to create a valid payload diff --git a/lib/mailgun/messages/message_builder.rb b/lib/mailgun/messages/message_builder.rb index 19dccf78..f9efdc6c 100644 --- a/lib/mailgun/messages/message_builder.rb +++ b/lib/mailgun/messages/message_builder.rb @@ -1,7 +1,3 @@ -require 'mini_mime' -require 'time' -require 'faraday/multipart' - module Mailgun # A Mailgun::MessageBuilder object is used to create a valid payload diff --git a/lib/mailgun/metrics/metrics.rb b/lib/mailgun/metrics/metrics.rb index 6f63e07a..5d3b9c55 100644 --- a/lib/mailgun/metrics/metrics.rb +++ b/lib/mailgun/metrics/metrics.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Metrics object is a simple interface to Mailgun Metrics. # Uses Mailgun diff --git a/lib/mailgun/subaccounts/subaccounts.rb b/lib/mailgun/subaccounts/subaccounts.rb index edfcaf73..8ea36d57 100644 --- a/lib/mailgun/subaccounts/subaccounts.rb +++ b/lib/mailgun/subaccounts/subaccounts.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Subaccounts object is a simple CRUD interface to Mailgun Subaccounts. diff --git a/lib/mailgun/suppressions.rb b/lib/mailgun/suppressions.rb index 1b8de722..d24078f3 100644 --- a/lib/mailgun/suppressions.rb +++ b/lib/mailgun/suppressions.rb @@ -1,7 +1,3 @@ -require 'uri' - -require 'mailgun/exceptions/exceptions' - module Mailgun # The Mailgun::Suppressions object makes it easy to manage "suppressions" diff --git a/lib/mailgun/tags/tags.rb b/lib/mailgun/tags/tags.rb index f3af9e7a..1946b9a9 100644 --- a/lib/mailgun/tags/tags.rb +++ b/lib/mailgun/tags/tags.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Tags object is a simple CRUD interface to Mailgun Tags. diff --git a/lib/mailgun/templates/templates.rb b/lib/mailgun/templates/templates.rb index 6b3e945a..2b5e50ab 100644 --- a/lib/mailgun/templates/templates.rb +++ b/lib/mailgun/templates/templates.rb @@ -1,5 +1,3 @@ -require 'mailgun/exceptions/exceptions' - module Mailgun # A Mailgun::Templates object is a simple CRUD interface to Mailgun Templates. diff --git a/lib/railgun.rb b/lib/railgun.rb index 566dc5d7..800e6fbb 100644 --- a/lib/railgun.rb +++ b/lib/railgun.rb @@ -1,8 +1,15 @@ -require 'railgun/railtie' -require 'railgun/attachment' -require 'railgun/errors' -require 'railgun/mailer' -require 'railgun/message' +# require ruby dependencies +require 'json' + +# require external dependencies +require 'action_mailer' +require 'mail' +require 'mailgun' +require 'rails' module Railgun + require_relative 'railgun/attachment' + require_relative 'railgun/errors' + require_relative 'railgun/mailer' + require_relative 'railgun/railtie' end diff --git a/lib/railgun/mailer.rb b/lib/railgun/mailer.rb index dfc5c471..4cb199d2 100644 --- a/lib/railgun/mailer.rb +++ b/lib/railgun/mailer.rb @@ -1,9 +1,3 @@ -require 'action_mailer' -require 'json' -require 'mailgun' -require 'rails' -require 'railgun/errors' - module Railgun # Railgun::Mailer is an ActionMailer provider for sending mail through diff --git a/lib/railgun/message.rb b/lib/railgun/message.rb deleted file mode 100644 index 721ec974..00000000 --- a/lib/railgun/message.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'mail' -require 'mailgun/messages/message_builder' -require 'railgun/attachment' -require 'railgun/errors' - -module Mail - - class Message - - # Attributes to hold Mailgun-specific information - attr_accessor :mailgun_variables, - :mailgun_options, - :mailgun_recipient_variables, - :mailgun_headers, - :mailgun_template_variables - - end -end diff --git a/lib/railgun/railtie.rb b/lib/railgun/railtie.rb index a8b71078..0c308f73 100644 --- a/lib/railgun/railtie.rb +++ b/lib/railgun/railtie.rb @@ -1,8 +1,15 @@ -require 'railgun/mailer' - module Railgun class Railtie < ::Rails::Railtie ActiveSupport.on_load(:action_mailer) do + Mail::Message.class_eval do + # Attributes to hold Mailgun-specific information + attr_accessor :mailgun_variables, + :mailgun_options, + :mailgun_recipient_variables, + :mailgun_headers, + :mailgun_template_variables + end + add_delivery_method :mailgun, Railgun::Mailer ActiveSupport.run_load_hooks(:mailgun_mailer, Railgun::Mailer) end diff --git a/mailgun.gemspec b/mailgun.gemspec index c43ec09a..319e6306 100644 --- a/mailgun.gemspec +++ b/mailgun.gemspec @@ -39,5 +39,6 @@ Gem::Specification.new do |spec| spec.add_dependency 'mini_mime' spec.add_dependency 'faraday', "~> 2.1" spec.add_dependency 'faraday-multipart', '~> 1.1.0' + spec.add_dependency 'zeitwerk' end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 60d5e662..6bf53e3f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,8 +1,3 @@ -require 'rubygems' -require 'bundler' -require 'bundler/setup' -Bundler.setup(:development) - require 'simplecov' SimpleCov.start do add_filter "/spec/"