massive_sitemap 2.0.0.rc2 → 2.0.0.rc3

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/CHANGELOG.md CHANGED
@@ -4,7 +4,6 @@
4
4
 
5
5
  ## v2.0.x - ???
6
6
 
7
- * updated/fixed Ping
8
7
  * updated Docu
9
8
  * switch to writer chain
10
9
  * add BigSitemap API
@@ -26,3 +25,4 @@
26
25
  * move index build into indexer and resource handling/selection into writer
27
26
  * manifest handling:
28
27
  * moved Amazon S3 integration to [massive_sitemap-writer-s3](https://github.com/rngtng/massive_sitemap-writer-s3)
28
+ * updated/fixed Ping
data/README.md CHANGED
@@ -9,6 +9,13 @@ It implements various generation stategies, e.g. to split large Sitemaps into mu
9
9
 
10
10
  ## Usage
11
11
 
12
+ ```ruby
13
+ index_url = MassiveSitemap.generate(:url => 'test.de/') do
14
+ add "dummy"
15
+ end
16
+ MassiveSitemap.ping(index_url)
17
+ ```
18
+
12
19
  * clear structure
13
20
  * allows extension (S3)
14
21
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.rc2
1
+ 2.0.0.rc3
@@ -3,22 +3,20 @@ module MassiveSitemap
3
3
 
4
4
  class Base
5
5
  OPTS = {
6
- :base_url => nil,
6
+ :url => nil,
7
7
  :indent_by => 2
8
8
  }
9
9
 
10
- HEADER_NAME = 'urlset'
10
+ HEADER_NAME = 'urlset'
11
11
  HEADER_ATTRIBUTES = {
12
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
13
- 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
12
+ 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
13
+ 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
14
14
  'xsi:schemaLocation' => "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
15
15
  }
16
16
 
17
- attr_reader :options
18
-
19
17
  def initialize(writer, options = {}, &block)
20
18
  @writer = writer
21
- @options = OPTS.merge(options)
19
+ @options = self.class::OPTS.merge(options)
22
20
  @opened_tags = []
23
21
 
24
22
  if block
@@ -32,8 +30,9 @@ module MassiveSitemap
32
30
  end
33
31
 
34
32
  def add(path, attrs = {})
35
- add_url! File.join(base_url, path), attrs
33
+ add_url! ::File.join(url, path), attrs
36
34
  rescue MassiveSitemap::Writer::File::FileExistsException => e
35
+ # don't fail here
37
36
  end
38
37
 
39
38
  def init!(&block)
@@ -45,7 +44,7 @@ module MassiveSitemap
45
44
 
46
45
  def close!(indent = true)
47
46
  if name = @opened_tags.pop
48
- @writer.print "\n" + ' ' * options[:indent_by] * @opened_tags.size if indent
47
+ @writer.print "\n" + ' ' * @options[:indent_by] * @opened_tags.size if indent
49
48
  @writer.print "</#{name}>"
50
49
  if @opened_tags.size == 0
51
50
  @writer.close!
@@ -87,14 +86,14 @@ module MassiveSitemap
87
86
 
88
87
  def open!(name, attrs = {})
89
88
  attrs = attrs.map { |attr, value| %Q( #{attr}="#{value}") }.join('')
90
- @writer.print "\n" + ' ' * options[:indent_by] * @opened_tags.size
89
+ @writer.print "\n" + ' ' * @options[:indent_by] * @opened_tags.size
91
90
  @opened_tags << name
92
91
  @writer.print "<#{name}#{attrs}>"
93
92
  end
94
93
 
95
94
  private
96
- def base_url
97
- schema, host = @options[:base_url].scan(/^(https?:\/\/)?(.+?)\/?$/).flatten
95
+ def url
96
+ schema, host = @options[:url].scan(/^(https?:\/\/)?(.+?)\/?$/).flatten
98
97
  "#{schema || 'http://'}#{host}/"
99
98
  rescue
100
99
  ""
@@ -14,6 +14,15 @@ module MassiveSitemap
14
14
  add path, :last_modified => last_modified
15
15
  end
16
16
  end
17
+
18
+ end
19
+
20
+ def self.generate(writer, options = {}, &block)
21
+ index_url(super, writer)
22
+ end
23
+
24
+ def self.index_url(builder, writer)
25
+ ::File.join(builder.send(:url), writer.options[:filename])
17
26
  end
18
27
 
19
28
  def add_url!(location, attrs = {})
@@ -6,12 +6,15 @@ module MassiveSitemap
6
6
  class Rotating < Base
7
7
  NUM_URLS = 1..50_000
8
8
 
9
+ OPTS = Base::OPTS.merge(
10
+ :max_per_sitemap => NUM_URLS.max
11
+ )
12
+
9
13
  def initialize(writer, options = {}, &block)
10
- @max_urls = options[:max_per_sitemap] || NUM_URLS.max
11
14
  @rotations = 0
12
- @urls = 0
15
+ @urls = 0
13
16
 
14
- unless NUM_URLS.member?(@max_urls)
17
+ if options[:max_per_sitemap] && !NUM_URLS.member?(options[:max_per_sitemap])
15
18
  raise ArgumentError, %Q(":max_per_sitemap" must be greater than #{NUM_URLS.min} and smaller than #{NUM_URLS.max})
16
19
  end
17
20
 
@@ -22,7 +25,7 @@ module MassiveSitemap
22
25
  # with same file name but -<counter> appendend
23
26
  def init!(&block)
24
27
  unless @writer.inited?
25
- @urls = 0
28
+ @urls = 0
26
29
  filename = filename_with_rotation(@writer.options[:filename], @rotations)
27
30
  @rotations += 1
28
31
  @writer.init! :filename => filename
@@ -31,7 +34,7 @@ module MassiveSitemap
31
34
  end
32
35
 
33
36
  def add_url!(location, attrs = {})
34
- if @urls >= @max_urls
37
+ if @urls >= @options[:max_per_sitemap]
35
38
  close!
36
39
  end
37
40
  super
@@ -2,7 +2,7 @@ require "massive_sitemap/builder/base"
2
2
 
3
3
  module MassiveSitemap
4
4
  module Builder
5
-
5
+ #shortcut
6
6
  def new(writer, options = {}, &block)
7
7
  Base.new(writer, options, &block)
8
8
  end
@@ -1,21 +1,29 @@
1
- module MassiveSitemap
2
- class Ping
3
- PING = {
4
- :google => 'http://www.google.comwebmasters/tools/ping?sitemap=%s';
5
- :bing => 'http://www.bing.com/webmaster/ping.aspx?siteMap=%s',
6
- :ask => 'http://submissions.ask.com/ping?sitemap=%s'
7
- }
1
+ require 'cgi'
2
+ require 'open-uri'
8
3
 
9
- def self.ping_search_engines(sitemap_uri, engines = [])
10
- require 'net/http'
11
- require 'uri'
12
- require 'cgi'
4
+ module MassiveSitemap
5
+ ENGINES_URLS = {
6
+ :google => 'http://www.google.com/webmasters/tools/ping?sitemap=%s',
7
+ :bing => 'http://www.bing.com/webmaster/ping.aspx?siteMap=%s',
8
+ :ask => 'http://submissions.ask.com/ping?sitemap=%s',
9
+ }
13
10
 
14
- sitemap_uri = CGI::escape(sitemap_uri)
11
+ def ping(url, engines = ENGINES_URLS.keys)
12
+ url = verify_and_escape(url)
15
13
 
16
- Array(engines).each do |engine_url|
17
- Net::HTTP.get URI.parse(engine_url % sitemap_uri)
14
+ Array(engines).each do |engine|
15
+ if engine_url = ENGINES_URLS[engine]
16
+ open(engine_url % url)
18
17
  end
19
18
  end
20
19
  end
20
+ module_function :ping
21
+
22
+ private
23
+ def verify_and_escape(url)
24
+ schema, host, path = url.scan(/^(https?:\/\/)?(.+?)(\/.+)$/).flatten
25
+ raise URI::InvalidURIError, url if path.to_s.empty?
26
+ CGI::escape("#{schema || 'http://'}#{host}#{path}")
27
+ end
28
+ module_function :verify_and_escape
21
29
  end
@@ -1,5 +1,5 @@
1
1
  require 'fileutils'
2
- require "massive_sitemap/writer/base"
2
+ require 'massive_sitemap/writer/base'
3
3
 
4
4
  # Write into File
5
5
 
@@ -10,15 +10,16 @@ module MassiveSitemap
10
10
  class FileExistsException < IOError; end
11
11
 
12
12
  OPTS = Base::OPTS.merge(
13
- :document_full => '.',
13
+ :root => '.',
14
14
  :force_overwrite => false,
15
15
  :filename => "sitemap.xml",
16
16
  :index_filename => "sitemap_index.xml",
17
17
  )
18
18
 
19
19
  def open_stream
20
- dir = ::File.dirname(tmp_filename)
21
- Dir.mkdir(dir) unless ::File.exists?(dir)
20
+ ::File.dirname(tmp_filename).tap do |dir|
21
+ FileUtils.mkdir_p(dir) unless ::File.exists?(dir)
22
+ end
22
23
  ::File.open(tmp_filename, 'w:ASCII-8BIT')
23
24
  end
24
25
 
@@ -45,7 +46,7 @@ module MassiveSitemap
45
46
 
46
47
  private
47
48
  def filename
48
- ::File.join options[:document_full], options[:filename]
49
+ ::File.join options[:root], options[:filename]
49
50
  end
50
51
 
51
52
  def tmp_filename
@@ -53,7 +54,7 @@ module MassiveSitemap
53
54
  end
54
55
 
55
56
  def files
56
- Dir[::File.join(options[:document_full], "*.xml")]
57
+ Dir[::File.join(options[:root], "*.xml")]
57
58
  end
58
59
  end
59
60
 
@@ -19,7 +19,7 @@ module MassiveSitemap
19
19
  end
20
20
 
21
21
  def files
22
- Dir[::File.join(options[:document_full], "*.xml.gz")]
22
+ Dir[::File.join(options[:root], "*.xml.gz")]
23
23
  end
24
24
  end
25
25
  end
@@ -2,51 +2,51 @@ require 'massive_sitemap/writer/file'
2
2
  require 'massive_sitemap/writer/gzip_file'
3
3
  require 'massive_sitemap/builder/rotating'
4
4
  require 'massive_sitemap/builder/index'
5
+ require 'massive_sitemap/ping'
5
6
 
6
- # Page at -> <base_url>
7
+ # Page at -> <url>
7
8
  # http://example.de/dir/
8
9
 
9
- # Index at
10
+ # Index at -> <index_url>
10
11
  # http://sitemap.example.de/index-dir/
11
12
 
12
- # Save at -> <document_full>
13
+ # Save at -> <root>
13
14
  # /root/dir/ -> <document_root>/<document_path>
14
15
 
15
16
  module MassiveSitemap
16
17
  DEFAULTS = {
17
18
  # global
18
- :index_base_url => nil,
19
+ :index_url => nil,
19
20
  :gzip => false,
20
21
  :writer => MassiveSitemap::Writer::File,
21
22
 
22
23
  # writer
23
- :document_full => '.',
24
+ :root => '.',
24
25
  :force_overwrite => false,
25
26
  :filename => "sitemap.xml",
26
27
  :index_filename => "sitemap_index.xml",
27
28
 
28
29
  # builder
29
- :base_url => nil,
30
+ :url => nil,
30
31
  :indent_by => 2,
31
32
  }
32
33
 
33
34
  def generate(options = {}, &block)
34
35
  @options = DEFAULTS.merge options
35
36
 
36
- unless @options[:base_url]
37
- raise ArgumentError, 'you must specify ":base_url" string'
37
+ unless @options[:url]
38
+ raise ArgumentError, 'you must specify ":url" string'
38
39
  end
39
- @options[:index_base_url] ||= @options[:base_url]
40
+ @options[:index_url] ||= @options[:url]
40
41
 
41
- Dir.mkdir(@options[:document_full]) unless ::File.exists?(@options[:document_full])
42
-
43
- @options[:writer] = MassiveSitemap::Writer::GzipFile if @options[:gzip]
42
+ @options[:writer] = Writer::GzipFile if @options[:gzip]
44
43
 
45
44
  @writer = @options[:writer].new @options
46
45
  Builder::Rotating.generate(@writer, @options, &block)
47
46
 
48
- @writer.options.merge!(:filename => @options[:index_filename], :force_overwrite => true)
49
- Builder::Index.generate(@writer, @options.merge(:base_url => @options[:index_base_url]))
47
+ @writer.init!(:filename => @options[:index_filename], :force_overwrite => true)
48
+ Builder::Index.generate(@writer, @options.merge(:url => @options[:index_url]))
50
49
  end
51
50
  module_function :generate
51
+
52
52
  end
@@ -129,7 +129,7 @@ describe MassiveSitemap::Builder::Base do
129
129
  end
130
130
  end
131
131
 
132
- describe ".base_url" do
132
+ describe ".url" do
133
133
  URLS = %w(
134
134
  http://test.de/
135
135
  test.de/
@@ -138,12 +138,12 @@ describe MassiveSitemap::Builder::Base do
138
138
 
139
139
  URLS.each do |url|
140
140
  it "transforms to valid url" do
141
- MassiveSitemap::Builder.new(writer, :base_url => url).send(:base_url).should == "http://test.de/"
141
+ MassiveSitemap::Builder.new(writer, :url => url).send(:url).should == "http://test.de/"
142
142
  end
143
143
  end
144
144
 
145
145
  it "transforms to valid url with https" do
146
- MassiveSitemap::Builder.new(writer, :base_url => "https://test.de/").send(:base_url).should == "https://test.de/"
146
+ MassiveSitemap::Builder.new(writer, :url => "https://test.de/").send(:url).should == "https://test.de/"
147
147
  end
148
148
  end
149
149
  end
@@ -18,9 +18,13 @@ describe MassiveSitemap::Builder::Index do
18
18
  writer.should == %Q(#{INDEX_HEADER}\n<loc>/test</loc>\n</sitemap>\n</sitemapindex>)
19
19
  end
20
20
 
21
- it 'include base_url' do
22
- MassiveSitemap::Builder::Index.new(writer, :base_url => "test.de", :indent_by => 0)
21
+ it 'include url' do
22
+ MassiveSitemap::Builder::Index.new(writer, :url => "test.de", :indent_by => 0)
23
23
  writer.should include("<loc>http://test.de/test</loc>")
24
24
  end
25
25
 
26
+ it 'returns index_url' do
27
+ writer = MassiveSitemap::Writer::File.new(:filename => "sitemap_index.xml")
28
+ MassiveSitemap::Builder::Index.generate(writer, :url => "test.de").should == "http://test.de/sitemap_index.xml"
29
+ end
26
30
  end
@@ -21,138 +21,160 @@ describe MassiveSitemap do
21
21
  FileUtils.rm(filename2) rescue nil
22
22
  end
23
23
 
24
- describe "#initalize" do
25
- it 'fail if no base_url given' do
26
- expect do
27
- MassiveSitemap.generate
28
- end.to raise_error(ArgumentError)
29
- end
30
-
31
- it "does not create empty sitemap file" do
32
- expect do
33
- MassiveSitemap.generate(:base_url => 'test.de/')
34
- end.to_not change { ::File.exists?(filename) }
35
- end
36
-
37
- context "custom writer" do
38
- after do
39
- FileUtils.rm(gz_filename(index_filename)) rescue nil
40
- FileUtils.rm(gz_filename) rescue nil
41
- end
42
-
43
- it 'takes gzips writer' do
24
+ describe "generate" do
25
+ context "initalize" do
26
+ it 'fail if no url given' do
44
27
  expect do
45
- MassiveSitemap.generate(:base_url => 'test.de/', :gzip => true) do
46
- add "dummy"
47
- end
48
- end.to change { ::File.exists?(gz_filename) }.to(true)
28
+ MassiveSitemap.generate
29
+ end.to raise_error(ArgumentError)
49
30
  end
50
31
 
51
- it 'takes custom writer' do
32
+ it "does not create empty sitemap file" do
52
33
  expect do
53
- MassiveSitemap.generate(:base_url => 'test.de/', :writer => MassiveSitemap::Writer::GzipFile) do
54
- add "dummy"
55
- end
56
- end.to change { ::File.exists?(gz_filename) }.to(true)
34
+ MassiveSitemap.generate(:url => 'test.de/')
35
+ end.to_not change { ::File.exists?(filename) }
57
36
  end
58
- end
59
- end
60
37
 
61
- describe "#generate" do
62
- it 'adds url' do
63
- MassiveSitemap.generate(:base_url => 'test.de') do
64
- add "track/name"
38
+ context "custom writer" do
39
+ after do
40
+ FileUtils.rm(gz_filename(index_filename)) rescue nil
41
+ FileUtils.rm(gz_filename) rescue nil
42
+ end
43
+
44
+ it 'takes gzips writer' do
45
+ expect do
46
+ MassiveSitemap.generate(:url => 'test.de/', :gzip => true) do
47
+ add "dummy"
48
+ end
49
+ end.to change { ::File.exists?(gz_filename) }.to(true)
50
+ end
51
+
52
+ it 'takes custom writer' do
53
+ expect do
54
+ MassiveSitemap.generate(:url => 'test.de/', :writer => MassiveSitemap::Writer::GzipFile) do
55
+ add "dummy"
56
+ end
57
+ end.to change { ::File.exists?(gz_filename) }.to(true)
58
+ end
65
59
  end
66
- output.should include("<loc>http://test.de/track/name</loc>")
67
60
  end
68
61
 
69
- it 'adds url with root slash' do
70
- MassiveSitemap.generate(:base_url => 'test.de/') do
71
- add "/track/name"
62
+ context "generate" do
63
+ it 'adds url' do
64
+ MassiveSitemap.generate(:url => 'test.de') do
65
+ add "track/name"
66
+ end
67
+ output.should include("<loc>http://test.de/track/name</loc>")
72
68
  end
73
- output.should include("<loc>http://test.de/track/name</loc>")
74
- end
75
69
 
76
- it "doesn't fail for existing file" do
77
- File.open(filename, 'w') {}
78
- expect do
79
- MassiveSitemap.generate(:base_url => 'test.de/') do
70
+ it 'adds url with root slash' do
71
+ MassiveSitemap.generate(:url => 'test.de/') do
80
72
  add "/track/name"
81
73
  end
82
- end.to_not change { File.stat(filename).mtime }
83
- end
74
+ output.should include("<loc>http://test.de/track/name</loc>")
75
+ end
84
76
 
85
- context 'nested generation' do
86
- it 'adds url of nested builder' do
87
- MassiveSitemap.generate(:base_url => 'test.de/') do
88
- writer = @writer.class.new(@options.merge(:filename => 'sitemap2.xml'))
89
- MassiveSitemap::Builder::Rotating.new(writer, @options) do
90
- add "/set/name"
77
+ it "doesn't fail for existing file" do
78
+ File.open(filename, 'w') {}
79
+ expect do
80
+ MassiveSitemap.generate(:url => 'test.de/') do
81
+ add "/track/name"
91
82
  end
92
- end
93
- output(filename2).should include("<loc>http://test.de/set/name</loc>")
83
+ end.to_not change { File.stat(filename).mtime }
94
84
  end
95
85
 
96
- it 'executes block altough first sitemap exists' do
97
- File.open(filename, 'w') {}
98
- MassiveSitemap.generate(:base_url => 'test.de/') do
99
- writer = @writer.class.new(@options.merge(:filename => 'sitemap2.xml'))
100
- MassiveSitemap::Builder::Rotating.new(writer, @options) do
101
- add "/set/name"
86
+ context 'nested generation' do
87
+ it 'adds url of nested builder' do
88
+ MassiveSitemap.generate(:url => 'test.de/') do
89
+ writer = @writer.class.new(@options.merge(:filename => 'sitemap2.xml'))
90
+ MassiveSitemap::Builder::Rotating.new(writer, @options) do
91
+ add "/set/name"
92
+ end
102
93
  end
94
+ output(filename2).should include("<loc>http://test.de/set/name</loc>")
95
+ end
96
+
97
+ it 'executes block altough first sitemap exists' do
98
+ File.open(filename, 'w') {}
99
+ MassiveSitemap.generate(:url => 'test.de/') do
100
+ writer = @writer.class.new(@options.merge(:filename => 'sitemap2.xml'))
101
+ MassiveSitemap::Builder::Rotating.new(writer, @options) do
102
+ add "/set/name"
103
+ end
104
+ end
105
+ output(filename2).should include("<loc>http://test.de/set/name</loc>")
103
106
  end
104
- output(filename2).should include("<loc>http://test.de/set/name</loc>")
105
107
  end
108
+
106
109
  end
107
110
 
108
- end
111
+ context "generate_index" do
112
+ let(:lastmod) { File.stat(index_filename).mtime.utc.strftime('%Y-%m-%dT%H:%M:%S+00:00') }
109
113
 
110
- describe "#generate_index" do
111
- let(:lastmod) { File.stat(index_filename).mtime.utc.strftime('%Y-%m-%dT%H:%M:%S+00:00') }
114
+ it "does not create empty files" do
115
+ MassiveSitemap.generate(:url => 'test.de/')
116
+ ::File.exists?(index_filename).should be_false
117
+ end
112
118
 
113
- it "does not create empty files" do
114
- MassiveSitemap.generate(:base_url => 'test.de/')
115
- ::File.exists?(index_filename).should be_false
116
- end
119
+ it 'includes urls' do
120
+ MassiveSitemap.generate(:url => 'test.de/', :indent_by => 0) do
121
+ add "dummy"
122
+ end
117
123
 
118
- it 'includes urls' do
119
- MassiveSitemap.generate(:base_url => 'test.de/', :indent_by => 0) do
120
- add "dummy"
124
+ output(index_filename).should include("<sitemap>\n<loc>http://test.de/sitemap.xml</loc>\n<lastmod>#{lastmod}</lastmod>\n</sitemap>")
121
125
  end
122
126
 
123
- output(index_filename).should include("<sitemap>\n<loc>http://test.de/sitemap.xml</loc>\n<lastmod>#{lastmod}</lastmod>\n</sitemap>")
124
- end
127
+ it 'includes index base url' do
128
+ MassiveSitemap.generate(:url => 'test.de/', :index_url => 'index.de/') do
129
+ add "dummy"
130
+ end
125
131
 
126
- it 'includes index base url' do
127
- MassiveSitemap.generate(:base_url => 'test.de/', :index_base_url => 'index.de/') do
128
- add "dummy"
132
+ output(index_filename).should include("<loc>http://index.de/sitemap.xml</loc>")
129
133
  end
130
134
 
131
- output(index_filename).should include("<loc>http://index.de/sitemap.xml</loc>")
132
- end
135
+ it 'overwrites existing one' do
136
+ File.open(index_filename, 'w') {}
137
+ MassiveSitemap.generate(:url => 'test.de/', :index_url => 'index.de/') do
138
+ add "dummy"
139
+ end
133
140
 
134
- it 'overwrites existing one' do
135
- File.open(index_filename, 'w') {}
136
- MassiveSitemap.generate(:base_url => 'test.de/', :index_base_url => 'index.de/') do
137
- add "dummy"
141
+ output(index_filename).should include("<loc>http://index.de/sitemap.xml</loc>")
138
142
  end
139
143
 
140
- output(index_filename).should include("<loc>http://index.de/sitemap.xml</loc>")
141
- end
144
+ context "gziped" do
145
+ after do
146
+ FileUtils.rm(gz_filename(index_filename)) rescue nil
147
+ FileUtils.rm(gz_filename) rescue nil
148
+ end
142
149
 
143
- context "gziped" do
144
- after do
145
- FileUtils.rm(gz_filename(index_filename)) rescue nil
146
- FileUtils.rm(gz_filename) rescue nil
150
+ it 'creates sitemap file' do
151
+ expect do
152
+ MassiveSitemap.generate(:url => 'test.de/', :writer => MassiveSitemap::Writer::GzipFile) do
153
+ add "dummy"
154
+ end
155
+ end.to change { ::File.exists?(gz_filename(index_filename)) }.to(true)
156
+ end
147
157
  end
158
+ end
159
+ end
148
160
 
149
- it 'creates sitemap file' do
150
- expect do
151
- MassiveSitemap.generate(:base_url => 'test.de/', :writer => MassiveSitemap::Writer::GzipFile) do
152
- add "dummy"
153
- end
154
- end.to change { ::File.exists?(gz_filename(index_filename)) }.to(true)
161
+ describe "ping" do
162
+ PINGS = [
163
+ "http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2Ftest.de%2Fsitemap_index.xml",
164
+ "http://www.bing.com/webmaster/ping.aspx?siteMap=http%3A%2F%2Ftest.de%2Fsitemap_index.xml",
165
+ "http://submissions.ask.com/ping?sitemap=http%3A%2F%2Ftest.de%2Fsitemap_index.xml",
166
+ ]
167
+
168
+ it 'calls all engines' do
169
+ MassiveSitemap.should_receive(:open).exactly(3).times.with { |arg|
170
+ arg.should == PINGS.shift
171
+ }.and_return(true)
172
+
173
+ index_url = MassiveSitemap.generate(:url => 'test.de/') do
174
+ add "dummy"
155
175
  end
176
+ MassiveSitemap.ping(index_url)
156
177
  end
157
178
  end
179
+
158
180
  end
data/spec/ping_spec.rb ADDED
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ describe MassiveSitemap do
4
+ describe ".ping" do
5
+ let(:url) { "http://www.example.com" }
6
+
7
+ describe "verify_and_escape" do
8
+ it { MassiveSitemap.verify_and_escape("example.com/test").should == "http%3A%2F%2Fexample.com%2Ftest" }
9
+ it { MassiveSitemap.verify_and_escape("http://example.com/test").should == "http%3A%2F%2Fexample.com%2Ftest" }
10
+ it { MassiveSitemap.verify_and_escape("https://example.com/test").should == "https%3A%2F%2Fexample.com%2Ftest" }
11
+
12
+ it "raise if invalid url" do
13
+ expect do
14
+ MassiveSitemap.verify_and_escape("example.com/")
15
+ end.to raise_error URI::InvalidURIError
16
+ end
17
+ end
18
+
19
+ describe "ping" do
20
+ it "calles google and ask" do
21
+ MassiveSitemap.should_receive(:open).twice()
22
+ MassiveSitemap.ping(url, [:google, :ask])
23
+ end
24
+
25
+ it "doesn't fail for unknown engines" do
26
+ expect do
27
+ MassiveSitemap.ping(url, :unknown)
28
+ end.to_not raise_error
29
+ end
30
+ end
31
+ end
32
+ end
@@ -12,33 +12,38 @@ describe MassiveSitemap::Writer::File do
12
12
  FileUtils.rm(filename2) rescue nil
13
13
  end
14
14
 
15
- describe "document_full" do
16
- let(:folder) { "test" }
15
+ describe "root" do
16
+ let(:root) { "test/test2" }
17
17
 
18
- before do
19
- Dir.mkdir(folder) unless ::File.exists?(folder)
18
+ after do
19
+ FileUtils.rm_rf(root) rescue nil
20
20
  end
21
21
 
22
- after do
23
- FileUtils.rm_rf(folder) rescue nil
22
+ it 'mkdir_p folder' do
23
+ expect do
24
+ MassiveSitemap::Writer::File.new(:root => root).tap do |w|
25
+ w.init!
26
+ w.close!
27
+ end
28
+ end.to change { File.exists?(root) }.to(true)
24
29
  end
25
30
 
26
- it 'appends document_full' do
31
+ it 'appends root' do
27
32
  expect do
28
- MassiveSitemap::Writer::File.new(:document_full => folder).tap do |w|
33
+ MassiveSitemap::Writer::File.new(:root => root).tap do |w|
29
34
  w.init!
30
35
  w.close!
31
36
  end
32
- end.to change { File.exists?("test/#{filename}") }.to(true)
37
+ end.to change { File.exists?("#{root}/#{filename}") }.to(true)
33
38
  end
34
39
 
35
- it 'appends document_full' do
40
+ it 'appends root' do
36
41
  expect do
37
- MassiveSitemap::Writer::File.new(:document_full => "#{folder}/").tap do |w|
42
+ MassiveSitemap::Writer::File.new(:root => "#{root}/").tap do |w|
38
43
  w.init!
39
44
  w.close!
40
45
  end
41
- end.to change { File.exists?("test/#{filename}") }.to(true)
46
+ end.to change { File.exists?("#{root}/#{filename}") }.to(true)
42
47
  end
43
48
  end
44
49
 
@@ -17,13 +17,13 @@ describe MassiveSitemap::Writer::GzipFile do
17
17
  end.to change { File.exists?(gz_filename) }.to(true)
18
18
  end
19
19
 
20
- context "with document_full" do
21
- let(:document_full) { "sitemap"}
20
+ context "with root" do
21
+ let(:root) { "sitemap"}
22
22
 
23
- let(:writer) { MassiveSitemap::Writer::GzipFile.new(:document_full => document_full).tap { |w| w.init! } }
23
+ let(:writer) { MassiveSitemap::Writer::GzipFile.new(:root => root).tap { |w| w.init! } }
24
24
 
25
25
  after do
26
- FileUtils.rm_rf(document_full) rescue nil
26
+ FileUtils.rm_rf(root) rescue nil
27
27
  end
28
28
 
29
29
  it 'creates gzip file in document root' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: massive_sitemap
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc2
4
+ version: 2.0.0.rc3
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-12 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70267113699420 !ruby/object:Gem::Requirement
16
+ requirement: &70334535721800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70267113699420
24
+ version_requirements: *70334535721800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70267113720960 !ruby/object:Gem::Requirement
27
+ requirement: &70334535721340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70267113720960
35
+ version_requirements: *70334535721340
36
36
  description: MassiveSitemap - build huge sitemaps painfree. Differential updates keeps
37
37
  generation time short and reduces load on DB. It's heavealy inspired by BigSitemaps
38
38
  and offers compatiable API
@@ -66,6 +66,7 @@ files:
66
66
  - spec/builder/index_spec.rb
67
67
  - spec/builder/rotating_spec.rb
68
68
  - spec/massive_sitemap_spec.rb
69
+ - spec/ping_spec.rb
69
70
  - spec/spec_helper.rb
70
71
  - spec/writer/file_spec.rb
71
72
  - spec/writer/gzip_file_spec.rb
@@ -99,6 +100,7 @@ test_files:
99
100
  - spec/builder/index_spec.rb
100
101
  - spec/builder/rotating_spec.rb
101
102
  - spec/massive_sitemap_spec.rb
103
+ - spec/ping_spec.rb
102
104
  - spec/spec_helper.rb
103
105
  - spec/writer/file_spec.rb
104
106
  - spec/writer/gzip_file_spec.rb