skles 1.0.2 → 1.0.3

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/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  source :rubygems
2
2
 
3
+ gem 'httpclient' # http adapter for savon
3
4
  gem 'savon'
4
5
 
5
6
  group :development do
data/Gemfile.lock CHANGED
@@ -2,26 +2,34 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  RedCloth (4.2.3)
5
- builder (3.0.0)
5
+ builder (2.1.2)
6
6
  crack (0.1.8)
7
7
  diff-lcs (1.1.2)
8
8
  git (1.2.5)
9
- jeweler (1.5.1)
9
+ gyoku (0.1.0)
10
+ builder (~> 2.1.2)
11
+ httpclient (2.1.6)
12
+ httpi (0.7.4)
13
+ rack
14
+ jeweler (1.5.2)
10
15
  bundler (~> 1.0.0)
11
16
  git (>= 1.2.5)
12
17
  rake
18
+ rack (1.2.1)
13
19
  rake (0.8.7)
14
20
  rspec (2.3.0)
15
21
  rspec-core (~> 2.3.0)
16
22
  rspec-expectations (~> 2.3.0)
17
23
  rspec-mocks (~> 2.3.0)
18
- rspec-core (2.3.0)
24
+ rspec-core (2.3.1)
19
25
  rspec-expectations (2.3.0)
20
26
  diff-lcs (~> 1.1.2)
21
27
  rspec-mocks (2.3.0)
22
- savon (0.7.9)
23
- builder (>= 2.1.2)
24
- crack (>= 0.1.4)
28
+ savon (0.8.0)
29
+ builder (~> 2.1.2)
30
+ crack (~> 0.1.8)
31
+ gyoku (>= 0.1.0)
32
+ httpi (>= 0.7.4)
25
33
  yard (0.6.3)
26
34
 
27
35
  PLATFORMS
@@ -29,6 +37,7 @@ PLATFORMS
29
37
 
30
38
  DEPENDENCIES
31
39
  RedCloth
40
+ httpclient
32
41
  jeweler
33
42
  rspec
34
43
  savon
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
data/lib/skles.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  require 'savon'
2
2
  require File.dirname(__FILE__) + '/skles_api'
3
3
 
4
- # can't have plaintext CC #s being logged
5
- Savon::Request.log = false
6
- # We have our own error raising
7
- Savon::Response.raise_errors = false
4
+ Savon.configure do |config|
5
+ config.log = false # can't have plaintext CC #s being logged
6
+ config.raise_errors = false # We have our own error raising
7
+ end
8
8
 
9
9
  # Client for the StrongKey Lite Encryption System (SKLES) SOAP-based API. An
10
10
  # instance of this API interfaces with your StrongKey Lite box to encrypt and
@@ -41,13 +41,18 @@ class StrongKeyLite
41
41
  # @option options [String] :login You can provide the login of a user who will
42
42
  # be used for all actions.
43
43
  # @option options [String] :password The password for this user.
44
- # @option options [Hash] :http Additional options to be given to the
45
- # @Net::HTTP@ object. The keys will be invoked as setter methods on the HTTP
46
- # object (_e.g._, passing @http: { timeout: 60 }@ will result in a call like
47
- # @http.timeout = 60@).
44
+ # @yield [http] HTTP configuration block.
45
+ # @yieldparam [HTTPI::Request] http The HTTP request object, for configuring.
46
+ # See the HTTPI gem documentation for more information.
47
+ #
48
+ # @example Setting a custom timeout
49
+ # StrongKeyLite.new(url, domain) { |http| http.read_timeout = 60 }
48
50
 
49
51
  def initialize(service_url, domain_id, options={})
50
- @client = Savon::Client.new("#{service_url}/strongkeyliteWAR/EncryptionService?wsdl")
52
+ @client = Savon::Client.new do |wsdl, http, wsse|
53
+ wsdl.document = "#{service_url}/strongkeyliteWAR/EncryptionService?wsdl"
54
+ yield http if block_given?
55
+ end
51
56
  options[:http].each { |key, val| @client.request.http.send :"#{key}=", val } if options[:http].kind_of?(Hash)
52
57
 
53
58
  self.domain_id = domain_id
@@ -123,7 +128,7 @@ class StrongKeyLite
123
128
  raise "No user has been assigned to action #{meth.inspect}" unless login
124
129
  password = @users[login]
125
130
 
126
- response = @client.send(meth) { |soap| soap.body = { did: domain_id, username: login, password: password }.merge(options) }
131
+ response = @client.request(:wsdl, meth) { |soap| soap.body = { did: domain_id, username: login, password: password }.merge(options) }
127
132
  raise SOAPError.new(response.soap_fault, response) if response.soap_fault?
128
133
  raise HTTPError.new(response.http_error, response) if response.http_error?
129
134
 
@@ -138,8 +143,8 @@ class StrongKeyLite
138
143
  attr_reader :response
139
144
 
140
145
  # @private
141
- def initialize(msg, response)
142
- super msg
146
+ def initialize(error, response)
147
+ super error.to_s
143
148
  @response = response
144
149
  end
145
150
  end
@@ -150,9 +155,9 @@ class StrongKeyLite
150
155
  attr_reader :code
151
156
 
152
157
  # @private
153
- def initialize(msg, response)
158
+ def initialize(fault, response)
154
159
  super
155
- if code_match = msg.match(/SKL-ERR-(\d+)/) then
160
+ if code_match = fault.to_s.match(/SKL-ERR-(\d+)/) then
156
161
  @code = code_match[1].try(:to_i)
157
162
  end
158
163
  end
data/skles.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{skles}
8
- s.version = "1.0.2"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tim Morgan"]
12
- s.date = %q{2010-12-14}
12
+ s.date = %q{2010-12-21}
13
13
  s.description = %q{A Ruby wrapper around the StrongKey Lite SOAP client API.}
14
14
  s.email = %q{git@timothymorgan.info}
15
15
  s.extra_rdoc_files = [
@@ -48,12 +48,14 @@ Gem::Specification.new do |s|
48
48
  s.specification_version = 3
49
49
 
50
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<httpclient>, [">= 0"])
51
52
  s.add_runtime_dependency(%q<savon>, [">= 0"])
52
53
  s.add_development_dependency(%q<jeweler>, [">= 0"])
53
54
  s.add_development_dependency(%q<yard>, [">= 0"])
54
55
  s.add_development_dependency(%q<RedCloth>, [">= 0"])
55
56
  s.add_development_dependency(%q<rspec>, [">= 0"])
56
57
  else
58
+ s.add_dependency(%q<httpclient>, [">= 0"])
57
59
  s.add_dependency(%q<savon>, [">= 0"])
58
60
  s.add_dependency(%q<jeweler>, [">= 0"])
59
61
  s.add_dependency(%q<yard>, [">= 0"])
@@ -61,6 +63,7 @@ Gem::Specification.new do |s|
61
63
  s.add_dependency(%q<rspec>, [">= 0"])
62
64
  end
63
65
  else
66
+ s.add_dependency(%q<httpclient>, [">= 0"])
64
67
  s.add_dependency(%q<savon>, [">= 0"])
65
68
  s.add_dependency(%q<jeweler>, [">= 0"])
66
69
  s.add_dependency(%q<yard>, [">= 0"])
@@ -12,7 +12,7 @@ describe StrongKeyLite::API do
12
12
  before :each do
13
13
  @time = mock('Time')
14
14
  Time.stub!(:parse).and_return(@time)
15
- @client.should_receive(:ping).once.and_return(@response)
15
+ @client.should_receive(:request).once.with(:wsdl, :ping).and_return(@response)
16
16
  end
17
17
 
18
18
  it "should parse the ping response" do
@@ -76,8 +76,8 @@ SKLES Domain 21 is alive!
76
76
  @response.stub(:to_hash).and_return(encrypt_response: { return: '123456' })
77
77
  soap = mock('Savon::SOAP')
78
78
  soap.should_receive(:body=).once.with(hash_including(plaintext: 'plaintext'))
79
-
80
- @client.should_receive(:encrypt).once.and_yield(soap).and_return(@response)
79
+
80
+ @client.should_receive(:request).once.with(:wsdl, :encrypt).and_yield(soap).and_return(@response)
81
81
 
82
82
  @skles.encrypt('plaintext').should eql('123456')
83
83
  end
@@ -92,7 +92,7 @@ SKLES Domain 21 is alive!
92
92
  soap = mock('Savon::SOAP')
93
93
  soap.should_receive(:body=).once.with(hash_including(token: '123456'))
94
94
 
95
- @client.should_receive(:decrypt).once.and_yield(soap).and_return(@response)
95
+ @client.should_receive(:request).once.with(:wsdl, :decrypt).and_yield(soap).and_return(@response)
96
96
 
97
97
  @skles.decrypt('123456').should eql('plaintext')
98
98
  end
@@ -107,7 +107,7 @@ SKLES Domain 21 is alive!
107
107
  soap = mock('Savon::SOAP')
108
108
  soap.should_receive(:body=).once.with(hash_including(token: '123456'))
109
109
 
110
- @client.should_receive(:delete).once.and_yield(soap).and_return(@response)
110
+ @client.should_receive(:request).once.with(:wsdl, :delete).and_yield(soap).and_return(@response)
111
111
 
112
112
  @skles.delete('123456').should be_true
113
113
  end
@@ -122,7 +122,7 @@ SKLES Domain 21 is alive!
122
122
  soap = mock('Savon::SOAP')
123
123
  soap.should_receive(:body=).once.with(hash_including(plaintext: 'plaintext'))
124
124
 
125
- @client.should_receive(:search).once.and_yield(soap).and_return(@response)
125
+ @client.should_receive(:request).once.with(:wsdl, :search).and_yield(soap).and_return(@response)
126
126
 
127
127
  @skles.search('plaintext').should eql('123456')
128
128
  end
data/spec/skles_spec.rb CHANGED
@@ -1,15 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe StrongKeyLite do
4
- before :each do
5
- @client = mock('Savon::Client', request: nil)
6
- Savon::Client.stub!(:new).and_return(@client)
7
- end
8
-
9
4
  describe "#initialize" do
10
5
  it "should accept a host for the WSDL" do
11
- Savon::Client.should_receive(:new).once.with("http://test.host/strongkeyliteWAR/EncryptionService?wsdl").and_return(@client)
12
- StrongKeyLite.new('http://test.host', 1)
6
+ StrongKeyLite.new('http://test.host', 1).instance_variable_get(:@client).wsdl.instance_variable_get(:@document).should eql("http://test.host/strongkeyliteWAR/EncryptionService?wsdl")
13
7
  end
14
8
 
15
9
  it "should set the domain ID" do
@@ -17,12 +11,7 @@ describe StrongKeyLite do
17
11
  end
18
12
 
19
13
  it "should accept and apply HTTP options" do
20
- http = mock('Net::HTTP')
21
- request = mock('Savon::Request', http: http)
22
- @client.stub!(:request).and_return(request)
23
-
24
- http.should_receive(:timeout=).once.with(60)
25
- StrongKeyLite.new('http://test.host', 1, http: { timeout: 60 })
14
+ StrongKeyLite.new('http://test.host', 1) { |http| http.read_timeout = 60 }.instance_variable_get(:@client).http.read_timeout.should eql(60)
26
15
  end
27
16
 
28
17
  it "should optionally accept a login and password" do
@@ -31,6 +20,11 @@ describe StrongKeyLite do
31
20
  end
32
21
 
33
22
  describe "#call" do
23
+ before :each do
24
+ @client = mock('Savon::Client', request: nil)
25
+ Savon::Client.stub!(:new).and_return(@client)
26
+ end
27
+
34
28
  before :each do
35
29
  @client = mock('Savon::Client', request: nil, wsdl: mock('Savon::WSDL', soap_actions: [ :ping ]))
36
30
  Savon::Client.stub!(:new).and_return(@client)
@@ -49,7 +43,7 @@ describe StrongKeyLite do
49
43
 
50
44
  soap = mock('Savon::Request')
51
45
  soap.should_receive(:body=).once.with({ did: 1, username: 'login', password: 'password' })
52
- @client.should_receive(:ping).once.and_yield(soap).and_return(@response)
46
+ @client.should_receive(:request).once.with(:wsdl, :ping).and_yield(soap).and_return(@response)
53
47
  @skles.ping
54
48
  end
55
49
 
@@ -58,7 +52,7 @@ describe StrongKeyLite do
58
52
 
59
53
  soap = mock('Savon::Request')
60
54
  soap.should_receive(:body=).once.with({ did: 1, username: 'all', password: 'password' })
61
- @client.should_receive(:ping).once.and_yield(soap).and_return(@response)
55
+ @client.should_receive(:request).once.with(:wsdl, :ping).and_yield(soap).and_return(@response)
62
56
  @skles.ping
63
57
  end
64
58
 
@@ -68,7 +62,7 @@ describe StrongKeyLite do
68
62
 
69
63
  soap = mock('Savon::Request')
70
64
  soap.should_receive(:body=).once.with({ did: 1, username: 'ping', password: 'password' })
71
- @client.should_receive(:ping).once.and_yield(soap).and_return(@response)
65
+ @client.should_receive(:request).once.with(:wsdl, :ping).and_yield(soap).and_return(@response)
72
66
  @skles.ping
73
67
  end
74
68
 
@@ -76,7 +70,7 @@ describe StrongKeyLite do
76
70
  @skles.add_user('all', 'password', :all)
77
71
  soap = mock('Savon::Request')
78
72
  soap.stub!(:body=)
79
- @client.stub!(:ping).and_yield(soap).and_return(@response)
73
+ @client.stub!(:request).and_yield(soap).and_return(@response)
80
74
  @response.stub!(:http_error?).and_return(true)
81
75
  @response.stub!(:http_error).and_return("404 Not Found")
82
76
 
@@ -87,7 +81,7 @@ describe StrongKeyLite do
87
81
  @skles.add_user('all', 'password', :all)
88
82
  soap = mock('Savon::Request')
89
83
  soap.stub!(:body=)
90
- @client.stub!(:ping).and_yield(soap).and_return(@response)
84
+ @client.stub!(:request).and_yield(soap).and_return(@response)
91
85
  @response.stub!(:soap_fault?).and_return(true)
92
86
  @response.stub!(:soap_fault).and_return("Not enough XML")
93
87
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 2
9
- version: 1.0.2
8
+ - 3
9
+ version: 1.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tim Morgan
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-14 00:00:00 -08:00
17
+ date: 2010-12-21 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: savon
21
+ name: httpclient
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
@@ -31,7 +31,7 @@ dependencies:
31
31
  prerelease: false
32
32
  version_requirements: *id001
33
33
  - !ruby/object:Gem::Dependency
34
- name: jeweler
34
+ name: savon
35
35
  requirement: &id002 !ruby/object:Gem::Requirement
36
36
  none: false
37
37
  requirements:
@@ -40,11 +40,11 @@ dependencies:
40
40
  segments:
41
41
  - 0
42
42
  version: "0"
43
- type: :development
43
+ type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: *id002
46
46
  - !ruby/object:Gem::Dependency
47
- name: yard
47
+ name: jeweler
48
48
  requirement: &id003 !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
@@ -57,7 +57,7 @@ dependencies:
57
57
  prerelease: false
58
58
  version_requirements: *id003
59
59
  - !ruby/object:Gem::Dependency
60
- name: RedCloth
60
+ name: yard
61
61
  requirement: &id004 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
@@ -70,7 +70,7 @@ dependencies:
70
70
  prerelease: false
71
71
  version_requirements: *id004
72
72
  - !ruby/object:Gem::Dependency
73
- name: rspec
73
+ name: RedCloth
74
74
  requirement: &id005 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
@@ -82,6 +82,19 @@ dependencies:
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: *id005
85
+ - !ruby/object:Gem::Dependency
86
+ name: rspec
87
+ requirement: &id006 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: *id006
85
98
  description: A Ruby wrapper around the StrongKey Lite SOAP client API.
86
99
  email: git@timothymorgan.info
87
100
  executables: []