relevance-tarantula 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/Rakefile +3 -3
- data/lib/relevance/tarantula.rb +1 -1
- data/lib/relevance/tarantula/attack.rb +1 -1
- data/rails/init.rb +1 -0
- data/tarantula.gemspec +7 -4
- data/test/relevance/core_extensions/test_case_test.rb +2 -3
- data/test/relevance/tarantula/attack_form_submission_test.rb +6 -6
- data/test/relevance/tarantula/attack_handler_test.rb +5 -6
- data/test/relevance/tarantula/crawler_test.rb +32 -33
- data/test/relevance/tarantula/html_document_handler_test.rb +6 -7
- data/test/relevance/tarantula/html_report_helper_test.rb +0 -1
- data/test/relevance/tarantula/html_reporter_test.rb +1 -1
- data/test/relevance/tarantula/invalid_html_handler_test.rb +4 -5
- data/test/relevance/tarantula/io_reporter_test.rb +1 -2
- data/test/relevance/tarantula/link_test.rb +13 -1
- data/test/relevance/tarantula/log_grabber_test.rb +1 -2
- data/test/relevance/tarantula/rails_integration_proxy_test.rb +7 -8
- data/test/relevance/tarantula/result_test.rb +13 -14
- data/test/relevance/tarantula/tidy_handler_test.rb +0 -1
- metadata +23 -11
data/CHANGELOG
ADDED
data/Rakefile
CHANGED
@@ -6,8 +6,8 @@ require 'rubygems'
|
|
6
6
|
begin
|
7
7
|
gem 'technicalpickles-echoe'
|
8
8
|
rescue LoadError => e
|
9
|
-
puts "
|
10
|
-
puts "sudo gem install technicalpickles-echoe
|
9
|
+
puts "Couldn't find the correct version of echoe - please install from forked version on github: http://github.com/technicalpickles/echoe/ ->"
|
10
|
+
puts "sudo gem install technicalpickles-echoe --source http://gems.github.com"
|
11
11
|
end
|
12
12
|
|
13
13
|
require 'echoe'
|
@@ -27,7 +27,7 @@ echoe = Echoe.new('tarantula') do |p|
|
|
27
27
|
p.test_pattern = 'test/**/*_test.rb'
|
28
28
|
p.manifest_name = 'manifest.txt'
|
29
29
|
p.dependencies = ['htmlentities', 'hpricot', 'facets >=2.4.3']
|
30
|
-
p.development_dependencies = ['ruby-debug', 'test-spec']
|
30
|
+
p.development_dependencies = ['ruby-debug', 'test-spec', 'mocha']
|
31
31
|
end
|
32
32
|
|
33
33
|
desc 'Default: run unit tests.'
|
data/lib/relevance/tarantula.rb
CHANGED
@@ -8,7 +8,7 @@ class Relevance::Tarantula::Attack
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
def ==(other)
|
11
|
-
Attack === other && HASHABLE_ATTRS.all? { |attr| send(attr) == other.send(attr)}
|
11
|
+
Relevance::Tarantula::Attack === other && HASHABLE_ATTRS.all? { |attr| send(attr) == other.send(attr)}
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path(File.join(File.dirname(__FILE__) + ".." "tasks", "tarantula.rake"))
|
data/tarantula.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{tarantula}
|
3
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.5"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new("= 1.2") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Relevance"]
|
7
|
-
s.date = %q{2008-09-
|
7
|
+
s.date = %q{2008-09-26}
|
8
8
|
s.description = %q{A big hairy fuzzy spider that crawls your site, wreaking havoc}
|
9
9
|
s.email = %q{opensource@thinkrelevance.com}
|
10
|
-
s.extra_rdoc_files = ["
|
11
|
-
s.files = ["
|
10
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/relevance/core_extensions/ellipsize.rb", "lib/relevance/core_extensions/file.rb", "lib/relevance/core_extensions/response.rb", "lib/relevance/core_extensions/test_case.rb", "lib/relevance/tarantula/attack.rb", "lib/relevance/tarantula/attack_form_submission.rb", "lib/relevance/tarantula/attack_handler.rb", "lib/relevance/tarantula/crawler.rb", "lib/relevance/tarantula/detail.html.erb", "lib/relevance/tarantula/form.rb", "lib/relevance/tarantula/form_submission.rb", "lib/relevance/tarantula/html_document_handler.rb", "lib/relevance/tarantula/html_report_helper.rb", "lib/relevance/tarantula/html_reporter.rb", "lib/relevance/tarantula/index.html.erb", "lib/relevance/tarantula/invalid_html_handler.rb", "lib/relevance/tarantula/io_reporter.rb", "lib/relevance/tarantula/link.rb", "lib/relevance/tarantula/log_grabber.rb", "lib/relevance/tarantula/rails_integration_proxy.rb", "lib/relevance/tarantula/recording.rb", "lib/relevance/tarantula/response.rb", "lib/relevance/tarantula/result.rb", "lib/relevance/tarantula/test_report.html.erb", "lib/relevance/tarantula/tidy_handler.rb", "lib/relevance/tarantula/transform.rb", "lib/relevance/tarantula.rb", "MIT-LICENSE", "README.rdoc", "vendor/xss-shield/MIT-LICENSE"]
|
11
|
+
s.files = ["CHANGELOG", "init.rb", "install.rb", "laf/images/background.jpg", "laf/images/relevance-os-logo.gif", "laf/images/tab.png", "laf/images/table-sort.gif", "laf/images/tarantula-sprites.png", "laf/javascripts/jquery-1.2.3.js", "laf/javascripts/jquery-ui-tabs.js", "laf/javascripts/jquery.tablesorter.js", "laf/javascripts/tarantula.js", "laf/stylesheets/tarantula.css", "laf/stylesheets/ui.tabs.css", "lib/relevance/core_extensions/ellipsize.rb", "lib/relevance/core_extensions/file.rb", "lib/relevance/core_extensions/response.rb", "lib/relevance/core_extensions/test_case.rb", "lib/relevance/tarantula/attack.rb", "lib/relevance/tarantula/attack_form_submission.rb", "lib/relevance/tarantula/attack_handler.rb", "lib/relevance/tarantula/crawler.rb", "lib/relevance/tarantula/detail.html.erb", "lib/relevance/tarantula/form.rb", "lib/relevance/tarantula/form_submission.rb", "lib/relevance/tarantula/html_document_handler.rb", "lib/relevance/tarantula/html_report_helper.rb", "lib/relevance/tarantula/html_reporter.rb", "lib/relevance/tarantula/index.html.erb", "lib/relevance/tarantula/invalid_html_handler.rb", "lib/relevance/tarantula/io_reporter.rb", "lib/relevance/tarantula/link.rb", "lib/relevance/tarantula/log_grabber.rb", "lib/relevance/tarantula/rails_integration_proxy.rb", "lib/relevance/tarantula/recording.rb", "lib/relevance/tarantula/response.rb", "lib/relevance/tarantula/result.rb", "lib/relevance/tarantula/test_report.html.erb", "lib/relevance/tarantula/tidy_handler.rb", "lib/relevance/tarantula/transform.rb", "lib/relevance/tarantula.rb", "manifest.txt", "MIT-LICENSE", "rails/init.rb", "Rakefile", "README.rdoc", "tarantula.gemspec", "tasks/tarantula_tasks.rake", "template/tarantula_test.rb", "test/relevance/core_extensions/ellipsize_test.rb", "test/relevance/core_extensions/file_test.rb", "test/relevance/core_extensions/response_test.rb", "test/relevance/core_extensions/test_case_test.rb", "test/relevance/tarantula/attack_form_submission_test.rb", "test/relevance/tarantula/attack_handler_test.rb", "test/relevance/tarantula/crawler_test.rb", "test/relevance/tarantula/form_submission_test.rb", "test/relevance/tarantula/form_test.rb", "test/relevance/tarantula/html_document_handler_test.rb", "test/relevance/tarantula/html_report_helper_test.rb", "test/relevance/tarantula/html_reporter_test.rb", "test/relevance/tarantula/invalid_html_handler_test.rb", "test/relevance/tarantula/io_reporter_test.rb", "test/relevance/tarantula/link_test.rb", "test/relevance/tarantula/log_grabber_test.rb", "test/relevance/tarantula/rails_integration_proxy_test.rb", "test/relevance/tarantula/result_test.rb", "test/relevance/tarantula/tidy_handler_test.rb", "test/relevance/tarantula/transform_test.rb", "test/relevance/tarantula_test.rb", "test/test_helper.rb", "tmp/test_output/images/background.jpg", "tmp/test_output/images/relevance-os-logo.gif", "tmp/test_output/images/tab.png", "tmp/test_output/images/table-sort.gif", "tmp/test_output/images/tarantula-sprites.png", "tmp/test_output/index.html", "tmp/test_output/javascripts/jquery-1.2.3.js", "tmp/test_output/javascripts/jquery-ui-tabs.js", "tmp/test_output/javascripts/jquery.tablesorter.js", "tmp/test_output/javascripts/tarantula.js", "tmp/test_output/stylesheets/tarantula.css", "tmp/test_output/stylesheets/ui.tabs.css", "tmp/test_output/test_user_pages/1.html", "tmp/test_output/test_user_pages/10.html", "tmp/test_output/test_user_pages/11.html", "tmp/test_output/test_user_pages/12.html", "tmp/test_output/test_user_pages/13.html", "tmp/test_output/test_user_pages/14.html", "tmp/test_output/test_user_pages/15.html", "tmp/test_output/test_user_pages/16.html", "tmp/test_output/test_user_pages/17.html", "tmp/test_output/test_user_pages/18.html", "tmp/test_output/test_user_pages/19.html", "tmp/test_output/test_user_pages/2.html", "tmp/test_output/test_user_pages/20.html", "tmp/test_output/test_user_pages/3.html", "tmp/test_output/test_user_pages/4.html", "tmp/test_output/test_user_pages/5.html", "tmp/test_output/test_user_pages/6.html", "tmp/test_output/test_user_pages/7.html", "tmp/test_output/test_user_pages/8.html", "tmp/test_output/test_user_pages/9.html", "uninstall.rb", "vendor/xss-shield/init.rb", "vendor/xss-shield/lib/xss_shield/erb_hacks.rb", "vendor/xss-shield/lib/xss_shield/haml_hacks.rb", "vendor/xss-shield/lib/xss_shield/safe_string.rb", "vendor/xss-shield/lib/xss_shield/secure_helpers.rb", "vendor/xss-shield/lib/xss_shield.rb", "vendor/xss-shield/MIT-LICENSE", "vendor/xss-shield/README", "vendor/xss-shield/test/test_actionview_integration.rb", "vendor/xss-shield/test/test_erb.rb", "vendor/xss-shield/test/test_haml.rb", "vendor/xss-shield/test/test_helpers.rb", "vendor/xss-shield/test/test_safe_string.rb"]
|
12
12
|
s.has_rdoc = true
|
13
13
|
s.homepage = %q{http://opensource.thinkrelevance.com/wiki/tarantula}
|
14
14
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tarantula", "--main", "README.rdoc"]
|
@@ -28,12 +28,14 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_runtime_dependency(%q<facets>, [">= 2.4.3"])
|
29
29
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
30
30
|
s.add_development_dependency(%q<test-spec>, [">= 0"])
|
31
|
+
s.add_development_dependency(%q<mocha>, [">= 0"])
|
31
32
|
else
|
32
33
|
s.add_dependency(%q<htmlentities>, [">= 0"])
|
33
34
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
34
35
|
s.add_dependency(%q<facets>, [">= 2.4.3"])
|
35
36
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
36
37
|
s.add_dependency(%q<test-spec>, [">= 0"])
|
38
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
37
39
|
end
|
38
40
|
else
|
39
41
|
s.add_dependency(%q<htmlentities>, [">= 0"])
|
@@ -41,5 +43,6 @@ Gem::Specification.new do |s|
|
|
41
43
|
s.add_dependency(%q<facets>, [">= 2.4.3"])
|
42
44
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
43
45
|
s.add_dependency(%q<test-spec>, [">= 0"])
|
46
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
44
47
|
end
|
45
48
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "../..", "test_helper.rb")
|
2
2
|
require 'relevance/core_extensions/test_case'
|
3
|
-
include Relevance::Tarantula
|
4
3
|
|
5
4
|
describe "TestCase extensions" do
|
6
5
|
it "can create the crawler" do
|
7
|
-
RailsIntegrationProxy.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
8
|
-
Crawler.any_instance.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
6
|
+
Relevance::Tarantula::RailsIntegrationProxy.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
7
|
+
Relevance::Tarantula::Crawler.any_instance.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
9
8
|
tarantula_crawler(stub_everything)
|
10
9
|
end
|
11
10
|
|
@@ -17,7 +17,7 @@ describe "Relevance::Tarantula::AttackFormSubmission" do
|
|
17
17
|
</form>
|
18
18
|
END
|
19
19
|
@form = Relevance::Tarantula::Form.new(@tag.at('form'))
|
20
|
-
@fs = Relevance::Tarantula::AttackFormSubmission.new(@form, Attack.new({:name => 'foo_name', :input => 'foo_code', :output => 'foo_code'}))
|
20
|
+
@fs = Relevance::Tarantula::AttackFormSubmission.new(@form, Relevance::Tarantula::Attack.new({:name => 'foo_name', :input => 'foo_code', :output => 'foo_code'}))
|
21
21
|
end
|
22
22
|
|
23
23
|
it "can mutate text areas" do
|
@@ -49,16 +49,16 @@ END
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it "processes all its attacks" do
|
52
|
-
AttackFormSubmission.stubs(:attacks).returns([
|
53
|
-
Attack.new({:name => 'foo_name1', :input => 'foo_input', :output => 'foo_output'}),
|
54
|
-
Attack.new({:name => 'foo_name2', :input => 'foo_input', :output => 'foo_output'}),
|
52
|
+
Relevance::Tarantula::AttackFormSubmission.stubs(:attacks).returns([
|
53
|
+
Relevance::Tarantula::Attack.new({:name => 'foo_name1', :input => 'foo_input', :output => 'foo_output'}),
|
54
|
+
Relevance::Tarantula::Attack.new({:name => 'foo_name2', :input => 'foo_input', :output => 'foo_output'}),
|
55
55
|
])
|
56
56
|
Relevance::Tarantula::AttackFormSubmission.mutate(@form).size.should == 2
|
57
57
|
end
|
58
58
|
|
59
59
|
it "maps hash attacks to Attack instances" do
|
60
|
-
AttackFormSubmission.instance_variable_set("@attacks", [{ :name => "attack name"}])
|
61
|
-
AttackFormSubmission.attacks.should == [Attack.new({:name => "attack name"})]
|
60
|
+
Relevance::Tarantula::AttackFormSubmission.instance_variable_set("@attacks", [{ :name => "attack name"}])
|
61
|
+
Relevance::Tarantula::AttackFormSubmission.attacks.should == [Relevance::Tarantula::Attack.new({:name => "attack name"})]
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -1,20 +1,19 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe "Relevance::Tarantula::AttackHandler" do
|
5
4
|
before do
|
6
5
|
@handler = Relevance::Tarantula::AttackHandler.new
|
7
|
-
attack = Attack.new({:name => 'foo_name', :input => 'foo_code', :output => '<bad>'})
|
6
|
+
attack = Relevance::Tarantula::Attack.new({:name => 'foo_name', :input => 'foo_code', :output => '<bad>'})
|
8
7
|
@handler.stubs(:attacks).returns([attack])
|
9
8
|
end
|
10
9
|
|
11
10
|
it "lets safe documents through" do
|
12
|
-
result = @handler.handle(Result.new(:response => stub(:html? => true, :body => '<a href="/foo">good</a>')))
|
11
|
+
result = @handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => '<a href="/foo">good</a>')))
|
13
12
|
result.should == nil
|
14
13
|
end
|
15
14
|
|
16
15
|
it "detects the supplied code" do
|
17
|
-
result = @handler.handle(Result.new(:response => stub(:html? => true, :body => '<a href="/foo"><bad></a>')))
|
16
|
+
result = @handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => '<a href="/foo"><bad></a>')))
|
18
17
|
result.success.should == false
|
19
18
|
end
|
20
19
|
end
|
@@ -22,9 +21,9 @@ end
|
|
22
21
|
describe "Attacks without an output specified" do
|
23
22
|
it "never matches anything" do
|
24
23
|
handler = Relevance::Tarantula::AttackHandler.new
|
25
|
-
attack = Attack.new({:name => 'foo_name', :input => 'foo_code'})
|
24
|
+
attack = Relevance::Tarantula::Attack.new({:name => 'foo_name', :input => 'foo_code'})
|
26
25
|
Relevance::Tarantula::AttackFormSubmission.stubs(:attacks).returns([attack])
|
27
|
-
result = handler.handle(Result.new(:response => stub(:html? => true, :body => '<a href="/foo">good</a>')))
|
26
|
+
result = handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => '<a href="/foo">good</a>')))
|
28
27
|
result.should == nil
|
29
28
|
end
|
30
29
|
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe 'Relevance::Tarantula::Crawler#transform_url' do
|
5
|
-
before {@crawler = Crawler.new}
|
4
|
+
before {@crawler = Relevance::Tarantula::Crawler.new}
|
6
5
|
it "de-obfuscates unicode obfuscated urls" do
|
7
6
|
obfuscated_mailto = "mailto:"
|
8
7
|
@crawler.transform_url(obfuscated_mailto).should == "mailto:"
|
@@ -15,12 +14,12 @@ end
|
|
15
14
|
|
16
15
|
describe 'Relevance::Tarantula::Crawler log grabbing' do
|
17
16
|
it "returns nil if no grabber is specified" do
|
18
|
-
crawler = Crawler.new
|
17
|
+
crawler = Relevance::Tarantula::Crawler.new
|
19
18
|
crawler.grab_log!.should == nil
|
20
19
|
end
|
21
20
|
|
22
21
|
it "returns grabber.grab if grabber is specified" do
|
23
|
-
crawler = Crawler.new
|
22
|
+
crawler = Relevance::Tarantula::Crawler.new
|
24
23
|
crawler.log_grabber = stub(:grab! => "fake log entry")
|
25
24
|
crawler.grab_log!.should == "fake log entry"
|
26
25
|
end
|
@@ -28,7 +27,7 @@ end
|
|
28
27
|
|
29
28
|
describe 'Relevance::Tarantula::Crawler interruption' do
|
30
29
|
it 'catches interruption and writes the partial report' do
|
31
|
-
crawler = Crawler.new
|
30
|
+
crawler = Relevance::Tarantula::Crawler.new
|
32
31
|
crawler.stubs(:queue_link)
|
33
32
|
crawler.stubs(:do_crawl).raises(Interrupt)
|
34
33
|
crawler.expects(:report_results)
|
@@ -47,9 +46,9 @@ describe 'Relevance::Tarantula::Crawler handle_form_results' do
|
|
47
46
|
:log => nil,
|
48
47
|
:method => :stub_method,
|
49
48
|
:test_name => nil}
|
50
|
-
result = Result.new(result_args)
|
51
|
-
Result.expects(:new).with(result_args).returns(result)
|
52
|
-
crawler = Crawler.new
|
49
|
+
result = Relevance::Tarantula::Result.new(result_args)
|
50
|
+
Relevance::Tarantula::Result.expects(:new).with(result_args).returns(result)
|
51
|
+
crawler = Relevance::Tarantula::Crawler.new
|
53
52
|
crawler.handle_form_results(stub_everything(:method => :stub_method, :action => :action_stub),
|
54
53
|
response)
|
55
54
|
end
|
@@ -57,7 +56,7 @@ end
|
|
57
56
|
|
58
57
|
describe 'Relevance::Tarantula::Crawler#crawl' do
|
59
58
|
it 'queues the first url, does crawl, and then reports results' do
|
60
|
-
crawler = Crawler.new
|
59
|
+
crawler = Relevance::Tarantula::Crawler.new
|
61
60
|
crawler.expects(:queue_link).with("/foobar")
|
62
61
|
crawler.expects(:do_crawl)
|
63
62
|
crawler.expects(:report_results)
|
@@ -65,7 +64,7 @@ describe 'Relevance::Tarantula::Crawler#crawl' do
|
|
65
64
|
end
|
66
65
|
|
67
66
|
it 'reports results even if the crawl fails' do
|
68
|
-
crawler = Crawler.new
|
67
|
+
crawler = Relevance::Tarantula::Crawler.new
|
69
68
|
crawler.expects(:do_crawl).raises(RuntimeError)
|
70
69
|
crawler.expects(:report_results)
|
71
70
|
lambda {crawler.crawl('/')}.should.raise(RuntimeError)
|
@@ -74,7 +73,7 @@ end
|
|
74
73
|
|
75
74
|
describe 'Relevance::Tarantula::Crawler queuing' do
|
76
75
|
it 'queues and remembers links' do
|
77
|
-
crawler = Crawler.new
|
76
|
+
crawler = Relevance::Tarantula::Crawler.new
|
78
77
|
crawler.expects(:transform_url).with("/url").returns("/transformed")
|
79
78
|
crawler.queue_link("/url")
|
80
79
|
crawler.links_to_crawl.should == [Relevance::Tarantula::Link.new("/transformed")]
|
@@ -82,16 +81,16 @@ describe 'Relevance::Tarantula::Crawler queuing' do
|
|
82
81
|
end
|
83
82
|
|
84
83
|
it 'queues and remembers forms' do
|
85
|
-
crawler = Crawler.new
|
84
|
+
crawler = Relevance::Tarantula::Crawler.new
|
86
85
|
form = Hpricot('<form action="/action" method="post"/>').at('form')
|
87
|
-
signature = FormSubmission.new(Form.new(form)).signature
|
86
|
+
signature = Relevance::Tarantula::FormSubmission.new(Relevance::Tarantula::Form.new(form)).signature
|
88
87
|
crawler.queue_form(form)
|
89
88
|
crawler.forms_to_crawl.size.should == 1
|
90
89
|
crawler.form_signatures_queued.should == Set.new([signature])
|
91
90
|
end
|
92
91
|
|
93
92
|
it 'remembers link referrer if there is one' do
|
94
|
-
crawler = Crawler.new
|
93
|
+
crawler = Relevance::Tarantula::Crawler.new
|
95
94
|
crawler.queue_link("/url", "/some-referrer")
|
96
95
|
crawler.referrers.should == {Relevance::Tarantula::Link.new("/url") => "/some-referrer"}
|
97
96
|
end
|
@@ -100,7 +99,7 @@ end
|
|
100
99
|
|
101
100
|
describe 'Relevance::Tarantula::Crawler#report_results' do
|
102
101
|
it "delegates to generate_reports" do
|
103
|
-
crawler = Crawler.new
|
102
|
+
crawler = Relevance::Tarantula::Crawler.new
|
104
103
|
crawler.expects(:generate_reports)
|
105
104
|
crawler.report_results
|
106
105
|
end
|
@@ -110,7 +109,7 @@ describe 'Relevance::Tarantula::Crawler#crawling' do
|
|
110
109
|
|
111
110
|
it "converts ActiveRecord::RecordNotFound into a 404" do
|
112
111
|
(proxy = stub_everything).expects(:send).raises(ActiveRecord::RecordNotFound)
|
113
|
-
crawler = Crawler.new
|
112
|
+
crawler = Relevance::Tarantula::Crawler.new
|
114
113
|
crawler.proxy = proxy
|
115
114
|
response = crawler.crawl_form stub_everything(:method => nil)
|
116
115
|
response.code.should == "404"
|
@@ -119,7 +118,7 @@ describe 'Relevance::Tarantula::Crawler#crawling' do
|
|
119
118
|
end
|
120
119
|
|
121
120
|
it "does four things with each link: get, log, handle, and blip" do
|
122
|
-
crawler = Crawler.new
|
121
|
+
crawler = Relevance::Tarantula::Crawler.new
|
123
122
|
crawler.proxy = stub
|
124
123
|
response = stub(:code => "200")
|
125
124
|
crawler.links_to_crawl = [stub(:href => "/foo1", :method => :get), stub(:href => "/foo2", :method => :get)]
|
@@ -132,7 +131,7 @@ describe 'Relevance::Tarantula::Crawler#crawling' do
|
|
132
131
|
end
|
133
132
|
|
134
133
|
it "invokes queued forms, logs responses, and calls handlers" do
|
135
|
-
crawler = Crawler.new
|
134
|
+
crawler = Relevance::Tarantula::Crawler.new
|
136
135
|
crawler.forms_to_crawl << stub_everything(:method => "get",
|
137
136
|
:action => "/foo",
|
138
137
|
:data => "some data",
|
@@ -144,7 +143,7 @@ describe 'Relevance::Tarantula::Crawler#crawling' do
|
|
144
143
|
end
|
145
144
|
|
146
145
|
it "resets to the initial links/forms on subsequent crawls when times_to_crawl > 1" do
|
147
|
-
crawler = Crawler.new
|
146
|
+
crawler = Relevance::Tarantula::Crawler.new
|
148
147
|
stub_puts_and_print(crawler)
|
149
148
|
crawler.proxy = stub
|
150
149
|
response = stub(:code => "200")
|
@@ -163,13 +162,13 @@ end
|
|
163
162
|
|
164
163
|
describe 'Crawler blip' do
|
165
164
|
it "blips the current progress if !verbose" do
|
166
|
-
crawler = Crawler.new
|
165
|
+
crawler = Relevance::Tarantula::Crawler.new
|
167
166
|
crawler.stubs(:verbose).returns false
|
168
167
|
crawler.expects(:print).with("\r 0 of 0 links completed ")
|
169
168
|
crawler.blip
|
170
169
|
end
|
171
170
|
it "blips nothing if verbose" do
|
172
|
-
crawler = Crawler.new
|
171
|
+
crawler = Relevance::Tarantula::Crawler.new
|
173
172
|
crawler.stubs(:verbose).returns true
|
174
173
|
crawler.expects(:print).never
|
175
174
|
crawler.blip
|
@@ -178,24 +177,24 @@ end
|
|
178
177
|
|
179
178
|
describe 'Relevance::Tarantula::Crawler' do
|
180
179
|
it "is finished when the links and forms are crawled" do
|
181
|
-
crawler = Crawler.new
|
180
|
+
crawler = Relevance::Tarantula::Crawler.new
|
182
181
|
crawler.finished?.should == true
|
183
182
|
end
|
184
183
|
|
185
184
|
it "isn't finished when links remain" do
|
186
|
-
crawler = Crawler.new
|
185
|
+
crawler = Relevance::Tarantula::Crawler.new
|
187
186
|
crawler.links_to_crawl = [:stub_link]
|
188
187
|
crawler.finished?.should == false
|
189
188
|
end
|
190
189
|
|
191
190
|
it "isn't finished when links remain" do
|
192
|
-
crawler = Crawler.new
|
191
|
+
crawler = Relevance::Tarantula::Crawler.new
|
193
192
|
crawler.forms_to_crawl = [:stub_form]
|
194
193
|
crawler.finished?.should == false
|
195
194
|
end
|
196
195
|
|
197
196
|
it "crawls links and forms again and again until finished?==true" do
|
198
|
-
crawler = Crawler.new
|
197
|
+
crawler = Relevance::Tarantula::Crawler.new
|
199
198
|
crawler.expects(:finished?).times(3).returns(false, false, true)
|
200
199
|
crawler.expects(:crawl_queued_links).times(2)
|
201
200
|
crawler.expects(:crawl_queued_forms).times(2)
|
@@ -203,7 +202,7 @@ describe 'Relevance::Tarantula::Crawler' do
|
|
203
202
|
end
|
204
203
|
|
205
204
|
it "asks each reporter to write its report in report_dir" do
|
206
|
-
crawler = Crawler.new
|
205
|
+
crawler = Relevance::Tarantula::Crawler.new
|
207
206
|
crawler.stubs(:report_dir).returns(test_output_dir)
|
208
207
|
reporter = stub_everything
|
209
208
|
reporter.expects(:report)
|
@@ -214,13 +213,13 @@ describe 'Relevance::Tarantula::Crawler' do
|
|
214
213
|
end
|
215
214
|
|
216
215
|
it "builds a report dir relative to rails root" do
|
217
|
-
crawler = Crawler.new
|
216
|
+
crawler = Relevance::Tarantula::Crawler.new
|
218
217
|
crawler.expects(:rails_root).returns("faux_rails_root")
|
219
218
|
crawler.report_dir.should == "faux_rails_root/tmp/tarantula"
|
220
219
|
end
|
221
220
|
|
222
221
|
it "skips links that are already queued" do
|
223
|
-
crawler = Crawler.new
|
222
|
+
crawler = Relevance::Tarantula::Crawler.new
|
224
223
|
crawler.should_skip_link?(Relevance::Tarantula::Link.new("/foo")).should == false
|
225
224
|
crawler.queue_link("/foo").should == Relevance::Tarantula::Link.new("/foo")
|
226
225
|
crawler.should_skip_link?(Relevance::Tarantula::Link.new("/foo")).should == true
|
@@ -230,7 +229,7 @@ end
|
|
230
229
|
|
231
230
|
describe "Crawler link skipping" do
|
232
231
|
before do
|
233
|
-
@crawler = Crawler.new
|
232
|
+
@crawler = Relevance::Tarantula::Crawler.new
|
234
233
|
end
|
235
234
|
|
236
235
|
it "skips links that are too long" do
|
@@ -279,19 +278,19 @@ end
|
|
279
278
|
|
280
279
|
describe "allow_nnn_for" do
|
281
280
|
it "installs result as a response_code_handler" do
|
282
|
-
crawler = Crawler.new
|
283
|
-
crawler.response_code_handler.should == Result
|
281
|
+
crawler = Relevance::Tarantula::Crawler.new
|
282
|
+
crawler.response_code_handler.should == Relevance::Tarantula::Result
|
284
283
|
end
|
285
284
|
|
286
285
|
it "delegates to the response_code_handler" do
|
287
|
-
crawler = Crawler.new
|
286
|
+
crawler = Relevance::Tarantula::Crawler.new
|
288
287
|
(response_code_handler = mock).expects(:allow_404_for).with(:stub)
|
289
288
|
crawler.response_code_handler = response_code_handler
|
290
289
|
crawler.allow_404_for(:stub)
|
291
290
|
end
|
292
291
|
|
293
292
|
it "chains up to super for method_missing" do
|
294
|
-
crawler = Crawler.new
|
293
|
+
crawler = Relevance::Tarantula::Crawler.new
|
295
294
|
lambda{crawler.foo}.should.raise(NoMethodError)
|
296
295
|
end
|
297
296
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe "Relevance::Tarantula::HtmlDocumentHandler" do
|
5
4
|
|
@@ -10,34 +9,34 @@ describe "Relevance::Tarantula::HtmlDocumentHandler" do
|
|
10
9
|
it "does not write HTML Scanner warnings to the console" do
|
11
10
|
bad_html = "<html><div></form></html>"
|
12
11
|
err = Recording.stderr do
|
13
|
-
@handler.handle(Result.new(:response => stub(:html? => true, :body => bad_html)))
|
12
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => bad_html)))
|
14
13
|
end
|
15
14
|
err.should == ""
|
16
15
|
end
|
17
16
|
|
18
17
|
it "ignores non-html" do
|
19
18
|
@handler.expects(:queue_link).never
|
20
|
-
@handler.handle(Result.new(:response => stub(:html? => false, :body => '<a href="/foo">foo</a>')))
|
19
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => false, :body => '<a href="/foo">foo</a>')))
|
21
20
|
end
|
22
21
|
|
23
22
|
it "queues anchor tags" do
|
24
23
|
@handler.expects(:queue_link).with {|*args| args[0]['href'] == "/foo" && args[1] == nil}
|
25
|
-
@handler.handle(Result.new(:response => stub(:html? => true, :body => '<a href="/foo">foo</a>')))
|
24
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => '<a href="/foo">foo</a>')))
|
26
25
|
end
|
27
26
|
|
28
27
|
it "queues link tags" do
|
29
28
|
@handler.expects(:queue_link).with {|*args| args[0]['href'] == "/bar" && args[1] == nil}
|
30
|
-
@handler.handle(Result.new(:response => stub(:html? => true, :body => '<link href="/bar">bar</a>')))
|
29
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => '<link href="/bar">bar</a>')))
|
31
30
|
end
|
32
31
|
|
33
32
|
it "queues forms" do
|
34
33
|
@handler.expects(:queue_form).with{|tag,referrer| Hpricot::Elem === tag}
|
35
|
-
@handler.handle(Result.new(:url => "/page-url", :response => stub(:html? => true, :body => '<form>stuff</form>')))
|
34
|
+
@handler.handle(Relevance::Tarantula::Result.new(:url => "/page-url", :response => stub(:html? => true, :body => '<form>stuff</form>')))
|
36
35
|
end
|
37
36
|
|
38
37
|
it "infers form action from page url if form is not explicit" do
|
39
38
|
@handler.expects(:queue_form).with{|tag,referrer| tag['action'].should == '/page-url'; true }
|
40
|
-
@handler.handle(Result.new(:url => "/page-url", :response => stub(:html? => true, :body => '<form>stuff</form>')))
|
39
|
+
@handler.handle(Relevance::Tarantula::Result.new(:url => "/page-url", :response => stub(:html? => true, :body => '<form>stuff</form>')))
|
41
40
|
end
|
42
41
|
|
43
42
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe "Relevance::Tarantula::InvalidHtmlHandler" do
|
5
4
|
before do
|
@@ -9,26 +8,26 @@ describe "Relevance::Tarantula::InvalidHtmlHandler" do
|
|
9
8
|
it "does not write HTML Scanner warnings to the console" do
|
10
9
|
bad_html = "<html><div></form></html>"
|
11
10
|
err = Recording.stderr do
|
12
|
-
@handler.handle(Result.new(:response => stub(:html? => true, :body => bad_html)))
|
11
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => stub(:html? => true, :body => bad_html)))
|
13
12
|
end
|
14
13
|
err.should == ""
|
15
14
|
end
|
16
15
|
|
17
16
|
it "rejects unclosed html" do
|
18
17
|
response = stub(:html? => true, :body => '<html><div></html>', :code => 200)
|
19
|
-
result = @handler.handle(Result.new(:response => response))
|
18
|
+
result = @handler.handle(Relevance::Tarantula::Result.new(:response => response))
|
20
19
|
result.success.should == false
|
21
20
|
result.description.should == "Bad HTML (Scanner)"
|
22
21
|
end
|
23
22
|
|
24
23
|
it "loves the good html" do
|
25
24
|
response = stub(:html? => true, :body => '<html><div></div></html>', :code => 200)
|
26
|
-
@handler.handle(Result.new(:response => response)).should == nil
|
25
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => response)).should == nil
|
27
26
|
end
|
28
27
|
|
29
28
|
it "ignores non html" do
|
30
29
|
response = stub(:html? => false, :body => '<html><div></html>', :code => 200)
|
31
|
-
@handler.handle(Result.new(:response => response)).should == nil
|
30
|
+
@handler.handle(Relevance::Tarantula::Result.new(:response => response)).should == nil
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe 'Relevance::Tarantula::IOReporter' do
|
5
4
|
it "reports errors to stderr and then raises" do
|
6
|
-
reporter = IOReporter.new($stderr)
|
5
|
+
reporter = Relevance::Tarantula::IOReporter.new($stderr)
|
7
6
|
reporter.report stub(:code => "404", :url => "/uh-oh", :success => false)
|
8
7
|
$stderr.expects(:puts).with("****** FAILURES")
|
9
8
|
$stderr.expects(:puts).with("404: /uh-oh")
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe "Relevance::Tarantula::Link" do
|
5
4
|
include ActionView::Helpers::UrlHelper
|
@@ -47,3 +46,16 @@ describe "Relevance::Tarantula::Link" do
|
|
47
46
|
|
48
47
|
end
|
49
48
|
|
49
|
+
describe "possible conflict when user has an AR model named Link" do
|
50
|
+
it "does not taint Object with Relevance::Tarantula" do
|
51
|
+
Object.ancestors.should.not.include Relevance::Tarantula
|
52
|
+
end
|
53
|
+
|
54
|
+
it "doesnt break with a Link model" do
|
55
|
+
lambda {
|
56
|
+
class Link < ActiveRecord::Base
|
57
|
+
end
|
58
|
+
}.should.not.raise
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe 'Relevance::Tarantula::LogGrabber' do
|
5
4
|
before do
|
6
|
-
@grabber = LogGrabber.new(log_file)
|
5
|
+
@grabber = Relevance::Tarantula::LogGrabber.new(log_file)
|
7
6
|
FileUtils.mkdir_p(test_output_dir)
|
8
7
|
end
|
9
8
|
|
@@ -1,29 +1,28 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe "Relevance::Tarantula::RailsIntegrationProxy rails_integration_test" do
|
5
4
|
before {
|
6
|
-
Crawler.any_instance.stubs(:crawl)
|
7
|
-
Crawler.any_instance.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
8
|
-
RailsIntegrationProxy.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
9
|
-
RailsIntegrationProxy.stubs(:new).returns(stub(:integration_test => stub(:method_name => @test_name)))
|
5
|
+
Relevance::Tarantula::Crawler.any_instance.stubs(:crawl)
|
6
|
+
Relevance::Tarantula::Crawler.any_instance.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
7
|
+
Relevance::Tarantula::RailsIntegrationProxy.stubs(:rails_root).returns("STUB_RAILS_ROOT")
|
8
|
+
Relevance::Tarantula::RailsIntegrationProxy.stubs(:new).returns(stub(:integration_test => stub(:method_name => @test_name)))
|
10
9
|
@test_name = "test_user_pages"
|
11
10
|
}
|
12
11
|
|
13
12
|
it "strips leading hostname from link urls" do
|
14
|
-
crawler = RailsIntegrationProxy.rails_integration_test(stub(:host => "foo.com"))
|
13
|
+
crawler = Relevance::Tarantula::RailsIntegrationProxy.rails_integration_test(stub(:host => "foo.com"))
|
15
14
|
crawler.transform_url("http://foo.com/path").should == "/path"
|
16
15
|
crawler.transform_url("http://bar.com/path").should == "http://bar.com/path"
|
17
16
|
end
|
18
17
|
|
19
18
|
it "allows override of max_url_length" do
|
20
|
-
crawler = RailsIntegrationProxy.rails_integration_test(stub(:host => "foo.com"),
|
19
|
+
crawler = Relevance::Tarantula::RailsIntegrationProxy.rails_integration_test(stub(:host => "foo.com"),
|
21
20
|
:max_url_length => 16)
|
22
21
|
crawler.max_url_length.should == 16
|
23
22
|
end
|
24
23
|
|
25
24
|
it "has some useful defaults" do
|
26
|
-
crawler = RailsIntegrationProxy.rails_integration_test(stub(:host => "foo.com"))
|
25
|
+
crawler = Relevance::Tarantula::RailsIntegrationProxy.rails_integration_test(stub(:host => "foo.com"))
|
27
26
|
crawler.log_grabber.should.not.be nil
|
28
27
|
end
|
29
28
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
2
|
-
include Relevance::Tarantula
|
3
2
|
|
4
3
|
describe "Relevance::Tarantula::Result" do
|
5
4
|
before do
|
@@ -39,12 +38,12 @@ describe "Relevance::Tarantula::Result class methods" do
|
|
39
38
|
|
40
39
|
it "adds successful responses to success collection" do
|
41
40
|
stub = stub_everything(:code => "200")
|
42
|
-
@rh.handle(Result.new(:response => stub)).success.should == true
|
41
|
+
@rh.handle(Relevance::Tarantula::Result.new(:response => stub)).success.should == true
|
43
42
|
end
|
44
43
|
|
45
44
|
it "adds failed responses to failure collection" do
|
46
45
|
stub = stub_everything(:code => "500")
|
47
|
-
result = @rh.handle(Result.new(:response => stub))
|
46
|
+
result = @rh.handle(Relevance::Tarantula::Result.new(:response => stub))
|
48
47
|
result.success.should == false
|
49
48
|
result.description.should == "Bad HTTP Response"
|
50
49
|
end
|
@@ -53,32 +52,32 @@ end
|
|
53
52
|
|
54
53
|
describe "Relevance::Tarantula::Result allowed errors" do
|
55
54
|
before do
|
56
|
-
Result.allow_errors_for = {}
|
55
|
+
Relevance::Tarantula::Result.allow_errors_for = {}
|
57
56
|
end
|
58
57
|
|
59
58
|
it "defaults to *not* skip errors" do
|
60
|
-
Result.can_skip_error?(stub(:code => "404")).should == false
|
59
|
+
Relevance::Tarantula::Result.can_skip_error?(stub(:code => "404")).should == false
|
61
60
|
end
|
62
61
|
|
63
62
|
it "can skip errors matching code and url" do
|
64
|
-
Result.allow_errors_for = {"404" => [/some_url/]}
|
65
|
-
Result.can_skip_error?(stub(:code => "404", :url => "this_is_some_url")).should == true
|
63
|
+
Relevance::Tarantula::Result.allow_errors_for = {"404" => [/some_url/]}
|
64
|
+
Relevance::Tarantula::Result.can_skip_error?(stub(:code => "404", :url => "this_is_some_url")).should == true
|
66
65
|
end
|
67
66
|
|
68
67
|
it "does not skip errors matching code only" do
|
69
|
-
Result.allow_errors_for = {"404" => [/some_other_url/]}
|
70
|
-
Result.can_skip_error?(stub(:code => "404", :url => "this_is_some_url")).should == false
|
68
|
+
Relevance::Tarantula::Result.allow_errors_for = {"404" => [/some_other_url/]}
|
69
|
+
Relevance::Tarantula::Result.can_skip_error?(stub(:code => "404", :url => "this_is_some_url")).should == false
|
71
70
|
end
|
72
71
|
|
73
72
|
it "users allow_nnn_for syntax to specify allowed errors" do
|
74
|
-
Result.allow_404_for(/this_url/)
|
75
|
-
Result.allow_errors_for.should == {"404" => [/this_url/]}
|
76
|
-
Result.allow_404_for(/another_url/)
|
77
|
-
Result.allow_errors_for.should == {"404" => [/this_url/, /another_url/]}
|
73
|
+
Relevance::Tarantula::Result.allow_404_for(/this_url/)
|
74
|
+
Relevance::Tarantula::Result.allow_errors_for.should == {"404" => [/this_url/]}
|
75
|
+
Relevance::Tarantula::Result.allow_404_for(/another_url/)
|
76
|
+
Relevance::Tarantula::Result.allow_errors_for.should == {"404" => [/this_url/, /another_url/]}
|
78
77
|
end
|
79
78
|
|
80
79
|
it "chains to super method missing" do
|
81
|
-
lambda{Result.allow_xxx_for}.should.raise(NoMethodError)
|
80
|
+
lambda{Relevance::Tarantula::Result.allow_xxx_for}.should.raise(NoMethodError)
|
82
81
|
end
|
83
82
|
|
84
83
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relevance-tarantula
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Relevance
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-09-
|
12
|
+
date: 2008-09-26 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,15 @@ dependencies:
|
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: "0"
|
59
59
|
version:
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: mocha
|
62
|
+
version_requirement:
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
60
69
|
description: A big hairy fuzzy spider that crawls your site, wreaking havoc
|
61
70
|
email: opensource@thinkrelevance.com
|
62
71
|
executables: []
|
@@ -64,8 +73,7 @@ executables: []
|
|
64
73
|
extensions: []
|
65
74
|
|
66
75
|
extra_rdoc_files:
|
67
|
-
-
|
68
|
-
- README.rdoc
|
76
|
+
- CHANGELOG
|
69
77
|
- lib/relevance/core_extensions/ellipsize.rb
|
70
78
|
- lib/relevance/core_extensions/file.rb
|
71
79
|
- lib/relevance/core_extensions/response.rb
|
@@ -93,11 +101,11 @@ extra_rdoc_files:
|
|
93
101
|
- lib/relevance/tarantula/tidy_handler.rb
|
94
102
|
- lib/relevance/tarantula/transform.rb
|
95
103
|
- lib/relevance/tarantula.rb
|
96
|
-
- vendor/xss-shield/MIT-LICENSE
|
97
|
-
files:
|
98
104
|
- MIT-LICENSE
|
99
105
|
- README.rdoc
|
100
|
-
-
|
106
|
+
- vendor/xss-shield/MIT-LICENSE
|
107
|
+
files:
|
108
|
+
- CHANGELOG
|
101
109
|
- init.rb
|
102
110
|
- install.rb
|
103
111
|
- laf/images/background.jpg
|
@@ -138,6 +146,12 @@ files:
|
|
138
146
|
- lib/relevance/tarantula/tidy_handler.rb
|
139
147
|
- lib/relevance/tarantula/transform.rb
|
140
148
|
- lib/relevance/tarantula.rb
|
149
|
+
- manifest.txt
|
150
|
+
- MIT-LICENSE
|
151
|
+
- rails/init.rb
|
152
|
+
- Rakefile
|
153
|
+
- README.rdoc
|
154
|
+
- tarantula.gemspec
|
141
155
|
- tasks/tarantula_tasks.rake
|
142
156
|
- template/tarantula_test.rb
|
143
157
|
- test/relevance/core_extensions/ellipsize_test.rb
|
@@ -195,21 +209,19 @@ files:
|
|
195
209
|
- tmp/test_output/test_user_pages/8.html
|
196
210
|
- tmp/test_output/test_user_pages/9.html
|
197
211
|
- uninstall.rb
|
198
|
-
- vendor/xss-shield/MIT-LICENSE
|
199
|
-
- vendor/xss-shield/README
|
200
212
|
- vendor/xss-shield/init.rb
|
201
213
|
- vendor/xss-shield/lib/xss_shield/erb_hacks.rb
|
202
214
|
- vendor/xss-shield/lib/xss_shield/haml_hacks.rb
|
203
215
|
- vendor/xss-shield/lib/xss_shield/safe_string.rb
|
204
216
|
- vendor/xss-shield/lib/xss_shield/secure_helpers.rb
|
205
217
|
- vendor/xss-shield/lib/xss_shield.rb
|
218
|
+
- vendor/xss-shield/MIT-LICENSE
|
219
|
+
- vendor/xss-shield/README
|
206
220
|
- vendor/xss-shield/test/test_actionview_integration.rb
|
207
221
|
- vendor/xss-shield/test/test_erb.rb
|
208
222
|
- vendor/xss-shield/test/test_haml.rb
|
209
223
|
- vendor/xss-shield/test/test_helpers.rb
|
210
224
|
- vendor/xss-shield/test/test_safe_string.rb
|
211
|
-
- manifest.txt
|
212
|
-
- tarantula.gemspec
|
213
225
|
has_rdoc: true
|
214
226
|
homepage: http://opensource.thinkrelevance.com/wiki/tarantula
|
215
227
|
post_install_message:
|