xml-sitemap 1.1.3 → 1.3.3
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.
- checksums.yaml +7 -0
- data/.travis.yml +2 -2
- data/Gemfile +1 -2
- data/LICENSE +18 -0
- data/README.md +80 -25
- data/Rakefile +1 -0
- data/lib/xml-sitemap/index.rb +23 -6
- data/lib/xml-sitemap/item.rb +123 -0
- data/lib/xml-sitemap/map.rb +76 -65
- data/lib/xml-sitemap/options.rb +7 -3
- data/lib/xml-sitemap/render_engine.rb +185 -0
- data/lib/xml-sitemap/version.rb +7 -1
- data/lib/xml-sitemap.rb +8 -0
- data/spec/fixtures/empty_index.xml +2 -2
- data/spec/fixtures/encoded_image_map.xml +58 -0
- data/spec/fixtures/encoded_map.xml +0 -3
- data/spec/fixtures/encoded_video_map.xml +53 -0
- data/spec/fixtures/group_index.xml +2 -2
- data/spec/fixtures/sample_index.xml +2 -2
- data/spec/fixtures/sample_index_secure.xml +11 -0
- data/spec/fixtures/sample_many_subdomains_index.xml +11 -0
- data/spec/fixtures/saved_map.xml +0 -7
- data/spec/fixtures/simple_map.xml +1 -1
- data/spec/index_spec.rb +85 -60
- data/spec/item_spec.rb +10 -0
- data/spec/map_spec.rb +277 -115
- data/spec/spec_helper.rb +10 -0
- data/spec/xmlsitemap_spec.rb +21 -6
- data/xml-sitemap.gemspec +6 -5
- metadata +62 -25
data/spec/map_spec.rb
CHANGED
|
@@ -1,123 +1,285 @@
|
|
|
1
|
+
require 'benchmark'
|
|
1
2
|
require 'spec_helper'
|
|
2
3
|
|
|
3
4
|
describe XmlSitemap::Map do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
map = XmlSitemap::Map.new('foobar.com')
|
|
35
|
-
map.add('about').target.should == 'http://foobar.com/about'
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it 'should allow full urls in items' do
|
|
39
|
-
map = XmlSitemap::Map.new('foobar.com', :root => false)
|
|
40
|
-
map.add('https://foobar.com/path').target.should == 'https://foobar.com/path'
|
|
41
|
-
map.add('path2').target.should == 'http://foobar.com/path2'
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'should render urls in https mode' do
|
|
45
|
-
map = XmlSitemap::Map.new('foobar.com', :secure => true)
|
|
46
|
-
map.add('path').target.should == 'https://foobar.com/path'
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it 'should properly set entry time' do
|
|
50
|
-
map = XmlSitemap::Map.new('foobar.com', :time => @base_time)
|
|
51
|
-
map.add('hello').updated.should == @base_time
|
|
52
|
-
map.add('world', :updated => @extra_time).updated.should == Time.gm(2011, 7, 1, 0, 0, 1)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it 'should raise Argument error if no time or date were provided' do
|
|
56
|
-
map = XmlSitemap::Map.new('foobar.com', :time => @base_time)
|
|
57
|
-
proc { map.add('hello', :updated => 'invalid data') }.
|
|
58
|
-
should raise_error ArgumentError, "Time or Date required for :updated!"
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it 'should have properly encoded entities' do
|
|
62
|
-
map = XmlSitemap::Map.new('foobar.com', :time => @base_time)
|
|
63
|
-
map.add('/path?a=b&c=d&e=sample string')
|
|
64
|
-
map.render.should == fixture('encoded_map.xml')
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it 'should not allow more than 50k records' do
|
|
68
|
-
map = XmlSitemap::Map.new('foobar.com')
|
|
69
|
-
proc {
|
|
70
|
-
1.upto(50000) { |i| map.add("url#{i}") }
|
|
71
|
-
}.should raise_error RuntimeError, 'Only less than 50k records allowed!'
|
|
5
|
+
let(:base_time) { Time.gm(2011, 6, 1, 0, 0, 1) }
|
|
6
|
+
let(:extra_time) { Time.gm(2011, 7, 1, 0, 0, 1) }
|
|
7
|
+
|
|
8
|
+
describe '#new' do
|
|
9
|
+
it 'should not allow empty domains' do
|
|
10
|
+
expect { XmlSitemap::Map.new(nil) }.to raise_error ArgumentError
|
|
11
|
+
expect { XmlSitemap::Map.new('') }.to raise_error ArgumentError
|
|
12
|
+
expect { XmlSitemap::Map.new(' ') }.to raise_error ArgumentError
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should not allow empty urls' do
|
|
16
|
+
map = XmlSitemap::Map.new('foobar.com')
|
|
17
|
+
|
|
18
|
+
expect { map.add(nil) }.to raise_error ArgumentError
|
|
19
|
+
expect { map.add('') }.to raise_error ArgumentError
|
|
20
|
+
expect { map.add(' ') }.to raise_error ArgumentError
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should have a default home path' do
|
|
24
|
+
map = XmlSitemap::Map.new('foobar.com')
|
|
25
|
+
map.should_not be_empty
|
|
26
|
+
map.items.first.target.should eq('http://foobar.com/')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'with :home => false' do
|
|
30
|
+
it 'should have no home path' do
|
|
31
|
+
map = XmlSitemap::Map.new('foobar.com', :home => false)
|
|
32
|
+
map.should be_empty
|
|
33
|
+
end
|
|
34
|
+
end
|
|
72
35
|
end
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
36
|
+
|
|
37
|
+
describe '#add' do
|
|
38
|
+
it 'should autocomplete path with no starting slash' do
|
|
39
|
+
map = XmlSitemap::Map.new('foobar.com')
|
|
40
|
+
map.add('about').target.should eq('http://foobar.com/about')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'should allow full urls in items' do
|
|
44
|
+
map = XmlSitemap::Map.new('foobar.com', :root => false)
|
|
45
|
+
map.add('https://foobar.com/path').target.should eq('https://foobar.com/path')
|
|
46
|
+
map.add('path2').target.should eq('http://foobar.com/path2')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'should render urls in https mode' do
|
|
50
|
+
map = XmlSitemap::Map.new('foobar.com', :secure => true)
|
|
51
|
+
map.add('path').target.should eq('https://foobar.com/path')
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'should set entry time' do
|
|
55
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
56
|
+
map.add('hello').updated.should eq(base_time)
|
|
57
|
+
map.add('world', :updated => extra_time).updated.should eq(Time.gm(2011, 7, 1, 0, 0, 1))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'should raise Argument error if no time or date were provided' do
|
|
61
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
62
|
+
expect { map.add('hello', :updated => 5) }.
|
|
63
|
+
to raise_error ArgumentError, "Time, Date, or ISO8601 String required for :updated!"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should not raise Argument error if a iso8601 string is provided' do
|
|
67
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
68
|
+
expect { map.add('hello', :updated => "2011-09-12T23:18:49Z") }.not_to raise_error
|
|
69
|
+
map.add('world', :updated => extra_time.utc.iso8601).updated.should eq(Time.gm(2011, 7, 1, 0, 0, 1).utc.iso8601)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'should not raise Argument error if a string is provided with :validate_time => false' do
|
|
73
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
74
|
+
expect { map.add('hello', :validate_time => false, :updated => 'invalid data') }.not_to raise_error
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'should raise Argument error if an invalid string is provided' do
|
|
78
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
79
|
+
expect { map.add('hello', :updated => 'invalid data') }.
|
|
80
|
+
to raise_error ArgumentError, "String provided to :updated did not match ISO8601 standard!"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'should not allow more than 50k records' do
|
|
84
|
+
map = XmlSitemap::Map.new('foobar.com')
|
|
85
|
+
expect {
|
|
86
|
+
1.upto(50001) { |i| map.add("url#{i}") }
|
|
87
|
+
}.to raise_error RuntimeError, 'Only up to 50k records allowed!'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should not allow urls longer than 2048 characters' do
|
|
91
|
+
long_string = (1..2049).to_a.map { |i| "a" }.join
|
|
92
|
+
|
|
93
|
+
map = XmlSitemap::Map.new('foobar.com')
|
|
94
|
+
expect {
|
|
95
|
+
map.add(long_string)
|
|
96
|
+
}.to raise_error ArgumentError, "Target can't be longer than 2,048 characters!"
|
|
97
|
+
end
|
|
81
98
|
end
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
|
|
100
|
+
describe '#render' do
|
|
101
|
+
|
|
102
|
+
before do
|
|
103
|
+
opts1 = { :image_location => "http://foobar.com/foo.gif" }
|
|
104
|
+
opts2 = { :image_location => "http://foobar.com/foo.gif", :image_title => "Image Title" }
|
|
105
|
+
opts3 = { :image_location => "http://foobar.com/foo.gif", :image_caption => "Image Caption" }
|
|
106
|
+
opts4 = { :image_location => "http://foobar.com/foo.gif", :image_license => "Image License" }
|
|
107
|
+
opts5 = { :image_location => "http://foobar.com/foo.gif", :image_geolocation => "Image GeoLocation" }
|
|
108
|
+
opts6 = { :image_location => "http://foobar.com/foo.gif",
|
|
109
|
+
:image_title => "Image Title",
|
|
110
|
+
:image_caption => "Image Caption",
|
|
111
|
+
:image_license => "Image License",
|
|
112
|
+
:image_geolocation => "Image GeoLocation" }
|
|
113
|
+
opts7 = { :video_thumbnail_location => "http://foobar.com/foo.jpg",
|
|
114
|
+
:video_title => "Video Title",
|
|
115
|
+
:video_description => "Video Description",
|
|
116
|
+
:video_content_location => "http://foobar.com/foo.mp4" }
|
|
117
|
+
opts8 = { :video_thumbnail_location => "http://foobar.com/foo.jpg",
|
|
118
|
+
:video_title => "Video Title",
|
|
119
|
+
:video_description => "Video Description",
|
|
120
|
+
:video_player_location => "http://foobar.com/foo.swf" }
|
|
121
|
+
opts9 = { :video_thumbnail_location => "http://foobar.com/foo.jpg",
|
|
122
|
+
:video_title => "Video Title",
|
|
123
|
+
:video_description => "Video Description",
|
|
124
|
+
:video_content_location => "http://foobar.com/foo.mp4",
|
|
125
|
+
:video_player_location => "http://foobar.com/foo.swf",
|
|
126
|
+
:video_duration => 180,
|
|
127
|
+
:video_expiration_date => Time.gm(2012, 6, 1, 0, 0, 1),
|
|
128
|
+
:video_rating => 3.5,
|
|
129
|
+
:video_view_count => 2500,
|
|
130
|
+
:video_publication_date => base_time,
|
|
131
|
+
:video_family_friendly => "no",
|
|
132
|
+
:video_category => "Video Category",
|
|
133
|
+
:video_restriction => "IT",
|
|
134
|
+
:video_gallery_location => "http://foobar.com/foo.mpu",
|
|
135
|
+
:video_price => 20,
|
|
136
|
+
:video_requires_subscription => "no",
|
|
137
|
+
:video_uploader => "Video Uploader",
|
|
138
|
+
:video_platform => "web",
|
|
139
|
+
:video_live => "no" }
|
|
140
|
+
|
|
141
|
+
@image_map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
142
|
+
@image_map.add('/path?a=b&c=d&e=image support string', opts1)
|
|
143
|
+
@image_map.add('/path?a=b&c=d&e=image support string', opts2)
|
|
144
|
+
@image_map.add('/path?a=b&c=d&e=image support string', opts3)
|
|
145
|
+
@image_map.add('/path?a=b&c=d&e=image support string', opts4)
|
|
146
|
+
@image_map.add('/path?a=b&c=d&e=image support string', opts5)
|
|
147
|
+
@image_map.add('/path?a=b&c=d&e=image support string', opts6)
|
|
148
|
+
|
|
149
|
+
@video_map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
150
|
+
@video_map.add('/path?a=b&c=d&e=video', opts7)
|
|
151
|
+
@video_map.add('/path?a=b&c=d&e=video', opts8)
|
|
152
|
+
@video_map.add('/path?a=b&c=d&e=video', opts9)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it 'should have properly encoded entities' do
|
|
156
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
157
|
+
map.add('/path?a=b&c=d&e=sample string')
|
|
158
|
+
map.render.split("\n")[2..-1].join("\n").should == fixture('encoded_map.xml').split("\n")[2..-1].join("\n")
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context 'with builder engine' do
|
|
162
|
+
it 'should have properly encoded entities' do
|
|
163
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
164
|
+
map.add('/path?a=b&c=d&e=sample string')
|
|
165
|
+
s = map.render(:builder)
|
|
166
|
+
# ignore ordering of urlset attributes by dropping first two lines
|
|
167
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_map.xml').split("\n")[2..-1].join("\n")
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'should have properly encoded entities with image support' do
|
|
171
|
+
s = @image_map.render(:builder)
|
|
172
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_image_map.xml').split("\n")[2..-1].join("\n")
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it 'should have properly encoded entities with video support' do
|
|
176
|
+
s = @video_map.render(:builder)
|
|
177
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_video_map.xml').split("\n")[2..-1].join("\n")
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context 'with nokogiri engine' do
|
|
182
|
+
it 'should have properly encoded entities' do
|
|
183
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
184
|
+
map.add('/path?a=b&c=d&e=sample string')
|
|
185
|
+
s = map.render(:nokogiri)
|
|
186
|
+
# ignore ordering of urlset attributes by dropping first two lines
|
|
187
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_map.xml').split("\n")[2..-1].join("\n")
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it 'should have properly encoded entities with image support' do
|
|
191
|
+
s = @image_map.render(:nokogiri)
|
|
192
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_image_map.xml').split("\n")[2..-1].join("\n")
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it 'should have properly encoded entities with video support' do
|
|
196
|
+
s = @video_map.render(:nokogiri)
|
|
197
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_video_map.xml').split("\n")[2..-1].join("\n")
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
context 'with string engine' do
|
|
202
|
+
it 'should have properly encoded entities' do
|
|
203
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
204
|
+
map.add('/path?a=b&c=d&e=sample string')
|
|
205
|
+
s = map.render(:string)
|
|
206
|
+
# ignore ordering of urlset attributes by dropping first two lines
|
|
207
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_map.xml').split("\n")[2..-1].join("\n")
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'should have properly encoded entities with image support' do
|
|
211
|
+
s = @image_map.render(:string)
|
|
212
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_image_map.xml').split("\n")[2..-1].join("\n")
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it 'should have properly encoded entities with video support' do
|
|
216
|
+
s = @video_map.render(:string)
|
|
217
|
+
s.split("\n")[2..-1].join("\n").should == fixture('encoded_video_map.xml').split("\n")[2..-1].join("\n")
|
|
218
|
+
end
|
|
219
|
+
end
|
|
93
220
|
end
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
221
|
+
|
|
222
|
+
describe '#render_to' do
|
|
223
|
+
it 'should save contents to the filesystem' do
|
|
224
|
+
path = "/tmp/sitemap_#{Time.now.to_i}.xml"
|
|
225
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time) do |m|
|
|
226
|
+
m.add('about')
|
|
227
|
+
m.add('terms')
|
|
228
|
+
m.add('privacy')
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
map.render_to(path)
|
|
232
|
+
|
|
233
|
+
File.read(path).split("\n")[2..-1].join("\n").should eq(fixture('saved_map.xml').split("\n")[2..-1].join("\n"))
|
|
234
|
+
File.delete(path) if File.exists?(path)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
context 'with :gzip => true' do
|
|
238
|
+
it 'should save gzip contents to the filesystem' do
|
|
239
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
240
|
+
|
|
241
|
+
path = "/tmp/sitemap.xml"
|
|
242
|
+
path_gzip = path + ".gz"
|
|
243
|
+
|
|
244
|
+
map.render_to(path)
|
|
245
|
+
map.render_to(path_gzip, :gzip => true)
|
|
246
|
+
|
|
247
|
+
checksum(File.read(path)).should eq(checksum(gunzip(path_gzip)))
|
|
248
|
+
|
|
249
|
+
File.delete(path) if File.exists?(path)
|
|
250
|
+
File.delete(path_gzip) if File.exists?(path_gzip)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it 'should add .gz extension if comression is enabled' do
|
|
254
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
255
|
+
path = '/tmp/sitemap.xml'
|
|
256
|
+
path_gzip = path + ".gz"
|
|
257
|
+
|
|
258
|
+
map.render_to(path)
|
|
259
|
+
map.render_to(path, :gzip => true)
|
|
260
|
+
|
|
261
|
+
checksum(File.read(path)).should eq(checksum(gunzip(path_gzip)))
|
|
262
|
+
|
|
263
|
+
File.delete(path) if File.exists?(path)
|
|
264
|
+
File.delete(path_gzip) if File.exists?(path_gzip)
|
|
265
|
+
end
|
|
266
|
+
end
|
|
108
267
|
end
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
268
|
+
|
|
269
|
+
describe 'performance' do
|
|
270
|
+
it 'should test rendering time' do
|
|
271
|
+
pending "comment this line to run benchmarks, takes roughly 30 seconds"
|
|
272
|
+
map = XmlSitemap::Map.new('foobar.com', :time => base_time)
|
|
273
|
+
|
|
274
|
+
50000.times do |i|
|
|
275
|
+
map.add("hello#{i}")
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
Benchmark.bm do |x|
|
|
279
|
+
x.report("render(:builder)") { map.render(:builder) }
|
|
280
|
+
x.report("render(:nokogiri)") { map.render(:nokogiri) }
|
|
281
|
+
x.report("render(:string)") { map.render(:string) }
|
|
282
|
+
end
|
|
283
|
+
end
|
|
122
284
|
end
|
|
123
|
-
end
|
|
285
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/xmlsitemap_spec.rb
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe 'XmlSitemap' do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
describe '#new' do
|
|
5
|
+
it 'returns a new map instance' do
|
|
6
|
+
XmlSitemap.new('foo.com').should be_a XmlSitemap::Map
|
|
7
|
+
end
|
|
7
8
|
end
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
|
|
10
|
+
describe '#map' do
|
|
11
|
+
it 'returns a new map instance' do
|
|
12
|
+
XmlSitemap.map('foo.com').should be_a XmlSitemap::Map
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe '#index' do
|
|
17
|
+
it 'returns a new index instancet' do
|
|
18
|
+
XmlSitemap.index.should be_a XmlSitemap::Index
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe '#version' do
|
|
23
|
+
it 'returns current version string' do
|
|
24
|
+
XmlSitemap.version.should eq(XmlSitemap::VERSION)
|
|
25
|
+
end
|
|
11
26
|
end
|
|
12
27
|
end
|
data/xml-sitemap.gemspec
CHANGED
|
@@ -2,18 +2,19 @@ require File.expand_path('../lib/xml-sitemap/version', __FILE__)
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "xml-sitemap"
|
|
5
|
-
s.version = XmlSitemap::VERSION
|
|
5
|
+
s.version = XmlSitemap::VERSION
|
|
6
6
|
s.summary = "Simple XML sitemap generator for Ruby/Rails applications."
|
|
7
7
|
s.description = "Provides a wrapper to generate XML sitemaps and sitemap indexes."
|
|
8
8
|
s.homepage = "http://github.com/sosedoff/xml-sitemap"
|
|
9
9
|
s.authors = ["Dan Sosedoff"]
|
|
10
10
|
s.email = ["dan.sosedoff@gmail.com"]
|
|
11
11
|
|
|
12
|
-
s.add_development_dependency 'rake', '~> 0
|
|
13
|
-
s.add_development_dependency 'rspec', '~> 2.
|
|
14
|
-
s.add_development_dependency 'simplecov', '~> 0.
|
|
12
|
+
s.add_development_dependency 'rake', '~> 10.0'
|
|
13
|
+
s.add_development_dependency 'rspec', '~> 2.13'
|
|
14
|
+
s.add_development_dependency 'simplecov', '~> 0.7'
|
|
15
|
+
s.add_development_dependency 'nokogiri', '~> 1.5'
|
|
15
16
|
|
|
16
|
-
s.add_runtime_dependency
|
|
17
|
+
s.add_runtime_dependency 'builder', '>= 2.0'
|
|
17
18
|
|
|
18
19
|
s.files = `git ls-files`.split("\n")
|
|
19
20
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
metadata
CHANGED
|
@@ -1,60 +1,85 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: xml-sitemap
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.3.3
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Dan Sosedoff
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2013-11-04 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rake
|
|
16
|
-
requirement:
|
|
17
|
-
none: false
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
16
|
requirements:
|
|
19
17
|
- - ~>
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: '0
|
|
19
|
+
version: '10.0'
|
|
22
20
|
type: :development
|
|
23
21
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ~>
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '10.0'
|
|
25
27
|
- !ruby/object:Gem::Dependency
|
|
26
28
|
name: rspec
|
|
27
|
-
requirement:
|
|
28
|
-
none: false
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
30
|
requirements:
|
|
30
31
|
- - ~>
|
|
31
32
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '2.
|
|
33
|
+
version: '2.13'
|
|
33
34
|
type: :development
|
|
34
35
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ~>
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '2.13'
|
|
36
41
|
- !ruby/object:Gem::Dependency
|
|
37
42
|
name: simplecov
|
|
38
|
-
requirement:
|
|
39
|
-
none: false
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
40
44
|
requirements:
|
|
41
45
|
- - ~>
|
|
42
46
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '0.
|
|
47
|
+
version: '0.7'
|
|
44
48
|
type: :development
|
|
45
49
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ~>
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0.7'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: nokogiri
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ~>
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '1.5'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ~>
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '1.5'
|
|
47
69
|
- !ruby/object:Gem::Dependency
|
|
48
70
|
name: builder
|
|
49
|
-
requirement:
|
|
50
|
-
none: false
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
51
72
|
requirements:
|
|
52
|
-
- -
|
|
73
|
+
- - '>='
|
|
53
74
|
- !ruby/object:Gem::Version
|
|
54
75
|
version: '2.0'
|
|
55
76
|
type: :runtime
|
|
56
77
|
prerelease: false
|
|
57
|
-
version_requirements:
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - '>='
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '2.0'
|
|
58
83
|
description: Provides a wrapper to generate XML sitemaps and sitemap indexes.
|
|
59
84
|
email:
|
|
60
85
|
- dan.sosedoff@gmail.com
|
|
@@ -66,56 +91,68 @@ files:
|
|
|
66
91
|
- .rspec
|
|
67
92
|
- .travis.yml
|
|
68
93
|
- Gemfile
|
|
94
|
+
- LICENSE
|
|
69
95
|
- README.md
|
|
70
96
|
- Rakefile
|
|
71
97
|
- lib/xml-sitemap.rb
|
|
72
98
|
- lib/xml-sitemap/index.rb
|
|
99
|
+
- lib/xml-sitemap/item.rb
|
|
73
100
|
- lib/xml-sitemap/map.rb
|
|
74
101
|
- lib/xml-sitemap/options.rb
|
|
102
|
+
- lib/xml-sitemap/render_engine.rb
|
|
75
103
|
- lib/xml-sitemap/version.rb
|
|
76
104
|
- spec/fixtures/empty_index.xml
|
|
105
|
+
- spec/fixtures/encoded_image_map.xml
|
|
77
106
|
- spec/fixtures/encoded_map.xml
|
|
107
|
+
- spec/fixtures/encoded_video_map.xml
|
|
78
108
|
- spec/fixtures/group_index.xml
|
|
79
109
|
- spec/fixtures/sample_index.xml
|
|
110
|
+
- spec/fixtures/sample_index_secure.xml
|
|
111
|
+
- spec/fixtures/sample_many_subdomains_index.xml
|
|
80
112
|
- spec/fixtures/saved_map.xml
|
|
81
113
|
- spec/fixtures/simple_map.xml
|
|
82
114
|
- spec/index_spec.rb
|
|
115
|
+
- spec/item_spec.rb
|
|
83
116
|
- spec/map_spec.rb
|
|
84
117
|
- spec/spec_helper.rb
|
|
85
118
|
- spec/xmlsitemap_spec.rb
|
|
86
119
|
- xml-sitemap.gemspec
|
|
87
120
|
homepage: http://github.com/sosedoff/xml-sitemap
|
|
88
121
|
licenses: []
|
|
122
|
+
metadata: {}
|
|
89
123
|
post_install_message:
|
|
90
124
|
rdoc_options: []
|
|
91
125
|
require_paths:
|
|
92
126
|
- lib
|
|
93
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
|
-
none: false
|
|
95
128
|
requirements:
|
|
96
|
-
- -
|
|
129
|
+
- - '>='
|
|
97
130
|
- !ruby/object:Gem::Version
|
|
98
131
|
version: '0'
|
|
99
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
|
-
none: false
|
|
101
133
|
requirements:
|
|
102
|
-
- -
|
|
134
|
+
- - '>='
|
|
103
135
|
- !ruby/object:Gem::Version
|
|
104
136
|
version: '0'
|
|
105
137
|
requirements: []
|
|
106
138
|
rubyforge_project:
|
|
107
|
-
rubygems_version:
|
|
139
|
+
rubygems_version: 2.0.5
|
|
108
140
|
signing_key:
|
|
109
|
-
specification_version:
|
|
141
|
+
specification_version: 4
|
|
110
142
|
summary: Simple XML sitemap generator for Ruby/Rails applications.
|
|
111
143
|
test_files:
|
|
112
144
|
- spec/fixtures/empty_index.xml
|
|
145
|
+
- spec/fixtures/encoded_image_map.xml
|
|
113
146
|
- spec/fixtures/encoded_map.xml
|
|
147
|
+
- spec/fixtures/encoded_video_map.xml
|
|
114
148
|
- spec/fixtures/group_index.xml
|
|
115
149
|
- spec/fixtures/sample_index.xml
|
|
150
|
+
- spec/fixtures/sample_index_secure.xml
|
|
151
|
+
- spec/fixtures/sample_many_subdomains_index.xml
|
|
116
152
|
- spec/fixtures/saved_map.xml
|
|
117
153
|
- spec/fixtures/simple_map.xml
|
|
118
154
|
- spec/index_spec.rb
|
|
155
|
+
- spec/item_spec.rb
|
|
119
156
|
- spec/map_spec.rb
|
|
120
157
|
- spec/spec_helper.rb
|
|
121
158
|
- spec/xmlsitemap_spec.rb
|