paymill 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/paymill.rb +14 -3
- data/lib/paymill/base.rb +8 -0
- data/lib/paymill/client.rb +1 -2
- data/lib/paymill/payment.rb +3 -1
- data/lib/paymill/preauthorization.rb +5 -0
- data/lib/paymill/refund.rb +5 -0
- data/lib/paymill/subscription.rb +8 -2
- data/lib/paymill/transaction.rb +1 -2
- data/lib/paymill/version.rb +1 -1
- data/lib/paymill/webhook.rb +3 -3
- data/spec/paymill/base_spec.rb +19 -0
- data/spec/paymill/payment_spec.rb +7 -0
- data/spec/paymill/preauthorization_spec.rb +30 -0
- data/spec/paymill/refund_spec.rb +120 -0
- data/spec/paymill/subscription_spec.rb +25 -2
- data/spec/paymill/webhook_spec.rb +3 -3
- data/spec/paymill_spec.rb +5 -0
- metadata +27 -9
data/lib/paymill.rb
CHANGED
@@ -13,6 +13,8 @@ module Paymill
|
|
13
13
|
autoload :Client, "paymill/client"
|
14
14
|
autoload :Offer, "paymill/offer"
|
15
15
|
autoload :Payment, "paymill/payment"
|
16
|
+
autoload :Preauthorization, "paymill/preauthorization"
|
17
|
+
autoload :Refund, "paymill/refund"
|
16
18
|
autoload :Subscription, "paymill/subscription"
|
17
19
|
autoload :Transaction, "paymill/transaction"
|
18
20
|
autoload :Webhook, "paymill/webhook"
|
@@ -48,7 +50,12 @@ module Paymill
|
|
48
50
|
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
49
51
|
https.ca_file = File.join(File.dirname(__FILE__), "data/paymill.crt")
|
50
52
|
https.start do |connection|
|
51
|
-
|
53
|
+
if api_url == "refunds"
|
54
|
+
url = "/#{API_VERSION}/#{api_url}/#{data[:id]}"
|
55
|
+
data.delete(:id)
|
56
|
+
else
|
57
|
+
url = "/#{API_VERSION}/#{api_url}"
|
58
|
+
end
|
52
59
|
https_request = case http_method
|
53
60
|
when :post
|
54
61
|
Net::HTTP::Post.new(url)
|
@@ -73,8 +80,12 @@ module Paymill
|
|
73
80
|
end
|
74
81
|
|
75
82
|
def path_with_params(path, params)
|
76
|
-
|
77
|
-
|
83
|
+
unless params.empty?
|
84
|
+
encoded_params = URI.encode_www_form(params)
|
85
|
+
[path, encoded_params].join("?")
|
86
|
+
else
|
87
|
+
path
|
88
|
+
end
|
78
89
|
end
|
79
90
|
end
|
80
91
|
end
|
data/lib/paymill/base.rb
CHANGED
@@ -4,8 +4,11 @@ module Paymill
|
|
4
4
|
include Paymill::Operations::Create
|
5
5
|
include Paymill::Operations::Find
|
6
6
|
|
7
|
+
attr_accessor :created_at, :updated_at
|
8
|
+
|
7
9
|
def initialize(attributes = {})
|
8
10
|
set_attributes(attributes)
|
11
|
+
parse_timestamps
|
9
12
|
end
|
10
13
|
|
11
14
|
def set_attributes(attributes)
|
@@ -13,5 +16,10 @@ module Paymill
|
|
13
16
|
instance_variable_set("@#{key}", value)
|
14
17
|
end
|
15
18
|
end
|
19
|
+
|
20
|
+
def parse_timestamps
|
21
|
+
@created_at = Time.at(created_at) if created_at
|
22
|
+
@updated_at = Time.at(updated_at) if updated_at
|
23
|
+
end
|
16
24
|
end
|
17
25
|
end
|
data/lib/paymill/client.rb
CHANGED
@@ -3,7 +3,6 @@ module Paymill
|
|
3
3
|
include Paymill::Operations::Delete
|
4
4
|
include Paymill::Operations::Update
|
5
5
|
|
6
|
-
attr_accessor :id, :email, :description, :attributes, :
|
7
|
-
:updated_at, :payment, :subscription
|
6
|
+
attr_accessor :id, :email, :description, :attributes, :payment, :subscription
|
8
7
|
end
|
9
8
|
end
|
data/lib/paymill/payment.rb
CHANGED
data/lib/paymill/subscription.rb
CHANGED
@@ -3,7 +3,13 @@ module Paymill
|
|
3
3
|
include Paymill::Operations::Delete
|
4
4
|
include Paymill::Operations::Update
|
5
5
|
|
6
|
-
attr_accessor :id, :plan, :livemode, :cancel_at_period_end, :
|
7
|
-
|
6
|
+
attr_accessor :id, :plan, :livemode, :cancel_at_period_end, :canceled_at, :client, :trial_start, :trial_end
|
7
|
+
|
8
|
+
def parse_timestamps
|
9
|
+
super
|
10
|
+
@canceled_at = Time.at(canceled_at) if canceled_at
|
11
|
+
@trial_start = Time.at(trial_start) if trial_start
|
12
|
+
@trial_end = Time.at(trial_end) if trial_end
|
13
|
+
end
|
8
14
|
end
|
9
15
|
end
|
data/lib/paymill/transaction.rb
CHANGED
data/lib/paymill/version.rb
CHANGED
data/lib/paymill/webhook.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paymill::Base do
|
4
|
+
describe "#parse_timestamps" do
|
5
|
+
context "given #created_at is present" do
|
6
|
+
it "creates a Time object" do
|
7
|
+
base = Paymill::Base.new(created_at: 1362823928)
|
8
|
+
base.created_at.class.should eql(Time)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context "given #updated_at is present" do
|
13
|
+
it "creates a Time object" do
|
14
|
+
base = Paymill::Base.new(updated_at: 1362823928)
|
15
|
+
base.updated_at.class.should eql(Time)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -47,4 +47,11 @@ describe Paymill::Payment do
|
|
47
47
|
Paymill::Payment.create(valid_attributes)
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
describe ".delete" do
|
52
|
+
it "makes a new DELETE request using the correct API endpoint" do
|
53
|
+
Paymill.should_receive(:request).with(:delete, "payments/123", {}).and_return(true)
|
54
|
+
Paymill::Payment.delete("123")
|
55
|
+
end
|
56
|
+
end
|
50
57
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paymill::Preauthorization do
|
4
|
+
let(:valid_attributes) do
|
5
|
+
{
|
6
|
+
payment: "pay_d43cf0ee969d9847512b",
|
7
|
+
amount: 4200,
|
8
|
+
currency: "EUR"
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
let (:preauthorization) do
|
13
|
+
Paymill::Preauthorization.new(valid_attributes)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#initialize" do
|
17
|
+
it "initializes all attributes correctly" do
|
18
|
+
preauthorization.payment.should eql("pay_d43cf0ee969d9847512b")
|
19
|
+
preauthorization.amount.should eql(4200)
|
20
|
+
preauthorization.currency.should eql("EUR")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".create" do
|
25
|
+
it "makes a new POST request using the correct API endpoint" do
|
26
|
+
Paymill.should_receive(:request).with(:post, "preauthorizations", valid_attributes).and_return("data" => {})
|
27
|
+
Paymill::Preauthorization.create(valid_attributes)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paymill::Refund do
|
4
|
+
let(:valid_attributes) do
|
5
|
+
{
|
6
|
+
id: "refund_87bc404a95d5ce616049",
|
7
|
+
amount: "042",
|
8
|
+
status: "refunded",
|
9
|
+
description: nil,
|
10
|
+
livemode: false,
|
11
|
+
created_at: 1349947042,
|
12
|
+
updated_at: 1349947042,
|
13
|
+
transaction: {
|
14
|
+
id: "tran_2848cb20a6bb578177db",
|
15
|
+
amount: "378",
|
16
|
+
origin_amount: 420,
|
17
|
+
status: "partial_refunded",
|
18
|
+
description: nil,
|
19
|
+
livemode: false,
|
20
|
+
created_at: 1349946216,
|
21
|
+
updated_at: 1349947042,
|
22
|
+
response_code: 20000,
|
23
|
+
refunds: [
|
24
|
+
{
|
25
|
+
id: "refund_87bc404a95d5ce616049",
|
26
|
+
amount: "042",
|
27
|
+
status: "refunded",
|
28
|
+
description: nil,
|
29
|
+
livemode: false,
|
30
|
+
created_at: 1349947042,
|
31
|
+
updated_at: 1349947042,
|
32
|
+
response_code: 20000
|
33
|
+
}
|
34
|
+
],
|
35
|
+
payment: {
|
36
|
+
id: "pay_95ba26ba2c613ebb0ca8",
|
37
|
+
type: "debit",
|
38
|
+
client: "client_64b025ee5955abd5af66",
|
39
|
+
code: "860555000",
|
40
|
+
holder: "Max Mustermann",
|
41
|
+
account: "******2345",
|
42
|
+
created_at: 1349945681,
|
43
|
+
updated_at: 1349945681
|
44
|
+
},
|
45
|
+
client: {
|
46
|
+
id: "client_64b025ee5955abd5af66",
|
47
|
+
email: "lovely-client@example.com",
|
48
|
+
description: nil,
|
49
|
+
created_at: 1349945644,
|
50
|
+
updated_at: 1349945644,
|
51
|
+
payment: [
|
52
|
+
"pay_95ba26ba2c613ebb0ca8"
|
53
|
+
],
|
54
|
+
subscription: nil
|
55
|
+
},
|
56
|
+
preauthorization: nil
|
57
|
+
}
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
let (:refund) do
|
62
|
+
Paymill::Refund.new(valid_attributes)
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#initialize" do
|
66
|
+
it "initializes all attributes correctly" do
|
67
|
+
refund.id.should eql("refund_87bc404a95d5ce616049")
|
68
|
+
refund.amount.should eql("042")
|
69
|
+
refund.status.should eql("refunded")
|
70
|
+
refund.description.should be_nil
|
71
|
+
refund.livemode.should be_false
|
72
|
+
=begin
|
73
|
+
refund.transaction[:refunds].should eql(
|
74
|
+
[
|
75
|
+
{
|
76
|
+
id: "refund_87bc404a95d5ce616049",
|
77
|
+
amount: "042",
|
78
|
+
status: "refunded",
|
79
|
+
description: nil,
|
80
|
+
livemode: false,
|
81
|
+
created_at: 1349947042,
|
82
|
+
updated_at: 1349947042,
|
83
|
+
response_code: 20000
|
84
|
+
}
|
85
|
+
]
|
86
|
+
)
|
87
|
+
refund.transaction[:payment].should eql(
|
88
|
+
{
|
89
|
+
id: "pay_95ba26ba2c613ebb0ca8",
|
90
|
+
type: "debit",
|
91
|
+
client: "client_64b025ee5955abd5af66",
|
92
|
+
code: "860555000",
|
93
|
+
holder: "Max Mustermann",
|
94
|
+
account: "******2345",
|
95
|
+
created_at: 1349945681,
|
96
|
+
updated_at: 1349945681
|
97
|
+
}
|
98
|
+
)
|
99
|
+
refund.transaction[:client].should eql(
|
100
|
+
id: "client_64b025ee5955abd5af66",
|
101
|
+
email: "lovely-client@example.com",
|
102
|
+
description: nil,
|
103
|
+
created_at: 1349945644,
|
104
|
+
updated_at: 1349945644,
|
105
|
+
payment: [
|
106
|
+
"pay_95ba26ba2c613ebb0ca8"
|
107
|
+
],
|
108
|
+
subscription: nil
|
109
|
+
)
|
110
|
+
=end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe ".create" do
|
115
|
+
it "makes a new POST request using the correct API endpoint" do
|
116
|
+
Paymill.should_receive(:request).with(:post, "refunds", valid_attributes).and_return("data" => {})
|
117
|
+
Paymill::Refund.create(valid_attributes)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -30,8 +30,31 @@ describe Paymill::Subscription do
|
|
30
30
|
subscription.livemode.should be_false
|
31
31
|
subscription.cancel_at_period_end.should be_false
|
32
32
|
subscription.client[:email].should eql("stefan.sprenger@dkd.de")
|
33
|
-
subscription.trial_start.should eql(1349945681)
|
34
|
-
subscription.trial_end.should eql(1349945682)
|
33
|
+
subscription.trial_start.to_i.should eql(1349945681)
|
34
|
+
subscription.trial_end.to_i.should eql(1349945682)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#parse_timestamps" do
|
39
|
+
context "given #canceled_at is present" do
|
40
|
+
it "creates a Time object" do
|
41
|
+
subscription = Paymill::Subscription.new(canceled_at: 1362823928)
|
42
|
+
subscription.canceled_at.class.should eql(Time)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "given #trial_start is present" do
|
47
|
+
it "creates a Time object" do
|
48
|
+
subscription = Paymill::Subscription.new(trial_start: 1362823928)
|
49
|
+
subscription.trial_start.class.should eql(Time)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "given #trial_end is present" do
|
54
|
+
it "creates a Time object" do
|
55
|
+
subscription = Paymill::Subscription.new(trial_end: 1362823928)
|
56
|
+
subscription.trial_end.class.should eql(Time)
|
57
|
+
end
|
35
58
|
end
|
36
59
|
end
|
37
60
|
|
@@ -20,8 +20,8 @@ describe Paymill::Webhook do
|
|
20
20
|
webhook.url.should eql("<your-webhook-url>")
|
21
21
|
webhook.livemode.should eql(false)
|
22
22
|
webhook.event_types.should eql(["transaction.succeeded","transaction.failed"])
|
23
|
-
webhook.created_at.should eql(1360368749)
|
24
|
-
webhook.updated_at.should eql(1360368749)
|
23
|
+
webhook.created_at.to_i.should eql(1360368749)
|
24
|
+
webhook.updated_at.to_i.should eql(1360368749)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -67,4 +67,4 @@ describe Paymill::Webhook do
|
|
67
67
|
webhook.url.should eql("<new-webhook-url>")
|
68
68
|
end
|
69
69
|
end
|
70
|
-
end
|
70
|
+
end
|
data/spec/paymill_spec.rb
CHANGED
@@ -23,6 +23,11 @@ describe Paymill do
|
|
23
23
|
Paymill.request(:get, "transactions", { client: "client_id", order: "created_at_desc" })
|
24
24
|
WebMock.should have_requested(:get, "https://#{Paymill::api_key}:@#{Paymill::API_BASE}/#{Paymill::API_VERSION}/transactions?client=client_id&order=created_at_desc")
|
25
25
|
end
|
26
|
+
|
27
|
+
it "doesn't add a question mark if no params" do
|
28
|
+
Paymill.request(:get, "transactions", {})
|
29
|
+
WebMock.should have_requested(:get, "https://#{Paymill::api_key}:@#{Paymill::API_BASE}/#{Paymill::API_VERSION}/transactions")
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paymill
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
description: API wrapper for Paymill.
|
37
47
|
email:
|
38
48
|
- stefan.sprenger@dkd.de
|
@@ -57,14 +67,19 @@ files:
|
|
57
67
|
- lib/paymill/operations/find.rb
|
58
68
|
- lib/paymill/operations/update.rb
|
59
69
|
- lib/paymill/payment.rb
|
70
|
+
- lib/paymill/preauthorization.rb
|
71
|
+
- lib/paymill/refund.rb
|
60
72
|
- lib/paymill/subscription.rb
|
61
73
|
- lib/paymill/transaction.rb
|
62
74
|
- lib/paymill/version.rb
|
63
75
|
- lib/paymill/webhook.rb
|
64
76
|
- paymill.gemspec
|
77
|
+
- spec/paymill/base_spec.rb
|
65
78
|
- spec/paymill/client_spec.rb
|
66
79
|
- spec/paymill/offer_spec.rb
|
67
80
|
- spec/paymill/payment_spec.rb
|
81
|
+
- spec/paymill/preauthorization_spec.rb
|
82
|
+
- spec/paymill/refund_spec.rb
|
68
83
|
- spec/paymill/subscription_spec.rb
|
69
84
|
- spec/paymill/transaction_spec.rb
|
70
85
|
- spec/paymill/webhook_spec.rb
|
@@ -84,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
84
99
|
version: '0'
|
85
100
|
segments:
|
86
101
|
- 0
|
87
|
-
hash:
|
102
|
+
hash: 216517499575340974
|
88
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
104
|
none: false
|
90
105
|
requirements:
|
@@ -93,17 +108,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
108
|
version: '0'
|
94
109
|
segments:
|
95
110
|
- 0
|
96
|
-
hash:
|
111
|
+
hash: 216517499575340974
|
97
112
|
requirements: []
|
98
113
|
rubyforge_project:
|
99
|
-
rubygems_version: 1.8.
|
114
|
+
rubygems_version: 1.8.19
|
100
115
|
signing_key:
|
101
116
|
specification_version: 3
|
102
117
|
summary: API wrapper for Paymill.
|
103
118
|
test_files:
|
119
|
+
- spec/paymill/base_spec.rb
|
104
120
|
- spec/paymill/client_spec.rb
|
105
121
|
- spec/paymill/offer_spec.rb
|
106
122
|
- spec/paymill/payment_spec.rb
|
123
|
+
- spec/paymill/preauthorization_spec.rb
|
124
|
+
- spec/paymill/refund_spec.rb
|
107
125
|
- spec/paymill/subscription_spec.rb
|
108
126
|
- spec/paymill/transaction_spec.rb
|
109
127
|
- spec/paymill/webhook_spec.rb
|