ftbpro_sitemap_generator 5.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +35 -0
- data/MIT-LICENSE +20 -0
- data/README.md +1139 -0
- data/Rakefile +43 -0
- data/VERSION +1 -0
- data/lib/capistrano/sitemap_generator.rb +1 -0
- data/lib/capistrano/tasks/sitemap_generator.cap +36 -0
- data/lib/sitemap_generator.rb +85 -0
- data/lib/sitemap_generator/adapters.rb +0 -0
- data/lib/sitemap_generator/adapters/file_adapter.rb +43 -0
- data/lib/sitemap_generator/adapters/fog_adapter.rb +28 -0
- data/lib/sitemap_generator/adapters/s3_adapter.rb +41 -0
- data/lib/sitemap_generator/adapters/wave_adapter.rb +21 -0
- data/lib/sitemap_generator/application.rb +49 -0
- data/lib/sitemap_generator/builder.rb +8 -0
- data/lib/sitemap_generator/builder/sitemap_file.rb +172 -0
- data/lib/sitemap_generator/builder/sitemap_index_file.rb +149 -0
- data/lib/sitemap_generator/builder/sitemap_index_url.rb +28 -0
- data/lib/sitemap_generator/builder/sitemap_url.rb +250 -0
- data/lib/sitemap_generator/core_ext.rb +3 -0
- data/lib/sitemap_generator/core_ext/big_decimal.rb +45 -0
- data/lib/sitemap_generator/core_ext/numeric.rb +48 -0
- data/lib/sitemap_generator/helpers/number_helper.rb +237 -0
- data/lib/sitemap_generator/interpreter.rb +80 -0
- data/lib/sitemap_generator/link_set.rb +677 -0
- data/lib/sitemap_generator/railtie.rb +7 -0
- data/lib/sitemap_generator/sitemap_location.rb +192 -0
- data/lib/sitemap_generator/sitemap_namer.rb +75 -0
- data/lib/sitemap_generator/tasks.rb +53 -0
- data/lib/sitemap_generator/templates.rb +41 -0
- data/lib/sitemap_generator/utilities.rb +181 -0
- data/lib/tasks/sitemap_generator_tasks.rake +1 -0
- data/rails/install.rb +2 -0
- data/rails/uninstall.rb +2 -0
- data/spec/blueprint.rb +15 -0
- data/spec/files/sitemap.create.rb +12 -0
- data/spec/files/sitemap.groups.rb +49 -0
- data/spec/sitemap_generator/adapters/s3_adapter_spec.rb +23 -0
- data/spec/sitemap_generator/alternate_sitemap_spec.rb +79 -0
- data/spec/sitemap_generator/application_spec.rb +69 -0
- data/spec/sitemap_generator/builder/sitemap_file_spec.rb +110 -0
- data/spec/sitemap_generator/builder/sitemap_index_file_spec.rb +124 -0
- data/spec/sitemap_generator/builder/sitemap_index_url_spec.rb +28 -0
- data/spec/sitemap_generator/builder/sitemap_url_spec.rb +186 -0
- data/spec/sitemap_generator/core_ext/bigdecimal_spec.rb +20 -0
- data/spec/sitemap_generator/core_ext/numeric_spec.rb +43 -0
- data/spec/sitemap_generator/file_adaptor_spec.rb +20 -0
- data/spec/sitemap_generator/geo_sitemap_spec.rb +30 -0
- data/spec/sitemap_generator/helpers/number_helper_spec.rb +196 -0
- data/spec/sitemap_generator/interpreter_spec.rb +90 -0
- data/spec/sitemap_generator/link_set_spec.rb +864 -0
- data/spec/sitemap_generator/mobile_sitemap_spec.rb +27 -0
- data/spec/sitemap_generator/news_sitemap_spec.rb +42 -0
- data/spec/sitemap_generator/pagemap_sitemap_spec.rb +57 -0
- data/spec/sitemap_generator/sitemap_generator_spec.rb +582 -0
- data/spec/sitemap_generator/sitemap_groups_spec.rb +144 -0
- data/spec/sitemap_generator/sitemap_location_spec.rb +210 -0
- data/spec/sitemap_generator/sitemap_namer_spec.rb +96 -0
- data/spec/sitemap_generator/templates_spec.rb +24 -0
- data/spec/sitemap_generator/utilities/existence_spec.rb +26 -0
- data/spec/sitemap_generator/utilities/hash_spec.rb +57 -0
- data/spec/sitemap_generator/utilities/rounding_spec.rb +31 -0
- data/spec/sitemap_generator/utilities_spec.rb +101 -0
- data/spec/sitemap_generator/video_sitemap_spec.rb +117 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/file_macros.rb +39 -0
- data/spec/support/schemas/siteindex.xsd +73 -0
- data/spec/support/schemas/sitemap-geo.xsd +41 -0
- data/spec/support/schemas/sitemap-mobile.xsd +32 -0
- data/spec/support/schemas/sitemap-news.xsd +159 -0
- data/spec/support/schemas/sitemap-pagemap.xsd +97 -0
- data/spec/support/schemas/sitemap-video.xsd +643 -0
- data/spec/support/schemas/sitemap.xsd +115 -0
- data/spec/support/xml_macros.rb +67 -0
- data/templates/sitemap.rb +27 -0
- metadata +226 -0
@@ -0,0 +1 @@
|
|
1
|
+
load(File.expand_path(File.join(File.dirname(__FILE__), '../sitemap_generator/tasks.rb')))
|
data/rails/install.rb
ADDED
data/rails/uninstall.rb
ADDED
data/spec/blueprint.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
SitemapGenerator::Sitemap.default_host = "http://www.example.com"
|
2
|
+
|
3
|
+
SitemapGenerator::Sitemap.create do
|
4
|
+
add '/contents', :priority => 0.7, :changefreq => 'daily'
|
5
|
+
|
6
|
+
# add all individual articles
|
7
|
+
(1..10).each do |i|
|
8
|
+
add "/content/#{i}"
|
9
|
+
end
|
10
|
+
|
11
|
+
add "/merchant_path", :host => "https://www.example.com"
|
12
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
SitemapGenerator::Sitemap.default_host = "http://www.example.com"
|
2
|
+
|
3
|
+
SitemapGenerator::Sitemap.create(
|
4
|
+
:include_root => true, :include_index => true,
|
5
|
+
:filename => :new_sitemaps, :sitemaps_path => 'fr/') do
|
6
|
+
|
7
|
+
add('/one', :priority => 0.7, :changefreq => 'daily')
|
8
|
+
|
9
|
+
# Test a new location and filename and sitemaps host
|
10
|
+
group(:sitemaps_path => 'en/', :filename => :xxx,
|
11
|
+
:sitemaps_host => "http://newhost.com") do
|
12
|
+
|
13
|
+
add '/two'
|
14
|
+
add '/three'
|
15
|
+
end
|
16
|
+
|
17
|
+
# Test a simple namer.
|
18
|
+
group(:namer => SitemapGenerator::SimpleNamer.new(:abc, :start => 4, :zero => 3)) do
|
19
|
+
add '/four'
|
20
|
+
add '/five'
|
21
|
+
add '/six'
|
22
|
+
end
|
23
|
+
|
24
|
+
# Test a simple namer
|
25
|
+
group(:namer => SitemapGenerator::SimpleNamer.new(:def)) do
|
26
|
+
add '/four'
|
27
|
+
add '/five'
|
28
|
+
add '/six'
|
29
|
+
end
|
30
|
+
|
31
|
+
add '/seven'
|
32
|
+
|
33
|
+
# This should be in a file of its own.
|
34
|
+
# Not technically valid to have a link with a different host, but people like
|
35
|
+
# to do strange things sometimes.
|
36
|
+
group(:sitemaps_host => "http://exceptional.com") do
|
37
|
+
add '/eight'
|
38
|
+
add '/nine'
|
39
|
+
end
|
40
|
+
|
41
|
+
add '/ten'
|
42
|
+
|
43
|
+
# This should have no effect. Already added default links.
|
44
|
+
group(:include_root => true, :include_index => true) {}
|
45
|
+
|
46
|
+
# Not technically valid to have a link with a different host, but people like
|
47
|
+
# to do strange things sometimes
|
48
|
+
add "/merchant_path", :host => "https://www.merchanthost.com"
|
49
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
# Don't run this test as part of the unit testing suite as we don't want
|
6
|
+
# Fog to be a dependency of SitemapGenerator core. This is an integration
|
7
|
+
# test. Unfortunately it doesn't really test much, so its usefullness is
|
8
|
+
# questionable.
|
9
|
+
describe 'SitemapGenerator::S3Adapter', :integration => true do
|
10
|
+
|
11
|
+
let(:location) { SitemapGenerator::SitemapLocation.new(:namer => SitemapGenerator::SitemapNamer.new(:sitemap), :public_path => 'tmp/', :sitemaps_path => 'test/', :host => 'http://example.com/') }
|
12
|
+
let(:directory) { stub(:files => stub(:create)) }
|
13
|
+
let(:directories) { stub(:directories => stub(:new => directory)) }
|
14
|
+
|
15
|
+
before do
|
16
|
+
SitemapGenerator::S3Adapter # eager load
|
17
|
+
Fog::Storage.stubs(:new => directories)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should create the file in S3 with a single operation' do
|
21
|
+
subject.write(location, 'payload')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "SitemapGenerator" do
|
4
|
+
it "should not include media element unless provided" do
|
5
|
+
xml_fragment = SitemapGenerator::Builder::SitemapUrl.new('link_with_alternates.html',
|
6
|
+
:host => 'http://www.example.com',
|
7
|
+
:alternates => [
|
8
|
+
{
|
9
|
+
:lang => 'de',
|
10
|
+
:href => 'http://www.example.de/link_with_alternate.html'
|
11
|
+
}
|
12
|
+
]
|
13
|
+
).to_xml
|
14
|
+
|
15
|
+
doc = Nokogiri::XML.parse("<root xmlns='http://www.sitemaps.org/schemas/sitemap/0.9' xmlns:xhtml='http://www.w3.org/1999/xhtml'>#{xml_fragment}</root>")
|
16
|
+
url = doc.css('url')
|
17
|
+
url.should_not be_nil
|
18
|
+
url.css('loc').text.should == 'http://www.example.com/link_with_alternates.html'
|
19
|
+
|
20
|
+
alternate = url.at_xpath('xhtml:link')
|
21
|
+
alternate.should_not be_nil
|
22
|
+
alternate.attribute('rel').value.should == 'alternate'
|
23
|
+
alternate.attribute('hreflang').value.should == 'de'
|
24
|
+
alternate.attribute('media').should be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should add alternate links to sitemap" do
|
28
|
+
xml_fragment = SitemapGenerator::Builder::SitemapUrl.new('link_with_alternates.html',
|
29
|
+
:host => 'http://www.example.com',
|
30
|
+
:alternates => [
|
31
|
+
{
|
32
|
+
:lang => 'de',
|
33
|
+
:href => 'http://www.example.de/link_with_alternate.html',
|
34
|
+
:media => 'only screen and (max-width: 640px)'
|
35
|
+
}
|
36
|
+
]
|
37
|
+
).to_xml
|
38
|
+
|
39
|
+
doc = Nokogiri::XML.parse("<root xmlns='http://www.sitemaps.org/schemas/sitemap/0.9' xmlns:xhtml='http://www.w3.org/1999/xhtml'>#{xml_fragment}</root>")
|
40
|
+
url = doc.css('url')
|
41
|
+
url.should_not be_nil
|
42
|
+
url.css('loc').text.should == 'http://www.example.com/link_with_alternates.html'
|
43
|
+
|
44
|
+
alternate = url.at_xpath('xhtml:link')
|
45
|
+
alternate.should_not be_nil
|
46
|
+
alternate.attribute('rel').value.should == 'alternate'
|
47
|
+
alternate.attribute('hreflang').value.should == 'de'
|
48
|
+
alternate.attribute('href').value.should == 'http://www.example.de/link_with_alternate.html'
|
49
|
+
alternate.attribute('media').value.should == 'only screen and (max-width: 640px)'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should add alternate links to sitemap with rel nofollow" do
|
53
|
+
xml_fragment = SitemapGenerator::Builder::SitemapUrl.new('link_with_alternates.html',
|
54
|
+
:host => 'http://www.example.com',
|
55
|
+
:alternates => [
|
56
|
+
{
|
57
|
+
:lang => 'de',
|
58
|
+
:href => 'http://www.example.de/link_with_alternate.html',
|
59
|
+
:nofollow => true,
|
60
|
+
:media => 'only screen and (max-width: 640px)'
|
61
|
+
}
|
62
|
+
]
|
63
|
+
).to_xml
|
64
|
+
|
65
|
+
doc = Nokogiri::XML.parse("<root xmlns='http://www.sitemaps.org/schemas/sitemap/0.9' xmlns:xhtml='http://www.w3.org/1999/xhtml'>#{xml_fragment}</root>")
|
66
|
+
url = doc.css('url')
|
67
|
+
url.should_not be_nil
|
68
|
+
url.css('loc').text.should == 'http://www.example.com/link_with_alternates.html'
|
69
|
+
|
70
|
+
alternate = url.at_xpath('xhtml:link')
|
71
|
+
alternate.should_not be_nil
|
72
|
+
alternate.attribute('rel').value.should == 'alternate nofollow'
|
73
|
+
alternate.attribute('hreflang').value.should == 'de'
|
74
|
+
alternate.attribute('href').value.should == 'http://www.example.de/link_with_alternate.html'
|
75
|
+
alternate.attribute('media').value.should == 'only screen and (max-width: 640px)'
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SitemapGenerator::Application do
|
4
|
+
before :all do
|
5
|
+
SitemapGenerator::Utilities.with_warnings(nil) do
|
6
|
+
Object.const_set(:Rails, Object.new)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
after :all do
|
11
|
+
SitemapGenerator::Utilities.with_warnings(nil) do
|
12
|
+
Object.const_set(:Rails, nil)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
@app = SitemapGenerator::Application.new
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "rails3?" do
|
21
|
+
tests = {
|
22
|
+
:nil => false,
|
23
|
+
'2.3.11' => false,
|
24
|
+
'3.0.1' => true,
|
25
|
+
'3.0.11' => true
|
26
|
+
}
|
27
|
+
|
28
|
+
it "should identify the rails version correctly" do
|
29
|
+
tests.each do |version, result|
|
30
|
+
Rails.expects(:version).returns(version)
|
31
|
+
@app.rails3?.should == result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with Rails" do
|
37
|
+
before :each do
|
38
|
+
@root = '/test'
|
39
|
+
Rails.expects(:root).returns(@root).at_least_once
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should use the Rails.root" do
|
43
|
+
@app.root.should be_a(Pathname)
|
44
|
+
@app.root.to_s.should == @root
|
45
|
+
(@app.root + 'public/').to_s.should == File.join(@root, 'public/')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "with no Rails" do
|
50
|
+
before :each do
|
51
|
+
@rails = Rails
|
52
|
+
Object.send(:remove_const, :Rails)
|
53
|
+
end
|
54
|
+
|
55
|
+
after :each do
|
56
|
+
Object::Rails = @rails
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not be Rails" do
|
60
|
+
@app.rails?.should be_false
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should use the current working directory" do
|
64
|
+
@app.root.should be_a(Pathname)
|
65
|
+
@app.root.to_s.should == Dir.getwd
|
66
|
+
(@app.root + 'public/').to_s.should == File.join(Dir.getwd, 'public/')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'SitemapGenerator::Builder::SitemapFile' do
|
4
|
+
let(:location) { SitemapGenerator::SitemapLocation.new(:namer => SitemapGenerator::SimpleNamer.new(:sitemap, :start => 2, :zero => 1), :public_path => 'tmp/', :sitemaps_path => 'test/', :host => 'http://example.com/') }
|
5
|
+
let(:sitemap) { SitemapGenerator::Builder::SitemapFile.new(location) }
|
6
|
+
|
7
|
+
it "should have a default namer" do
|
8
|
+
sitemap = SitemapGenerator::Builder::SitemapFile.new
|
9
|
+
sitemap.location.filename.should == 'sitemap1.xml.gz'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return the name of the sitemap file" do
|
13
|
+
sitemap.location.filename.should == 'sitemap1.xml.gz'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return the URL" do
|
17
|
+
sitemap.location.url.should == 'http://example.com/test/sitemap1.xml.gz'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return the path" do
|
21
|
+
sitemap.location.path.should == File.expand_path('tmp/test/sitemap1.xml.gz')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be empty" do
|
25
|
+
sitemap.empty?.should be_true
|
26
|
+
sitemap.link_count.should == 0
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not be finalized" do
|
30
|
+
sitemap.finalized?.should be_false
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should raise if no default host is set" do
|
34
|
+
lambda { SitemapGenerator::Builder::SitemapFile.new.location.url }.should raise_error(SitemapGenerator::SitemapError)
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "lastmod" do
|
38
|
+
it "should be the file last modified time" do
|
39
|
+
lastmod = (Time.now - 1209600)
|
40
|
+
sitemap.location.reserve_name
|
41
|
+
File.expects(:mtime).with(sitemap.location.path).returns(lastmod)
|
42
|
+
sitemap.lastmod.should == lastmod
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be nil if the location has not reserved a name" do
|
46
|
+
File.expects(:mtime).never
|
47
|
+
sitemap.lastmod.should be_nil
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should be nil if location has reserved a name and the file DNE" do
|
51
|
+
sitemap.location.reserve_name
|
52
|
+
File.expects(:mtime).raises(Errno::ENOENT)
|
53
|
+
sitemap.lastmod.should be_nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "new" do
|
58
|
+
let(:original_sitemap) { sitemap }
|
59
|
+
let(:new_sitemap) { sitemap.new }
|
60
|
+
|
61
|
+
before :each do
|
62
|
+
original_sitemap
|
63
|
+
new_sitemap
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should inherit the same options" do
|
67
|
+
# The name is the same because the original sitemap was not finalized
|
68
|
+
new_sitemap.location.url.should == 'http://example.com/test/sitemap1.xml.gz'
|
69
|
+
new_sitemap.location.path.should == File.expand_path('tmp/test/sitemap1.xml.gz')
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should not share the same location instance" do
|
73
|
+
new_sitemap.location.should_not be(original_sitemap.location)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should inherit the same namer instance" do
|
77
|
+
new_sitemap.location.namer.should == original_sitemap.location.namer
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "reserve_name" do
|
82
|
+
it "should reserve the name from the location" do
|
83
|
+
sitemap.reserved_name?.should be_false
|
84
|
+
sitemap.location.expects(:reserve_name).returns('name')
|
85
|
+
sitemap.reserve_name
|
86
|
+
sitemap.reserved_name?.should be_true
|
87
|
+
sitemap.instance_variable_get(:@reserved_name).should == 'name'
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should be safe to call multiple times" do
|
91
|
+
sitemap.location.expects(:reserve_name).returns('name').once
|
92
|
+
sitemap.reserve_name
|
93
|
+
sitemap.reserve_name
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "add" do
|
98
|
+
it "should use the host provided" do
|
99
|
+
url = SitemapGenerator::Builder::SitemapUrl.new('/one', :host => 'http://newhost.com/')
|
100
|
+
SitemapGenerator::Builder::SitemapUrl.expects(:new).with('/one', :host => 'http://newhost.com').returns(url)
|
101
|
+
sitemap.add '/one', :host => 'http://newhost.com'
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should use the host from the location" do
|
105
|
+
url = SitemapGenerator::Builder::SitemapUrl.new('/one', :host => 'http://example.com/')
|
106
|
+
SitemapGenerator::Builder::SitemapUrl.expects(:new).with('/one', :host => 'http://example.com/').returns(url)
|
107
|
+
sitemap.add '/one'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'SitemapGenerator::Builder::SitemapIndexFile' do
|
4
|
+
let(:location) { SitemapGenerator::SitemapLocation.new(:filename => 'sitemap.xml.gz', :public_path => '/public/', :host => 'http://example.com/') }
|
5
|
+
let(:index) { SitemapGenerator::Builder::SitemapIndexFile.new(location) }
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
index.location[:sitemaps_path] = 'test/'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return the URL" do
|
12
|
+
index.location.url.should == 'http://example.com/test/sitemap.xml.gz'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return the path" do
|
16
|
+
index.location.path.should == '/public/test/sitemap.xml.gz'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be empty" do
|
20
|
+
index.empty?.should be_true
|
21
|
+
index.link_count.should == 0
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not have a last modification data" do
|
25
|
+
index.lastmod.should be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should not be finalized" do
|
29
|
+
index.finalized?.should be_false
|
30
|
+
end
|
31
|
+
|
32
|
+
it "filename should be set" do
|
33
|
+
index.location.filename.should == 'sitemap.xml.gz'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have a default namer" do
|
37
|
+
index = SitemapGenerator::Builder::SitemapIndexFile.new
|
38
|
+
index.location.filename.should == 'sitemap.xml.gz'
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "link_count" do
|
42
|
+
it "should return the link count" do
|
43
|
+
index.instance_variable_set(:@link_count, 10)
|
44
|
+
index.link_count.should == 10
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "create_index?" do
|
49
|
+
it "should return false" do
|
50
|
+
index.location[:create_index] = false
|
51
|
+
index.create_index?.should be_false
|
52
|
+
|
53
|
+
index.instance_variable_set(:@link_count, 10)
|
54
|
+
index.create_index?.should be_false
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return true" do
|
58
|
+
index.location[:create_index] = true
|
59
|
+
index.create_index?.should be_true
|
60
|
+
|
61
|
+
index.instance_variable_set(:@link_count, 1)
|
62
|
+
index.create_index?.should be_true
|
63
|
+
end
|
64
|
+
|
65
|
+
it "when :auto, should be true if more than one link" do
|
66
|
+
index.instance_variable_set(:@link_count, 1)
|
67
|
+
index.location[:create_index] = :auto
|
68
|
+
index.create_index?.should be_false
|
69
|
+
|
70
|
+
index.instance_variable_set(:@link_count, 2)
|
71
|
+
index.create_index?.should be_true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "add" do
|
76
|
+
it "should use the host provided" do
|
77
|
+
url = SitemapGenerator::Builder::SitemapIndexUrl.new('/one', :host => 'http://newhost.com/')
|
78
|
+
SitemapGenerator::Builder::SitemapIndexUrl.expects(:new).with('/one', :host => 'http://newhost.com').returns(url)
|
79
|
+
index.add '/one', :host => 'http://newhost.com'
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should use the host from the location" do
|
83
|
+
url = SitemapGenerator::Builder::SitemapIndexUrl.new('/one', :host => 'http://example.com/')
|
84
|
+
SitemapGenerator::Builder::SitemapIndexUrl.expects(:new).with('/one', :host => 'http://example.com/').returns(url)
|
85
|
+
index.add '/one'
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "when adding manually" do
|
89
|
+
it "should reserve a name" do
|
90
|
+
index.expects(:reserve_name)
|
91
|
+
index.add '/link'
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should create index" do
|
95
|
+
index.create_index?.should be_false
|
96
|
+
index.add '/one'
|
97
|
+
index.create_index?.should be_true
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "index_url" do
|
103
|
+
it "when not creating an index, should be the first sitemap url" do
|
104
|
+
index.instance_variable_set(:@create_index, false)
|
105
|
+
index.instance_variable_set(:@first_sitemap_url, 'http://test.com/index.xml')
|
106
|
+
index.create_index?.should be_false
|
107
|
+
index.index_url.should == 'http://test.com/index.xml'
|
108
|
+
end
|
109
|
+
|
110
|
+
it "if there's no first sitemap url, should default to the index location url" do
|
111
|
+
index.instance_variable_set(:@create_index, false)
|
112
|
+
index.instance_variable_set(:@first_sitemap_url, nil)
|
113
|
+
index.create_index?.should be_false
|
114
|
+
index.index_url.should == index.location.url
|
115
|
+
index.index_url.should == 'http://example.com/test/sitemap.xml.gz'
|
116
|
+
end
|
117
|
+
|
118
|
+
it "when creating an index, should be the index location url" do
|
119
|
+
index.instance_variable_set(:@create_index, true)
|
120
|
+
index.index_url.should == index.location.url
|
121
|
+
index.index_url.should == 'http://example.com/test/sitemap.xml.gz'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|