Skip to content

Commit 3075b9e

Browse files
authored
Merge pull request #661 from sunny/add-active-job-serializer
Add ActiveJob serializer for Money objects
2 parents b3fec42 + 71430c0 commit 3075b9e

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
module MoneyRails
4+
module ActiveJob
5+
class MoneySerializer < ::ActiveJob::Serializers::ObjectSerializer
6+
def serialize?(argument)
7+
argument.is_a?(Money)
8+
end
9+
10+
def serialize(money)
11+
super("cents" => money.cents, "currency" => money.currency.to_s)
12+
end
13+
14+
def deserialize(hash)
15+
Money.new(hash["cents"], hash["currency"])
16+
end
17+
end
18+
end
19+
end

lib/money-rails/hooks.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ def self.init
5656
require 'money-rails/helpers/action_view_extension'
5757
::ActionView::Base.send :include, MoneyRails::ActionViewExtension
5858
end
59+
60+
# For ActiveSupport
61+
ActiveSupport.on_load(:active_job) do |v|
62+
if defined?(::ActiveJob::Serializers)
63+
require 'money-rails/active_job/money_serializer'
64+
Rails.application.config.active_job.tap do |config|
65+
config.custom_serializers ||= []
66+
config.custom_serializers << MoneyRails::ActiveJob::MoneySerializer
67+
end
68+
end
69+
end
5970
end
6071
end
6172
end
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
require 'spec_helper'
2+
3+
if defined?(::ActiveJob::Serializers)
4+
describe MoneyRails::ActiveJob::MoneySerializer do
5+
let(:money) { Money.new(1_00, "EUR") }
6+
let(:serialized_money) do
7+
{
8+
"_aj_serialized" => "MoneyRails::ActiveJob::MoneySerializer",
9+
"cents" => 1_00,
10+
"currency" => "EUR",
11+
}
12+
end
13+
14+
describe "#serialize?" do
15+
it { expect(described_class.serialize?(money)).to be_truthy }
16+
it { expect(described_class.serialize?(1_00)).not_to be_truthy }
17+
end
18+
19+
describe "#serialize" do
20+
it { expect(described_class.serialize(money)).to eq(serialized_money) }
21+
end
22+
23+
describe "#deserialize" do
24+
it { expect(described_class.deserialize(serialized_money)).to eq(money) }
25+
end
26+
end
27+
end

0 commit comments

Comments
 (0)