chargify2 0.1.0 → 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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/chargify2.gemspec ADDED
@@ -0,0 +1,105 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{chargify2}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Michael Klett"]
12
+ s.date = %q{2011-04-20}
13
+ s.description = %q{}
14
+ s.email = %q{michael@webadvocate.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "chargify2.gemspec",
29
+ "lib/chargify2.rb",
30
+ "lib/chargify2/client.rb",
31
+ "lib/chargify2/direct.rb",
32
+ "lib/chargify2/representations/call.rb",
33
+ "lib/chargify2/resource.rb",
34
+ "lib/chargify2/resources/call_resource.rb",
35
+ "lib/chargify2/utils.rb",
36
+ "spec/call_resource_spec.rb",
37
+ "spec/client_spec.rb",
38
+ "spec/direct_response_parameters_spec.rb",
39
+ "spec/direct_secure_parameters_spec.rb",
40
+ "spec/direct_spec.rb",
41
+ "spec/spec_helper.rb",
42
+ "spec/support/spec_helper_methods.rb"
43
+ ]
44
+ s.homepage = %q{http://github.com/chargify/chargify2}
45
+ s.licenses = ["MIT"]
46
+ s.require_paths = ["lib"]
47
+ s.rubygems_version = %q{1.3.7}
48
+ s.summary = %q{Chargify API V2 Ruby Wrapper}
49
+ s.test_files = [
50
+ "spec/call_resource_spec.rb",
51
+ "spec/client_spec.rb",
52
+ "spec/direct_response_parameters_spec.rb",
53
+ "spec/direct_secure_parameters_spec.rb",
54
+ "spec/direct_spec.rb",
55
+ "spec/spec_helper.rb",
56
+ "spec/support/spec_helper_methods.rb"
57
+ ]
58
+
59
+ if s.respond_to? :specification_version then
60
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
61
+ s.specification_version = 3
62
+
63
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
64
+ s.add_runtime_dependency(%q<httparty>, [">= 0"])
65
+ s.add_runtime_dependency(%q<addressable>, [">= 0"])
66
+ s.add_runtime_dependency(%q<hashie>, [">= 0"])
67
+ s.add_runtime_dependency(%q<hashery>, [">= 0"])
68
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
69
+ s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
70
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
71
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
72
+ s.add_development_dependency(%q<rcov>, [">= 0"])
73
+ s.add_development_dependency(%q<webmock>, [">= 0"])
74
+ s.add_development_dependency(%q<vcr>, [">= 0"])
75
+ s.add_development_dependency(%q<capybara>, [">= 0"])
76
+ else
77
+ s.add_dependency(%q<httparty>, [">= 0"])
78
+ s.add_dependency(%q<addressable>, [">= 0"])
79
+ s.add_dependency(%q<hashie>, [">= 0"])
80
+ s.add_dependency(%q<hashery>, [">= 0"])
81
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
82
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
83
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
84
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
85
+ s.add_dependency(%q<rcov>, [">= 0"])
86
+ s.add_dependency(%q<webmock>, [">= 0"])
87
+ s.add_dependency(%q<vcr>, [">= 0"])
88
+ s.add_dependency(%q<capybara>, [">= 0"])
89
+ end
90
+ else
91
+ s.add_dependency(%q<httparty>, [">= 0"])
92
+ s.add_dependency(%q<addressable>, [">= 0"])
93
+ s.add_dependency(%q<hashie>, [">= 0"])
94
+ s.add_dependency(%q<hashery>, [">= 0"])
95
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
96
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
97
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
98
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
99
+ s.add_dependency(%q<rcov>, [">= 0"])
100
+ s.add_dependency(%q<webmock>, [">= 0"])
101
+ s.add_dependency(%q<vcr>, [">= 0"])
102
+ s.add_dependency(%q<capybara>, [">= 0"])
103
+ end
104
+ end
105
+
@@ -11,8 +11,8 @@ module Chargify2
11
11
  SecureParameters.new(params, client)
12
12
  end
13
13
 
14
- def result(params = {})
15
- Result.new(params, client)
14
+ def response_parameters(params = {})
15
+ ResponseParameters.new(params, client)
16
16
  end
17
17
 
18
18
  def self.signature(message, secret)
@@ -90,14 +90,16 @@ module Chargify2
90
90
  end
91
91
 
92
92
  unless api_id && secret && api_id.to_s.length > 0 && secret.to_s.length > 0
93
- # raise ArgumentError
93
+ raise ArgumentError.new("SecureParameters require connection to a Client - was one given?")
94
94
  end
95
95
  end
96
96
  end
97
97
 
98
- # There is no need to instantiate a Result instance directly. Use Direct#results instead.
99
- class Result
98
+ # There is no need to instantiate a ResponseParameters instance directly. Use Direct#response_parameters instead.
99
+ class ResponseParameters
100
100
  attr_reader :api_id
101
+ attr_reader :timestamp
102
+ attr_reader :nonce
101
103
  attr_reader :status_code
102
104
  attr_reader :result_code
103
105
  attr_reader :call_id
@@ -111,13 +113,17 @@ module Chargify2
111
113
  @secret = client.api_secret
112
114
 
113
115
  @status_code = args[:status_code]
116
+ @timestamp = args[:timestamp]
117
+ @nonce = args[:nonce]
114
118
  @result_code = args[:result_code]
115
119
  @call_id = args[:call_id]
116
120
  @signature = args[:signature]
121
+
122
+ validate_args
117
123
  end
118
124
 
119
125
  def verified?
120
- message = "#{api_id}#{status_code}#{result_code}#{call_id}"
126
+ message = "#{api_id}#{timestamp}#{nonce}#{status_code}#{result_code}#{call_id}"
121
127
  Direct.signature(message, secret) == signature
122
128
  end
123
129
 
@@ -128,8 +134,8 @@ module Chargify2
128
134
  private
129
135
 
130
136
  def validate_args
131
- if data && !data.is_a?(Hash)
132
- raise ArgumentError.new("The 'data' must be provided as a Hash (you passed a #{data.class})")
137
+ unless api_id && secret && api_id.to_s.length > 0 && secret.to_s.length > 0
138
+ raise ArgumentError.new("ResponseParameters require connection to a Client - was one given?")
133
139
  end
134
140
  end
135
141
  end
@@ -45,7 +45,7 @@ module Chargify2
45
45
 
46
46
  def self.read(id, query = {})
47
47
  response = get("#{uri}/#{id}", :query => query.empty? ? nil : query)
48
- response_hash = response.parsed_response[representation.to_s.downcase.split('::').last] || {}
48
+ response_hash = response[representation.to_s.downcase.split('::').last] || {}
49
49
  representation.new(response_hash.symbolize_keys)
50
50
  end
51
51
 
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ module Chargify2
4
+ describe Direct::ResponseParameters do
5
+ let(:client) { Client.new(valid_client_credentials) }
6
+
7
+ it "raises an argument error if it could not get an api_id and secret from the passed client" do
8
+ lambda {
9
+ Direct::SecureParameters.new({}, OpenCascade.new)
10
+ }.should raise_error(ArgumentError)
11
+ end
12
+
13
+ describe "#verified?" do
14
+ before(:each) do
15
+ @api_id = valid_client_credentials[:api_id]
16
+ @timestamp = '1303245326'
17
+ @nonce = @api_id
18
+ @status_code = '200'
19
+ @result_code = '2000'
20
+ @call_id = 'blah'
21
+
22
+ # Used the generator here: http://hash.online-convert.com/sha1-generator
23
+ # ... with message: "1c016050-498a-012e-91b1-005056a216ab13032453261c016050-498a-012e-91b1-005056a216ab2002000blah"
24
+ # ... and secret: "p5lxQ804MYtwZecFWNOT"
25
+ # ... to get: "cfce3418f5fc4454a309fe01c918b90916d6c36a"
26
+ @signature = "cfce3418f5fc4454a309fe01c918b90916d6c36a"
27
+ end
28
+
29
+ it "returns true when all of the expected params are present and the signature matches the calculated signature" do
30
+ rp = Direct::ResponseParameters.new({
31
+ 'api_id' => @api_id,
32
+ 'timestamp' => @timestamp,
33
+ 'nonce' => @nonce,
34
+ 'status_code' => @status_code,
35
+ 'result_code' => @result_code,
36
+ 'call_id' => @call_id,
37
+ 'signature' => @signature
38
+ }, client)
39
+
40
+ rp.verified?.should be_true
41
+ end
42
+
43
+ it "returns false when the calculated signature of the result params is different from the received signature" do
44
+ rp = Direct::ResponseParameters.new({
45
+ 'api_id' => @api_id,
46
+ 'timestamp' => @timestamp,
47
+ 'nonce' => @nonce,
48
+ 'status_code' => @status_code,
49
+ 'result_code' => @result_code,
50
+ 'call_id' => @call_id,
51
+ 'signature' => 'foo'
52
+ }, client)
53
+
54
+ rp.verified?.should be_false
55
+ end
56
+
57
+ it "returns false when the calculated signature is correct but the api_id does not match the client's" do
58
+ other_client_credentials = valid_client_credentials.merge(:api_id => '1')
59
+ other_client = Client.new(other_client_credentials)
60
+
61
+ rp = Direct::ResponseParameters.new({
62
+ 'api_id' => @api_id,
63
+ 'timestamp' => @timestamp,
64
+ 'nonce' => @nonce,
65
+ 'status_code' => @status_code,
66
+ 'result_code' => @result_code,
67
+ 'call_id' => @call_id,
68
+ 'signature' => @signature
69
+ }, other_client)
70
+
71
+ rp.verified?.should be_false
72
+ end
73
+ end
74
+ end
75
+ end
@@ -12,7 +12,7 @@ module Chargify2
12
12
 
13
13
  it "raises an argument error if it could not get an api_id and secret from the passed client" do
14
14
  lambda {
15
- Direct::SecureParameters.new({'data' => 'string'}, OpenCascade.new)
15
+ Direct::SecureParameters.new({}, OpenCascade.new)
16
16
  }.should raise_error(ArgumentError)
17
17
  end
18
18
 
data/spec/direct_spec.rb CHANGED
@@ -59,73 +59,11 @@ module Chargify2
59
59
  end
60
60
  end
61
61
 
62
- describe "#result" do
62
+ describe "#response_parameters" do
63
63
  let(:direct) { Direct.new(client) }
64
64
 
65
- it "generates a new Result instance given a hash of result params" do
66
- direct.result({}).should be_a(Direct::Result)
67
- end
68
- end
69
-
70
- describe Direct::Result do
71
- describe "#verified?" do
72
- it "returns true when the calculated signature of the result params matches the received signature" do
73
- api_id = '1c016050-498a-012e-91b1-005056a216ab'
74
- status_code = '200'
75
- result_code = '2000'
76
- call_id = '1234'
77
-
78
- # Used the generator here: http://hash.online-convert.com/sha1-generator
79
- # ... with message: "1c016050-498a-012e-91b1-005056a216ab20020001234"
80
- # ... and secret: "p5lxQ804MYtwZecFWNOT"
81
- # ... to get: "9d1b9139d6c49720faa0b2b6207c95060e6695d4"
82
- signature = "9d1b9139d6c49720faa0b2b6207c95060e6695d4"
83
-
84
- r = Direct::Result.new({
85
- 'api_id' => api_id,
86
- 'status_code' => status_code,
87
- 'result_code' => result_code,
88
- 'call_id' => call_id,
89
- 'signature' => signature}, client)
90
-
91
- r.verified?.should be_true
92
- end
93
-
94
- it "returns false when the calculated signature of the result params is different from the received signature" do
95
- r = Direct::Result.new({
96
- 'api_id' => client.api_id,
97
- 'status_code' => '2',
98
- 'result_code' => '3',
99
- 'call_id' => '4',
100
- 'signature' => '5'}, client)
101
-
102
- r.verified?.should be_false
103
- end
104
-
105
- it "returns false when the calculated signature is correct but the api_id does not match the client's'" do
106
- api_id = '1c016050-498a-012e-91b1-005056a216ab'
107
- status_code = '200'
108
- result_code = '2000'
109
- call_id = '1234'
110
-
111
- # Used the generator here: http://hash.online-convert.com/sha1-generator
112
- # ... with message: "1c016050-498a-012e-91b1-005056a216ab20020001234"
113
- # ... and secret: "p5lxQ804MYtwZecFWNOT"
114
- # ... to get: "9d1b9139d6c49720faa0b2b6207c95060e6695d4"
115
- signature = "9d1b9139d6c49720faa0b2b6207c95060e6695d4"
116
-
117
- client_credentials = valid_client_credentials
118
- client_credentials[:api_id] = '1234'
119
- different_client = Client.new(client_credentials)
120
- r = Direct::Result.new({
121
- 'api_id' => api_id,
122
- 'status_code' => status_code,
123
- 'result_code' => result_code,
124
- 'call_id' => call_id,
125
- 'signature' => signature}, different_client)
126
-
127
- r.verified?.should be_false
128
- end
65
+ it "generates a new ResponseParameters instance given a hash of response params" do
66
+ direct.response_parameters({}).should be_a(Direct::ResponseParameters)
129
67
  end
130
68
  end
131
69
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chargify2
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Klett
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-18 00:00:00 -04:00
18
+ date: 2011-04-20 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -212,6 +212,7 @@ files:
212
212
  - README.md
213
213
  - Rakefile
214
214
  - VERSION
215
+ - chargify2.gemspec
215
216
  - lib/chargify2.rb
216
217
  - lib/chargify2/client.rb
217
218
  - lib/chargify2/direct.rb
@@ -221,6 +222,7 @@ files:
221
222
  - lib/chargify2/utils.rb
222
223
  - spec/call_resource_spec.rb
223
224
  - spec/client_spec.rb
225
+ - spec/direct_response_parameters_spec.rb
224
226
  - spec/direct_secure_parameters_spec.rb
225
227
  - spec/direct_spec.rb
226
228
  - spec/spec_helper.rb
@@ -262,6 +264,7 @@ summary: Chargify API V2 Ruby Wrapper
262
264
  test_files:
263
265
  - spec/call_resource_spec.rb
264
266
  - spec/client_spec.rb
267
+ - spec/direct_response_parameters_spec.rb
265
268
  - spec/direct_secure_parameters_spec.rb
266
269
  - spec/direct_spec.rb
267
270
  - spec/spec_helper.rb