mollom 0.1.3 → 0.1.4

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.
Files changed (3) hide show
  1. data/lib/mollom.rb +28 -7
  2. data/test/mollom_test.rb +49 -11
  3. metadata +3 -3
data/lib/mollom.rb CHANGED
@@ -7,6 +7,10 @@ require 'base64'
7
7
 
8
8
  class Mollom
9
9
  API_VERSION = '1.0'
10
+ STATIC_SERVER_LIST = [{:proto => 'http', :host => 'xmlrpc3.mollom.com'},
11
+ {:proto => 'http', :host => 'xmlrpc2.mollom.com'},
12
+ {:proto => 'http', :host => 'xmlrpc1.mollom.com'}].freeze
13
+
10
14
  module Errors
11
15
  Standard = 1000
12
16
  Refresh = 1100
@@ -14,7 +18,6 @@ class Mollom
14
18
  end
15
19
 
16
20
  attr_accessor :private_key, :public_key
17
- attr_writer :server_list
18
21
 
19
22
  # Creates a new Mollom object. Takes +private_key+ and +public_key+ as keys.
20
23
  #
@@ -123,20 +126,38 @@ class Mollom
123
126
  # Takes an optional parameter +refresh+, which resets the cached value.
124
127
  #
125
128
  # mollom.server_list
126
- # # => [{:proto=>"http", :ip=>"88.151.243.81"}, {:proto=>"http", :ip=>"82.103.131.136"}]
129
+ # # => [{:proto=>"http", :host=>"88.151.243.81"}, {:proto=>"http", :host=>"82.103.131.136"}]
127
130
  def server_list refresh = false
128
- @server_list = nil if refresh
129
- @server_list ||= XMLRPC::Client.new("xmlrpc.mollom.com", "/#{API_VERSION}").call('mollom.getServerList', authentication_hash).collect do |server|
130
- proto, ip = server.split('://')
131
- {:proto => proto, :ip => ip}
131
+ return @server_list if @server_list && refresh
132
+ STATIC_SERVER_LIST.each do |static_server|
133
+ @server_list = get_server_list_from(static_server)
134
+ return @server_list if @server_list
135
+ end
136
+ # Should have returned a server_list here..
137
+ raise(Error.new("Can't get mollom server-list"))
138
+ end
139
+
140
+ def server_list=(list)
141
+ # Check if we get an actual serverlist-array
142
+ if list.is_a?(Array) && list.all? {|hash| hash.has_key?(:host) && hash.has_key?(:proto) }
143
+ @server_list = list
132
144
  end
133
145
  end
134
146
 
135
147
  private
148
+ def get_server_list_from(server)
149
+ XMLRPC::Client.new(server[:host], "/#{API_VERSION}").call('mollom.getServerList', authentication_hash).collect do |server|
150
+ proto, ip = server.split('://')
151
+ {:proto => proto, :host => ip}
152
+ end
153
+ rescue
154
+ nil
155
+ end
156
+
136
157
  def send_command(command, data = {})
137
158
  server_list.each do |server|
138
159
  begin
139
- return XMLRPC::Client.new(server[:ip], "/#{API_VERSION}").call(command, data.merge(authentication_hash))
160
+ return XMLRPC::Client.new(server[:host], "/#{API_VERSION}").call(command, data.merge(authentication_hash))
140
161
  # TODO: Rescue more stuff (Connection Timeout and such)
141
162
  rescue XMLRPC::FaultException => error
142
163
  case error.faultCode
data/test/mollom_test.rb CHANGED
@@ -34,25 +34,63 @@ class TestMollom < Test::Unit::TestCase
34
34
  end
35
35
 
36
36
  def test_server_list
37
+ Mollom.any_instance.expects(:get_server_list_from).with(:host => 'xmlrpc3.mollom.com', :proto => 'http').returns([{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'https'}])
38
+ assert_equal [{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'https'}], @mollom.server_list
39
+ end
40
+
41
+ def test_server_list_with_first_server_bad
42
+ Mollom.any_instance.expects(:get_server_list_from).with(:host => 'xmlrpc3.mollom.com', :proto => 'http').returns(nil)
43
+ Mollom.any_instance.expects(:get_server_list_from).with(:host => 'xmlrpc2.mollom.com', :proto => 'http').returns([{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'https'}])
44
+ assert_equal [{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'https'}], @mollom.server_list
45
+ end
46
+
47
+ def test_server_list_with_all_servers_bad
48
+ Mollom.any_instance.expects(:get_server_list_from).with(:host => 'xmlrpc3.mollom.com', :proto => 'http').returns(nil)
49
+ Mollom.any_instance.expects(:get_server_list_from).with(:host => 'xmlrpc2.mollom.com', :proto => 'http').returns(nil)
50
+ Mollom.any_instance.expects(:get_server_list_from).with(:host => 'xmlrpc1.mollom.com', :proto => 'http').returns(nil)
51
+ assert_raise(Mollom::Error) { @mollom.server_list }
52
+ end
53
+
54
+ def test_get_server_list_from_with_ok_return
37
55
  xml_rpc = mock
38
- xml_rpc.expects(:call).with('mollom.getServerList', is_a(Hash)).returns(['http://172.16.0.1', 'http://172.16.0.2', 'https://172.16.0.2'])
39
- XMLRPC::Client.expects(:new).with('xmlrpc.mollom.com', '/1.0').returns(xml_rpc)
40
-
41
- assert_equal [{:ip => '172.16.0.1', :proto => 'http'}, {:ip => '172.16.0.2', :proto => 'http'}, {:ip => '172.16.0.2', :proto => 'https'}], @mollom.server_list
56
+ xml_rpc.expects(:call).times(1).with('mollom.getServerList', is_a(Hash)).returns(['http://172.16.0.1', 'http://172.16.0.2', 'https://172.16.0.2'])
57
+ XMLRPC::Client.stubs(:new).with('xmlrpc.mollom.com', '/1.0').returns(xml_rpc)
58
+ assert_equal([{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'https'}], @mollom.send(:get_server_list_from, {:host => 'xmlrpc.mollom.com', :proto => 'http'}))
42
59
  end
43
60
 
44
- def test_server_list_force_reload
61
+ def test_get_server_list_from_with_raising_return
45
62
  xml_rpc = mock
46
- xml_rpc.expects(:call).times(2).with('mollom.getServerList', is_a(Hash)).returns(['http://172.16.0.1', 'http://172.16.0.2', 'https://172.16.0.2'])
63
+ xml_rpc.expects(:call).times(1).with('mollom.getServerList', is_a(Hash)).raises(XMLRPC::FaultException.new(1000, "Broken mollom"))
47
64
  XMLRPC::Client.stubs(:new).with('xmlrpc.mollom.com', '/1.0').returns(xml_rpc)
65
+ assert_equal(nil, @mollom.send(:get_server_list_from, {:host => 'xmlrpc.mollom.com', :proto => 'http'}))
66
+ end
67
+
68
+ def test_server_list_force_reload
69
+ Mollom.any_instance.expects(:get_server_list_from).times(2).with(:host => 'xmlrpc3.mollom.com', :proto => 'http').returns([{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'https'}])
48
70
 
49
71
  @mollom.server_list
50
72
  @mollom.server_list
51
73
  @mollom.server_list(true)
52
74
  end
53
75
 
76
+ def test_server_list_setter_with_good_list
77
+ @mollom.server_list = [{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}]
78
+ assert_equal [{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}], @mollom.instance_variable_get('@server_list')
79
+ end
80
+
81
+ def test_send_command_with_old_server_list
82
+ @mollom.server_list = [{:ip => '172.16.0.1', :proto => 'http'}, {:ip => '172.16.0.2', :proto => 'http'}]
83
+ assert_equal nil, @mollom.instance_variable_get('@server_list')
84
+ end
85
+
86
+ def test_send_command_with_bad_server_list
87
+ @mollom.server_list = "404 Not Found Bad User Input"
88
+ assert_equal nil, @mollom.instance_variable_get('@server_list')
89
+ end
90
+
91
+
54
92
  def test_send_command_with_good_server
55
- Mollom.any_instance.expects(:server_list).returns([{:ip => '172.16.0.1', :proto => 'http'}])
93
+ Mollom.any_instance.expects(:server_list).returns([{:host => '172.16.0.1', :proto => 'http'}])
56
94
  xml_rpc = mock
57
95
  xml_rpc.expects(:call).with('mollom.testMessage', has_entry(:options => 'foo'))
58
96
  XMLRPC::Client.expects(:new).with('172.16.0.1', '/1.0').returns(xml_rpc)
@@ -62,7 +100,7 @@ class TestMollom < Test::Unit::TestCase
62
100
 
63
101
 
64
102
  def test_send_command_with_bad_server
65
- Mollom.any_instance.expects(:server_list).returns([{:ip => '172.16.0.1', :proto => 'http'}, {:ip => '172.16.0.2', :proto => 'http'}])
103
+ Mollom.any_instance.expects(:server_list).returns([{:host => '172.16.0.1', :proto => 'http'}, {:host => '172.16.0.2', :proto => 'http'}])
66
104
  xml_rpc = mock
67
105
  xml_rpc.expects(:call).with('mollom.testMessage', has_entry(:options => 'foo')).raises(XMLRPC::FaultException.new(1200, "Redirect"))
68
106
  xml_rpc2 = mock
@@ -74,7 +112,7 @@ class TestMollom < Test::Unit::TestCase
74
112
  end
75
113
 
76
114
  def test_send_command_with_reload_exception
77
- Mollom.any_instance.stubs(:server_list).returns([{:ip => '172.16.0.1', :proto => 'http'}], [{:ip => '172.16.0.2', :proto => 'http'}])
115
+ Mollom.any_instance.stubs(:server_list).returns([{:host => '172.16.0.1', :proto => 'http'}], [{:host => '172.16.0.2', :proto => 'http'}])
78
116
  xml_rpc = mock
79
117
  xml_rpc.expects(:call).with('mollom.testMessage', has_entry(:options => 'foo')).raises(XMLRPC::FaultException.new(1100, "Refresh"))
80
118
  xml_rpc2 = mock
@@ -86,7 +124,7 @@ class TestMollom < Test::Unit::TestCase
86
124
  end
87
125
 
88
126
  def test_send_command_with_bad_command
89
- Mollom.any_instance.expects(:server_list).returns([{:ip => '172.16.0.1', :proto => 'http'}])
127
+ Mollom.any_instance.expects(:server_list).returns([{:host => '172.16.0.1', :proto => 'http'}])
90
128
  xml_rpc = mock
91
129
  xml_rpc.expects(:call).with('mollom.testMessage', has_entry(:options => 'foo')).raises(XMLRPC::FaultException.new(1000, "Fault String"))
92
130
  XMLRPC::Client.expects(:new).with('172.16.0.1', '/1.0').returns(xml_rpc)
@@ -95,7 +133,7 @@ class TestMollom < Test::Unit::TestCase
95
133
  end
96
134
 
97
135
  def test_send_command_with_bad_server_and_no_more_available
98
- Mollom.any_instance.expects(:server_list).returns([{:ip => '172.16.0.1', :proto => 'http'}])
136
+ Mollom.any_instance.expects(:server_list).returns([{:host => '172.16.0.1', :proto => 'http'}])
99
137
  xml_rpc = mock
100
138
  xml_rpc.expects(:call).with('mollom.testMessage', has_entry(:options => 'foo')).raises(XMLRPC::FaultException.new(1200, "Redirect"))
101
139
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mollom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan De Poorter
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-17 00:00:00 +02:00
12
+ date: 2008-09-25 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
46
  requirements: []
47
47
 
48
48
  rubyforge_project: mollom
49
- rubygems_version: 1.1.1
49
+ rubygems_version: 1.2.0
50
50
  signing_key:
51
51
  specification_version: 2
52
52
  summary: Ruby class for easy interfacing with the mollom.com open API for spam detection and content quality assesment.