Sha256: 9fd5c3a0d640b018f872d033b79054829baa831bd41ce356ec804b3d5b4f586d

Contents?: true

Size: 765 Bytes

Versions: 5

Compression:

Stored size: 765 Bytes

Contents

# frozen_string_literal: true

module CoinsPaid
  class Address
    module Types
      include Dry.Types()
    end

    class Data < Dry::Struct
      attribute :foreign_id, Types::Coercible::String
      attribute :currency, Types::String
      attribute :convert_to, Types::String
    end

    include Dry::Initializer.define -> do
      param :request_data, Data
    end

    def call
      ActiveRecord::Base.transaction do
        lookup_attrs = request_data.attributes.slice(:foreign_id, :convert_to, :currency)
        CoinsPaidAddress.lock.find_or_create_by!(lookup_attrs) do |address|
          response = CoinsPaid::API.take_address(request_data.attributes)
          address.assign_attributes(response.attributes)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
coins_paid_rails-2.1.0 lib/coins_paid/address.rb
coins_paid_rails-2.0.0 lib/coins_paid/address.rb
coins_paid_rails-1.5.0 lib/coins_paid/address.rb
coins_paid_rails-1.4.0 lib/coins_paid/address.rb
coins_paid_rails-1.3.0 lib/coins_paid/address.rb