braintree_lyre 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ module BraintreeLyre
2
+
3
+ module Helpers
4
+
5
+ def camelize(str)
6
+ segments = str.split('_')
7
+
8
+ segments.inject("") { |acc, s| acc << s.capitalize }
9
+ end
10
+
11
+ def constantize(camel_cased_word)
12
+ names = camel_cased_word.split('::')
13
+ names.shift if names.empty? || names.first.empty?
14
+
15
+ constant = Object
16
+ names.each do |name|
17
+ constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
18
+ end
19
+ constant
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -9,6 +9,8 @@ module BraintreeLyre
9
9
  PUBLIC_KEY = "pubkey"
10
10
  PRIVATE_KEY = "prikey"
11
11
 
12
+ attr_accessor :last_thing
13
+
12
14
  setup do |lyre|
13
15
  Braintree::Configuration.environment = BraintreeLyre::Lyre::ENVIRONMENT
14
16
  Braintree::Configuration.merchant_id = BraintreeLyre::Lyre::MERCHANT_ID
@@ -19,8 +21,12 @@ module BraintreeLyre
19
21
 
20
22
  # Braintree::TransparentRedirect.url
21
23
  post "/merchants/:merchant_id/transparent_redirect_requests" do
22
- debugger
23
- "REDIRECT REQUEST"
24
+ if params[:tr_data]
25
+ transaction = TransparentRedirect.create(params)
26
+ redirect to(transaction.return_url), 303
27
+ else
28
+ [422, { "Content-Type" => "text/html" }, ["Invalid submission"]]
29
+ end
24
30
  end
25
31
 
26
32
  # Braintree::TransparentRedirect.confirm
@@ -0,0 +1,41 @@
1
+ require 'digest/md5'
2
+
3
+ module BraintreeLyre::TransparentRedirect
4
+
5
+ class CreateTransaction
6
+
7
+ attr_reader :merchant_id, :redirect_url
8
+
9
+ def initialize(params)
10
+ _, query = *params['tr_data'].split("|", 2)
11
+ tr_data = Rack::Utils.parse_query(query)
12
+
13
+ @merchant_id = params['merchant_id']
14
+ @redirect_url = tr_data['redirect_url']
15
+ end
16
+
17
+ def return_url
18
+ id = create_id(merchant_id)
19
+ query = base_query(id)
20
+ URI.parse(redirect_url).merge("?#{query}&hash=#{hash(query)}")
21
+ end
22
+
23
+ private
24
+
25
+ #MOVE TO HELPER?
26
+ def base_query(id)
27
+ "http_status=200&id=#{id}"
28
+ end
29
+
30
+ #MOVE TO HELPER?
31
+ def hash(string)
32
+ Braintree::Digest.hexdigest(Braintree::Configuration.private_key, string)
33
+ end
34
+
35
+ #MOVE TO HELPER?
36
+ def create_id(merchant_id)
37
+ Digest::MD5.hexdigest("#{merchant_id}#{Time.now.to_f}")
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,35 @@
1
+ require 'braintree_lyre/transparent_redirect/create_transaction'
2
+ require 'braintree_lyre/helpers'
3
+
4
+ module BraintreeLyre
5
+
6
+ module TransparentRedirect
7
+
8
+ extend BraintreeLyre::Helpers
9
+
10
+ def self.create(params)
11
+ matches = params['tr_data'].match(/
12
+ ^ #start at the beginning
13
+ .* #match anything
14
+ &kind= #match the key we are looking for
15
+ (?<kind>[^&]+) #match the value and name it type
16
+ & #match the terminating ampersand
17
+ .* #match anything
18
+ $ #match to the end
19
+ /x)
20
+
21
+ kind = matches['kind']
22
+ klass = kind_to_class(kind)
23
+
24
+ klass.new(params)
25
+ end
26
+
27
+ private
28
+
29
+ def self.kind_to_class(kind)
30
+ constantize("BraintreeLyre::TransparentRedirect::#{camelize(kind)}")
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -1,3 +1,3 @@
1
1
  module BraintreeLyre
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,2 +1,5 @@
1
1
  require 'braintree_lyre/version'
2
- require 'braintree_lyre/lyre'
2
+ require 'braintree_lyre/helpers'
3
+ require 'braintree_lyre/lyre'
4
+ require 'braintree_lyre/transparent_redirect'
5
+ require 'braintree_lyre/transparent_redirect/create_transaction'
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'braintree_lyre'
3
+
4
+ describe "CreateTransaction" do
5
+
6
+ subject(:tr) do
7
+ BraintreeLyre::TransparentRedirect.create(
8
+ {
9
+ #"utf8"=>"✓",
10
+ "tr_data"=>"f1fdad882a1b3e55fbb9d1efea9c2b6b31a1400e|api_version=2&kind=create_transaction&public_key=pubkey&redirect_url=http%3A%2F%2F127.0.0.1%3A51576%2Fsignup%2Fpro%2Fpublish&time=20130218050006&transaction%5Bamount%5D=99&transaction%5Boptions%5D%5Badd_billing_address_to_payment_method%5D=true&transaction%5Boptions%5D%5Bstore_in_vault_on_success%5D=true&transaction%5Boptions%5D%5Bsubmit_for_settlement%5D=true&transaction%5Btype%5D=sale",
11
+ "transaction"=> {
12
+ "credit_card" => {
13
+ "number"=>"4111-1111-1111-1111",
14
+ "expiration_month"=>"1",
15
+ "expiration_year" => "2015"
16
+ },
17
+ "billing" => {
18
+ "postal_code"=>"02446"
19
+ }
20
+ },
21
+ "x"=>"122",
22
+ "y"=>"19",
23
+ "splat"=>[],
24
+ "captures"=>["0000"],
25
+ "merchant_id"=>"0000"
26
+ }
27
+ )
28
+ end
29
+
30
+ specify { tr.should be_a(BraintreeLyre::TransparentRedirect::CreateTransaction) }
31
+ specify { tr.merchant_id.should == '0000' }
32
+
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braintree_lyre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -105,10 +105,14 @@ files:
105
105
  - Rakefile
106
106
  - braintree_lyre.gemspec
107
107
  - lib/braintree_lyre.rb
108
+ - lib/braintree_lyre/helpers.rb
108
109
  - lib/braintree_lyre/lyre.rb
110
+ - lib/braintree_lyre/transparent_redirect.rb
111
+ - lib/braintree_lyre/transparent_redirect/create_transaction.rb
109
112
  - lib/braintree_lyre/version.rb
110
113
  - spec/setup_spec.rb
111
114
  - spec/spec_helper.rb
115
+ - spec/transparent_redirect/create_transaction_spec.rb
112
116
  homepage: https://github.com/Sortfolio/braintree_lyre
113
117
  licenses: []
114
118
  post_install_message:
@@ -136,3 +140,4 @@ summary: A Lyre for Braintree's payment gateway
136
140
  test_files:
137
141
  - spec/setup_spec.rb
138
142
  - spec/spec_helper.rb
143
+ - spec/transparent_redirect/create_transaction_spec.rb