Class: ApiMailer::Base

Inherits:
AbstractController::Base
  • Object
show all
Includes:
AbstractController::Rendering
Defined in:
lib/api_mailer/base.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(action_name, *args) ⇒ Base

Returns a new instance of Base.



39
40
41
42
43
# File 'lib/api_mailer/base.rb', line 39

def initialize(action_name, *args)
  self.action_name = action_name
  self.responses = []
  process(action_name, *args)
end

Instance Attribute Details

#action_nameObject

Returns the value of attribute action_name.



8
9
10
# File 'lib/api_mailer/base.rb', line 8

def action_name
  @action_name
end

#headersObject

Returns the value of attribute headers.



10
11
12
# File 'lib/api_mailer/base.rb', line 10

def headers
  @headers
end

#responsesObject

Returns the value of attribute responses.



9
10
11
# File 'lib/api_mailer/base.rb', line 9

def responses
  @responses
end

Class Method Details

.default(value = nil) ⇒ Object



34
35
36
37
# File 'lib/api_mailer/base.rb', line 34

def self.default(value = nil)
  self.default_params = default_params.merge(value).freeze if value
  default_params
end

.method_missing(method_name, *args) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/api_mailer/base.rb', line 16

def self.method_missing(method_name, *args)
  if respond_to?(method_name)
    new(method_name, *args)
  else
    super
  end
end

.respond_to?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/api_mailer/base.rb', line 28

def self.respond_to?(method, include_private = false)
  super || action_methods.include?(method.to_s)
end

.test_deliveriesObject



24
25
26
# File 'lib/api_mailer/base.rb', line 24

def self.test_deliveries
  @test_deliveries ||= []
end

Instance Method Details

#collect_responses(headers) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/api_mailer/base.rb', line 66

def collect_responses(headers)
  templates_name = headers.delete(:template_name) || action_name

  each_template(templates_path(headers), templates_name) do |template|
    self.formats = template.formats

    self.responses << {
      body: render(template: template),
      content_type: template.type.to_s
    }
  end
end

#deliverObject



58
59
60
61
62
63
64
# File 'lib/api_mailer/base.rb', line 58

def deliver
  if Rails.env.test?
    self.class.test_deliveries << build_message
  else
    deliver_message(build_message)
  end
end

#each_template(paths, name, &block) ⇒ Object



83
84
85
86
87
88
89
90
# File 'lib/api_mailer/base.rb', line 83

def each_template(paths, name, &block)
  templates = lookup_context.find_all(name, paths)
  if templates.empty?
    raise ActionView::MissingTemplate.new(paths, name, paths, false, 'mailer')
  else
    templates.uniq { |t| t.formats }.each(&block)
  end
end

#mail(headers = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/api_mailer/base.rb', line 45

def mail(headers={})
  # Call all the procs (if any)
  default_values = {}
  self.class.default.each do |k,v|
    default_values[k] = v.is_a?(Proc) ? instance_eval(&v) : v
  end

  # Handle defaults
  self.headers = ActiveSupport::HashWithIndifferentAccess.new(headers.reverse_merge(default_values))

  collect_responses(headers)
end

#process(method_name, *args) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/api_mailer/base.rb', line 99

def process(method_name, *args)
  payload = {
    :mailer => self.class.name,
    :action => method_name
  }

  ActiveSupport::Notifications.instrument("process.api_mailer", payload) do
    lookup_context.skip_default_locale!

    super
  end
end

#templates_path(headers) ⇒ Object



79
80
81
# File 'lib/api_mailer/base.rb', line 79

def templates_path(headers)
  [headers.delete(:template_path) || self.class.name.underscore]
end