paypal_permissions 0.0.3.1 → 0.0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -35,3 +35,15 @@ This generator will:
35
35
  - create a controller.
36
36
  - insert routes into config/routes.rb
37
37
 
38
+
39
+ ## Rolling your own
40
+
41
+ ### Routes
42
+
43
+ `match 'paypal_perms/request_permissions_callback' => 'paypal_perms#request_permissions_callback',
44
+ :via => [ :get ], :as => :paypal_perms_request_permissions_callback`
45
+ `resources :paypal_perms, :only => [ :index, :new, :create, :show ]`
46
+
47
+ ### Models, migrations, and controllers
48
+
49
+ See the `examples` directory.
@@ -0,0 +1,136 @@
1
+ require 'uri'
2
+
3
+ class PaypalPermsController < ApplicationController
4
+ respond_to :html, :json
5
+
6
+ def index
7
+ render :text => "paypal perms"
8
+ end
9
+
10
+ def new
11
+ school_id = session[:school_id]
12
+ @paypal_perms = PaypalPerm.new(:school_id => school_id)
13
+ end
14
+
15
+ def create
16
+ school = School.find_by_id params[:paypal_perm][:school_id]
17
+ if school
18
+ paypal_perms = PaypalPerm.new(:school => school)
19
+ if paypal_perms.save
20
+ g = ::PAYPAL_PERMISSIONS_GATEWAY
21
+ callback_url = if false && (Rails.env.development? || Rails.env.test?)
22
+ "http://sandbox.agentfriday.com:3080/paypal_perms/request_permissions_callback"
23
+ else
24
+ paypal_perms_request_permissions_callback_url
25
+ end
26
+ # Make @paypal_response an instance variable just to facilitate testing
27
+ @paypal_response = g.request_permissions URI.encode(callback_url), 'DIRECT_PAYMENT'
28
+ if @paypal_response[:ack] == 'Success'
29
+ token = @paypal_response[:token]
30
+ if token.present?
31
+ paypal_perms.update_attribute :request_permissions_request_token, token
32
+ url = g.redirect_user_to_paypal_url(token)
33
+ redirect_to url
34
+ return
35
+ else
36
+ # this should never happen, hence, it's pretty much unrecoverable
37
+ raise
38
+ end
39
+ else
40
+ message = @paypal_response[:errors][0][:message] # TODO: need a method to find error messages or display a generic message
41
+ flash[:error] = message
42
+ redirect_to new_paypal_perm_path
43
+ end
44
+ else
45
+ message = "unable to create paypal_perms object"
46
+ flash[:error] = message
47
+ redirect_to new_paypal_perm_path
48
+ end
49
+ else
50
+ message = "can't find that school"
51
+ flash[:error] = message
52
+ redirect_to new_paypal_perm_path
53
+ end
54
+ =begin
55
+ {
56
+ :errors=>[
57
+ {
58
+ :parameters=>[
59
+ "http://test.host/paypal_perms/request_permissions_callback"
60
+ ],
61
+ :error_id=>"580028",
62
+ :domain=>"PLATFORM",
63
+ :subdomain=>"Application",
64
+ :severity=>"Error",
65
+ :category=>"Application",
66
+ :message=>"The URL http://test.host/paypal_perms/request_permissions_callback is malformed"
67
+ }
68
+ ],
69
+ :timestamp=>"2012-02-13T16:47:04.779-08:00",
70
+ :ack=>"Failure",
71
+ :correlation_id=>"c99412dc3ab23"
72
+ }
73
+ =end
74
+ end
75
+
76
+ # Really, request_permissions_callback should do all this.
77
+ def update
78
+ paypal_perms = PaypalPerm.find_by_request_permissions_request_token params[:request_token]
79
+ if paypal_perms
80
+ g = ::PAYPAL_PERMISSIONS_GATEWAY
81
+ # Make @paypal_response an instance variable just to facilitate testing
82
+ @paypal_response = g.get_access_token paypal_perms.request_permissions_request_token, paypal_perms.request_permissions_callback_verifier
83
+ if @paypal_response[:ack] == 'Success'
84
+ paypal_perms.update_attributes({
85
+ :get_access_token_access_token => @paypal_response[:token],
86
+ :get_access_token_verifier => @paypal_response[:tokenSecret],
87
+ })
88
+ render :text => 'thanks for the access token'
89
+ else
90
+ flash[:error] = @paypal_response[:errors][0][:message] # TODO: need a method to find error messages or display a generic message
91
+ redirect_to new_paypal_perm_path
92
+ end
93
+ else
94
+ render :text => "that permission doesn't exist"
95
+ end
96
+ end
97
+
98
+ def show
99
+ if params[:id] == 'request_permissions_callback'
100
+ render :text => "We're sorry to see that you haven't given us permission to execute payment transactions."
101
+ else
102
+ respond_with PaypalPerm.find_by_id(params[:id])
103
+ end
104
+ end
105
+
106
+ def request_permissions_callback
107
+ # http://sandbox.agentfriday.com:3080/paypal_perms/request_permissions_callback?request_token=AAAAAAAVP73FnqglEbHC&verification_code=x5xKy65PotWILQNKE0ypgg
108
+ perms = PaypalPerm.find_by_request_permissions_request_token params[:request_token]
109
+ if perms
110
+ if perms.valid?
111
+ if perms.update_attribute :request_permissions_callback_verifier, params[:verification_code]
112
+ update
113
+ else
114
+ render :text => "thanks for the permission, but i've got problems"
115
+ end
116
+ else
117
+ render :text => "perms wasn't valid: #{perms.errors}"
118
+ end
119
+ else
120
+ if Rails.env.development? || Rails.env.test?
121
+ perms = PaypalPerm.create({
122
+ :school_id => session[:school_id],
123
+ :request_permissions_request_token => params[:request_token],
124
+ :request_permissions_callback_verifier => params[:verification_code],
125
+ })
126
+ if perms
127
+ render :text => "that permission doesn't exist, but to facilitate testing i created it"
128
+ else
129
+ render :text => "that permission doesn't exist, and i couldn't create it, not even for testing"
130
+ end
131
+ else
132
+ render :text => "perms isn't valid: #{perms.errors.inspect}"
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,32 @@
1
+ class PaypalPerm < ActiveRecord::Base
2
+ belongs_to :school, :inverse_of => :paypal_perms
3
+
4
+ validates :school, :presence => true
5
+ # validates :request_permissions_ack, :presence => true
6
+
7
+ attr_accessible :school, :school_id,
8
+ :request_permissions_ack, :request_permissions_correlation_id, :request_permissions_request_token,
9
+ :request_permissions_verifier, :request_permissions_envelope_timestamp,
10
+ :request_permissions_errors, :request_permissions_raw_response,
11
+ :request_permissions_callback_ack, :request_permissions_callback_correlation_id, :request_permissions_callback_request_token,
12
+ :request_permissions_callback_verifier, :request_permissions_callback_envelope_timestamp,
13
+ :request_permissions_callback_errors, :request_permissions_callback_raw_response,
14
+ :get_access_token_ack, :get_access_token_correlation_id, :get_access_token_access_token,
15
+ :get_access_token_verifier, :get_access_token_envelope_timestamp,
16
+ :get_access_token_errors, :get_access_token_raw_response
17
+
18
+ public
19
+ def as_json(opts = {})
20
+ opts ||= {}
21
+ super({ :only => %w[id request_permissions_ack request_permissions_correlation_id request_permissions_request_token
22
+ request_permissions_verifier request_permissions_envelope_timestamp
23
+ request_permissions_errors request_permissions_raw_response
24
+ request_permissions_callback_ack request_permissions_callback_correlation_id request_permissions_callback_request_token
25
+ request_permissions_callback_verifier request_permissions_callback_envelope_timestamp
26
+ request_permissions_callback_errors request_permissions_callback_raw_response
27
+ get_access_token_ack get_access_token_correlation_id get_access_token_access_token
28
+ get_access_token_verifier get_access_token_envelope_timestamp
29
+ get_access_token_errors get_access_token_raw_response
30
+ ] }.merge(opts))
31
+ end
32
+ end
@@ -0,0 +1,37 @@
1
+ class PaypalPermissionsCreatePaypalPerms < ActiveRecord::Migration
2
+ def change
3
+ create_table(:paypal_perms) do |t|
4
+ t.integer "school_id", :null => false
5
+
6
+ # RequestPermissions response fields
7
+ t.string :request_permissions_ack
8
+ t.string :request_permissions_correlation_id
9
+ t.string :request_permissions_request_token
10
+ t.datetime :request_permissions_envelope_timestamp
11
+ t.text :request_permissions_errors
12
+ t.text :request_permissions_raw_response
13
+
14
+ # RequestPermissions callback fields
15
+ t.string :request_permissions_callback_ack
16
+ t.string :request_permissions_callback_correlation_id
17
+ t.string :request_permissions_callback_verifier
18
+ t.datetime :request_permissions_callback_envelope_timestamp
19
+ t.text :request_permissions_callback_errors
20
+ t.text :request_permissions_callback_raw_response
21
+
22
+ # GetAccessToken response fields
23
+ t.string :get_access_token_ack
24
+ t.string :get_access_token_correlation_id
25
+ t.string :get_access_token_access_token
26
+ t.string :get_access_token_verifier
27
+ t.datetime :get_access_token_envelope_timestamp
28
+ t.text :get_access_token_errors
29
+ t.text :get_access_token_raw_response
30
+
31
+ t.timestamps
32
+ end
33
+
34
+ add_index :paypal_perms, :request_permissions_request_token
35
+ add_index :paypal_perms, :get_access_token_access_token
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module PaypalPermissions
2
- VERSION = "0.0.3.1"
2
+ VERSION = "0.0.3.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paypal_permissions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.1
4
+ version: 0.0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &2160369400 !ruby/object:Gem::Requirement
16
+ requirement: &2152408140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2160369400
24
+ version_requirements: *2152408140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: vcr
27
- requirement: &2160368560 !ruby/object:Gem::Requirement
27
+ requirement: &2152407540 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.11'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2160368560
35
+ version_requirements: *2152407540
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: railties
38
- requirement: &2160367380 !ruby/object:Gem::Requirement
38
+ requirement: &2152406940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2160367380
46
+ version_requirements: *2152406940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
- requirement: &2160366740 !ruby/object:Gem::Requirement
49
+ requirement: &2152406380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2160366740
57
+ version_requirements: *2152406380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: activemerchant
60
- requirement: &2160366180 !ruby/object:Gem::Requirement
60
+ requirement: &2152405900 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2160366180
68
+ version_requirements: *2152405900
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &2160365220 !ruby/object:Gem::Requirement
71
+ requirement: &2152405260 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '2.6'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *2160365220
79
+ version_requirements: *2152405260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: ammeter
82
- requirement: &2160364660 !ruby/object:Gem::Requirement
82
+ requirement: &2152404740 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *2160364660
90
+ version_requirements: *2152404740
91
91
  description: ! '"A gem to support PayPal Permissions API for Rails applications using
92
92
  ActiveMerchant."'
93
93
  email:
@@ -101,6 +101,9 @@ files:
101
101
  - README.md
102
102
  - Rakefile
103
103
  - config/locales/en.yml
104
+ - examples/app/controllers/paypal_perms_controller.rb
105
+ - examples/app/models/paypal_perm.rb
106
+ - examples/db/migrate/paypal_permissions_create_paypal_perms.rb
104
107
  - lib/active_merchant.rb
105
108
  - lib/active_merchant/billing.rb
106
109
  - lib/active_merchant/billing/gateways.rb
@@ -134,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
137
  version: '0'
135
138
  segments:
136
139
  - 0
137
- hash: -1249773084249501105
140
+ hash: -2295600929205441820
138
141
  required_rubygems_version: !ruby/object:Gem::Requirement
139
142
  none: false
140
143
  requirements:
@@ -143,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
146
  version: '0'
144
147
  segments:
145
148
  - 0
146
- hash: -1249773084249501105
149
+ hash: -2295600929205441820
147
150
  requirements: []
148
151
  rubyforge_project: paypal_permissions
149
152
  rubygems_version: 1.8.10