unlock_gateway 0.0.5 → 0.1.0
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.
- checksums.yaml +4 -4
- data/lib/unlock_gateway.rb +18 -0
- data/lib/unlock_gateway/controller.rb +114 -0
- data/lib/unlock_gateway/models/contribution.rb +29 -1
- data/lib/unlock_gateway/models/gateway.rb +4 -0
- data/lib/unlock_gateway/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cb7317f716d9074645b160bbbb03c2ad4b35a6e
|
4
|
+
data.tar.gz: a4352f39986625f4148ddc8696bf007f8bae8956
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cac357585717cc0a38b2122b5cee94222c9e1995ea1aa55e2b42a23becffc9f48bb6b6f2de7af92baab08fdfe75509080f313047f9dd3ee4e0a60562ee5efac2
|
7
|
+
data.tar.gz: bf90f5df27a2fa31a799bee3dbc98a248c0411f4fc059a4557678c05b4db24f1363d4f89843d23e750d4751579389a4ba36331029226c370af0a87912e9820a8
|
data/lib/unlock_gateway.rb
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
require 'unlock_gateway/setting'
|
2
|
+
require "unlock_gateway/controller"
|
2
3
|
require "unlock_gateway/models/gateway"
|
3
4
|
require "unlock_gateway/models/contribution"
|
4
5
|
|
5
6
|
module UnlockGateway
|
7
|
+
|
8
|
+
# Registers the gateway with unlock's Gateway model
|
9
|
+
def self.register(module_name)
|
10
|
+
begin
|
11
|
+
Gateway.register module_name
|
12
|
+
rescue
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class ActionController::Base
|
19
|
+
# Extends and includes UnlockGateway::Controller class and instance methods, preparing a controller to be an unlock gateway controller
|
20
|
+
def self.is_unlock_gateway
|
21
|
+
extend UnlockGateway::Controller::ClassMethods
|
22
|
+
include UnlockGateway::Controller
|
23
|
+
end
|
6
24
|
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module UnlockGateway
|
2
|
+
|
3
|
+
# This module will be extended (ClassMethods) and included by is_unlock_gateway on controllers
|
4
|
+
module Controller
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
|
8
|
+
# This will be executed first, to set the controller up. Then the instance methods will be included
|
9
|
+
def self.extended(base)
|
10
|
+
base.class_eval do
|
11
|
+
|
12
|
+
inherit_resources
|
13
|
+
|
14
|
+
actions :create, :edit
|
15
|
+
respond_to :html
|
16
|
+
|
17
|
+
after_action :verify_authorized
|
18
|
+
after_action :verify_policy_scoped, only: %i[]
|
19
|
+
before_action :authenticate_user!, only: %i[edit]
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
# A second step or final checkout should use this action
|
27
|
+
def edit
|
28
|
+
edit! { authorize resource }
|
29
|
+
end
|
30
|
+
|
31
|
+
# This action will be used when the user requests to activate/reactivate a contribution
|
32
|
+
def activate
|
33
|
+
respond_to do |format|
|
34
|
+
format.html { transition_state(:active) }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# This action will be used when the user requests to suspend a contribution
|
39
|
+
def suspend
|
40
|
+
respond_to do |format|
|
41
|
+
format.html { transition_state(:suspended) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# Creates the contribution, sets session[:gateway_id], returns true if successful and renders new action if not
|
48
|
+
def create_contribution
|
49
|
+
|
50
|
+
@initiative = Initiative.find(contribution_params[:initiative_id])
|
51
|
+
@gateways = @initiative.gateways.without_state(:draft).order(:ordering)
|
52
|
+
@contribution = @initiative.contributions.new(contribution_params)
|
53
|
+
@contribution.gateway_state = @contribution.gateway.state
|
54
|
+
current_user.update module_name: @contribution.gateway.module_name
|
55
|
+
authorize @contribution
|
56
|
+
|
57
|
+
if @contribution.save
|
58
|
+
true
|
59
|
+
else
|
60
|
+
render '/initiatives/contributions/new'
|
61
|
+
false
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
# This method authorizes the resource, checks if the contribution can be transitioned to the desired state, calls Contribution#update_state_on_gateway!, transition the contribution's state, and return the proper JSON for Unlock's AJAX calls
|
67
|
+
def transition_state(state)
|
68
|
+
authorize resource
|
69
|
+
@initiative = resource.initiative
|
70
|
+
@user = resource.user
|
71
|
+
state = state.to_sym
|
72
|
+
transition = resource.transition_by_state(state)
|
73
|
+
initial_state = resource.state_name
|
74
|
+
if resource.send("can_#{transition}?")
|
75
|
+
begin
|
76
|
+
if resource.state_on_gateway != state
|
77
|
+
if resource.update_state_on_gateway!(state)
|
78
|
+
resource.send("#{transition}!")
|
79
|
+
else
|
80
|
+
flash[:failure] = "Não foi possível alterar o status de seu apoio."
|
81
|
+
end
|
82
|
+
else
|
83
|
+
resource.send("#{transition}!")
|
84
|
+
end
|
85
|
+
rescue
|
86
|
+
flash[:failure] = "Ooops, ocorreu um erro ao alterar o status de seu apoio."
|
87
|
+
end
|
88
|
+
else
|
89
|
+
flash[:failure] = "Não foi permitido alterar o status deste apoio."
|
90
|
+
end
|
91
|
+
if flash[:failure].present?
|
92
|
+
render 'initiatives/contributions/show'
|
93
|
+
else
|
94
|
+
if initial_state == :pending
|
95
|
+
flash[:success] = "Apoio realizado com sucesso!"
|
96
|
+
else
|
97
|
+
flash[:success] = "Status do apoio alterado com sucesso!"
|
98
|
+
end
|
99
|
+
redirect_to initiative_contribution_path(resource.initiative.id, resource)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Strong parameters for Contribution. This duplication is due to a inherited_resources problem that requires both
|
104
|
+
def permitted_params
|
105
|
+
params.permit(contribution: policy(@contribution || Contribution.new).permitted_attributes)
|
106
|
+
end
|
107
|
+
|
108
|
+
# Strong parameters for Contribution
|
109
|
+
def contribution_params
|
110
|
+
params.require(:contribution).permit(*policy(@contribution || Contribution.new).permitted_attributes)
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
@@ -4,8 +4,36 @@ module UnlockGateway
|
|
4
4
|
# Your module UnlockMyGatewayName::Models::Contribution, that should implement this interface, will be included in Unlock's Contribution model. All methods will run in the context of an instance of Contribution model.
|
5
5
|
module Contribution
|
6
6
|
|
7
|
-
# This method should
|
7
|
+
# This method should return the unique identifier of the contribution on the gateway
|
8
|
+
def gateway_identifier
|
9
|
+
end
|
10
|
+
|
11
|
+
# This method should return the actual state of a contribution on the gateway, with name according to Contribution's state machine, as a Symbol.
|
12
|
+
def state_on_gateway
|
13
|
+
end
|
14
|
+
|
15
|
+
# This method should change the state of a contribution on the gateway, according to the new desired state.
|
16
|
+
def update_state_on_gateway!(state)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Updates the contribution's state according to it's actual state within the gateway, based on each gateway's implementation of state_on_gateway.
|
8
20
|
def update_state_from_gateway!
|
21
|
+
return unless gateway_state = self.state_on_gateway
|
22
|
+
if self.state_name != gateway_state
|
23
|
+
transition = self.transition_by_state(gateway_state)
|
24
|
+
self.send("#{transition}!") if self.send("can_#{transition}?")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Helper method to find transition name by the desired new state name
|
29
|
+
def transition_by_state(state)
|
30
|
+
state = state.try(:to_sym)
|
31
|
+
case state
|
32
|
+
when :active
|
33
|
+
:activate
|
34
|
+
when :suspended
|
35
|
+
:suspend
|
36
|
+
end
|
9
37
|
end
|
10
38
|
|
11
39
|
end
|
@@ -17,6 +17,10 @@ module UnlockGateway
|
|
17
17
|
def image
|
18
18
|
end
|
19
19
|
|
20
|
+
# This method should return the gateways institutional website URL, to which Unlock will refer users.
|
21
|
+
def url
|
22
|
+
end
|
23
|
+
|
20
24
|
# This method should return the path for the routes generated by the gateway, such as '/my_gateway'.
|
21
25
|
def path
|
22
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unlock_gateway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Weinmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.1.6
|
27
|
-
description:
|
27
|
+
description: Base gateway for Unlock's payment gateway integrations
|
28
28
|
email:
|
29
29
|
- danielweinmann@gmail.com
|
30
30
|
executables: []
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- Rakefile
|
36
36
|
- lib/tasks/unlock_gateway_tasks.rake
|
37
37
|
- lib/unlock_gateway.rb
|
38
|
+
- lib/unlock_gateway/controller.rb
|
38
39
|
- lib/unlock_gateway/models/contribution.rb
|
39
40
|
- lib/unlock_gateway/models/gateway.rb
|
40
41
|
- lib/unlock_gateway/setting.rb
|
@@ -62,5 +63,5 @@ rubyforge_project:
|
|
62
63
|
rubygems_version: 2.4.2
|
63
64
|
signing_key:
|
64
65
|
specification_version: 4
|
65
|
-
summary:
|
66
|
+
summary: Base gateway for Unlock's payment gateway integrations
|
66
67
|
test_files: []
|