Skip to content

Commit 45986dd

Browse files
Use zeitwerk to load gem (#370)
* Extract call to Faraday.new in #build_http_client private method So users have a chance to configure Faraday logger * Use zeitwerk to load gem --------- Co-authored-by: Alex Lebedev <6421109+alex-leb@users.noreply.github.com>
1 parent 0cc6144 commit 45986dd

22 files changed

Lines changed: 72 additions & 99 deletions

lib/mailgun-ruby.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
require 'mailgun'
2-
require 'railgun' if defined?(Rails) && defined?(ActionMailer)
1+
require_relative 'mailgun'
2+
require_relative 'railgun' if defined?(Rails) && defined?(ActionMailer)

lib/mailgun.rb

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
1+
# require ruby dependencies
2+
require 'json'
3+
require 'openssl'
14
require 'tempfile'
2-
require 'faraday'
5+
require 'time'
6+
require 'uri'
37
require 'yaml'
4-
require 'json'
58

6-
require 'mailgun/version'
7-
require 'mailgun/client'
8-
require 'mailgun/response'
9-
require 'mailgun/chains'
10-
require 'mailgun/address'
11-
require 'mailgun/lists/opt_in_handler'
12-
require 'mailgun/messages/batch_message'
13-
require 'mailgun/messages/message_builder'
14-
require 'mailgun/events/events'
9+
# require external dependencies
10+
require 'faraday'
11+
require 'faraday/multipart'
12+
require 'mini_mime'
13+
require 'zeitwerk'
14+
1515
require 'mailgun/exceptions/exceptions'
16-
require 'mailgun/domains/domains'
17-
require 'mailgun/webhooks/webhooks'
18-
require 'mailgun/templates/templates'
19-
require 'mailgun/subaccounts/subaccounts'
20-
require 'mailgun/tags/tags'
21-
require 'mailgun/tags/analytics_tags'
22-
require 'mailgun/metrics/metrics'
23-
require 'mailgun/logs/logs'
16+
require 'mailgun/helpers/api_version_checker'
17+
18+
# load zeitwerk
19+
Zeitwerk::Loader.for_gem.tap do |loader| # rubocop:disable Style/SymbolProc
20+
loader.ignore("#{__dir__}/mailgun-ruby.rb")
21+
loader.ignore("#{__dir__}/railgun.rb")
22+
loader.ignore("#{__dir__}/railgun")
23+
24+
loader.collapse("#{__dir__}/mailgun/analytics_tags")
25+
loader.collapse("#{__dir__}/mailgun/domains")
26+
loader.collapse("#{__dir__}/mailgun/events")
27+
loader.collapse("#{__dir__}/mailgun/exceptions")
28+
loader.collapse("#{__dir__}/mailgun/helpers")
29+
loader.collapse("#{__dir__}/mailgun/lists")
30+
loader.collapse("#{__dir__}/mailgun/logs")
31+
loader.collapse("#{__dir__}/mailgun/messages")
32+
loader.collapse("#{__dir__}/mailgun/metrics")
33+
loader.collapse("#{__dir__}/mailgun/subaccounts")
34+
loader.collapse("#{__dir__}/mailgun/tags")
35+
loader.collapse("#{__dir__}/mailgun/templates")
36+
loader.collapse("#{__dir__}/mailgun/webhooks")
37+
loader.setup
38+
end
2439

2540
# Module for interacting with the sweet Mailgun API.
2641
#

lib/mailgun/address.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'mailgun/exceptions/exceptions'
2-
31
module Mailgun
42

53
# Mailgun::Address is a simple interface to the Email Validation API.

lib/mailgun/client.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
require 'mailgun/chains'
2-
require 'mailgun/suppressions'
3-
require 'mailgun/exceptions/exceptions'
4-
51
module Mailgun
62
# A Mailgun::Client object is used to communicate with the Mailgun API. It is a
73
# 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,
3228
}
3329
request_options.merge!(request: {timeout: timeout}) if timeout
3430

35-
@http_client = Faraday.new(request_options) do |conn|
36-
conn.request :multipart
37-
conn.request :authorization, :basic, 'api', api_key
38-
conn.request :url_encoded
39-
conn.response :raise_error, include_request: true
40-
conn.adapter Faraday.default_adapter
41-
conn.options.params_encoder = Faraday::FlatParamsEncoder
42-
end
31+
@http_client = build_http_client(api_key, request_options)
4332

4433
@test_mode = test_mode
4534
@api_version = api_version
@@ -277,5 +266,16 @@ def perform_data_validation(working_domain, data)
277266
working_domain
278267
) if message.fetch('from', []).empty? && message.fetch(:from, []).empty?
279268
end
269+
270+
def build_http_client(api_key, request_options)
271+
Faraday.new(request_options) do |conn|
272+
conn.request :multipart
273+
conn.request :authorization, :basic, 'api', api_key
274+
conn.request :url_encoded
275+
conn.response :raise_error, include_request: true
276+
conn.adapter Faraday.default_adapter
277+
conn.options.params_encoder = Faraday::FlatParamsEncoder
278+
end
279+
end
280280
end
281281
end

lib/mailgun/domains/domains.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
require 'mailgun/exceptions/exceptions'
2-
require 'mailgun/helpers/api_version_checker'
3-
41
module Mailgun
52

63
# A Mailgun::Domains object is a simple CRUD interface to Mailgun Domains.

lib/mailgun/events/events.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'mailgun/exceptions/exceptions'
2-
31
module Mailgun
42

53
# A Mailgun::Events object makes it really simple to consume

lib/mailgun/exceptions/exceptions.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
module Mailgun
2+
module Exceptions
3+
end
24

35
# Public: A basic class for mananging errors.
46
# Inherits from StandardError (previously RuntimeError) as not all errors are

lib/mailgun/lists/opt_in_handler.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
require 'uri'
2-
require 'openssl'
3-
41
module Mailgun
52

63
# Public: Provides methods for creating and handling opt-in URLs,

lib/mailgun/logs/logs.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'mailgun/exceptions/exceptions'
2-
31
module Mailgun
42
# A Mailgun::Logs object is a simple interface to Mailgun Logs.
53
# Uses Mailgun

lib/mailgun/messages/batch_message.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'mailgun/messages/message_builder'
2-
31
module Mailgun
42

53
# A Mailgun::BatchMessage object is used to create a valid payload

0 commit comments

Comments
 (0)