vikinggem 0.0.1
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/.autotest +29 -0
- data/.gitignore +6 -0
- data/History.txt +4 -0
- data/Manifest.txt +25 -0
- data/README.markdown +32 -0
- data/README.txt +30 -0
- data/Rakefile +4 -0
- data/config/requirements.rb +15 -0
- data/lib/core_ext/object.rb +15 -0
- data/lib/core_ext/transformations.rb +35 -0
- data/lib/viking.rb +11 -0
- data/lib/viking/akismet.rb +194 -0
- data/lib/viking/base.rb +76 -0
- data/lib/viking/defensio.rb +377 -0
- data/lib/viking/version.rb +9 -0
- data/lib/viking/viking.rb +58 -0
- data/setup.rb +1585 -0
- data/spec/core_ext/object_spec.rb +17 -0
- data/spec/core_ext/transformations_spec.rb +33 -0
- data/spec/lib/akismet_spec.rb +93 -0
- data/spec/lib/base_spec.rb +55 -0
- data/spec/lib/defensio_spec.rb +135 -0
- data/spec/lib/viking_spec.rb +36 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +56 -0
- metadata +81 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
describe Object do
|
4
|
+
|
5
|
+
describe '#to_param' do
|
6
|
+
it 'should return a representation of an object' do
|
7
|
+
1.to_param.should == '1'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#to_query' do
|
12
|
+
it 'should CGI escape an object and its associated key' do
|
13
|
+
'foo'.to_query('bar').should == 'bar=foo'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
describe Hash do
|
4
|
+
|
5
|
+
describe '#symbolize_keys' do
|
6
|
+
it 'should convert all keys to symbols' do
|
7
|
+
{ 'foo' => 'bar', :baz => 1 }.symbolize_keys.should == { :foo => 'bar', :baz => 1 }
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should handle bad keys' do
|
11
|
+
{ nil => 'bar' }.symbolize_keys[nil].should == 'bar'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#dasherize_keys' do
|
16
|
+
it 'should convert all all underscores in keys to dashes' do
|
17
|
+
{ 'foo_bar' => 'baz' }.dasherize_keys.should == { 'foo-bar' => 'baz' }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#to_query' do
|
22
|
+
it 'should convert to a valid URI query' do
|
23
|
+
{ :foo => 'baz', :bar => 1 }.to_query.should == 'bar=1&foo=baz'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe Array, '#to_query' do
|
30
|
+
it 'should convert to a valid URI query' do
|
31
|
+
[:foo, :bar].to_query('baz').should == 'baz%5B%5D=foo&baz%5B%5D=bar'
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
describe "Akismet" do
|
4
|
+
|
5
|
+
attr_accessor :akismet, :http
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
self.akismet = Viking.connect('akismet', valid_options)
|
9
|
+
self.http = Net::HTTP.new("url")
|
10
|
+
Net::HTTP.stub!(:new).and_return(http)
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
self.akismet = nil
|
15
|
+
self.http = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def valid_options
|
19
|
+
{
|
20
|
+
:blog => :foo,
|
21
|
+
:api_key => :bar
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
describe ".new" do
|
26
|
+
it "should not have a verified key when initialized" do
|
27
|
+
akismet.send(:verified_key).should be_false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '.url' do
|
32
|
+
it 'should return an URL for a request' do
|
33
|
+
Viking::Akismet.url('bar').should == '/1.1/bar'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#verified?" do
|
38
|
+
it "should be verified when all parameters are provided" do
|
39
|
+
http.should_receive(:post).and_return(stub("response", :body => "valid"))
|
40
|
+
|
41
|
+
akismet.should be_verified # #verified? is called twice to make sure #verify_api_key is not called twice
|
42
|
+
akismet.should be_verified
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should not be verified if Akismet doesn't validate" do
|
46
|
+
http.should_receive(:post).and_return(stub("response", :body => "invalid"))
|
47
|
+
akismet.should_not be_verified
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should not be verified if its options are invalid" do
|
51
|
+
Viking.connect('akismet', {}).should_not be_verified
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#check_comment" do
|
56
|
+
it "should be false if the instance has invalid options" do
|
57
|
+
Viking.connect('akismet', {}).check_comment({}).should be_false
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should be spam when the response body isn't a valid response" do
|
61
|
+
http.should_receive(:post).and_return(stub("response", :body => "invalid"))
|
62
|
+
akismet.check_comment(:user_ip => "127.0.0.1", :user_agent => "Mozilla").should == { :message => "invalid", :spam => true }
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should not be spam when the response body is a valid response" do
|
66
|
+
http.should_receive(:post).and_return(stub("response", :body => "false"))
|
67
|
+
akismet.check_comment(:user_ip => "127.0.0.1", :user_agent => "Mozilla").should == { :message => "false", :spam => false }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#mark_as_spam" do
|
72
|
+
it 'should be false if the instance has invalid options' do
|
73
|
+
Viking.connect('akismet', {}).mark_as_spam({}).should be_false
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should return the response body' do
|
77
|
+
http.should_receive(:post).and_return(stub('response', :body => "foo"))
|
78
|
+
akismet.mark_as_spam({}).should == { :message => "foo" }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#mark_as_ham' do
|
83
|
+
it 'should be false if the instance has invalid options' do
|
84
|
+
Viking.connect('akismet', {}).mark_as_ham({}).should be_false
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should return the response body' do
|
88
|
+
http.should_receive(:post).and_return(stub('response', :body => "foo"))
|
89
|
+
akismet.mark_as_ham({}).should == { :message => "foo" }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
module BaseSpecHelper
|
4
|
+
def valid_base_options
|
5
|
+
{
|
6
|
+
:api_key => "1234abc",
|
7
|
+
:blog => "wiki.mysite.com"
|
8
|
+
}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Viking::Base do
|
13
|
+
|
14
|
+
attr_accessor :base
|
15
|
+
|
16
|
+
before(:each) do
|
17
|
+
self.base = Viking::Base.new({})
|
18
|
+
end
|
19
|
+
|
20
|
+
after(:each) do
|
21
|
+
self.base = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#mark_as_spam_or_ham" do
|
25
|
+
it "should mark as spam when is_spam is true" do
|
26
|
+
base.should_receive(:mark_as_spam).and_return("I will be spam")
|
27
|
+
base.mark_as_spam_or_ham(true, {}).should == "I will be spam"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should mark as ham when is_spam is false" do
|
31
|
+
base.should_receive(:mark_as_ham).and_return("I will be ham")
|
32
|
+
base.mark_as_spam_or_ham(false, {}).should == "I will be ham"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#invalid_options?" do
|
37
|
+
include BaseSpecHelper
|
38
|
+
|
39
|
+
it "should be false if the required options are non-nil" do
|
40
|
+
base.options = valid_base_options
|
41
|
+
base.should_not be_invalid_options
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should be true if the options don't include an API key" do
|
45
|
+
base.options = valid_base_options.except(:api_key)
|
46
|
+
base.should be_invalid_options
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should be true if the options don't include a blog address" do
|
50
|
+
base.options = valid_base_options.except(:blog)
|
51
|
+
base.should be_invalid_options
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
describe "Defensio" do
|
4
|
+
|
5
|
+
attr_accessor :defensio, :http
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
self.defensio = Viking.connect('defensio', valid_options)
|
9
|
+
self.http = Net::HTTP.new('url')
|
10
|
+
Net::HTTP.stub!(:new).and_return(http)
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
self.defensio = nil
|
15
|
+
self.http = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def valid_options
|
19
|
+
{
|
20
|
+
:blog => 'foo',
|
21
|
+
:api_key => 'bar'
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def defensio_with_bad_options
|
26
|
+
Viking.connect('defensio', {})
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.new' do
|
30
|
+
it 'should not have verified options when initialized' do
|
31
|
+
defensio_with_bad_options.send(:verify_options).should == false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#verified?' do
|
36
|
+
it "should be verified when all parameters are provided" do
|
37
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n status: success"))
|
38
|
+
|
39
|
+
defensio.should be_verified # called twice to make sure #validate-key is not called twice
|
40
|
+
defensio.should be_verified
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should not be verified if Defensio doesn't validate" do
|
44
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n status: fail"))
|
45
|
+
defensio.should_not be_verified
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not be verified if its options are invalid" do
|
49
|
+
defensio_with_bad_options.should_not be_verified
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#check_article' do
|
54
|
+
it 'should be false if its options are invalid' do
|
55
|
+
defensio_with_bad_options.check_article({}).should be_false
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should check the article with Defensio' do
|
59
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n foo: bar"))
|
60
|
+
defensio.check_article({})[:foo].should == "bar"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#check_comment' do
|
65
|
+
it 'should be false if its options are invalid' do
|
66
|
+
defensio_with_bad_options.check_comment({}).should be_false
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should raise a NoMethodError if options are provided without an article_date that responds to strftime' do
|
70
|
+
http.should_not_receive(:post)
|
71
|
+
lambda { defensio.check_comment(:article_date => nil) }.should raise_error(NoMethodError)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should check the comment with Defensio' do
|
75
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n foo: bar"))
|
76
|
+
defensio.check_comment(:article_date => Time.now)[:foo].should == "bar"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#mark_as_spam' do
|
81
|
+
it 'should be false if its options are invalid' do
|
82
|
+
defensio_with_bad_options.mark_as_spam({}).should be_false
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should mark the comments whose signatures are provided as spam' do
|
86
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n foo: bar"))
|
87
|
+
defensio.mark_as_spam(:signatures => "1,2,3")[:foo].should == "bar"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#mark_as_ham' do
|
92
|
+
it 'should be false if its options are invalid' do
|
93
|
+
defensio_with_bad_options.mark_as_ham({}).should be_false
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should mark the comments whose signatures are provided as spam' do
|
97
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n foo: bar"))
|
98
|
+
defensio.mark_as_ham(:signatures => "1,2,3").should == { :foo => "bar" }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '#stats' do
|
103
|
+
it 'should be false if its options are invalid' do
|
104
|
+
defensio_with_bad_options.stats.should be_false
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should return stats about the blog' do
|
108
|
+
http.should_receive(:post).and_return(stub("response", :body => "defensio-result:\n foo: bar"))
|
109
|
+
defensio.stats.should == { :foo => "bar" }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#url' do
|
114
|
+
it 'should return an URL for the specified action' do
|
115
|
+
defensio.url('get-stats').should == '/blog/1.2/get-stats/bar.yaml'
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#process_response_body' do
|
120
|
+
it 'should return the defensio-response portion of the YAML response as a Hash' do
|
121
|
+
Viking::Defensio.publicize_methods do
|
122
|
+
v = Viking.connect('defensio', {})
|
123
|
+
v.process_response_body("defensio-result:\n foo: bar").should == { :foo => "bar" }
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'should return the entire response with failure as the status if the response is not as expected' do
|
128
|
+
Viking::Defensio.publicize_methods do
|
129
|
+
v = Viking.connect('defensio', {})
|
130
|
+
v.process_response_body("foo:\n bar: baz").should == { :data => { 'foo' => { 'bar' => 'baz' } }, :status => "fail" }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
2
|
+
|
3
|
+
describe Viking do
|
4
|
+
|
5
|
+
describe ".connect" do
|
6
|
+
it "should load the Defensio engine" do
|
7
|
+
Viking.connect('defensio', {}).should be_a_kind_of(Viking::Defensio)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should load the Akismet engine" do
|
11
|
+
Viking.connect('akismet', {}).should be_a_kind_of(Viking::Akismet)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be nil if the engine is nil" do
|
15
|
+
Viking.connect(nil, {}).should be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be nil if the engine is blank" do
|
19
|
+
Viking.connect('', {}).should be_nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe ".enabled?" do
|
24
|
+
it "should not be enabled if a default instance has not be initialized" do
|
25
|
+
Viking.should_not be_enabled
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be enabled if a default instance has been initialized" do
|
29
|
+
Viking.default_engine = 'defensio'
|
30
|
+
Viking.connect_options = '1234abc'
|
31
|
+
|
32
|
+
Viking.should be_enabled
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
gem 'rspec'
|
6
|
+
require 'spec'
|
7
|
+
end
|
8
|
+
|
9
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
10
|
+
require 'viking'
|
11
|
+
|
12
|
+
# See http://blog.jayfields.com/2007/11/ruby-testing-private-methods.html
|
13
|
+
class Class
|
14
|
+
def publicize_methods(instance=nil)
|
15
|
+
saved_private_instance_methods = self.private_instance_methods
|
16
|
+
self.class_eval { public *saved_private_instance_methods }
|
17
|
+
yield(instance)
|
18
|
+
ensure
|
19
|
+
self.class_eval { private *saved_private_instance_methods }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# rSpec Hash additions.
|
25
|
+
#
|
26
|
+
# From
|
27
|
+
# * http://wincent.com/knowledge-base/Fixtures_considered_harmful%3F
|
28
|
+
# * Neil Rahilly
|
29
|
+
class Hash
|
30
|
+
##
|
31
|
+
# Filter keys out of a Hash.
|
32
|
+
#
|
33
|
+
# { :a => 1, :b => 2, :c => 3 }.except(:a)
|
34
|
+
# => { :b => 2, :c => 3 }
|
35
|
+
def except(*keys)
|
36
|
+
self.reject { |k,v| keys.include?(k || k.to_sym) }
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# Override some keys.
|
41
|
+
#
|
42
|
+
# { :a => 1, :b => 2, :c => 3 }.with(:a => 4)
|
43
|
+
# => { :a => 4, :b => 2, :c => 3 }
|
44
|
+
def with(overrides = {})
|
45
|
+
self.merge overrides
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Returns a Hash with only the pairs identified by +keys+.
|
50
|
+
#
|
51
|
+
# { :a => 1, :b => 2, :c => 3 }.only(:a)
|
52
|
+
# => { :a => 1 }
|
53
|
+
def only(*keys)
|
54
|
+
self.reject { |k,v| !keys.include?(k || k.to_sym) }
|
55
|
+
end
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vikinggem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Herdman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-04-22 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Gemified version of the Viking plugin
|
17
|
+
email:
|
18
|
+
- james.herdman@gmail.com
|
19
|
+
executables: []
|
20
|
+
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files:
|
24
|
+
- History.txt
|
25
|
+
- Manifest.txt
|
26
|
+
- README.txt
|
27
|
+
files:
|
28
|
+
- .autotest
|
29
|
+
- .gitignore
|
30
|
+
- History.txt
|
31
|
+
- Manifest.txt
|
32
|
+
- README.markdown
|
33
|
+
- README.txt
|
34
|
+
- Rakefile
|
35
|
+
- config/requirements.rb
|
36
|
+
- lib/core_ext/object.rb
|
37
|
+
- lib/core_ext/transformations.rb
|
38
|
+
- lib/viking.rb
|
39
|
+
- lib/viking/akismet.rb
|
40
|
+
- lib/viking/base.rb
|
41
|
+
- lib/viking/defensio.rb
|
42
|
+
- lib/viking/version.rb
|
43
|
+
- lib/viking/viking.rb
|
44
|
+
- setup.rb
|
45
|
+
- spec/core_ext/object_spec.rb
|
46
|
+
- spec/core_ext/transformations_spec.rb
|
47
|
+
- spec/lib/akismet_spec.rb
|
48
|
+
- spec/lib/base_spec.rb
|
49
|
+
- spec/lib/defensio_spec.rb
|
50
|
+
- spec/lib/viking_spec.rb
|
51
|
+
- spec/spec.opts
|
52
|
+
- spec/spec_helper.rb
|
53
|
+
has_rdoc: true
|
54
|
+
homepage: http://vikinggem.rubyforge.org
|
55
|
+
post_install_message: ""
|
56
|
+
rdoc_options:
|
57
|
+
- --main
|
58
|
+
- README.txt
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project: vikinggem
|
76
|
+
rubygems_version: 1.1.1
|
77
|
+
signing_key:
|
78
|
+
specification_version: 2
|
79
|
+
summary: Gemified version of the Viking plugin
|
80
|
+
test_files: []
|
81
|
+
|