class PaperPlane::FlightRoutes::Base

Attributes

context[RW]
recipient[RW]

Public Class Methods

fly(mid, context, **args) click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 24
def self.fly(mid, context, **args)
  new.fly(mid, context, **args)
end
inherited(subklass) click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 10
def self.inherited(subklass)
  subklass.class_eval do
    extend PaperPlane::FlightRoutes::ClassMethods
    default_views 'app/paper_planes'
  end
end
new(route_name = nil) click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 19
def initialize(route_name = nil)
  @_route_name = route_name || _default_route_name
  @_engine = _default_engine
end

Public Instance Methods

do_fly() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 47
def do_fly
  raise DoFlyUndefined, 'Please override :do_fly in your flight route.'
end
fly(mid, context, **args) click to toggle source

to be overriden by children

# File lib/paper_plane/flight_routes/base.rb, line 29
def fly(mid, context, **args)
  @method = mid
  @args = args
  @context = context

  _extract_recipient
  _extract_template_formats
  _extract_paper_plane_name

  begin
    do_fly
  rescue NoTemplateError
    _logger.debug "'#{route_name}' skipped for lack of suited template => path: '#{_template_file_path}'; extension: #{_template_formats}."
  else
    _logger.debug "#{route_name} sent!"
  end
end

Private Instance Methods

_base_template_name() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 155
def _base_template_name
  [action, route_name].join('/')
end
_default_engine() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 171
def _default_engine
  self.class._default_engine
end
_default_route_name() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 187
def _default_route_name
  self.class.to_s.underscore.split('/').last
end
_default_template_format() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 175
def _default_template_format
  self.class._default_template_format
end
_default_views_folder() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 179
def _default_views_folder
  Rails.root.join(self.class._default_views_folder)
end
_extract_paper_plane_name() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 123
def _extract_paper_plane_name
  @_paper_plane_name = @context.dig(:@paper_plane_name)
end
_extract_recipient() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 127
def _extract_recipient
  unless @context.key?(:@recipient)
    raise NoRecipientError, 'please specify the recipient value by setting @to = recipient'
  end

  @recipient = @context.dig(:@recipient)
end
_extract_template_formats() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 119
def _extract_template_formats
  @_template_formats = @context.dig(:@template_formats)
end
_full_template_folder_path() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 159
def _full_template_folder_path
  Rails.root.join(_default_views_folder, _template_folder)
end
_localized_file_path() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 147
def _localized_file_path
  File.join(_full_template_folder_path, _localized_template_name)
end
_localized_template_exists?() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 195
def _localized_template_exists?
  !Dir.glob([_localized_file_path, '*.*'].join).empty?
end
_localized_template_name() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 151
def _localized_template_name
  [_base_template_name, '.', locale].join
end
_logger() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 87
def _logger
  @_logger ||= Logger.new(STDOUT)
end
_lookup_context() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 95
def _lookup_context
  @_lookup_context ||= ActionView::LookupContext.new(_view_resolver)
end
_paper_plane_templates_path() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 183
def _paper_plane_templates_path
  @_paper_plane_name.underscore
end
_render_payload() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 79
def _render_payload
  [
    _view_context,
    template: _template_file_path,
    locals: _template_locals
  ]
end
_renderer() click to toggle source

def _output_buffer

@_output_buffer ||= ActionView::OutputBuffer.new

end

# File lib/paper_plane/flight_routes/base.rb, line 111
def _renderer
  @_renderer ||= ActionView::Renderer.new(_lookup_context)
end
_template_exists?() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 191
def _template_exists?
  !Dir.glob([_template_full_file_path, '*.*'].join).empty?
end
_template_file_path() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 135
def _template_file_path
  [_template_folder, _template_name].join('/')
end
_template_folder() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 163
def _template_folder
  _paper_plane_templates_path
end
_template_formats() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 115
def _template_formats
  @_template_formats = %i[text]
end
_template_full_file_path() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 167
def _template_full_file_path
  File.join(_full_template_folder_path, _template_name)
end
_template_locals() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 91
def _template_locals
  context
end
_template_name() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 139
def _template_name
  if _localized_template_exists?
    _localized_template_name
  else
    _base_template_name
  end
end
_view_context() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 103
def _view_context
  @_view_context ||= ActionView::Base.new(_lookup_context)
end
_view_resolver() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 99
def _view_resolver
  @_view_resolver ||= ActionView::FileSystemResolver.new(_default_views_folder)
end
action() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 61
def action
  @method.to_s
end
contextualize() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 53
def contextualize
  context.each do |variable, value|
    next unless variable.to_s.starts_with? '@'

    instance_variable_set(variable, value)
  end
end
locale() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 75
def locale
  @locale || @recipient.locale || I18n.locale
end
route_name() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 65
def route_name
  @_route_name.to_s
end
template() click to toggle source
# File lib/paper_plane/flight_routes/base.rb, line 69
def template
  return _renderer.render(*_render_payload) if _template_exists?

  raise NoTemplateError, "Could not find template for '#{_template_file_path}' with extension: #{_template_formats}"
end