Sha256: 6d22efd743720b68fd4ec4bd6b78ee151888a5aa22e369dcac3257f0ae6b967c

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

module FakeBraintree
  class Redirect
    include Helpers

    attr_reader :id

    def initialize(params, merchant_id)
      hash, query = *params[:tr_data].split('|', 2)
      @transparent_data = Rack::Utils.parse_nested_query(query)
      @merchant_id = merchant_id
      @id = create_id(@merchant_id)
      @params = params
      @kind = @transparent_data['kind']
    end

    def url
      uri.to_s
    end

    def confirm
      if @kind == 'create_customer'
        Customer.new(@params['customer'], {merchant_id: @merchant_id}).create
      elsif @kind == 'create_payment_method'
        credit_card_options = {merchant_id: @merchant_id}
        credit_card_options.merge!(@transparent_data['credit_card'].fetch('options', {}))

        credit_card_options.symbolize_keys!
        CreditCard.new(@params['credit_card'].merge(@transparent_data['credit_card']), credit_card_options).create
      end
    end

    private

    def uri
      uri = URI.parse(@transparent_data['redirect_url'])
      merged_query = [uri.query, base_query].compact.join('&')
      uri.query = "#{merged_query}&hash=#{hash(merged_query)}"
      uri
    end

    def base_query
      "http_status=200&id=#{@id}&kind=#{@kind}"
    end

    def hash(string)
      Braintree::Digest.hexdigest(Braintree::Configuration.private_key, string)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
fake_braintree-0.6.0 lib/fake_braintree/redirect.rb
fake_braintree-0.5.0 lib/fake_braintree/redirect.rb
fake_braintree-0.4.3 lib/fake_braintree/redirect.rb
fake_braintree-0.4.2 lib/fake_braintree/redirect.rb
fake_braintree-0.4.1 lib/fake_braintree/redirect.rb