sitemap_generator 4.1.0 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|