File tree Expand file tree Collapse file tree 5 files changed +66
-0
lines changed
Expand file tree Collapse file tree 5 files changed +66
-0
lines changed Original file line number Diff line number Diff line change 1212require_relative 'money/accounting_money_parser'
1313require_relative 'money/core_extensions'
1414require_relative 'money_column' if defined? ( ActiveRecord )
15+ require_relative 'money/railtie' if defined? ( Rails ::Railtie )
1516
1617require_relative 'rubocop/cop/money' if defined? ( RuboCop )
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ class Money
4+ module Rails
5+ class JobArgumentSerializer < ::ActiveJob ::Serializers ::ObjectSerializer
6+ def serialize ( money )
7+ super ( "value" => money . value , "currency" => money . currency . iso_code )
8+ end
9+
10+ def deserialize ( hash )
11+ Money . new ( hash [ "value" ] , hash [ "currency" ] )
12+ end
13+
14+ private
15+
16+ def klass
17+ Money
18+ end
19+ end
20+ end
21+ end
22+
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ class Money
4+ class Railtie < Rails ::Railtie
5+ initializer "shopify-money.setup_active_job_serializer" do
6+ ActiveSupport . on_load :active_job do
7+ require_relative "rails/job_argument_serializer"
8+ ActiveJob ::Serializers . add_serializers ::Money ::Rails ::JobArgumentSerializer
9+ end
10+ end
11+ end
12+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require "rails_spec_helper"
4+
5+ RSpec . describe Money ::Rails ::JobArgumentSerializer do
6+ it "roundtrip a Money argument returns the same object" do
7+ job = MoneyTestJob . new ( value : Money . new ( 10.21 , "BRL" ) )
8+
9+ serialized_job = job . serialize
10+ serialized_value = serialized_job [ "arguments" ] [ 0 ] [ "value" ]
11+ expect ( serialized_value [ "_aj_serialized" ] ) . to eq ( "Money::Rails::JobArgumentSerializer" )
12+ expect ( serialized_value [ "value" ] ) . to eq ( BigDecimal ( "10.21" ) )
13+ expect ( serialized_value [ "currency" ] ) . to eq ( "BRL" )
14+
15+ job2 = MoneyTestJob . deserialize ( serialized_job )
16+ job2 . send ( :deserialize_arguments_if_needed )
17+
18+ expect ( job2 . arguments . first [ :value ] ) . to eq ( Money . new ( 10.21 , "BRL" ) )
19+ end
20+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require "active_job"
4+ require_relative "spec_helper"
5+
6+ Money ::Railtie . initializers . each ( &:run )
7+
8+ class MoneyTestJob < ActiveJob ::Base
9+ def perform ( _params )
10+ end
11+ end
You can’t perform that action at this time.
0 commit comments