Module: ActionMailer::Enqueable::RecordEncoder

Extended by:
RecordEncoder
Included in:
RecordEncoder
Defined in:
lib/action_mailer/enqueable/record_encoder.rb

Overview

Prepare ActiveRecord objects for safe serialization.

user = User.first

> #<User id: 1, account_id: 1, name: ‘Buddhy’>

RecordEncoder.encode(user)

> { :class => ‘User’, :id => 1 }

RecordEncoder.decode(user)

> #<User id: 1, account_id: 1, name: ‘Buddhy’>

Defined Under Namespace

Classes: RecordIdMissingError

Constant Summary collapse

CLASS =
'class'.freeze
ID =
'id'.freeze

Instance Method Summary collapse

Instance Method Details

#decode(params) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/action_mailer/enqueable/record_encoder.rb', line 44

def decode(params)
  decoded = params.map do |argument|
    case argument
    when Hash
      active_record?(argument) ? decode_active_record(argument) : decode(argument)
    when Array
      decode(argument)
    else
      argument
    end
  end

  params.is_a?(Hash) ? Hash[decoded] : decoded
end

#encode(params) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/action_mailer/enqueable/record_encoder.rb', line 27

def encode(params)
  encoded = params.map do |argument|
    case argument
    when ActiveRecord::Base
      encode_active_record(argument)
    when Array, Hash
      encode(argument)
    when NilClass, TrueClass, FalseClass, Numeric, String, Symbol
      argument
    else
      raise ArgumentError.new("Cannot encode #{argument} (#{argument.class})")
    end
  end

  params.is_a?(Hash) ? Hash[encoded] : encoded
end