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.
- data/lib/braintree_lyre/helpers.rb +24 -0
- data/lib/braintree_lyre/lyre.rb +8 -2
- data/lib/braintree_lyre/transparent_redirect/create_transaction.rb +41 -0
- data/lib/braintree_lyre/transparent_redirect.rb +35 -0
- data/lib/braintree_lyre/version.rb +1 -1
- data/lib/braintree_lyre.rb +4 -1
- data/spec/transparent_redirect/create_transaction_spec.rb +33 -0
- metadata +6 -1
@@ -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
|
data/lib/braintree_lyre/lyre.rb
CHANGED
@@ -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
|
-
|
23
|
-
|
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
|
data/lib/braintree_lyre.rb
CHANGED
@@ -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.
|
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
|