paypal_permissions 0.0.3.1 → 0.0.3.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/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