paymill 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Paymill ![Build status](http://travis-ci.org/dkd/paymill-ruby.png)
1
+ Paymill [![Build Status](https://secure.travis-ci.org/dkd/paymill-ruby.png)](https://travis-ci.org/dkd/paymill-ruby)
2
2
  ======
3
3
 
4
4
  This is a Ruby wrapper for Paymill's API.
@@ -22,21 +22,31 @@ Now you can e.g. create a new client:
22
22
 
23
23
  Paymill::Client.create(email: "stefan.sprenger@dkd.de", description: "He is a Ruby guy.")
24
24
 
25
- Or find a existing client:
25
+ Or find an existing client:
26
26
 
27
27
  Paymill::Client.find("client_88a388d9dd48f86c3136")
28
28
 
29
+ Updating an existing client only works on an instance:
30
+
31
+ client = Paymill::Client.find("client_88a388d9dd48f86c3136")
32
+ client.update_attributes(email: "carl.client@example.com")
33
+
34
+ Deleting a client:
35
+
36
+ Paymill::Client.delete("client_88a388d9dd48f86c3136")
37
+
38
+
29
39
  For retrieving a collection of all clients you might use the `all`
30
40
  operation:
31
41
 
32
42
  Paymill::Client.all
33
43
 
34
- We currently only support the operations `create`, `find` and `all`.
44
+ Please note that Transactions and Payments cannot be updated.
35
45
 
36
46
  Requirements
37
47
  =====
38
48
 
39
- This gem was developed using Ruby 1.9 and version 2 of Paymill's API. Nonetheless, it should also work with Ruby 1.8.
49
+ This gem requires Ruby 1.9 and faces version 2 of Paymill's API.
40
50
 
41
51
  Bugs
42
52
  ======
@@ -9,6 +9,7 @@ module Paymill
9
9
 
10
10
  @@api_key = nil
11
11
 
12
+ autoload :Base, "paymill/base"
12
13
  autoload :Client, "paymill/client"
13
14
  autoload :Offer, "paymill/offer"
14
15
  autoload :Payment, "paymill/payment"
@@ -18,8 +19,9 @@ module Paymill
18
19
  module Operations
19
20
  autoload :All, "paymill/operations/all"
20
21
  autoload :Create, "paymill/operations/create"
21
- autoload :Delete, "paymill/operations/delete"
22
22
  autoload :Find, "paymill/operations/find"
23
+ autoload :Update, "paymill/operations/update"
24
+ autoload :Delete, "paymill/operations/delete"
23
25
  end
24
26
 
25
27
  class PaymillError < StandardError
@@ -40,22 +42,24 @@ module Paymill
40
42
  def request(http_method, api_url, data)
41
43
  raise AuthenticationError if api_key.nil?
42
44
 
43
- https = Net::HTTP.new(API_BASE, Net::HTTP.https_default_port)
44
- https.use_ssl = true
45
- https.verify_mode = OpenSSL::SSL::VERIFY_PEER
46
- https.ca_file = File.join(File.dirname(__FILE__), "data/paymill.crt")
45
+ https = Net::HTTP.new(API_BASE, Net::HTTP.https_default_port)
46
+ https.use_ssl = true
47
+ https.verify_mode = OpenSSL::SSL::VERIFY_PEER
48
+ https.ca_file = File.join(File.dirname(__FILE__), "data/paymill.crt")
47
49
  https.start do |connection|
48
50
  url = "/#{API_VERSION}/#{api_url}"
49
51
  https_request = case http_method
50
52
  when :post
51
53
  Net::HTTP::Post.new(url)
54
+ when :put
55
+ Net::HTTP::Put.new(url)
52
56
  when :delete
53
57
  Net::HTTP::Delete.new(url)
54
58
  else
55
59
  Net::HTTP::Get.new(url)
56
60
  end
57
- https_request.basic_auth(api_key,"")
58
- https_request.set_form_data(data) if http_method == :post
61
+ https_request.basic_auth(api_key, "")
62
+ https_request.set_form_data(data) if [:post, :put].include? http_method
59
63
  @response = https.request(https_request)
60
64
  end
61
65
  raise AuthenticationError if @response.code.to_i == 401
@@ -0,0 +1,17 @@
1
+ module Paymill
2
+ class Base
3
+ include Paymill::Operations::All
4
+ include Paymill::Operations::Create
5
+ include Paymill::Operations::Find
6
+
7
+ def initialize(attributes = {})
8
+ set_attributes(attributes)
9
+ end
10
+
11
+ def set_attributes(attributes)
12
+ attributes.each_pair do |key, value|
13
+ instance_variable_set("@#{key}", value)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,17 +1,9 @@
1
1
  module Paymill
2
- class Client
3
- include Paymill::Operations::All
4
- include Paymill::Operations::Create
2
+ class Client < Base
5
3
  include Paymill::Operations::Delete
6
- include Paymill::Operations::Find
4
+ include Paymill::Operations::Update
7
5
 
8
6
  attr_accessor :id, :email, :description, :attributes, :created_at,
9
7
  :updated_at, :payment, :subscription
10
-
11
- def initialize(attributes = {})
12
- attributes.each_pair do |key, value|
13
- instance_variable_set("@#{key}", value)
14
- end
15
- end
16
8
  end
17
9
  end
@@ -1,16 +1,8 @@
1
1
  module Paymill
2
- class Offer
3
- include Paymill::Operations::All
4
- include Paymill::Operations::Create
2
+ class Offer < Base
5
3
  include Paymill::Operations::Delete
6
- include Paymill::Operations::Find
4
+ include Paymill::Operations::Update
7
5
 
8
6
  attr_accessor :id, :name, :amount, :interval, :trial_period_days, :currency
9
-
10
- def initialize(attributes = {})
11
- attributes.each_pair do |key, value|
12
- instance_variable_set("@#{key}", value)
13
- end
14
- end
15
7
  end
16
8
  end
@@ -2,7 +2,7 @@ module Paymill
2
2
  module Operations
3
3
  module All
4
4
  module ClassMethods
5
- def all()
5
+ def all
6
6
  response = Paymill.request(:get, "#{self.name.split("::").last.downcase}s/", {})
7
7
  results = []
8
8
  response["data"].each do |obj|
@@ -0,0 +1,10 @@
1
+ module Paymill
2
+ module Operations
3
+ module Update
4
+ def update_attributes(attributes)
5
+ response = Paymill.request(:put, "#{self.class.name.split("::").last.downcase}s/#{id}", attributes)
6
+ set_attributes(response["data"])
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,16 +1,6 @@
1
1
  module Paymill
2
- class Payment
3
- include Paymill::Operations::All
4
- include Paymill::Operations::Create
5
- include Paymill::Operations::Find
6
-
2
+ class Payment < Base
7
3
  attr_accessor :id, :card_type, :country, :expire_month, :expire_year,
8
4
  :card_holder, :last4, :created_at, :updated_at
9
-
10
- def initialize(attributes = {})
11
- attributes.each_pair do |key, value|
12
- instance_variable_set("@#{key}", value)
13
- end
14
- end
15
5
  end
16
6
  end
@@ -1,17 +1,9 @@
1
1
  module Paymill
2
- class Subscription
3
- include Paymill::Operations::All
4
- include Paymill::Operations::Create
2
+ class Subscription < Base
5
3
  include Paymill::Operations::Delete
6
- include Paymill::Operations::Find
4
+ include Paymill::Operations::Update
7
5
 
8
6
  attr_accessor :id, :plan, :livemode, :cancel_at_period_end, :created_at, :updated_at,
9
- :canceled_at, :client
10
-
11
- def initialize(attributes = {})
12
- attributes.each_pair do |key, value|
13
- instance_variable_set("@#{key}", value)
14
- end
15
- end
7
+ :canceled_at, :client, :trial_start, :trial_end
16
8
  end
17
9
  end
@@ -1,16 +1,6 @@
1
1
  module Paymill
2
- class Transaction
3
- include Paymill::Operations::All
4
- include Paymill::Operations::Create
5
- include Paymill::Operations::Find
6
-
2
+ class Transaction < Base
7
3
  attr_accessor :id, :amount, :status, :description, :livemode,
8
- :payment, :client, :created_at, :updated_at
9
-
10
- def initialize(attributes = {})
11
- attributes.each_pair do |key, value|
12
- instance_variable_set("@#{key}", value)
13
- end
14
- end
4
+ :payment, :currency, :client, :created_at, :updated_at
15
5
  end
16
6
  end
@@ -1,3 +1,3 @@
1
1
  module Paymill
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -43,4 +43,21 @@ describe Paymill::Client do
43
43
  Paymill::Client.create(valid_attributes)
44
44
  end
45
45
  end
46
+
47
+ describe "#update_attributes" do
48
+ it "makes a new PUT request using the correct API endpoint" do
49
+ client.id = "client_123"
50
+ Paymill.should_receive(:request).with(:put, "clients/client_123", {:email => "tim.test@exmaple.com"}).and_return("data" => {})
51
+
52
+ client.update_attributes({:email => "tim.test@exmaple.com"})
53
+ end
54
+
55
+ it "updates the instance with the returned attributes" do
56
+ changed_attributes = {:email => "tim.test@example.com"}
57
+ Paymill.should_receive(:request).and_return("data" => changed_attributes)
58
+ client.update_attributes(changed_attributes)
59
+
60
+ client.email.should eql("tim.test@example.com")
61
+ end
62
+ end
46
63
  end
@@ -3,10 +3,10 @@ require "spec_helper"
3
3
  describe Paymill::Offer do
4
4
  let(:valid_attributes) do
5
5
  {
6
- amount: 4200,
6
+ amount: 4200,
7
7
  currency: "eur",
8
8
  interval: "month",
9
- name: "Medium Plan"
9
+ name: "Medium Plan"
10
10
  }
11
11
  end
12
12
 
@@ -50,4 +50,21 @@ describe Paymill::Offer do
50
50
  Paymill::Offer.create(valid_attributes)
51
51
  end
52
52
  end
53
+
54
+ describe "#update_attributes" do
55
+ it "makes a new PUT request using the correct API endpoint" do
56
+ offer.id = "offer_123"
57
+ Paymill.should_receive(:request).with(:put, "offers/offer_123", {:name => "Large Plan"}).and_return("data" => {})
58
+
59
+ offer.update_attributes({:name => "Large Plan"})
60
+ end
61
+
62
+ it "updates the instance with the returned attributes" do
63
+ changed_attributes = {:name => "Large Plan"}
64
+ Paymill.should_receive(:request).and_return("data" => changed_attributes)
65
+ offer.update_attributes(changed_attributes)
66
+
67
+ offer.name.should eql("Large Plan")
68
+ end
69
+ end
53
70
  end
@@ -3,14 +3,16 @@ require "spec_helper"
3
3
  describe Paymill::Subscription do
4
4
  let(:valid_attributes) do
5
5
  {
6
- plan: {
6
+ plan: {
7
7
  name: "Nerd special",
8
8
  amount: 123,
9
9
  interval: "week"
10
10
  },
11
- livemode: false,
11
+ livemode: false,
12
+ trial_start: 1349945681,
13
+ trial_end: 1349945682,
12
14
  cancel_at_period_end: false,
13
- client: {
15
+ client: {
14
16
  email: "stefan.sprenger@dkd.de"
15
17
  }
16
18
  }
@@ -28,6 +30,8 @@ describe Paymill::Subscription do
28
30
  subscription.livemode.should be_false
29
31
  subscription.cancel_at_period_end.should be_false
30
32
  subscription.client[:email].should eql("stefan.sprenger@dkd.de")
33
+ subscription.trial_start.should eql(1349945681)
34
+ subscription.trial_end.should eql(1349945682)
31
35
  end
32
36
  end
33
37
 
@@ -58,4 +62,21 @@ describe Paymill::Subscription do
58
62
  Paymill::Subscription.create(valid_attributes)
59
63
  end
60
64
  end
65
+
66
+ describe "#update_attributes" do
67
+ it "makes a new PUT request using the correct API endpoint" do
68
+ changed_attributes = {:cancel_at_period_end => true}
69
+ subscription.id = 'sub_123'
70
+
71
+ Paymill.should_receive(:request).with(:put, "subscriptions/sub_123", changed_attributes).and_return("data" => changed_attributes)
72
+
73
+ subscription.update_attributes(changed_attributes)
74
+ end
75
+
76
+ it "should set the returned attributes on the instance" do
77
+ Paymill.should_receive(:request).and_return("data" => {:cancel_at_period_end => true})
78
+ subscription.update_attributes({})
79
+ subscription.cancel_at_period_end.should be_true
80
+ end
81
+ end
61
82
  end
@@ -4,6 +4,7 @@ describe Paymill::Transaction do
4
4
  let(:valid_attributes) do
5
5
  {
6
6
  amount: 4200,
7
+ currency: "EUR",
7
8
  status: "pending",
8
9
  description: "Test transaction.",
9
10
  livemode: false,
@@ -28,6 +29,7 @@ describe Paymill::Transaction do
28
29
  transaction.payment[:card_type].should eql("visa")
29
30
  transaction.payment[:country].should eql("germany")
30
31
  transaction.client.should eql("client_a013c")
32
+ transaction.currency.should eql("EUR")
31
33
  end
32
34
  end
33
35
 
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.1.0
4
+ version: 0.2.0
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: 2012-11-16 00:00:00.000000000 Z
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &2153504740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
24
+ version_requirements: *2153504740
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: rspec
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &2153503800 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,12 +32,7 @@ dependencies:
37
32
  version: '0'
38
33
  type: :development
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *2153503800
46
36
  description: API wrapper for Paymill.
47
37
  email:
48
38
  - stefan.sprenger@dkd.de
@@ -58,12 +48,14 @@ files:
58
48
  - Rakefile
59
49
  - lib/data/paymill.crt
60
50
  - lib/paymill.rb
51
+ - lib/paymill/base.rb
61
52
  - lib/paymill/client.rb
62
53
  - lib/paymill/offer.rb
63
54
  - lib/paymill/operations/all.rb
64
55
  - lib/paymill/operations/create.rb
65
56
  - lib/paymill/operations/delete.rb
66
57
  - lib/paymill/operations/find.rb
58
+ - lib/paymill/operations/update.rb
67
59
  - lib/paymill/payment.rb
68
60
  - lib/paymill/subscription.rb
69
61
  - lib/paymill/transaction.rb
@@ -90,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
82
  version: '0'
91
83
  segments:
92
84
  - 0
93
- hash: 4192098067474741217
85
+ hash: 2201296574026171541
94
86
  required_rubygems_version: !ruby/object:Gem::Requirement
95
87
  none: false
96
88
  requirements:
@@ -99,10 +91,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
91
  version: '0'
100
92
  segments:
101
93
  - 0
102
- hash: 4192098067474741217
94
+ hash: 2201296574026171541
103
95
  requirements: []
104
96
  rubyforge_project:
105
- rubygems_version: 1.8.19
97
+ rubygems_version: 1.8.10
106
98
  signing_key:
107
99
  specification_version: 3
108
100
  summary: API wrapper for Paymill.