ftbpro_sitemap_generator 5.0.8

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 (78) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +13 -0
  3. data/Gemfile.lock +35 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +1139 -0
  6. data/Rakefile +43 -0
  7. data/VERSION +1 -0
  8. data/lib/capistrano/sitemap_generator.rb +1 -0
  9. data/lib/capistrano/tasks/sitemap_generator.cap +36 -0
  10. data/lib/sitemap_generator.rb +85 -0
  11. data/lib/sitemap_generator/adapters.rb +0 -0
  12. data/lib/sitemap_generator/adapters/file_adapter.rb +43 -0
  13. data/lib/sitemap_generator/adapters/fog_adapter.rb +28 -0
  14. data/lib/sitemap_generator/adapters/s3_adapter.rb +41 -0
  15. data/lib/sitemap_generator/adapters/wave_adapter.rb +21 -0
  16. data/lib/sitemap_generator/application.rb +49 -0
  17. data/lib/sitemap_generator/builder.rb +8 -0
  18. data/lib/sitemap_generator/builder/sitemap_file.rb +172 -0
  19. data/lib/sitemap_generator/builder/sitemap_index_file.rb +149 -0
  20. data/lib/sitemap_generator/builder/sitemap_index_url.rb +28 -0
  21. data/lib/sitemap_generator/builder/sitemap_url.rb +250 -0
  22. data/lib/sitemap_generator/core_ext.rb +3 -0
  23. data/lib/sitemap_generator/core_ext/big_decimal.rb +45 -0
  24. data/lib/sitemap_generator/core_ext/numeric.rb +48 -0
  25. data/lib/sitemap_generator/helpers/number_helper.rb +237 -0
  26. data/lib/sitemap_generator/interpreter.rb +80 -0
  27. data/lib/sitemap_generator/link_set.rb +677 -0
  28. data/lib/sitemap_generator/railtie.rb +7 -0
  29. data/lib/sitemap_generator/sitemap_location.rb +192 -0
  30. data/lib/sitemap_generator/sitemap_namer.rb +75 -0
  31. data/lib/sitemap_generator/tasks.rb +53 -0
  32. data/lib/sitemap_generator/templates.rb +41 -0
  33. data/lib/sitemap_generator/utilities.rb +181 -0
  34. data/lib/tasks/sitemap_generator_tasks.rake +1 -0
  35. data/rails/install.rb +2 -0
  36. data/rails/uninstall.rb +2 -0
  37. data/spec/blueprint.rb +15 -0
  38. data/spec/files/sitemap.create.rb +12 -0
  39. data/spec/files/sitemap.groups.rb +49 -0
  40. data/spec/sitemap_generator/adapters/s3_adapter_spec.rb +23 -0
  41. data/spec/sitemap_generator/alternate_sitemap_spec.rb +79 -0
  42. data/spec/sitemap_generator/application_spec.rb +69 -0
  43. data/spec/sitemap_generator/builder/sitemap_file_spec.rb +110 -0
  44. data/spec/sitemap_generator/builder/sitemap_index_file_spec.rb +124 -0
  45. data/spec/sitemap_generator/builder/sitemap_index_url_spec.rb +28 -0
  46. data/spec/sitemap_generator/builder/sitemap_url_spec.rb +186 -0
  47. data/spec/sitemap_generator/core_ext/bigdecimal_spec.rb +20 -0
  48. data/spec/sitemap_generator/core_ext/numeric_spec.rb +43 -0
  49. data/spec/sitemap_generator/file_adaptor_spec.rb +20 -0
  50. data/spec/sitemap_generator/geo_sitemap_spec.rb +30 -0
  51. data/spec/sitemap_generator/helpers/number_helper_spec.rb +196 -0
  52. data/spec/sitemap_generator/interpreter_spec.rb +90 -0
  53. data/spec/sitemap_generator/link_set_spec.rb +864 -0
  54. data/spec/sitemap_generator/mobile_sitemap_spec.rb +27 -0
  55. data/spec/sitemap_generator/news_sitemap_spec.rb +42 -0
  56. data/spec/sitemap_generator/pagemap_sitemap_spec.rb +57 -0
  57. data/spec/sitemap_generator/sitemap_generator_spec.rb +582 -0
  58. data/spec/sitemap_generator/sitemap_groups_spec.rb +144 -0
  59. data/spec/sitemap_generator/sitemap_location_spec.rb +210 -0
  60. data/spec/sitemap_generator/sitemap_namer_spec.rb +96 -0
  61. data/spec/sitemap_generator/templates_spec.rb +24 -0
  62. data/spec/sitemap_generator/utilities/existence_spec.rb +26 -0
  63. data/spec/sitemap_generator/utilities/hash_spec.rb +57 -0
  64. data/spec/sitemap_generator/utilities/rounding_spec.rb +31 -0
  65. data/spec/sitemap_generator/utilities_spec.rb +101 -0
  66. data/spec/sitemap_generator/video_sitemap_spec.rb +117 -0
  67. data/spec/spec_helper.rb +24 -0
  68. data/spec/support/file_macros.rb +39 -0
  69. data/spec/support/schemas/siteindex.xsd +73 -0
  70. data/spec/support/schemas/sitemap-geo.xsd +41 -0
  71. data/spec/support/schemas/sitemap-mobile.xsd +32 -0
  72. data/spec/support/schemas/sitemap-news.xsd +159 -0
  73. data/spec/support/schemas/sitemap-pagemap.xsd +97 -0
  74. data/spec/support/schemas/sitemap-video.xsd +643 -0
  75. data/spec/support/schemas/sitemap.xsd +115 -0
  76. data/spec/support/xml_macros.rb +67 -0
  77. data/templates/sitemap.rb +27 -0
  78. metadata +226 -0
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+ require 'sitemap_generator/interpreter'
3
+
4
+ describe SitemapGenerator::Interpreter do
5
+ let(:link_set) { SitemapGenerator::LinkSet.new }
6
+ let(:interpreter) { SitemapGenerator::Interpreter.new(:link_set => link_set) }
7
+
8
+ # The interpreter doesn't have the URL helpers included for some reason, so it
9
+ # fails when adding links. That messes up later specs unless we reset the sitemap object.
10
+ after :all do
11
+ SitemapGenerator::Sitemap.reset!
12
+ end
13
+
14
+ it "should find the config file if Rails.root doesn't end in a slash" do
15
+ SitemapGenerator::Utilities.with_warnings(nil) do
16
+ Rails = stub(:root => SitemapGenerator.app.root.to_s.sub(/\/$/, ''))
17
+ end
18
+ # Rails.expects(:root).returns(rails_root).at_least_once
19
+ lambda { SitemapGenerator::Interpreter.run }.should_not raise_exception(Errno::ENOENT)
20
+ end
21
+
22
+ it "should set the verbose option" do
23
+ SitemapGenerator::Interpreter.any_instance.expects(:instance_eval)
24
+ interpreter = SitemapGenerator::Interpreter.run(:verbose => true)
25
+ interpreter.instance_variable_get(:@linkset).verbose.should be_true
26
+ end
27
+
28
+ describe "link_set" do
29
+ it "should default to the default LinkSet" do
30
+ SitemapGenerator::Interpreter.new.sitemap.should be(SitemapGenerator::Sitemap)
31
+ end
32
+
33
+ it "should allow setting the LinkSet as an option" do
34
+ interpreter.sitemap.should be(link_set)
35
+ end
36
+ end
37
+
38
+ describe "public interface" do
39
+ describe "add" do
40
+ it "should add a link to the sitemap" do
41
+ link_set.expects(:add).with('test', :option => 'value')
42
+ interpreter.add('test', :option => 'value')
43
+ end
44
+ end
45
+
46
+ describe "group" do
47
+ it "should start a new group" do
48
+ link_set.expects(:group).with('test', :option => 'value')
49
+ interpreter.group('test', :option => 'value')
50
+ end
51
+ end
52
+
53
+ describe "sitemap" do
54
+ it "should return the LinkSet" do
55
+ interpreter.sitemap.should be(link_set)
56
+ end
57
+ end
58
+
59
+ describe "add_to_index" do
60
+ it "should add a link to the sitemap index" do
61
+ link_set.expects(:add_to_index).with('test', :option => 'value')
62
+ interpreter.add_to_index('test', :option => 'value')
63
+ end
64
+ end
65
+ end
66
+
67
+ describe "eval" do
68
+ it "should yield the LinkSet to the block" do
69
+ interpreter.eval(:yield_sitemap => true) do |sitemap|
70
+ sitemap.should be(link_set)
71
+ end
72
+ end
73
+
74
+ it "should not yield the LinkSet to the block" do
75
+ local = interpreter # prevent undefined method
76
+ local_be = self.method(:be) # prevent undefined method
77
+ local.eval(:yield_sitemap => false) do
78
+ self.should local_be.call(local)
79
+ end
80
+ end
81
+
82
+ it "should not yield the LinkSet to the block by default" do
83
+ local = interpreter # prevent undefined method
84
+ local_be = self.method(:be) # prevent undefined method
85
+ local.eval do
86
+ self.should local_be.call(local)
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,864 @@
1
+ require 'spec_helper'
2
+
3
+ describe SitemapGenerator::LinkSet do
4
+ let(:default_host) { 'http://example.com' }
5
+ let(:ls) { SitemapGenerator::LinkSet.new(:default_host => default_host) }
6
+
7
+ describe "initializer options" do
8
+ options = [:public_path, :sitemaps_path, :default_host, :filename, :search_engines]
9
+ values = [File.expand_path(SitemapGenerator.app.root + 'tmp/'), 'mobile/', 'http://myhost.com', :xxx, { :abc => '123' }]
10
+
11
+ options.zip(values).each do |option, value|
12
+ it "should set #{option} to #{value}" do
13
+ ls = SitemapGenerator::LinkSet.new(option => value)
14
+ ls.send(option).should == value
15
+ end
16
+ end
17
+ end
18
+
19
+ describe "default options" do
20
+ let(:ls) { SitemapGenerator::LinkSet.new }
21
+
22
+ default_options = {
23
+ :filename => :sitemap,
24
+ :sitemaps_path => nil,
25
+ :public_path => SitemapGenerator.app.root + 'public/',
26
+ :default_host => nil,
27
+ :include_index => false,
28
+ :include_root => true,
29
+ :create_index => :auto
30
+ }
31
+
32
+ default_options.each do |option, value|
33
+ it "#{option} should default to #{value}" do
34
+ ls.send(option).should == value
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "include_root include_index option" do
40
+ it "should include the root url and the sitemap index url" do
41
+ ls = SitemapGenerator::LinkSet.new(:default_host => default_host, :include_root => true, :include_index => true)
42
+ ls.include_root.should be_true
43
+ ls.include_index.should be_true
44
+ ls.create { |sitemap| }
45
+ ls.sitemap.link_count.should == 2
46
+ end
47
+
48
+ it "should not include the root url" do
49
+ ls = SitemapGenerator::LinkSet.new(:default_host => default_host, :include_root => false)
50
+ ls.include_root.should be_false
51
+ ls.include_index.should be_false
52
+ ls.create { |sitemap| }
53
+ ls.sitemap.link_count.should == 0
54
+ end
55
+
56
+ it "should not include the sitemap index url" do
57
+ ls = SitemapGenerator::LinkSet.new(:default_host => default_host, :include_index => false)
58
+ ls.include_root.should be_true
59
+ ls.include_index.should be_false
60
+ ls.create { |sitemap| }
61
+ ls.sitemap.link_count.should == 1
62
+ end
63
+
64
+ it "should not include the root url or the sitemap index url" do
65
+ ls = SitemapGenerator::LinkSet.new(:default_host => default_host, :include_root => false, :include_index => false)
66
+ ls.include_root.should be_false
67
+ ls.include_index.should be_false
68
+ ls.create { |sitemap| }
69
+ ls.sitemap.link_count.should == 0
70
+ end
71
+ end
72
+
73
+ describe "sitemaps public_path" do
74
+ it "should default to public/" do
75
+ path = SitemapGenerator.app.root + 'public/'
76
+ ls.public_path.should == path
77
+ ls.sitemap.location.public_path.should == path
78
+ ls.sitemap_index.location.public_path.should == path
79
+ end
80
+
81
+ it "should change when the public_path is changed" do
82
+ path = SitemapGenerator.app.root + 'tmp/'
83
+ ls.public_path = 'tmp/'
84
+ ls.public_path.should == path
85
+ ls.sitemap.location.public_path.should == path
86
+ ls.sitemap_index.location.public_path.should == path
87
+ end
88
+
89
+ it "should append a slash to the path" do
90
+ path = SitemapGenerator.app.root + 'tmp/'
91
+ ls.public_path = 'tmp'
92
+ ls.public_path.should == path
93
+ ls.sitemap.location.public_path.should == path
94
+ ls.sitemap_index.location.public_path.should == path
95
+ end
96
+ end
97
+
98
+ describe "sitemaps url" do
99
+ it "should change when the default_host is changed" do
100
+ ls.default_host = 'http://one.com'
101
+ ls.default_host.should == 'http://one.com'
102
+ ls.default_host.should == ls.sitemap.location.host
103
+ ls.default_host.should == ls.sitemap_index.location.host
104
+ end
105
+
106
+ it "should change when the sitemaps_path is changed" do
107
+ ls.default_host = 'http://one.com'
108
+ ls.sitemaps_path = 'sitemaps/'
109
+ ls.sitemap.location.url.should == 'http://one.com/sitemaps/sitemap.xml.gz'
110
+ ls.sitemap_index.location.url.should == 'http://one.com/sitemaps/sitemap.xml.gz'
111
+ end
112
+
113
+ it "should append a slash to the path" do
114
+ ls.default_host = 'http://one.com'
115
+ ls.sitemaps_path = 'sitemaps'
116
+ ls.sitemap.location.url.should == 'http://one.com/sitemaps/sitemap.xml.gz'
117
+ ls.sitemap_index.location.url.should == 'http://one.com/sitemaps/sitemap.xml.gz'
118
+ end
119
+ end
120
+
121
+ describe "sitemap_index_url" do
122
+ it "should return the url to the index file" do
123
+ ls.default_host = default_host
124
+ ls.sitemap_index.location.url.should == "#{default_host}/sitemap.xml.gz"
125
+ ls.sitemap_index_url.should == ls.sitemap_index.location.url
126
+ end
127
+ end
128
+
129
+ describe "search_engines" do
130
+ it "should have search engines by default" do
131
+ ls.search_engines.should be_a(Hash)
132
+ ls.search_engines.size.should == 2
133
+ end
134
+
135
+ it "should support being modified" do
136
+ ls.search_engines[:newengine] = 'abc'
137
+ ls.search_engines.size.should == 3
138
+ end
139
+
140
+ it "should support being set to nil" do
141
+ ls = SitemapGenerator::LinkSet.new(:default_host => 'http://one.com', :search_engines => nil)
142
+ ls.search_engines.should be_a(Hash)
143
+ ls.search_engines.should be_empty
144
+ ls.search_engines = nil
145
+ ls.search_engines.should be_a(Hash)
146
+ ls.search_engines.should be_empty
147
+ end
148
+ end
149
+
150
+ describe "ping search engines" do
151
+ it "should not fail" do
152
+ ls.expects(:open).at_least_once
153
+ lambda { ls.ping_search_engines }.should_not raise_error
154
+ end
155
+
156
+ it "should raise if no host is set" do
157
+ lambda { SitemapGenerator::LinkSet.new.ping_search_engines }.should raise_error(SitemapGenerator::SitemapError, 'No value set for host')
158
+ end
159
+
160
+ it "should use the sitemap index url provided" do
161
+ index_url = 'http://example.com/index.xml'
162
+ ls = SitemapGenerator::LinkSet.new(:search_engines => { :google => 'http://google.com/?url=%s' })
163
+ ls.expects(:open).with("http://google.com/?url=#{CGI.escape(index_url)}")
164
+ ls.ping_search_engines(index_url)
165
+ end
166
+
167
+ it "should use the sitemap index url from the link set" do
168
+ ls = SitemapGenerator::LinkSet.new(
169
+ :default_host => default_host,
170
+ :search_engines => { :google => 'http://google.com/?url=%s' })
171
+ index_url = ls.sitemap_index_url
172
+ ls.expects(:open).with("http://google.com/?url=#{CGI.escape(index_url)}")
173
+ ls.ping_search_engines
174
+ end
175
+
176
+ it "should include the given search engines" do
177
+ ls.search_engines = nil
178
+ ls.expects(:open).with(regexp_matches(/^http:\/\/newnegine\.com\?/))
179
+ ls.ping_search_engines(:newengine => 'http://newnegine.com?%s')
180
+
181
+ ls.expects(:open).with(regexp_matches(/^http:\/\/newnegine\.com\?/)).twice
182
+ ls.ping_search_engines(:newengine => 'http://newnegine.com?%s', :anotherengine => 'http://newnegine.com?%s')
183
+ end
184
+ end
185
+
186
+ describe "verbose" do
187
+ it "should be set as an initialize option" do
188
+ SitemapGenerator::LinkSet.new(:default_host => default_host, :verbose => false).verbose.should be_false
189
+ SitemapGenerator::LinkSet.new(:default_host => default_host, :verbose => true).verbose.should be_true
190
+ end
191
+
192
+ it "should be set as an accessor" do
193
+ ls.verbose = true
194
+ ls.verbose.should be_true
195
+ ls.verbose = false
196
+ ls.verbose.should be_false
197
+ end
198
+
199
+ it "should use SitemapGenerator.verbose as a default" do
200
+ SitemapGenerator.expects(:verbose).returns(true).at_least_once
201
+ SitemapGenerator::LinkSet.new.verbose.should be_true
202
+ SitemapGenerator.expects(:verbose).returns(false).at_least_once
203
+ SitemapGenerator::LinkSet.new.verbose.should be_false
204
+ end
205
+ end
206
+
207
+ describe "when finalizing" do
208
+ let(:ls) { SitemapGenerator::LinkSet.new(:default_host => default_host, :verbose => true, :create_index => true) }
209
+
210
+ it "should output summary lines" do
211
+ ls.sitemap.location.expects(:summary)
212
+ ls.sitemap_index.location.expects(:summary)
213
+ ls.finalize!
214
+ end
215
+ end
216
+
217
+ describe "sitemaps host" do
218
+ let(:new_host) { 'http://wowza.com' }
219
+
220
+ it "should have a host" do
221
+ ls.default_host = default_host
222
+ ls.default_host.should == default_host
223
+ end
224
+
225
+ it "should default to default host" do
226
+ ls.sitemaps_host.should == ls.default_host
227
+ end
228
+
229
+ it "should update the host in the sitemaps when changed" do
230
+ ls.sitemaps_host = new_host
231
+ ls.sitemaps_host.should == new_host
232
+ ls.sitemap.location.host.should == ls.sitemaps_host
233
+ ls.sitemap_index.location.host.should == ls.sitemaps_host
234
+ end
235
+
236
+ it "should not change the default host for links" do
237
+ ls.sitemaps_host = new_host
238
+ ls.default_host.should == default_host
239
+ end
240
+ end
241
+
242
+ describe "with a sitemap index specified" do
243
+ before :each do
244
+ @index = SitemapGenerator::Builder::SitemapIndexFile.new(:host => default_host)
245
+ @ls = SitemapGenerator::LinkSet.new(:sitemap_index => @index, :sitemaps_host => 'http://newhost.com')
246
+ end
247
+
248
+ it "should not modify the index" do
249
+ @ls.filename = :newname
250
+ @ls.sitemap.location.filename.should =~ /newname/
251
+ @ls.sitemap_index.location.filename =~ /sitemap/
252
+ end
253
+
254
+ it "should not modify the index" do
255
+ @ls.sitemaps_host = 'http://newhost.com'
256
+ @ls.sitemap.location.host.should == 'http://newhost.com'
257
+ @ls.sitemap_index.location.host.should == default_host
258
+ end
259
+
260
+ it "should not finalize the index" do
261
+ @ls.send(:finalize_sitemap_index!)
262
+ @ls.sitemap_index.finalized?.should be_false
263
+ end
264
+ end
265
+
266
+ describe "new group" do
267
+ describe "general behaviour" do
268
+ it "should return a LinkSet" do
269
+ ls.group.should be_a(SitemapGenerator::LinkSet)
270
+ end
271
+
272
+ it "should inherit the index" do
273
+ ls.group.sitemap_index.should == ls.sitemap_index
274
+ end
275
+
276
+ it "should protect the sitemap_index" do
277
+ ls.group.instance_variable_get(:@protect_index).should be_true
278
+ end
279
+
280
+ it "should not allow chaning the public_path" do
281
+ ls.group(:public_path => 'new/path/').public_path.to_s.should == ls.public_path.to_s
282
+ end
283
+ end
284
+
285
+ describe "include_index" do
286
+ it "should set the value" do
287
+ ls.group(:include_index => !ls.include_index).include_index.should_not == ls.include_index
288
+ end
289
+
290
+ it "should default to false" do
291
+ ls.group.include_index.should be_false
292
+ end
293
+ end
294
+
295
+ describe "include_root" do
296
+ it "should set the value" do
297
+ ls.group(:include_root => !ls.include_root).include_root.should_not == ls.include_root
298
+ end
299
+
300
+ it "should default to false" do
301
+ ls.group.include_root.should be_false
302
+ end
303
+ end
304
+
305
+ describe "filename" do
306
+ it "should inherit the value" do
307
+ ls.group.filename.should == :sitemap
308
+ end
309
+
310
+ it "should set the value" do
311
+ group = ls.group(:filename => :xxx)
312
+ group.filename.should == :xxx
313
+ group.sitemap.location.filename.should =~ /xxx/
314
+ end
315
+ end
316
+
317
+ describe "verbose" do
318
+ it "should inherit the value" do
319
+ ls.group.verbose.should == ls.verbose
320
+ end
321
+
322
+ it "should set the value" do
323
+ ls.group(:verbose => !ls.verbose).verbose.should_not == ls.verbose
324
+ end
325
+ end
326
+
327
+ describe "sitemaps_path" do
328
+ it "should inherit the sitemaps_path" do
329
+ group = ls.group
330
+ group.sitemaps_path.should == ls.sitemaps_path
331
+ group.sitemap.location.sitemaps_path.should == ls.sitemap.location.sitemaps_path
332
+ end
333
+
334
+ it "should set the sitemaps_path" do
335
+ path = 'new/path'
336
+ group = ls.group(:sitemaps_path => path)
337
+ group.sitemaps_path.should == path
338
+ group.sitemap.location.sitemaps_path.to_s.should == 'new/path/'
339
+ end
340
+ end
341
+
342
+ describe "default_host" do
343
+ it "should inherit the default_host" do
344
+ ls.group.default_host.should == default_host
345
+ end
346
+
347
+ it "should set the default_host" do
348
+ host = 'http://defaulthost.com'
349
+ group = ls.group(:default_host => host)
350
+ group.default_host.should == host
351
+ group.sitemap.location.host.should == host
352
+ end
353
+ end
354
+
355
+ describe "sitemaps_host" do
356
+ it "should set the sitemaps host" do
357
+ @host = 'http://sitemaphost.com'
358
+ @group = ls.group(:sitemaps_host => @host)
359
+ @group.sitemaps_host.should == @host
360
+ @group.sitemap.location.host.should == @host
361
+ end
362
+
363
+ it "should finalize the sitemap if it is the only option" do
364
+ ls.expects(:finalize_sitemap!)
365
+ ls.group(:sitemaps_host => 'http://test.com') {}
366
+ end
367
+
368
+ it "should use the same namer" do
369
+ @group = ls.group(:sitemaps_host => 'http://test.com') {}
370
+ @group.sitemap.location.namer.should == ls.sitemap.location.namer
371
+ end
372
+ end
373
+
374
+ describe "namer" do
375
+ it "should inherit the value" do
376
+ ls.group.namer.should == ls.namer
377
+ ls.group.sitemap.location.namer.should == ls.namer
378
+ end
379
+
380
+ it "should set the value" do
381
+ namer = SitemapGenerator::SimpleNamer.new(:xxx)
382
+ group = ls.group(:namer => namer)
383
+ group.namer.should == namer
384
+ group.sitemap.location.namer.should == namer
385
+ group.sitemap.location.filename.should =~ /xxx/
386
+ end
387
+ end
388
+
389
+ describe "create_index" do
390
+ it "should inherit the value" do
391
+ ls.group.create_index.should == ls.create_index
392
+ ls.create_index = :some_value
393
+ ls.group.create_index.should == :some_value
394
+ end
395
+
396
+ it "should set the value" do
397
+ group = ls.group(:create_index => :some_value)
398
+ group.create_index.should == :some_value
399
+ end
400
+ end
401
+
402
+ describe "should share the current sitemap" do
403
+ it "if only default_host is passed" do
404
+ group = ls.group(:default_host => 'http://newhost.com')
405
+ group.sitemap.should == ls.sitemap
406
+ group.sitemap.location.host.should == 'http://newhost.com'
407
+ end
408
+ end
409
+
410
+ describe "should not share the current sitemap" do
411
+ {
412
+ :filename => :xxx,
413
+ :sitemaps_path => 'en/',
414
+ :filename => :example,
415
+ :namer => SitemapGenerator::SimpleNamer.new(:sitemap)
416
+ }.each do |key, value|
417
+ it "if #{key} is present" do
418
+ ls.group(key => value).sitemap.should_not == ls.sitemap
419
+ end
420
+ end
421
+ end
422
+
423
+ describe "finalizing" do
424
+ it "should only finalize the sitemaps if a block is passed" do
425
+ @group = ls.group
426
+ @group.sitemap.finalized?.should be_false
427
+ end
428
+
429
+ it "should not finalize the sitemap if a group is created" do
430
+ ls.create { group {} }
431
+ ls.sitemap.empty?.should be_true
432
+ ls.sitemap.finalized?.should be_false
433
+ end
434
+
435
+ {:sitemaps_path => 'en/',
436
+ :filename => :example,
437
+ :namer => SitemapGenerator::SimpleNamer.new(:sitemap)
438
+ }.each do |k, v|
439
+
440
+ it "should not finalize the sitemap if #{k} is present" do
441
+ ls.expects(:finalize_sitemap!).never
442
+ ls.group(k => v) { }
443
+ end
444
+ end
445
+ end
446
+
447
+ describe "adapter" do
448
+ it "should inherit the current adapter" do
449
+ ls.adapter = mock('adapter')
450
+ group = ls.group
451
+ group.should_not be(ls)
452
+ group.adapter.should be(ls.adapter)
453
+ end
454
+
455
+ it "should set the value" do
456
+ adapter = mock('adapter')
457
+ group = ls.group(:adapter => adapter)
458
+ group.adapter.should be(adapter)
459
+ end
460
+ end
461
+ end
462
+
463
+ describe "after create" do
464
+ it "should finalize the sitemap index" do
465
+ ls.create {}
466
+ ls.sitemap_index.finalized?.should be_true
467
+ end
468
+
469
+ it "should finalize the sitemap" do
470
+ ls.create {}
471
+ ls.sitemap.finalized?.should be_true
472
+ end
473
+
474
+ it "should not finalize the sitemap if a group was created" do
475
+ ls.instance_variable_set(:@created_group, true)
476
+ ls.send(:finalize_sitemap!)
477
+ ls.sitemap.finalized?.should be_false
478
+ end
479
+ end
480
+
481
+ describe "options to create" do
482
+ before :each do
483
+ ls.stubs(:finalize!)
484
+ end
485
+
486
+ it "should set include_index" do
487
+ original = ls.include_index
488
+ ls.create(:include_index => !original).include_index.should_not == original
489
+ end
490
+
491
+ it "should set include_root" do
492
+ original = ls.include_root
493
+ ls.create(:include_root => !original).include_root.should_not == original
494
+ end
495
+
496
+ it "should set the filename" do
497
+ ls.create(:filename => :xxx)
498
+ ls.filename.should == :xxx
499
+ ls.sitemap.location.filename.should =~ /xxx/
500
+ end
501
+
502
+ it "should set verbose" do
503
+ original = ls.verbose
504
+ ls.create(:verbose => !original).verbose.should_not == original
505
+ end
506
+
507
+ it "should set the sitemaps_path" do
508
+ path = 'new/path'
509
+ ls.create(:sitemaps_path => path)
510
+ ls.sitemaps_path.should == path
511
+ ls.sitemap.location.sitemaps_path.to_s.should == 'new/path/'
512
+ end
513
+
514
+ it "should set the default_host" do
515
+ host = 'http://defaulthost.com'
516
+ ls.create(:default_host => host)
517
+ ls.default_host.should == host
518
+ ls.sitemap.location.host.should == host
519
+ end
520
+
521
+ it "should set the sitemaps host" do
522
+ host = 'http://sitemaphost.com'
523
+ ls.create(:sitemaps_host => host)
524
+ ls.sitemaps_host.should == host
525
+ ls.sitemap.location.host.should == host
526
+ end
527
+
528
+ it "should set the namer" do
529
+ namer = SitemapGenerator::SimpleNamer.new(:xxx)
530
+ ls.create(:namer => namer)
531
+ ls.namer.should == namer
532
+ ls.sitemap.location.namer.should == namer
533
+ ls.sitemap.location.filename.should =~ /xxx/
534
+ end
535
+
536
+ it "should support both namer and filename options" do
537
+ namer = SitemapGenerator::SimpleNamer.new("sitemap2")
538
+ ls.create(:namer => namer, :filename => "sitemap1")
539
+ ls.namer.should == namer
540
+ ls.sitemap.location.namer.should == namer
541
+ ls.sitemap.location.filename.should =~ /^sitemap2/
542
+ ls.sitemap_index.location.filename.should =~ /^sitemap2/
543
+ end
544
+
545
+ it "should support both namer and filename options no matter the order" do
546
+ options = {
547
+ :namer => SitemapGenerator::SimpleNamer.new('sitemap1'),
548
+ :filename => 'sitemap2'
549
+ }
550
+ ls.create(options)
551
+ ls.sitemap.location.filename.should =~ /^sitemap1/
552
+ ls.sitemap_index.location.filename.should =~ /^sitemap1/
553
+ end
554
+
555
+ it "should not modify the options hash" do
556
+ options = { :filename => 'sitemaptest', :verbose => false }
557
+ ls.create(options)
558
+ options.should == { :filename => 'sitemaptest', :verbose => false }
559
+ end
560
+
561
+ it "should set create_index" do
562
+ ls.create(:create_index => :auto)
563
+ ls.create_index.should == :auto
564
+ end
565
+ end
566
+
567
+ describe "reset!" do
568
+ it "should reset the sitemap namer" do
569
+ SitemapGenerator::Sitemap.namer.expects(:reset)
570
+ SitemapGenerator::Sitemap.create(:default_host => 'http://cnn.com')
571
+ end
572
+
573
+ it "should reset the default link variable" do
574
+ SitemapGenerator::Sitemap.instance_variable_set(:@added_default_links, true)
575
+ SitemapGenerator::Sitemap.create(:default_host => 'http://cnn.com')
576
+ SitemapGenerator::Sitemap.instance_variable_set(:@added_default_links, false)
577
+ end
578
+ end
579
+
580
+ describe "include_root?" do
581
+ it "should return false" do
582
+ ls.include_root = false
583
+ ls.include_root.should be_false
584
+ end
585
+
586
+ it "should return true" do
587
+ ls.include_root = true
588
+ ls.include_root.should be_true
589
+ end
590
+ end
591
+
592
+ describe "include_index?" do
593
+ let(:sitemaps_host) { 'http://amazon.com' }
594
+
595
+ it "should be true if no sitemaps_host set, or it is the same" do
596
+ ls.include_index = true
597
+ ls.sitemaps_host = default_host
598
+ ls.include_index?.should be_true
599
+
600
+ ls.sitemaps_host = nil
601
+ ls.include_index?.should be_true
602
+ end
603
+
604
+ it "should be false if include_index is false or sitemaps_host differs" do
605
+ ls.include_index = false
606
+ ls.sitemaps_host = default_host
607
+ ls.include_index?.should be_false
608
+
609
+ ls.include_index = true
610
+ ls.sitemaps_host = sitemaps_host
611
+ ls.include_index?.should be_false
612
+ end
613
+
614
+ it "should return false" do
615
+ ls = SitemapGenerator::LinkSet.new(:default_host => default_host, :sitemaps_host => sitemaps_host)
616
+ ls.include_index?.should be_false
617
+ end
618
+ end
619
+
620
+ describe "output" do
621
+ it "should not output" do
622
+ ls.verbose = false
623
+ ls.expects(:puts).never
624
+ ls.send(:output, '')
625
+ end
626
+
627
+ it "should print the given string" do
628
+ ls.verbose = true
629
+ ls.expects(:puts).with('')
630
+ ls.send(:output, '')
631
+ end
632
+ end
633
+
634
+ describe "yield_sitemap" do
635
+ it "should default to the value of SitemapGenerator.yield_sitemap?" do
636
+ SitemapGenerator.expects(:yield_sitemap?).returns(true)
637
+ ls.yield_sitemap?.should be_true
638
+ SitemapGenerator.expects(:yield_sitemap?).returns(false)
639
+ ls.yield_sitemap?.should be_false
640
+ end
641
+
642
+ it "should be settable as an option" do
643
+ SitemapGenerator.expects(:yield_sitemap?).never
644
+ SitemapGenerator::LinkSet.new(:yield_sitemap => true).yield_sitemap?.should be_true
645
+ SitemapGenerator::LinkSet.new(:yield_sitemap => false).yield_sitemap?.should be_false
646
+ end
647
+
648
+ it "should be settable as an attribute" do
649
+ ls.yield_sitemap = true
650
+ ls.yield_sitemap?.should be_true
651
+ ls.yield_sitemap = false
652
+ ls.yield_sitemap?.should be_false
653
+ end
654
+
655
+ it "should yield the sitemap in the call to create" do
656
+ ls.send(:interpreter).expects(:eval).with(:yield_sitemap => true)
657
+ ls.yield_sitemap = true
658
+ ls.create
659
+ ls.send(:interpreter).expects(:eval).with(:yield_sitemap => false)
660
+ ls.yield_sitemap = false
661
+ ls.create
662
+ end
663
+ end
664
+
665
+ describe "add" do
666
+ it "should not modify the options hash" do
667
+ options = { :host => 'http://newhost.com' }
668
+ ls.add('/home', options)
669
+ options.should == { :host => 'http://newhost.com' }
670
+ end
671
+
672
+ it "should add the link to the sitemap and include the default host" do
673
+ ls.stubs(:add_default_links)
674
+ ls.sitemap.expects(:add).with('/home', :host => ls.default_host)
675
+ ls.add('/home')
676
+ end
677
+
678
+ it "should allow setting of a custom host" do
679
+ ls.stubs(:add_default_links)
680
+ ls.sitemap.expects(:add).with('/home', :host => 'http://newhost.com')
681
+ ls.add('/home', :host => 'http://newhost.com')
682
+ end
683
+
684
+ it "should add the default links if they have not been added" do
685
+ ls.expects(:add_default_links)
686
+ ls.add('/home')
687
+ end
688
+ end
689
+
690
+ describe "add_to_index" do
691
+ it "should add the link to the sitemap index and pass options" do
692
+ ls.sitemap_index.expects(:add).with('/test', has_entry(:option => 'value'))
693
+ ls.add_to_index('/test', :option => 'value')
694
+ end
695
+
696
+ it "should not modify the options hash" do
697
+ options = { :host => 'http://newhost.com' }
698
+ ls.add_to_index('/home', options)
699
+ options.should == { :host => 'http://newhost.com' }
700
+ end
701
+
702
+ describe "host" do
703
+ it "should be the sitemaps_host" do
704
+ ls.sitemaps_host = 'http://sitemapshost.com'
705
+ ls.sitemap_index.expects(:add).with('/home', :host => 'http://sitemapshost.com')
706
+ ls.add_to_index('/home')
707
+ end
708
+
709
+ it "should be the default_host if no sitemaps_host set" do
710
+ ls.sitemap_index.expects(:add).with('/home', :host => ls.default_host)
711
+ ls.add_to_index('/home')
712
+ end
713
+
714
+ it "should allow setting a custom host" do
715
+ ls.sitemap_index.expects(:add).with('/home', :host => 'http://newhost.com')
716
+ ls.add_to_index('/home', :host => 'http://newhost.com')
717
+ end
718
+ end
719
+ end
720
+
721
+ describe "create_index" do
722
+ let(:location) { SitemapGenerator::SitemapLocation.new(:namer => SitemapGenerator::SimpleNamer.new(:sitemap), :public_path => 'tmp/', :sitemaps_path => 'test/', :host => 'http://example.com/') }
723
+ let(:sitemap) { SitemapGenerator::Builder::SitemapFile.new(location) }
724
+
725
+ describe "when false" do
726
+ let(:ls) { SitemapGenerator::LinkSet.new(:default_host => default_host, :create_index => false) }
727
+
728
+ it "should not write the index" do
729
+ ls.send(:finalize_sitemap_index!)
730
+ ls.sitemap_index.written?.should be_false
731
+ end
732
+
733
+ it "should still add finalized sitemaps to the index (but the index is never finalized)" do
734
+ ls.expects(:add_to_index).with(ls.sitemap).once
735
+ ls.send(:finalize_sitemap!)
736
+ end
737
+ end
738
+
739
+ describe "when true" do
740
+ let(:ls) { SitemapGenerator::LinkSet.new(:default_host => default_host, :create_index => true) }
741
+
742
+ it "should always finalize the index" do
743
+ ls.send(:finalize_sitemap_index!)
744
+ ls.sitemap_index.finalized?.should be_true
745
+ end
746
+
747
+ it "should add finalized sitemaps to the index" do
748
+ ls.expects(:add_to_index).with(ls.sitemap).once
749
+ ls.send(:finalize_sitemap!)
750
+ end
751
+ end
752
+
753
+ describe "when :auto" do
754
+ let(:ls) { SitemapGenerator::LinkSet.new(:default_host => default_host, :create_index => :auto) }
755
+
756
+ it "should not write the index when it is empty" do
757
+ ls.sitemap_index.empty?.should be_true
758
+ ls.send(:finalize_sitemap_index!)
759
+ ls.sitemap_index.written?.should be_false
760
+ end
761
+
762
+ it "should add finalized sitemaps to the index" do
763
+ ls.expects(:add_to_index).with(ls.sitemap).once
764
+ ls.send(:finalize_sitemap!)
765
+ end
766
+
767
+ it "should write the index when a link is added manually" do
768
+ ls.sitemap_index.add '/test'
769
+ ls.sitemap_index.empty?.should be_false
770
+ ls.send(:finalize_sitemap_index!)
771
+ ls.sitemap_index.written?.should be_true
772
+
773
+ # Test that the index url is reported correctly
774
+ ls.sitemap_index.index_url.should == 'http://example.com/sitemap.xml.gz'
775
+ end
776
+
777
+ it "should not write the index when only one sitemap is added (considered internal usage)" do
778
+ ls.sitemap_index.add sitemap
779
+ ls.sitemap_index.empty?.should be_false
780
+ ls.send(:finalize_sitemap_index!)
781
+ ls.sitemap_index.written?.should be_false
782
+
783
+ # Test that the index url is reported correctly
784
+ ls.sitemap_index.index_url.should == sitemap.location.url
785
+ end
786
+
787
+ it "should write the index when more than one sitemap is added (considered internal usage)" do
788
+ ls.sitemap_index.add sitemap
789
+ ls.sitemap_index.add sitemap.new
790
+ ls.send(:finalize_sitemap_index!)
791
+ ls.sitemap_index.written?.should be_true
792
+
793
+ # Test that the index url is reported correctly
794
+ ls.sitemap_index.index_url.should == ls.sitemap_index.location.url
795
+ ls.sitemap_index.index_url.should == 'http://example.com/sitemap.xml.gz'
796
+ end
797
+
798
+ it "should write the index when it has more than one link" do
799
+ ls.sitemap_index.add '/test1'
800
+ ls.sitemap_index.add '/test2'
801
+ ls.send(:finalize_sitemap_index!)
802
+ ls.sitemap_index.written?.should be_true
803
+
804
+ # Test that the index url is reported correctly
805
+ ls.sitemap_index.index_url.should == 'http://example.com/sitemap.xml.gz'
806
+ end
807
+ end
808
+ end
809
+
810
+ describe "when sitemap empty" do
811
+ before :each do
812
+ ls.include_root = false
813
+ end
814
+
815
+ it "should not be written" do
816
+ ls.sitemap.empty?.should be_true
817
+ ls.expects(:add_to_index).never
818
+ ls.send(:finalize_sitemap!)
819
+ end
820
+
821
+ it "should be written" do
822
+ ls.sitemap.add '/test'
823
+ ls.sitemap.empty?.should be_false
824
+ ls.expects(:add_to_index).with(ls.sitemap)
825
+ ls.send(:finalize_sitemap!)
826
+ end
827
+ end
828
+
829
+ describe "compress" do
830
+ it "should be true by default" do
831
+ ls.compress.should be_true
832
+ end
833
+
834
+ it "should be set on the location objects" do
835
+ ls.sitemap.location[:compress].should be_true
836
+ ls.sitemap_index.location[:compress].should be_true
837
+ end
838
+
839
+ it "should be settable and gettable" do
840
+ ls.compress = false
841
+ ls.compress.should be_false
842
+ ls.compress = :all_but_first
843
+ ls.compress.should == :all_but_first
844
+ end
845
+
846
+ it "should update the location objects when set" do
847
+ ls.compress = false
848
+ ls.sitemap.location[:compress].should be_false
849
+ ls.sitemap_index.location[:compress].should be_false
850
+ end
851
+
852
+ describe "in groups" do
853
+ it "should inherit the current compress setting" do
854
+ ls.compress = false
855
+ ls.group.compress.should be_false
856
+ end
857
+
858
+ it "should set the compress value" do
859
+ group = ls.group(:compress => false)
860
+ group.compress.should be_false
861
+ end
862
+ end
863
+ end
864
+ end