massive_sitemap 2.0.0.rc3 → 2.0.0.rc4
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 +2 -0
- data/VERSION +1 -1
- data/lib/massive_sitemap/builder/index.rb +2 -2
- data/lib/massive_sitemap/builder/rotating.rb +2 -6
- data/lib/massive_sitemap/lock.rb +20 -0
- data/lib/massive_sitemap/writer/base.rb +29 -16
- data/lib/massive_sitemap/writer/file.rb +5 -2
- data/lib/massive_sitemap/writer/gzip_file.rb +1 -0
- data/lib/massive_sitemap/writer/string.rb +6 -5
- data/lib/massive_sitemap.rb +17 -10
- data/spec/builder/index_spec.rb +11 -3
- data/spec/builder/rotating_spec.rb +3 -9
- data/spec/lock_spec.rb +46 -0
- data/spec/massive_sitemap_spec.rb +6 -0
- data/spec/writer/file_spec.rb +8 -11
- metadata +9 -9
- data/lib/massive_sitemap/writer/locking_file.rb +0 -33
- data/spec/writer/locking_file_spec.rb +0 -34
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
* updated Docu
|
8
8
|
* switch to writer chain
|
9
9
|
* add BigSitemap API
|
10
|
+
* FileManifest -> read all files into streams take that as reference
|
10
11
|
|
11
12
|
## v2.0.0 - 13-02-2012
|
12
13
|
_inital release_
|
@@ -26,3 +27,4 @@
|
|
26
27
|
* manifest handling:
|
27
28
|
* moved Amazon S3 integration to [massive_sitemap-writer-s3](https://github.com/rngtng/massive_sitemap-writer-s3)
|
28
29
|
* updated/fixed Ping
|
30
|
+
* move LockingFile into MassiveSitemap scope
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.0.
|
1
|
+
2.0.0.rc4
|
@@ -11,10 +11,10 @@ module MassiveSitemap
|
|
11
11
|
def initialize(writer, options = {}, &block)
|
12
12
|
super(writer, options) do
|
13
13
|
writer.each do |path, last_modified|
|
14
|
+
next if writer.current && path.include?(writer.current)
|
14
15
|
add path, :last_modified => last_modified
|
15
16
|
end
|
16
17
|
end
|
17
|
-
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.generate(writer, options = {}, &block)
|
@@ -22,7 +22,7 @@ module MassiveSitemap
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.index_url(builder, writer)
|
25
|
-
::File.join(builder.send(:url), writer.
|
25
|
+
::File.join(builder.send(:url), writer.current)
|
26
26
|
end
|
27
27
|
|
28
28
|
def add_url!(location, attrs = {})
|
@@ -7,17 +7,13 @@ module MassiveSitemap
|
|
7
7
|
NUM_URLS = 1..50_000
|
8
8
|
|
9
9
|
OPTS = Base::OPTS.merge(
|
10
|
-
:
|
10
|
+
:max_urls => NUM_URLS.max
|
11
11
|
)
|
12
12
|
|
13
13
|
def initialize(writer, options = {}, &block)
|
14
14
|
@rotations = 0
|
15
15
|
@urls = 0
|
16
16
|
|
17
|
-
if options[:max_per_sitemap] && !NUM_URLS.member?(options[:max_per_sitemap])
|
18
|
-
raise ArgumentError, %Q(":max_per_sitemap" must be greater than #{NUM_URLS.min} and smaller than #{NUM_URLS.max})
|
19
|
-
end
|
20
|
-
|
21
17
|
super
|
22
18
|
end
|
23
19
|
|
@@ -34,7 +30,7 @@ module MassiveSitemap
|
|
34
30
|
end
|
35
31
|
|
36
32
|
def add_url!(location, attrs = {})
|
37
|
-
if @urls >= @options[:
|
33
|
+
if @urls >= @options[:max_urls]
|
38
34
|
close!
|
39
35
|
end
|
40
36
|
super
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
# Create Lock
|
4
|
+
|
5
|
+
module MassiveSitemap
|
6
|
+
LOCK_FILE = 'generator.lock'
|
7
|
+
|
8
|
+
def lock!(&block)
|
9
|
+
if block
|
10
|
+
raise Errno::EACCES if ::File.exists?(LOCK_FILE)
|
11
|
+
::File.open(LOCK_FILE, 'w', ::File::EXCL)
|
12
|
+
begin
|
13
|
+
block.call
|
14
|
+
ensure
|
15
|
+
FileUtils.rm(LOCK_FILE) #unlock!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
module_function :lock!
|
20
|
+
end
|
@@ -11,22 +11,6 @@ module MassiveSitemap
|
|
11
11
|
@stream = nil
|
12
12
|
end
|
13
13
|
|
14
|
-
# Interface
|
15
|
-
def open_stream
|
16
|
-
@string ||= StringIO.new
|
17
|
-
end
|
18
|
-
|
19
|
-
def close_stream(stream)
|
20
|
-
end
|
21
|
-
|
22
|
-
def init?
|
23
|
-
true
|
24
|
-
end
|
25
|
-
|
26
|
-
def streams
|
27
|
-
[]
|
28
|
-
end
|
29
|
-
|
30
14
|
# API
|
31
15
|
def init!(options = {})
|
32
16
|
close!
|
@@ -54,6 +38,35 @@ module MassiveSitemap
|
|
54
38
|
def each(&block)
|
55
39
|
streams.each(&block)
|
56
40
|
end
|
41
|
+
|
42
|
+
def current
|
43
|
+
stream
|
44
|
+
end
|
45
|
+
|
46
|
+
# def flush!
|
47
|
+
# @streams = []
|
48
|
+
# end
|
49
|
+
|
50
|
+
# Interface
|
51
|
+
protected
|
52
|
+
def open_stream
|
53
|
+
@string ||= StringIO.new
|
54
|
+
end
|
55
|
+
|
56
|
+
def close_stream(stream)
|
57
|
+
end
|
58
|
+
|
59
|
+
def init?
|
60
|
+
true
|
61
|
+
end
|
62
|
+
|
63
|
+
def streams
|
64
|
+
@streams ||= []
|
65
|
+
end
|
66
|
+
|
67
|
+
def stream
|
68
|
+
nil
|
69
|
+
end
|
57
70
|
end
|
58
71
|
|
59
72
|
end
|
@@ -13,9 +13,9 @@ module MassiveSitemap
|
|
13
13
|
:root => '.',
|
14
14
|
:force_overwrite => false,
|
15
15
|
:filename => "sitemap.xml",
|
16
|
-
:index_filename => "sitemap_index.xml",
|
17
16
|
)
|
18
17
|
|
18
|
+
protected
|
19
19
|
def open_stream
|
20
20
|
::File.dirname(tmp_filename).tap do |dir|
|
21
21
|
FileUtils.mkdir_p(dir) unless ::File.exists?(dir)
|
@@ -39,11 +39,14 @@ module MassiveSitemap
|
|
39
39
|
|
40
40
|
def streams
|
41
41
|
files.map do |path|
|
42
|
-
next if path.include?(options[:index_filename])
|
43
42
|
[::File.basename(path), ::File.stat(path).mtime]
|
44
43
|
end.compact
|
45
44
|
end
|
46
45
|
|
46
|
+
def stream
|
47
|
+
options[:filename]
|
48
|
+
end
|
49
|
+
|
47
50
|
private
|
48
51
|
def filename
|
49
52
|
::File.join options[:root], options[:filename]
|
@@ -7,11 +7,7 @@ module MassiveSitemap
|
|
7
7
|
module Writer
|
8
8
|
|
9
9
|
class String < Base
|
10
|
-
|
11
|
-
def open_stream
|
12
|
-
@string ||= StringIO.new
|
13
|
-
end
|
14
|
-
|
10
|
+
# accessors to conent, mainly used in tests
|
15
11
|
def to_s
|
16
12
|
@string.string rescue ""
|
17
13
|
end
|
@@ -23,6 +19,11 @@ module MassiveSitemap
|
|
23
19
|
def include?(other_string)
|
24
20
|
to_s.include?(other_string)
|
25
21
|
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
def open_stream
|
25
|
+
@string ||= StringIO.new
|
26
|
+
end
|
26
27
|
end
|
27
28
|
|
28
29
|
end
|
data/lib/massive_sitemap.rb
CHANGED
@@ -2,6 +2,7 @@ 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/lock'
|
5
6
|
require 'massive_sitemap/ping'
|
6
7
|
|
7
8
|
# Page at -> <url>
|
@@ -32,20 +33,26 @@ module MassiveSitemap
|
|
32
33
|
}
|
33
34
|
|
34
35
|
def generate(options = {}, &block)
|
35
|
-
|
36
|
+
lock! do
|
37
|
+
@options = DEFAULTS.merge options
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
unless @options[:url]
|
40
|
+
raise ArgumentError, 'you must specify ":url" string'
|
41
|
+
end
|
42
|
+
@options[:index_url] ||= @options[:url]
|
43
|
+
|
44
|
+
if @options[:max_urls] && !Builder::Rotating::NUM_URLS.member?(@options[:max_urls])
|
45
|
+
raise ArgumentError, %Q(":max_urls" must be greater than #{NUM_URLS.min} and smaller than #{NUM_URLS.max})
|
46
|
+
end
|
41
47
|
|
42
|
-
|
48
|
+
@options[:writer] = Writer::GzipFile if @options[:gzip]
|
43
49
|
|
44
|
-
|
45
|
-
|
50
|
+
@writer = @options[:writer].new @options
|
51
|
+
Builder::Rotating.generate(@writer, @options, &block)
|
46
52
|
|
47
|
-
|
48
|
-
|
53
|
+
@writer.init!(:filename => @options[:index_filename], :force_overwrite => true)
|
54
|
+
Builder::Index.generate(@writer, @options.merge(:url => @options[:index_url]))
|
55
|
+
end
|
49
56
|
end
|
50
57
|
module_function :generate
|
51
58
|
|
data/spec/builder/index_spec.rb
CHANGED
@@ -23,8 +23,16 @@ describe MassiveSitemap::Builder::Index do
|
|
23
23
|
writer.should include("<loc>http://test.de/test</loc>")
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
MassiveSitemap::
|
26
|
+
context "with file writer" do
|
27
|
+
let(:index_filename) { "sitemap_index.xml" }
|
28
|
+
let(:writer) { MassiveSitemap::Writer::File.new(:filename => index_filename) }
|
29
|
+
|
30
|
+
after do
|
31
|
+
FileUtils.rm(index_filename)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns index_url' do
|
35
|
+
MassiveSitemap::Builder::Index.generate(writer, :url => "test.de").should == "http://test.de/sitemap_index.xml"
|
36
|
+
end
|
29
37
|
end
|
30
38
|
end
|
@@ -8,12 +8,6 @@ describe MassiveSitemap::Builder::Rotating do
|
|
8
8
|
let(:writer) { MassiveSitemap::Writer::String.new }
|
9
9
|
let(:builder) { MassiveSitemap::Builder::Rotating.new(writer) }
|
10
10
|
|
11
|
-
it 'raises error when max_per_sitemap > MAX_URLS' do
|
12
|
-
expect do
|
13
|
-
MassiveSitemap::Builder::Rotating.new(writer, :max_per_sitemap => MassiveSitemap::Builder::Rotating::NUM_URLS.max + 1)
|
14
|
-
end.to raise_error(ArgumentError)
|
15
|
-
end
|
16
|
-
|
17
11
|
it 'generates one url' do
|
18
12
|
MassiveSitemap::Builder::Rotating.new(writer) do
|
19
13
|
add_url! 'test'
|
@@ -22,7 +16,7 @@ describe MassiveSitemap::Builder::Rotating do
|
|
22
16
|
end
|
23
17
|
|
24
18
|
it 'generates two url' do
|
25
|
-
MassiveSitemap::Builder::Rotating.new(writer, :
|
19
|
+
MassiveSitemap::Builder::Rotating.new(writer, :max_urls => 1) do
|
26
20
|
add_url! 'test'
|
27
21
|
add_url! 'test2'
|
28
22
|
end
|
@@ -42,7 +36,7 @@ describe MassiveSitemap::Builder::Rotating do
|
|
42
36
|
it 'generates two url' do
|
43
37
|
expect do
|
44
38
|
expect do
|
45
|
-
MassiveSitemap::Builder::Rotating.new(writer, :
|
39
|
+
MassiveSitemap::Builder::Rotating.new(writer, :max_urls => 1) do
|
46
40
|
add 'test'
|
47
41
|
add 'test2'
|
48
42
|
end
|
@@ -54,7 +48,7 @@ describe MassiveSitemap::Builder::Rotating do
|
|
54
48
|
File.open(filename, 'w') {}
|
55
49
|
expect do
|
56
50
|
expect do
|
57
|
-
MassiveSitemap::Builder::Rotating.new(writer, :
|
51
|
+
MassiveSitemap::Builder::Rotating.new(writer, :max_urls => 1) do
|
58
52
|
begin
|
59
53
|
add 'test'
|
60
54
|
rescue MassiveSitemap::Writer::File::FileExistsException => e
|
data/spec/lock_spec.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require "massive_sitemap/lock"
|
2
|
+
|
3
|
+
describe MassiveSitemap do
|
4
|
+
describe "lock!" do
|
5
|
+
let(:lock_file) { MassiveSitemap::LOCK_FILE }
|
6
|
+
|
7
|
+
after do
|
8
|
+
FileUtils.rm(lock_file) rescue nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'does nothing without block' do
|
12
|
+
MassiveSitemap.lock!
|
13
|
+
::File.exists?(lock_file).should be_false
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'creates lockfile' do
|
17
|
+
File.exists?(lock_file).should be_false
|
18
|
+
MassiveSitemap.lock! do
|
19
|
+
::File.exists?(lock_file).should be_true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'deletes lockfile' do
|
24
|
+
MassiveSitemap.lock! {}
|
25
|
+
::File.exists?(lock_file).should be_false
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'deletes lockfile in case of error' do
|
29
|
+
expect do
|
30
|
+
MassiveSitemap.lock! do
|
31
|
+
raise ArgumentError
|
32
|
+
end
|
33
|
+
end.to raise_error
|
34
|
+
::File.exists?(lock_file).should be_false
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'fails if lockfile exists' do
|
38
|
+
::File.open(lock_file, 'w',) {}
|
39
|
+
expect do
|
40
|
+
MassiveSitemap.lock! do
|
41
|
+
puts "Hi"
|
42
|
+
end
|
43
|
+
end.to raise_error
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -29,6 +29,12 @@ describe MassiveSitemap do
|
|
29
29
|
end.to raise_error(ArgumentError)
|
30
30
|
end
|
31
31
|
|
32
|
+
it 'raises error when max_urls > MAX_URLS' do
|
33
|
+
expect do
|
34
|
+
MassiveSitemap.generate(:max_urls => MassiveSitemap::Builder::Rotating::NUM_URLS.max + 1)
|
35
|
+
end.to raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
|
32
38
|
it "does not create empty sitemap file" do
|
33
39
|
expect do
|
34
40
|
MassiveSitemap.generate(:url => 'test.de/')
|
data/spec/writer/file_spec.rb
CHANGED
@@ -47,13 +47,13 @@ describe MassiveSitemap::Writer::File do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
it '
|
50
|
+
it 'creates file' do
|
51
51
|
expect do
|
52
52
|
writer.close!
|
53
53
|
end.to change { File.exists?(filename) }.to(true)
|
54
54
|
end
|
55
55
|
|
56
|
-
it '
|
56
|
+
it 'creates second file on rotation' do
|
57
57
|
expect do
|
58
58
|
expect do
|
59
59
|
writer.close!
|
@@ -63,19 +63,19 @@ describe MassiveSitemap::Writer::File do
|
|
63
63
|
end.to change { File.exists?(filename2) }.to(true)
|
64
64
|
end
|
65
65
|
|
66
|
-
it '
|
66
|
+
it 'writes into file' do
|
67
67
|
writer.print 'test'
|
68
68
|
writer.close!
|
69
69
|
`cat '#{filename}'`.should == "test"
|
70
70
|
end
|
71
71
|
|
72
|
-
it '
|
72
|
+
it 'inits new file closes current' do
|
73
73
|
writer.print 'test'
|
74
74
|
writer.init!(:filename => filename2)
|
75
75
|
`cat '#{filename}'`.should == "test"
|
76
76
|
end
|
77
77
|
|
78
|
-
it '
|
78
|
+
it 'writes into second file' do
|
79
79
|
writer.print 'test'
|
80
80
|
writer.init!(:filename => filename2)
|
81
81
|
writer.print 'test2'
|
@@ -83,15 +83,11 @@ describe MassiveSitemap::Writer::File do
|
|
83
83
|
`cat '#{filename2}'`.should == "test2"
|
84
84
|
end
|
85
85
|
|
86
|
-
context "
|
86
|
+
context "file exists" do
|
87
87
|
before do
|
88
88
|
File.open(filename, 'w') {}
|
89
89
|
end
|
90
90
|
|
91
|
-
after do
|
92
|
-
FileUtils.rm(filename) rescue nil
|
93
|
-
end
|
94
|
-
|
95
91
|
it 'raises when file exits' do
|
96
92
|
writer = MassiveSitemap::Writer::File.new
|
97
93
|
expect do
|
@@ -99,10 +95,11 @@ describe MassiveSitemap::Writer::File do
|
|
99
95
|
end.to raise_error(MassiveSitemap::Writer::File::FileExistsException)
|
100
96
|
end
|
101
97
|
|
102
|
-
it '
|
98
|
+
it "dosn't raise when overwrite set" do
|
103
99
|
writer = MassiveSitemap::Writer::File.new(:force_overwrite => true)
|
104
100
|
expect do
|
105
101
|
writer.init!
|
102
|
+
writer.close!
|
106
103
|
end.to_not raise_error(MassiveSitemap::Writer::File::FileExistsException)
|
107
104
|
end
|
108
105
|
end
|
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.
|
4
|
+
version: 2.0.0.rc4
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-13 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70276344811920 !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: *
|
24
|
+
version_requirements: *70276344811920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70276340400560 !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: *
|
35
|
+
version_requirements: *70276340400560
|
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
|
@@ -55,22 +55,22 @@ files:
|
|
55
55
|
- lib/massive_sitemap/builder/base.rb
|
56
56
|
- lib/massive_sitemap/builder/index.rb
|
57
57
|
- lib/massive_sitemap/builder/rotating.rb
|
58
|
+
- lib/massive_sitemap/lock.rb
|
58
59
|
- lib/massive_sitemap/ping.rb
|
59
60
|
- lib/massive_sitemap/writer/base.rb
|
60
61
|
- lib/massive_sitemap/writer/file.rb
|
61
62
|
- lib/massive_sitemap/writer/gzip_file.rb
|
62
|
-
- lib/massive_sitemap/writer/locking_file.rb
|
63
63
|
- lib/massive_sitemap/writer/string.rb
|
64
64
|
- massive_sitemap.gemspec
|
65
65
|
- spec/builder/base_spec.rb
|
66
66
|
- spec/builder/index_spec.rb
|
67
67
|
- spec/builder/rotating_spec.rb
|
68
|
+
- spec/lock_spec.rb
|
68
69
|
- spec/massive_sitemap_spec.rb
|
69
70
|
- spec/ping_spec.rb
|
70
71
|
- spec/spec_helper.rb
|
71
72
|
- spec/writer/file_spec.rb
|
72
73
|
- spec/writer/gzip_file_spec.rb
|
73
|
-
- spec/writer/locking_file_spec.rb
|
74
74
|
homepage: http://github.com/rngtng/massive_sitemap
|
75
75
|
licenses: []
|
76
76
|
post_install_message:
|
@@ -99,9 +99,9 @@ test_files:
|
|
99
99
|
- spec/builder/base_spec.rb
|
100
100
|
- spec/builder/index_spec.rb
|
101
101
|
- spec/builder/rotating_spec.rb
|
102
|
+
- spec/lock_spec.rb
|
102
103
|
- spec/massive_sitemap_spec.rb
|
103
104
|
- spec/ping_spec.rb
|
104
105
|
- spec/spec_helper.rb
|
105
106
|
- spec/writer/file_spec.rb
|
106
107
|
- spec/writer/gzip_file_spec.rb
|
107
|
-
- spec/writer/locking_file_spec.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'zlib'
|
2
|
-
|
3
|
-
require "massive_sitemap/writer/file"
|
4
|
-
# Create Lock before writing to file
|
5
|
-
|
6
|
-
module MassiveSitemap
|
7
|
-
module Writer
|
8
|
-
|
9
|
-
class LockingFile < File
|
10
|
-
OPTS = File::OPTS
|
11
|
-
|
12
|
-
LOCK_FILE = 'generator.lock'
|
13
|
-
|
14
|
-
def open_stream
|
15
|
-
::File.open(LOCK_FILE, 'w', ::File::EXCL) #lock!
|
16
|
-
super
|
17
|
-
end
|
18
|
-
|
19
|
-
def close_stream(stream)
|
20
|
-
super
|
21
|
-
FileUtils.rm(LOCK_FILE) #unlock!
|
22
|
-
end
|
23
|
-
|
24
|
-
def init?
|
25
|
-
if ::File.exists?(LOCK_FILE)
|
26
|
-
raise Errno::EACCES
|
27
|
-
end
|
28
|
-
super
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require "massive_sitemap/writer/locking_file"
|
2
|
-
|
3
|
-
describe MassiveSitemap::Writer::LockingFile do
|
4
|
-
let(:filename) { 'sitemap.xml' }
|
5
|
-
let(:tmp_filename) { "#{filename}.tmp" }
|
6
|
-
let(:lock_file) { MassiveSitemap::Writer::LockingFile::LOCK_FILE }
|
7
|
-
let(:writer) { MassiveSitemap::Writer::LockingFile.new.tap { |w| w.init! } }
|
8
|
-
|
9
|
-
after do
|
10
|
-
FileUtils.rm(filename) rescue nil
|
11
|
-
FileUtils.rm(tmp_filename) rescue nil
|
12
|
-
FileUtils.rm(lock_file) rescue nil
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'creates lockfile' do
|
16
|
-
expect do
|
17
|
-
writer
|
18
|
-
end.to change { File.exists?(lock_file) }.to(true)
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'deletes lockfile' do
|
22
|
-
writer
|
23
|
-
expect do
|
24
|
-
writer.close!
|
25
|
-
end.to change { File.exists?(lock_file) }.to(false)
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'fails if lockfile exists' do
|
29
|
-
File.open(lock_file, 'w') {}
|
30
|
-
expect do
|
31
|
-
writer
|
32
|
-
end.to raise_error
|
33
|
-
end
|
34
|
-
end
|