gocardless 0.1.3 → 0.2.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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.2.0 - April 3, 2012
2
+
3
+ - Add `cancel!` method to `Subscription`
4
+ - Include the API version in the user agent header
5
+
6
+
1
7
  ## 0.1.3 - February 22, 2012
2
8
 
3
9
  - Fix parameter encoding in `Client#new_merchant_url` (related to Faraday issue
data/README.md CHANGED
@@ -13,5 +13,5 @@ you want to support multiple merchant accounts, see the
13
13
  The full API reference is available at on
14
14
  [rubydoc.info](http://rubydoc.info/github/gocardless/gocardless-ruby/master/frames).
15
15
 
16
- [![Build Status](https://secure.travis-ci.org/gocardless/gocardless-ruby.png)](http://travis-ci.org/gocardless/gocardless-ruby)
16
+ [![Build Status](https://secure.travis-ci.org/gocardless/gocardless-ruby.png?branch=master)](http://travis-ci.org/gocardless/gocardless-ruby)
17
17
 
data/gocardless.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  require File.expand_path('../lib/gocardless/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.add_runtime_dependency "oauth2", "~> 0.5.0.rc1"
5
- gem.add_runtime_dependency "json", ">= 1.5.3"
4
+ gem.add_runtime_dependency 'oauth2', '~> 0.5.0.rc1'
5
+ gem.add_runtime_dependency 'multi_json', '~> 1.2'
6
6
 
7
7
  gem.add_development_dependency 'rspec', '~> 2.6'
8
8
  gem.add_development_dependency 'mocha', '~> 0.9.12'
9
- gem.add_development_dependency "yard", "~> 0.7.3"
10
- gem.add_development_dependency "activesupport", "~> 3.1"
9
+ gem.add_development_dependency 'yard', '~> 0.7.3'
10
+ gem.add_development_dependency 'activesupport', '~> 3.1'
11
11
 
12
- gem.authors = ["Harry Marr", "Tom Blomfield"]
12
+ gem.authors = ['Harry Marr', 'Tom Blomfield']
13
13
  gem.description = %q{A Ruby wrapper for the GoCardless API}
14
14
  gem.email = ['developers@gocardless.com']
15
15
  gem.files = `git ls-files`.split("\n")
data/lib/gocardless.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  module GoCardless
2
+ require 'gocardless/version'
2
3
  require 'gocardless/errors'
3
4
  require 'gocardless/utils'
4
5
  require 'gocardless/resource'
@@ -1,5 +1,5 @@
1
1
  require 'rubygems'
2
- require 'json'
2
+ require 'multi_json'
3
3
  require 'oauth2'
4
4
  require 'openssl'
5
5
  require 'uri'
@@ -270,7 +270,8 @@ module GoCardless
270
270
  opts[:headers] = {} if opts[:headers].nil?
271
271
  opts[:headers]['Accept'] = 'application/json'
272
272
  opts[:headers]['Content-Type'] = 'application/json' unless method == :get
273
- opts[:body] = JSON.generate(opts[:data]) if !opts[:data].nil?
273
+ opts[:headers]['User-Agent'] = "gocardless-ruby-v#{GoCardless::VERSION}"
274
+ opts[:body] = MultiJson.encode(opts[:data]) if !opts[:data].nil?
274
275
 
275
276
  # Reset the URL in case the environment / base URL has been changed.
276
277
  @oauth_client.site = self.class.base_url
@@ -1,5 +1,5 @@
1
1
  require 'rubygems'
2
- require 'json'
2
+ require 'multi_json'
3
3
 
4
4
  module GoCardless
5
5
  class Error < StandardError
@@ -11,7 +11,7 @@ module GoCardless
11
11
  def initialize(response)
12
12
  @response = response
13
13
  @code = response.status
14
- body = JSON.parse(response.body) rescue nil
14
+ body = MultiJson.decode(response.body) rescue nil
15
15
  if body.is_a? Hash
16
16
  @description = body["error"] || response.body.strip || "Unknown error"
17
17
  end
@@ -150,7 +150,7 @@ module GoCardless
150
150
  end
151
151
 
152
152
  def to_json
153
- to_hash.to_json
153
+ MultiJson.encode(Utils.stringify_times(to_hash))
154
154
  end
155
155
 
156
156
  def inspect
@@ -10,6 +10,12 @@ module GoCardless
10
10
 
11
11
  date_accessor :expires_at, :created_at
12
12
 
13
+
14
+ def cancel!
15
+ path = self.class.endpoint.gsub(':id', id.to_s) + '/cancel'
16
+ client.api_put(path)
17
+ end
18
+
13
19
  end
14
20
  end
15
21
 
@@ -39,14 +39,6 @@ module GoCardless
39
39
  URI.encode(str, /[^a-zA-Z0-9\-\.\_\~]/)
40
40
  end
41
41
 
42
- # Format a Time object according to ISO 8601, and convert to UTC.
43
- #
44
- # @param [Time] time the time object to format
45
- # @return [String] the ISO-formatted time
46
- def iso_format_time(time)
47
- time.is_a?(Time) ? time.getutc.strftime('%Y-%m-%dT%H:%M:%SZ') : time
48
- end
49
-
50
42
  # Flatten a hash containing nested hashes and arrays to a non-nested array
51
43
  # of key-value pairs.
52
44
  #
@@ -101,6 +93,32 @@ module GoCardless
101
93
  digest = OpenSSL::Digest::Digest.new('sha256')
102
94
  OpenSSL::HMAC.hexdigest(digest, key, msg)
103
95
  end
96
+
97
+ # Format a Time object according to ISO 8601, and convert to UTC.
98
+ #
99
+ # @param [Time] time the time object to format
100
+ # @return [String] the ISO-formatted time
101
+ def iso_format_time(time)
102
+ return time unless time.is_a? Time or time.is_a? Date
103
+ time = time.getutc if time.is_a? Time
104
+ time = time.new_offset(0) if time.is_a? DateTime
105
+ time.strftime('%Y-%m-%dT%H:%M:%SZ')
106
+ end
107
+
108
+ # Recursively ISO format all time and date values.
109
+ #
110
+ # @param [Hash] obj the object containing date or time objects
111
+ # @return [Hash] the object with ISO-formatted time stings
112
+ def stringify_times(obj)
113
+ case obj
114
+ when Hash
115
+ Hash[obj.map { |k,v| [k, stringify_times(v)] }]
116
+ when Array
117
+ obj.map { |v| stringify_times(v) }
118
+ else
119
+ iso_format_time(obj)
120
+ end
121
+ end
104
122
  end
105
123
  end
106
124
 
@@ -1,3 +1,3 @@
1
1
  module GoCardless
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -293,15 +293,16 @@ describe GoCardless::Resource do
293
293
  reference_accessor :person_id
294
294
  end
295
295
 
296
+ time_str = '2012-01-01T00:00:00Z'
296
297
  bill = test_resource.new({
297
298
  :amount => '10',
298
- :when => DateTime.now,
299
+ :when => Time.parse(time_str),
299
300
  :person_id => 15
300
301
  })
301
302
 
302
- result = JSON.parse(bill.to_json)
303
+ result = MultiJson.decode(bill.to_json)
303
304
  result['amount'].should == bill.amount
304
- result['when'].should == bill.when.to_s
305
+ result['when'].should == time_str
305
306
  result['person_id'].should == 15
306
307
  end
307
308
 
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'mocha'
2
- require 'json'
3
2
  require 'active_support/hash_with_indifferent_access'
4
3
  require 'gocardless'
5
4
 
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoCardless::Subscription do
4
+ before :each do
5
+ @app_id = 'abc'
6
+ @app_secret = 'xyz'
7
+ GoCardless.account_details = {:app_id => @app_id, :app_secret => @app_secret,
8
+ :token => 'xxx manage_merchant:1'}
9
+ @client = GoCardless.client
10
+ end
11
+
12
+ it "should be cancellable" do
13
+ s = GoCardless::Subscription.new_with_client(@client, :id => '009988')
14
+ @client.expects(:api_put).with('/subscriptions/009988/cancel')
15
+ s.cancel!
16
+ end
17
+
18
+ end
data/spec/utils_spec.rb CHANGED
@@ -105,18 +105,6 @@ describe GoCardless::Utils do
105
105
  end
106
106
  end
107
107
 
108
- describe ".iso_format_time" do
109
- it "should work with a Time object" do
110
- d = GoCardless::Utils.iso_format_time(Time.parse("1st January 2012"))
111
- d.should == "2012-01-01T00:00:00Z"
112
- end
113
-
114
- it "should leave a string untouched" do
115
- date = "1st January 2012"
116
- GoCardless::Utils.iso_format_time(date).should == date
117
- end
118
- end
119
-
120
108
  describe ".flatten_params" do
121
109
  subject { GoCardless::Utils.method(:flatten_params) }
122
110
 
@@ -206,4 +194,45 @@ describe GoCardless::Utils do
206
194
  end
207
195
  end
208
196
 
197
+ describe "date and time helpers" do
198
+ describe ".iso_format_time" do
199
+ it "should work with a Time object" do
200
+ d = GoCardless::Utils.iso_format_time(Time.parse("1st January 2012"))
201
+ d.should == "2012-01-01T00:00:00Z"
202
+ end
203
+
204
+ it "should work with a DateTime object" do
205
+ d = GoCardless::Utils.iso_format_time(DateTime.parse("1st January 2012"))
206
+ d.should == "2012-01-01T00:00:00Z"
207
+ end
208
+
209
+ it "should work with a Date object" do
210
+ d = GoCardless::Utils.iso_format_time(Date.parse("1st January 2012"))
211
+ d.should == "2012-01-01T00:00:00Z"
212
+ end
213
+
214
+ it "should leave a string untouched" do
215
+ date = "1st January 2012"
216
+ GoCardless::Utils.iso_format_time(date).should == date
217
+ end
218
+ end
219
+
220
+ describe ".stringify_times" do
221
+ it "stringifies time objects" do
222
+ d = GoCardless::Utils.stringify_times(Time.parse("1st Jan 2012"))
223
+ d.should == "2012-01-01T00:00:00Z"
224
+ end
225
+
226
+ it "stringifies time values in hashes" do
227
+ d = GoCardless::Utils.stringify_times(:t => Time.parse("1st Jan 2012"))
228
+ d.should == { :t => "2012-01-01T00:00:00Z" }
229
+ end
230
+
231
+ it "stringifies time values in arrays" do
232
+ d = GoCardless::Utils.stringify_times([Time.parse("1st Jan 2012")])
233
+ d.should == ["2012-01-01T00:00:00Z"]
234
+ end
235
+ end
236
+ end
237
+
209
238
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gocardless
3
3
  version: !ruby/object:Gem::Version
4
- hash: 800522045387967993
4
+ hash: 2380615109590600174
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Harry Marr
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-02-22 00:00:00 Z
19
+ date: 2012-04-03 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: oauth2
@@ -37,19 +37,18 @@ dependencies:
37
37
  type: :runtime
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
40
- name: json
40
+ name: multi_json
41
41
  prerelease: false
42
42
  requirement: &id002 !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
45
- - - ">="
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
- hash: 3211771947681907367
47
+ hash: 3191556116430806706
48
48
  segments:
49
49
  - 1
50
- - 5
51
- - 3
52
- version: 1.5.3
50
+ - 2
51
+ version: "1.2"
53
52
  type: :runtime
54
53
  version_requirements: *id002
55
54
  - !ruby/object:Gem::Dependency
@@ -152,6 +151,7 @@ files:
152
151
  - spec/merchant_spec.rb
153
152
  - spec/resource_spec.rb
154
153
  - spec/spec_helper.rb
154
+ - spec/subscription_spec.rb
155
155
  - spec/utils_spec.rb
156
156
  homepage: https://github.com/gocardless/gocardless-ruby
157
157
  licenses: []
@@ -193,5 +193,6 @@ test_files:
193
193
  - spec/merchant_spec.rb
194
194
  - spec/resource_spec.rb
195
195
  - spec/spec_helper.rb
196
+ - spec/subscription_spec.rb
196
197
  - spec/utils_spec.rb
197
198
  has_rdoc: