braintree_lyre 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|