bsm-openx 1.9.2 → 1.9.3

Sign up to get free protection for your applications and to get access to all the features.
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