bsm-openx 1.9.2 → 1.9.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/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  *.swp
2
2
  .svn/
3
+ .bundle
3
4
  pkg/
data/Gemfile CHANGED
@@ -4,4 +4,5 @@ group :test do
4
4
  gem 'activesupport', :require => 'active_support/test_case'
5
5
  gem 'rake'
6
6
  gem 'jeweler'
7
+ gem 'mocha'
7
8
  end
data/Gemfile.lock CHANGED
@@ -9,6 +9,8 @@ GEM
9
9
  git (>= 1.2.5)
10
10
  rubyforge (>= 2.0.0)
11
11
  json_pure (1.4.6)
12
+ mocha (0.9.8)
13
+ rake
12
14
  rake (0.8.7)
13
15
  rubyforge (2.0.4)
14
16
  json_pure (>= 1.1.7)
@@ -19,4 +21,5 @@ PLATFORMS
19
21
  DEPENDENCIES
20
22
  activesupport
21
23
  jeweler
24
+ mocha
22
25
  rake
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.2
1
+ 1.9.3
data/bsm-openx.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bsm-openx}
8
- s.version = "1.9.2"
8
+ s.version = "1.9.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aaron Patterson", "Andy Smith", "TouchLocal P/L", "Dimitrij Denissenko"]
12
- s.date = %q{2010-09-09}
12
+ s.date = %q{2010-09-13}
13
13
  s.description = %q{A Ruby interface to the OpenX XML-RPC API}
14
14
  s.email = %q{dimitrij@blacksquaremedia.com}
15
15
  s.extra_rdoc_files = [
@@ -55,6 +55,8 @@ Gem::Specification.new do |s|
55
55
  "test/test_session.rb",
56
56
  "test/test_targeting_rule.rb",
57
57
  "test/test_targeting_rules.rb",
58
+ "test/test_xmlrpc_client.rb",
59
+ "test/test_xmlrpc_session_client.rb",
58
60
  "test/test_zone.rb"
59
61
  ]
60
62
  s.homepage = %q{http://github.com/bsm/openx}
@@ -63,7 +65,8 @@ Gem::Specification.new do |s|
63
65
  s.rubygems_version = %q{1.3.7}
64
66
  s.summary = %q{A Ruby interface to the OpenX XML-RPC API}
65
67
  s.test_files = [
66
- "test/test_openx.rb",
68
+ "test/test_xmlrpc_session_client.rb",
69
+ "test/test_openx.rb",
67
70
  "test/test_channel.rb",
68
71
  "test/test_targeting_rule.rb",
69
72
  "test/test_zone.rb",
@@ -76,6 +79,7 @@ Gem::Specification.new do |s|
76
79
  "test/test_services.rb",
77
80
  "test/test_banner.rb",
78
81
  "test/test_targeting_rules.rb",
82
+ "test/test_xmlrpc_client.rb",
79
83
  "test/test_publisher.rb"
80
84
  ]
81
85
 
@@ -24,8 +24,7 @@ module OpenX
24
24
  def create(user, password)
25
25
  self.user = user
26
26
  self.password = password
27
- self.id = @client.call('ox.logon', user, password)
28
- self
27
+ recreate!
29
28
  end
30
29
 
31
30
  def recreate!
@@ -39,6 +38,7 @@ module OpenX
39
38
  self.id = nil
40
39
  self
41
40
  end
41
+
42
42
  end
43
43
  end
44
44
  end
@@ -74,13 +74,13 @@ module OpenX
74
74
  update 'comparison' => '!x', 'data' => convert(value)
75
75
  end
76
76
 
77
- def include?(*value)
78
- update 'comparison' => '=~', 'data' => convert(value)
77
+ def include?(*values)
78
+ update 'comparison' => '=~', 'data' => convert(values)
79
79
  end
80
80
  alias_method :contains?, :include?
81
81
 
82
- def exclude?(*value)
83
- update 'comparison' => '!~', 'data' => convert(value)
82
+ def exclude?(*values)
83
+ update 'comparison' => '!~', 'data' => convert(values)
84
84
  end
85
85
  alias_method :does_not_contain?, :exclude?
86
86
 
@@ -2,29 +2,31 @@ require 'xmlrpc/client'
2
2
 
3
3
  module OpenX
4
4
 
5
- unless defined? HTTPBroken
6
- # A module that captures all the possible Net::HTTP exceptions
7
- # from http://pastie.org/pastes/145154
8
- module HTTPBroken; end
9
- [
10
- Timeout::Error, Errno::EINVAL, Errno::EPIPE,
11
- Errno::ECONNRESET, EOFError, Net::HTTPBadResponse,
12
- Net::HTTPHeaderSyntaxError, Net::ProtocolError
13
- ].each {|m| m.send(:include, HTTPBroken) }
14
- end
15
-
16
5
  class XmlrpcClient
6
+ EXCEPTION_CLASSES = [
7
+ ::Timeout::Error,
8
+ ::Errno::EINVAL,
9
+ ::Errno::EPIPE,
10
+ ::Errno::ECONNRESET,
11
+ ::EOFError,
12
+ ::Net::HTTPBadResponse,
13
+ ::Net::HTTPHeaderSyntaxError,
14
+ ::Net::ProtocolError
15
+ ].freeze
16
+
17
17
  attr_reader :client, :url
18
18
 
19
19
  def initialize(url)
20
- @url = url
20
+ @url = url
21
+ @retries = 0
21
22
  init_client!
22
23
  end
23
24
 
24
25
  def call(method, *args)
25
- @client.call(method, *convert(args))
26
- rescue HTTPBroken
27
- raise unless OpenX.configuration['retry']
26
+ @client.call(method, *(convert(args)))
27
+ rescue *EXCEPTION_CLASSES => e
28
+ cycle = (cycle || 0) + 1
29
+ raise(e) if cycle > 10 || OpenX.configuration['retry'] == false
28
30
  init_client!
29
31
  retry
30
32
  end
@@ -56,8 +58,9 @@ module OpenX
56
58
 
57
59
  def call(method, *args)
58
60
  super
59
- rescue XMLRPC::FaultException => error
60
- raise unless error.message =~ /Session ID.*invalid/i
61
+ rescue XMLRPC::FaultException => e
62
+ cycle = (cycle || 0) + 1
63
+ raise(e) if cycle > 10 || e.message !~ /Session ID.*invalid/i
61
64
  session.recreate!
62
65
  retry
63
66
  end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+ require 'xmlrpc/client'
3
+
4
+ class XmlrpcClientTest < OpenX::TestCase
5
+
6
+ def client
7
+ @client ||= OpenX::XmlrpcClient.new("http://example.com/random/path")
8
+ end
9
+
10
+ def stub_xrc
11
+ stub(:call => nil, :timeout= => 10)
12
+ end
13
+
14
+ test "initialize" do
15
+ assert_equal "http://example.com/random/path", client.url
16
+ assert_instance_of XMLRPC::Client, client.client
17
+ end
18
+
19
+ test "call forwarding" do
20
+ client.client.expects(:call).with('ox.getAgency', 1)
21
+ client.call('ox.getAgency', 1)
22
+ end
23
+
24
+ test "call rescueing" do
25
+ a, b, c = stub_xrc, stub_xrc, stub_xrc
26
+ ::XMLRPC::Client.stubs(:new2).returns(a, b, c)
27
+
28
+ a.expects(:call).with('ox.getAgency', 1).once.raises(Net::HTTPBadResponse, 'Bad response')
29
+ b.expects(:call).with('ox.getAgency', 1).once.raises(Errno::EPIPE, 'Other problem')
30
+ client.call('ox.getAgency', 1)
31
+
32
+ assert_not_equal client.client, a
33
+ assert_not_equal client.client, b
34
+ assert_equal client.client, c
35
+ end
36
+
37
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+ require 'xmlrpc/client'
3
+
4
+ class XmlrpcSessionClientTest < OpenX::TestCase
5
+
6
+ def client
7
+ @client ||= OpenX::XmlrpcSessionClient.new(stub_session)
8
+ end
9
+
10
+ def stub_session
11
+ stub(:url => "http://example.com/random/path", :id => 33)
12
+ end
13
+
14
+ def stub_xrc
15
+ stub(:call => nil, :timeout= => 10)
16
+ end
17
+
18
+ test "call forwarding" do
19
+ client.client.expects(:call).with('ox.getAgency', 33, 1)
20
+ client.call('ox.getAgency', 1)
21
+ end
22
+
23
+ test "call rescueing" do
24
+ a, b = stub_xrc, stub_xrc
25
+ ::XMLRPC::Client.stubs(:new2).returns(a, b)
26
+
27
+ a.expects(:call).once.raises(Net::HTTPBadResponse, 'Bad response')
28
+ b.expects(:call).once.raises(XMLRPC::FaultException.new(0, 'session id is invalid'))
29
+ client.session.expects(:recreate!).once
30
+
31
+ client.call('ox.getAgency', 1)
32
+ assert_not_equal client.client, a
33
+ assert_equal client.client, b
34
+ end
35
+
36
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bsm-openx
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 53
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 9
9
- - 2
10
- version: 1.9.2
9
+ - 3
10
+ version: 1.9.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aaron Patterson
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2010-09-09 00:00:00 +01:00
21
+ date: 2010-09-13 00:00:00 +01:00
22
22
  default_executable:
23
23
  dependencies: []
24
24
 
@@ -70,6 +70,8 @@ files:
70
70
  - test/test_session.rb
71
71
  - test/test_targeting_rule.rb
72
72
  - test/test_targeting_rules.rb
73
+ - test/test_xmlrpc_client.rb
74
+ - test/test_xmlrpc_session_client.rb
73
75
  - test/test_zone.rb
74
76
  has_rdoc: true
75
77
  homepage: http://github.com/bsm/openx
@@ -106,6 +108,7 @@ signing_key:
106
108
  specification_version: 3
107
109
  summary: A Ruby interface to the OpenX XML-RPC API
108
110
  test_files:
111
+ - test/test_xmlrpc_session_client.rb
109
112
  - test/test_openx.rb
110
113
  - test/test_channel.rb
111
114
  - test/test_targeting_rule.rb
@@ -119,4 +122,5 @@ test_files:
119
122
  - test/test_services.rb
120
123
  - test/test_banner.rb
121
124
  - test/test_targeting_rules.rb
125
+ - test/test_xmlrpc_client.rb
122
126
  - test/test_publisher.rb