sitemap_generator 4.1.0 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/README.md +8 -3
- data/VERSION +1 -1
- data/lib/sitemap_generator/adapters/s3_adapter.rb +2 -0
- data/lib/sitemap_generator/builder/sitemap_index_file.rb +18 -0
- data/lib/sitemap_generator/link_set.rb +11 -4
- data/spec/sitemap_generator/builder/sitemap_index_file_spec.rb +23 -0
- data/spec/sitemap_generator/link_set_spec.rb +17 -4
- data/spec/sitemap_generator/sitemap_generator_spec.rb +51 -1
- metadata +37 -17
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,7 @@ Sitemaps adhere to the [Sitemap 0.9 protocol][sitemap_protocol] specification.
|
|
9
9
|
* Framework agnostic
|
10
10
|
* Supports [News sitemaps][sitemap_news], [Video sitemaps][sitemap_video], [Image sitemaps][sitemap_images], [Geo sitemaps][sitemap_geo], [Mobile sitemaps][sitemap_mobile], [PageMap sitemaps][sitemap_pagemap] and [Alternate Links][alternate_links]
|
11
11
|
* Supports read-only filesystems like Heroku via uploading to a remote host like Amazon S3
|
12
|
-
* Compatible with Rails 2 &
|
12
|
+
* Compatible with Rails 2, 3 & 4 and tested with Ruby REE, 1.9.2 & 1.9.3
|
13
13
|
* Adheres to the [Sitemap 0.9 protocol][sitemap_protocol]
|
14
14
|
* Handles millions of links
|
15
15
|
* Automatically compresses your sitemaps
|
@@ -20,6 +20,8 @@ Sitemaps adhere to the [Sitemap 0.9 protocol][sitemap_protocol] specification.
|
|
20
20
|
|
21
21
|
### Show Me
|
22
22
|
|
23
|
+
This is a simple standalone example. For Rails installation see the Install section.
|
24
|
+
|
23
25
|
Install:
|
24
26
|
|
25
27
|
```
|
@@ -37,7 +39,7 @@ SitemapGenerator::Sitemap.create do
|
|
37
39
|
add '/home', :changefreq => 'daily', :priority => 0.9
|
38
40
|
add '/contact_us', :changefreq => 'weekly'
|
39
41
|
end
|
40
|
-
SitemapGenerator::Sitemap.ping_search_engines #
|
42
|
+
SitemapGenerator::Sitemap.ping_search_engines # Not needed if you use the rake tasks
|
41
43
|
```
|
42
44
|
|
43
45
|
Run it:
|
@@ -103,7 +105,8 @@ That's it! Welcome to the future!
|
|
103
105
|
|
104
106
|
## Changelog
|
105
107
|
|
106
|
-
* v4.1.
|
108
|
+
* v4.1.1: Support setting the S3 region. Fixed bug where incorrect URL was being used in the ping to search engines - only affected sites with a single sitemap file and no index file. Output the URL being pinged in the verbose output. Test in Rails 4.
|
109
|
+
* v4.1.0: [PageMap sitemap][using_pagemaps] support. Tested with Rails 4 pre-release.
|
107
110
|
* v4.0.1: Add a post install message regarding the naming convention change.
|
108
111
|
* **v4.0: NEW, NON-BACKWARDS COMPATIBLE CHANGES.** See above for more info. `create_index` defaults to `:auto`. Define `SitemapGenerator::SimpleNamer` class for simpler custom namers compatible with the new naming conventions. Deprecate `sitemaps_namer`, `sitemap_index_namer` and their respective namer classes. It's more just that their usage is discouraged. Support `nofollow` option on alternate links. Fix formatting of `publication_date` in News sitemaps.
|
109
112
|
* v3.4: Support [alternate links][alternate_links] for urls; Support configurable options in the `SitemapGenerator::S3Adapter`
|
@@ -165,6 +168,8 @@ The Rake tasks expect your sitemap to be at `config/sitemap.rb` but if you need
|
|
165
168
|
|
166
169
|
### Rails
|
167
170
|
|
171
|
+
SitemapGenerator works will all versions of Rails and has been tested in Rails 2, 3 and 4.
|
172
|
+
|
168
173
|
Add the gem to your `Gemfile`:
|
169
174
|
|
170
175
|
```ruby
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.1.
|
1
|
+
4.1.1
|
@@ -8,6 +8,7 @@ module SitemapGenerator
|
|
8
8
|
@aws_secret_access_key = opts[:aws_secret_access_key] || ENV['AWS_SECRET_ACCESS_KEY']
|
9
9
|
@fog_provider = opts[:fog_provider] || ENV['FOG_PROVIDER']
|
10
10
|
@fog_directory = opts[:fog_directory] || ENV['FOG_DIRECTORY']
|
11
|
+
@fog_region = opts[:fog_region] || ENV['FOG_REGION']
|
11
12
|
end
|
12
13
|
|
13
14
|
# Call with a SitemapLocation and string data
|
@@ -19,6 +20,7 @@ module SitemapGenerator
|
|
19
20
|
:aws_secret_access_key => @aws_secret_access_key,
|
20
21
|
:provider => @fog_provider,
|
21
22
|
}
|
23
|
+
credentials[:region] = @fog_region if @fog_region
|
22
24
|
|
23
25
|
storage = Fog::Storage.new(credentials)
|
24
26
|
directory = storage.directories.get(@fog_directory)
|
@@ -27,6 +27,9 @@ module SitemapGenerator
|
|
27
27
|
@reserved_name = nil # holds the name reserved from the namer
|
28
28
|
@frozen = false # rather than actually freeze, use this boolean
|
29
29
|
@first_sitemap = nil # reference to the first thing added to this index
|
30
|
+
# Store the URL of the first sitemap added because if create_index is
|
31
|
+
# false this is the "index" URL
|
32
|
+
@first_sitemap_url = nil
|
30
33
|
end
|
31
34
|
|
32
35
|
# Finalize sitemaps as they are added to the index.
|
@@ -123,6 +126,18 @@ module SitemapGenerator
|
|
123
126
|
@create_index || @location.create_index == true || @location.create_index == :auto && @link_count > 1
|
124
127
|
end
|
125
128
|
|
129
|
+
# Return the index file URL. If create_index is true, this is the URL
|
130
|
+
# of the actual index file. If create_index is false, this is the URL
|
131
|
+
# of the first sitemap that was written out. Only call this method
|
132
|
+
# *after* the files have been finalized.
|
133
|
+
def index_url
|
134
|
+
if create_index? || !@first_sitemap_url
|
135
|
+
@location.url
|
136
|
+
else
|
137
|
+
@first_sitemap_url
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
126
141
|
protected
|
127
142
|
|
128
143
|
# Make sure the first sitemap has been written out and added to the index
|
@@ -131,6 +146,9 @@ module SitemapGenerator
|
|
131
146
|
@first_sitemap.link.write unless @first_sitemap.link.written?
|
132
147
|
super_add(SitemapGenerator::Builder::SitemapIndexUrl.new(@first_sitemap.link, @first_sitemap.options))
|
133
148
|
@link_count -= 1 # we already counted it, don't count it twice
|
149
|
+
# Store the URL because if create_index is false, this is the
|
150
|
+
# "index" URL
|
151
|
+
@first_sitemap_url = @first_sitemap.link.location.url
|
134
152
|
@first_sitemap = nil
|
135
153
|
end
|
136
154
|
end
|
@@ -281,9 +281,11 @@ module SitemapGenerator
|
|
281
281
|
require 'timeout'
|
282
282
|
|
283
283
|
engines = args.last.is_a?(Hash) ? args.pop : {}
|
284
|
-
|
284
|
+
unescaped_url = args.shift || sitemap_index_url
|
285
|
+
index_url = CGI.escape(unescaped_url)
|
285
286
|
|
286
287
|
output("\n")
|
288
|
+
output("Pinging with URL #{unescaped_url}:")
|
287
289
|
search_engines.merge(engines).each do |engine, link|
|
288
290
|
link = link % index_url
|
289
291
|
name = Utilities.titleize(engine.to_s)
|
@@ -291,7 +293,7 @@ module SitemapGenerator
|
|
291
293
|
Timeout::timeout(10) {
|
292
294
|
open(link)
|
293
295
|
}
|
294
|
-
output("Successful ping of #{name}")
|
296
|
+
output(" Successful ping of #{name}")
|
295
297
|
rescue Timeout::Error, StandardError => e
|
296
298
|
output("Ping failed for #{name}: #{e.inspect} (URL #{link})")
|
297
299
|
end
|
@@ -319,9 +321,14 @@ module SitemapGenerator
|
|
319
321
|
@sitemap_index ||= SitemapGenerator::Builder::SitemapIndexFile.new(sitemap_index_location)
|
320
322
|
end
|
321
323
|
|
322
|
-
# Return the full url to the sitemap index file.
|
324
|
+
# Return the full url to the sitemap index file. When `create_index` is `false`
|
325
|
+
# the first sitemap is technically the index, so this will be its URL. It's important
|
326
|
+
# to use this method to get the index url because `sitemap_index.location.url` will
|
327
|
+
# not be correct in such situations.
|
328
|
+
#
|
329
|
+
# KJV: This is somewhat confusing.
|
323
330
|
def sitemap_index_url
|
324
|
-
sitemap_index.
|
331
|
+
sitemap_index.index_url
|
325
332
|
end
|
326
333
|
|
327
334
|
# All done. Write out remaining files.
|
@@ -98,4 +98,27 @@ describe 'SitemapGenerator::Builder::SitemapIndexFile' do
|
|
98
98
|
end
|
99
99
|
end
|
100
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
|
101
124
|
end
|
@@ -152,7 +152,7 @@ describe SitemapGenerator::LinkSet do
|
|
152
152
|
:search_engines => { :google => 'http://google.com/?url=%s' })
|
153
153
|
index_url = ls.sitemap_index_url
|
154
154
|
ls.expects(:open).with("http://google.com/?url=#{CGI.escape(index_url)}")
|
155
|
-
ls.ping_search_engines
|
155
|
+
ls.ping_search_engines
|
156
156
|
end
|
157
157
|
|
158
158
|
it "should include the given search engines" do
|
@@ -777,6 +777,9 @@ describe SitemapGenerator::LinkSet do
|
|
777
777
|
ls.sitemap_index.empty?.should be_false
|
778
778
|
ls.send(:finalize_sitemap_index!)
|
779
779
|
ls.sitemap_index.written?.should be_true
|
780
|
+
|
781
|
+
# Test that the index url is reported correctly
|
782
|
+
ls.sitemap_index.index_url.should == 'http://example.com/sitemap.xml.gz'
|
780
783
|
end
|
781
784
|
|
782
785
|
it "should not write the index when only one sitemap is added (considered internal usage)" do
|
@@ -784,6 +787,9 @@ describe SitemapGenerator::LinkSet do
|
|
784
787
|
ls.sitemap_index.empty?.should be_false
|
785
788
|
ls.send(:finalize_sitemap_index!)
|
786
789
|
ls.sitemap_index.written?.should be_false
|
790
|
+
|
791
|
+
# Test that the index url is reported correctly
|
792
|
+
ls.sitemap_index.index_url.should == sitemap.location.url
|
787
793
|
end
|
788
794
|
|
789
795
|
it "should write the index when more than one sitemap is added (considered internal usage)" do
|
@@ -791,6 +797,10 @@ describe SitemapGenerator::LinkSet do
|
|
791
797
|
ls.sitemap_index.add sitemap.new
|
792
798
|
ls.send(:finalize_sitemap_index!)
|
793
799
|
ls.sitemap_index.written?.should be_true
|
800
|
+
|
801
|
+
# Test that the index url is reported correctly
|
802
|
+
ls.sitemap_index.index_url.should == ls.sitemap_index.location.url
|
803
|
+
ls.sitemap_index.index_url.should == 'http://example.com/sitemap.xml.gz'
|
794
804
|
end
|
795
805
|
|
796
806
|
it "should write the index when it has more than one link" do
|
@@ -798,21 +808,24 @@ describe SitemapGenerator::LinkSet do
|
|
798
808
|
ls.sitemap_index.add '/test2'
|
799
809
|
ls.send(:finalize_sitemap_index!)
|
800
810
|
ls.sitemap_index.written?.should be_true
|
811
|
+
|
812
|
+
# Test that the index url is reported correctly
|
813
|
+
ls.sitemap_index.index_url.should == 'http://example.com/sitemap.xml.gz'
|
801
814
|
end
|
802
815
|
end
|
803
816
|
end
|
804
|
-
|
817
|
+
|
805
818
|
describe "when sitemap empty" do
|
806
819
|
before :each do
|
807
820
|
ls.include_root = false
|
808
821
|
end
|
809
|
-
|
822
|
+
|
810
823
|
it "should not be written" do
|
811
824
|
ls.sitemap.empty?.should be_true
|
812
825
|
ls.expects(:add_to_index).never
|
813
826
|
ls.send(:finalize_sitemap!)
|
814
827
|
end
|
815
|
-
|
828
|
+
|
816
829
|
it "should be written" do
|
817
830
|
ls.sitemap.add '/test'
|
818
831
|
ls.sitemap.empty?.should be_false
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'cgi'
|
2
3
|
|
3
4
|
class Holder
|
4
5
|
class << self
|
@@ -351,32 +352,51 @@ describe "SitemapGenerator" do
|
|
351
352
|
end
|
352
353
|
|
353
354
|
describe "when true" do
|
354
|
-
let(:ls) {
|
355
|
+
let(:ls) {
|
356
|
+
SitemapGenerator::LinkSet.new(
|
357
|
+
:include_root => false,
|
358
|
+
:default_host => 'http://example.com',
|
359
|
+
:create_index => true)
|
360
|
+
}
|
355
361
|
|
356
362
|
it "should always create index" do
|
357
363
|
with_max_links(1) do
|
358
364
|
ls.create { add('/one') }
|
359
365
|
end
|
366
|
+
ls.sitemap_index.link_count.should == 1 # one sitemap
|
360
367
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
361
368
|
file_should_exist(rails_path('public/sitemap1.xml.gz'))
|
362
369
|
file_should_not_exist(rails_path('public/sitemap2.xml.gz'))
|
363
370
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'siteindex'
|
364
371
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap1.xml.gz'), 'sitemap'
|
372
|
+
|
373
|
+
# Test that the index url is reported correctly
|
374
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
375
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
376
|
+
ls.ping_search_engines
|
365
377
|
end
|
366
378
|
|
367
379
|
it "should always create index" do
|
368
380
|
with_max_links(1) do
|
369
381
|
ls.create { add('/one'); add('/two') }
|
370
382
|
end
|
383
|
+
ls.sitemap_index.link_count.should == 2 # two sitemaps
|
371
384
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
372
385
|
file_should_exist(rails_path('public/sitemap1.xml.gz'))
|
373
386
|
file_should_exist(rails_path('public/sitemap2.xml.gz'))
|
374
387
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'siteindex'
|
375
388
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap1.xml.gz'), 'sitemap'
|
376
389
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap2.xml.gz'), 'sitemap'
|
390
|
+
|
391
|
+
# Test that the index url is reported correctly
|
392
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
393
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
394
|
+
ls.ping_search_engines
|
377
395
|
end
|
378
396
|
end
|
379
397
|
|
398
|
+
# Technically when there's no index, the first sitemap is the "index"
|
399
|
+
# regardless of how many sitemaps were created, or if create_index is false.
|
380
400
|
describe "when false" do
|
381
401
|
let(:ls) { SitemapGenerator::LinkSet.new(:include_root => false, :default_host => 'http://example.com', :create_index => false) }
|
382
402
|
|
@@ -384,20 +404,32 @@ describe "SitemapGenerator" do
|
|
384
404
|
with_max_links(1) do
|
385
405
|
ls.create { add('/one') }
|
386
406
|
end
|
407
|
+
ls.sitemap_index.link_count.should == 1 # one sitemap
|
387
408
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
388
409
|
file_should_not_exist(rails_path('public/sitemap1.xml.gz'))
|
389
410
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'sitemap'
|
411
|
+
|
412
|
+
# Test that the index url is reported correctly
|
413
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
414
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
415
|
+
ls.ping_search_engines
|
390
416
|
end
|
391
417
|
|
392
418
|
it "should never create index" do
|
393
419
|
with_max_links(1) do
|
394
420
|
ls.create { add('/one'); add('/two') }
|
395
421
|
end
|
422
|
+
ls.sitemap_index.link_count.should == 2 # two sitemaps
|
396
423
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
397
424
|
file_should_exist(rails_path('public/sitemap1.xml.gz'))
|
398
425
|
file_should_not_exist(rails_path('public/sitemap2.xml.gz'))
|
399
426
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'sitemap'
|
400
427
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap1.xml.gz'), 'sitemap'
|
428
|
+
|
429
|
+
# Test that the index url is reported correctly
|
430
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
431
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
432
|
+
ls.ping_search_engines
|
401
433
|
end
|
402
434
|
end
|
403
435
|
|
@@ -408,15 +440,22 @@ describe "SitemapGenerator" do
|
|
408
440
|
with_max_links(1) do
|
409
441
|
ls.create { add('/one') }
|
410
442
|
end
|
443
|
+
ls.sitemap_index.link_count.should == 1 # one sitemap
|
411
444
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
412
445
|
file_should_not_exist(rails_path('public/sitemap1.xml.gz'))
|
413
446
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'sitemap'
|
447
|
+
|
448
|
+
# Test that the index url is reported correctly
|
449
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
450
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
451
|
+
ls.ping_search_engines
|
414
452
|
end
|
415
453
|
|
416
454
|
it "should create index if more than one sitemap file" do
|
417
455
|
with_max_links(1) do
|
418
456
|
ls.create { add('/one'); add('/two') }
|
419
457
|
end
|
458
|
+
ls.sitemap_index.link_count.should == 2 # two sitemaps
|
420
459
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
421
460
|
file_should_exist(rails_path('public/sitemap1.xml.gz'))
|
422
461
|
file_should_exist(rails_path('public/sitemap2.xml.gz'))
|
@@ -424,6 +463,11 @@ describe "SitemapGenerator" do
|
|
424
463
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'siteindex'
|
425
464
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap1.xml.gz'), 'sitemap'
|
426
465
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap2.xml.gz'), 'sitemap'
|
466
|
+
|
467
|
+
# Test that the index url is reported correctly
|
468
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
469
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
470
|
+
ls.ping_search_engines
|
427
471
|
end
|
428
472
|
|
429
473
|
it "should create index if more than one group" do
|
@@ -433,12 +477,18 @@ describe "SitemapGenerator" do
|
|
433
477
|
group(:filename => :group2) { add('/two') };
|
434
478
|
end
|
435
479
|
end
|
480
|
+
ls.sitemap_index.link_count.should == 2 # two sitemaps
|
436
481
|
file_should_exist(rails_path('public/sitemap.xml.gz'))
|
437
482
|
file_should_exist(rails_path('public/group1.xml.gz'))
|
438
483
|
file_should_exist(rails_path('public/group2.xml.gz'))
|
439
484
|
gzipped_xml_file_should_validate_against_schema rails_path('public/sitemap.xml.gz'), 'siteindex'
|
440
485
|
gzipped_xml_file_should_validate_against_schema rails_path('public/group1.xml.gz'), 'sitemap'
|
441
486
|
gzipped_xml_file_should_validate_against_schema rails_path('public/group2.xml.gz'), 'sitemap'
|
487
|
+
|
488
|
+
# Test that the index url is reported correctly
|
489
|
+
ls.search_engines = { :google => 'http://google.com/?url=%s' }
|
490
|
+
ls.expects(:open).with("http://google.com/?url=#{CGI.escape('http://example.com/sitemap.xml.gz')}")
|
491
|
+
ls.ping_search_engines
|
442
492
|
end
|
443
493
|
end
|
444
494
|
end
|
metadata
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sitemap_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Karl Varga
|
9
|
-
- Adam Salter
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-07-13 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: mocha
|
17
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -22,10 +21,15 @@ dependencies:
|
|
22
21
|
version: '0'
|
23
22
|
type: :development
|
24
23
|
prerelease: false
|
25
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
26
30
|
- !ruby/object:Gem::Dependency
|
27
31
|
name: nokogiri
|
28
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
29
33
|
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
@@ -33,10 +37,15 @@ dependencies:
|
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
37
46
|
- !ruby/object:Gem::Dependency
|
38
47
|
name: rspec
|
39
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
40
49
|
none: false
|
41
50
|
requirements:
|
42
51
|
- - ! '>='
|
@@ -44,10 +53,15 @@ dependencies:
|
|
44
53
|
version: '0'
|
45
54
|
type: :development
|
46
55
|
prerelease: false
|
47
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
48
62
|
- !ruby/object:Gem::Dependency
|
49
63
|
name: builder
|
50
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
51
65
|
none: false
|
52
66
|
requirements:
|
53
67
|
- - ! '>='
|
@@ -55,10 +69,16 @@ dependencies:
|
|
55
69
|
version: '0'
|
56
70
|
type: :runtime
|
57
71
|
prerelease: false
|
58
|
-
version_requirements:
|
59
|
-
|
60
|
-
|
61
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: SitemapGenerator is a framework-agnostic XML Sitemap generator written
|
79
|
+
in Ruby with automatic Rails integration. It supports Video, News, Image, Geo,
|
80
|
+
Mobile, PageMap and Alternate Links sitemap extensions and includes Rake tasks for
|
81
|
+
managing your sitemaps, as well as many other great features.
|
62
82
|
email: kjvarga@gmail.com
|
63
83
|
executables: []
|
64
84
|
extensions: []
|
@@ -163,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
183
|
version: '0'
|
164
184
|
segments:
|
165
185
|
- 0
|
166
|
-
hash: -
|
186
|
+
hash: -880166997178231543
|
167
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
188
|
none: false
|
169
189
|
requirements:
|
@@ -172,10 +192,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
192
|
version: '0'
|
173
193
|
segments:
|
174
194
|
- 0
|
175
|
-
hash: -
|
195
|
+
hash: -880166997178231543
|
176
196
|
requirements: []
|
177
197
|
rubyforge_project:
|
178
|
-
rubygems_version: 1.8.
|
198
|
+
rubygems_version: 1.8.25
|
179
199
|
signing_key:
|
180
200
|
specification_version: 3
|
181
201
|
summary: Easily generate XML Sitemaps
|