fat_zebra 1.0.2 → 1.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.
data/.rspec ADDED
File without changes
data/FatZebra.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency "rake"
24
24
  s.add_development_dependency "yard"
25
25
  s.add_development_dependency "yard-tomdoc"
26
+ s.add_development_dependency "ZenTest"
26
27
 
27
28
 
28
29
  s.add_runtime_dependency "rest-client"
@@ -57,6 +57,8 @@ module FatZebra
57
57
  # includes:
58
58
  # - id (unique purchase ID)
59
59
  # - reference (merchant reference)
60
+ # - from (Date)
61
+ # - to (Date)
60
62
  # - offset (defaults to 0) - for pagination
61
63
  # - limit (defaults to 10) for pagination
62
64
  # @return [Array<Purchase>] array of purchases
@@ -64,6 +66,11 @@ module FatZebra
64
66
  id = options.delete(:id)
65
67
  options.merge!({:offets => 0, :limit => 10})
66
68
 
69
+ # Format dates for the request
70
+ options[:from] = options[:from].strftime("%Y%m%dT%H%M") if options[:from]
71
+ options[:to] = options[:to].strftime("%Y%m%dT%H%M") if options[:to]
72
+
73
+
67
74
  if id.nil?
68
75
  response = make_request(:get, "purchases", options)
69
76
  if response["successful"]
@@ -146,6 +153,26 @@ module FatZebra
146
153
  end
147
154
  end
148
155
 
156
+ # Public: Tokenizes a credit card
157
+ #
158
+ # card_holder - the credit card holder name
159
+ # card_number - the card number
160
+ # expiry - the credit card expiry date (mm/yyyy)
161
+ # cvv - the card CVV
162
+ #
163
+ # Returns FatZebra::Models::Response
164
+ def tokenize(card_holder, card_number, expiry, cvv)
165
+ params = {
166
+ :card_holder => card_holder,
167
+ :card_number => card_number,
168
+ :card_expiry => expiry,
169
+ :cvv => cvv
170
+ }
171
+
172
+ response = make_request(:post, "credit_cards", params)
173
+ FatZebra::Models::Response.new(response, :card)
174
+ end
175
+
149
176
 
150
177
  private
151
178
  # Private: Extracts the date value from a Date/DateTime value
@@ -198,10 +225,10 @@ module FatZebra
198
225
  end
199
226
 
200
227
  unless data.nil?
201
- url = url + "?"
202
- data.each do |key, value|
203
- url += "#{key}=#{value}" # TODO: URL Encode this
204
- end
228
+ url = url + "?" +
229
+ data.map do |key, value|
230
+ "#{key}=#{value}" # TODO: URL Encode this
231
+ end.join("&")
205
232
  end
206
233
 
207
234
  url
@@ -222,7 +249,13 @@ module FatZebra
222
249
  } : {}
223
250
 
224
251
  opts = {:user => self.username, :password => self.token}
225
- RestClient::Resource.new(build_url(uri), opts.merge(ssl_options))
252
+ if method == :get
253
+ url = build_url(uri, data)
254
+ else
255
+ url = build_url(uri)
256
+ end
257
+
258
+ RestClient::Resource.new(url, opts.merge(ssl_options))
226
259
  end
227
260
 
228
261
  # Public: Performs the HTTP(s) request and returns a response object, handing errors etc
@@ -236,25 +269,35 @@ module FatZebra
236
269
  resource = get_resource(resource, method, data)
237
270
 
238
271
  payload = (method == :post) ? data.to_json : {}
272
+ headers = options[:headers] || {}
239
273
 
240
- resource.send(method, payload) do |response, request, result, &block|
241
- case response.code
242
- when 201
243
- JSON.parse(response)
244
- when 200
245
- JSON.parse(response)
246
- when 400
247
- raise RequestError, "Bad Data"
248
- when 401
249
- raise RequestError, "Unauthorized, please check your username and token"
250
- when 404
251
- raise RequestError, "Requested URL not found"
252
- when 500
253
- raise RequestError, "Server Error, please check https://www.fatzebra.com.au"
254
- when 501
255
- raise RequestError, "Problem processing your request - please check your data"
274
+ if method == :get
275
+ resource.send(method, headers) do |response, request, result, &block|
276
+ handle_response(response)
256
277
  end
278
+ else
279
+ resource.send(method, payload, headers) do |response, request, result, &block|
280
+ handle_response(response)
281
+ end
282
+ end
283
+ end
257
284
 
285
+ def handle_response(response)
286
+ case response.code
287
+ when 201
288
+ JSON.parse(response)
289
+ when 200
290
+ JSON.parse(response)
291
+ when 400
292
+ raise RequestError, "Bad Data"
293
+ when 401
294
+ raise RequestError, "Unauthorized, please check your username and token"
295
+ when 404
296
+ raise RequestError, "Requested URL not found"
297
+ when 500
298
+ raise RequestError, "Server Error, please check https://www.fatzebra.com.au"
299
+ when 501
300
+ raise RequestError, "Problem processing your request - please check your data"
258
301
  end
259
302
  end
260
303
  end
@@ -0,0 +1,7 @@
1
+ module FatZebra
2
+ module Models
3
+ class Card < Base
4
+ attribute :token, :card_holder, :card_number, :card_expiry, :transaction_count, :raw
5
+ end
6
+ end
7
+ end
@@ -3,7 +3,7 @@ module FatZebra
3
3
  class Response
4
4
  attr_accessor :successful, :result, :errors, :test, :raw
5
5
  def initialize(response, type = :purchase)
6
- self.raw = response.dup
6
+ self.raw = response.dup unless response.nil?
7
7
  self.test = response["test"]
8
8
  self.successful = response["successful"]
9
9
  self.errors = response["errors"]
@@ -15,6 +15,9 @@ module FatZebra
15
15
  when :refund
16
16
  self.result = Refund.new(response["response"])
17
17
  alias refund result
18
+ when :card
19
+ self.result = Card.new(response["response"])
20
+ alias card result
18
21
  end
19
22
  end
20
23
 
@@ -1,3 +1,3 @@
1
1
  module FatZebra
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/fat_zebra.rb CHANGED
@@ -8,4 +8,5 @@ require 'fat_zebra/gateway'
8
8
  require 'fat_zebra/models/base'
9
9
  require 'fat_zebra/models/purchase'
10
10
  require 'fat_zebra/models/refund'
11
- require 'fat_zebra/models/response'
11
+ require 'fat_zebra/models/card'
12
+ require 'fat_zebra/models/response'
data/spec/gateway_spec.rb CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  TEST_USER = "TEST"
4
4
  TEST_TOKEN = "TEST"
5
- TEST_LOCAL = false
5
+ TEST_LOCAL = ENV["TEST_LOCAL"] == "true" || false
6
6
 
7
7
  describe FatZebra::Gateway do
8
8
  before :each do
@@ -35,7 +35,33 @@ describe FatZebra::Gateway do
35
35
  purchase.id.should == result.purchase.id
36
36
  end
37
37
 
38
- it "should fetch a purchase within a date range"
38
+ it "should fetch a purchase via reference" do
39
+ ref = "TES#{rand}T"
40
+ result = @gw.purchase(10000, {:card_holder => "Matthew Savage", :number => "5555555555554444", :expiry => "05/2013", :cvv => 123}, ref, "1.2.3.4")
41
+
42
+ purchases = @gw.purchases(:reference => ref)
43
+ purchases.id.should == result.purchase.id
44
+ end
45
+
46
+ it "should fetch purchases within a date range" do
47
+ start = Time.now
48
+ 5.times do |i|
49
+ @gw.purchase(10000, {:card_holder => "Matthew Savage", :number => "5555555555554444", :expiry => "05/2013", :cvv => 123}, "TEST#{rand(1000)}-#{i}", "1.2.3.4")
50
+ end
51
+
52
+ purchases = @gw.purchases(:from => start - 300, :to => Time.now + 300)
53
+ purchases.count.should >= 5
54
+ end
55
+
56
+ it "should fetch purchases with a from date" do
57
+ start = Time.now
58
+ 5.times do |i|
59
+ @gw.purchase(10000, {:card_holder => "Matthew Savage", :number => "5555555555554444", :expiry => "05/2013", :cvv => 123}, "TEST#{rand(1000)}-#{i}", "1.2.3.4")
60
+ end
61
+
62
+ purchases = @gw.purchases(:from => start)
63
+ purchases.count.should >= 5
64
+ end
39
65
 
40
66
  it "should refund a transaction" do
41
67
  purchase = @gw.purchase(10000, {:card_holder => "Matthew Savage", :number => "5555555555554444", :expiry => "05/2013", :cvv => 123}, "TES#{rand}T", "1.2.3.4")
@@ -44,4 +70,10 @@ describe FatZebra::Gateway do
44
70
  result.should be_successful
45
71
  result.result.successful.should be_true
46
72
  end
73
+
74
+ it "should tokenize a card" do
75
+ response = @gw.tokenize("M Smith", "5123456789012346", "05/2013", "123")
76
+ response.should be_successful
77
+ response.result.token.should_not be_nil
78
+ end
47
79
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fat_zebra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.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-05-16 00:00:00.000000000 Z
12
+ date: 2012-05-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70212724986440 !ruby/object:Gem::Requirement
16
+ requirement: &70289032097440 !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: *70212724986440
24
+ version_requirements: *70289032097440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70212724985820 !ruby/object:Gem::Requirement
27
+ requirement: &70289032096820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70212724985820
35
+ version_requirements: *70289032096820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &70212724985040 !ruby/object:Gem::Requirement
38
+ requirement: &70289032095980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70212724985040
46
+ version_requirements: *70289032095980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yard-tomdoc
49
- requirement: &70212724984080 !ruby/object:Gem::Requirement
49
+ requirement: &70289032095080 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,21 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70212724984080
57
+ version_requirements: *70289032095080
58
+ - !ruby/object:Gem::Dependency
59
+ name: ZenTest
60
+ requirement: &70289032094060 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70289032094060
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: rest-client
60
- requirement: &70212724983620 !ruby/object:Gem::Requirement
71
+ requirement: &70289032093020 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :runtime
67
78
  prerelease: false
68
- version_requirements: *70212724983620
79
+ version_requirements: *70289032093020
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: json
71
- requirement: &70212724982560 !ruby/object:Gem::Requirement
82
+ requirement: &70289032092480 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,7 +87,7 @@ dependencies:
76
87
  version: '0'
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *70212724982560
90
+ version_requirements: *70289032092480
80
91
  description: Provides integration with the Fat Zebra internet payment gateway (www.fatzebra.com.au),
81
92
  including purchase, refund, auth, capture and recurring billing functionality.
82
93
  email:
@@ -86,6 +97,7 @@ extensions: []
86
97
  extra_rdoc_files: []
87
98
  files:
88
99
  - .gitignore
100
+ - .rspec
89
101
  - .travis.yml
90
102
  - FatZebra.gemspec
91
103
  - Gemfile
@@ -96,6 +108,7 @@ files:
96
108
  - lib/fat_zebra/errors.rb
97
109
  - lib/fat_zebra/gateway.rb
98
110
  - lib/fat_zebra/models/base.rb
111
+ - lib/fat_zebra/models/card.rb
99
112
  - lib/fat_zebra/models/purchase.rb
100
113
  - lib/fat_zebra/models/refund.rb
101
114
  - lib/fat_zebra/models/response.rb
@@ -120,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
133
  version: '0'
121
134
  segments:
122
135
  - 0
123
- hash: -4020829074121266006
136
+ hash: 1093919880626549256
124
137
  required_rubygems_version: !ruby/object:Gem::Requirement
125
138
  none: false
126
139
  requirements:
@@ -129,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
142
  version: '0'
130
143
  segments:
131
144
  - 0
132
- hash: -4020829074121266006
145
+ hash: 1093919880626549256
133
146
  requirements: []
134
147
  rubyforge_project: fat_zebra
135
148
  rubygems_version: 1.8.10