robinsp-backitup 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -1,14 +1,18 @@
1
1
  bin/backitup
2
+ sample.backitup
2
3
  spec/test-config.backitup
3
4
  spec/file_packager_spec.rb
4
5
  spec/config_spec.rb
5
6
  spec/runner_spec.rb
7
+ spec/file_list_spec.rb
6
8
  spec/spec.opts
7
9
  spec/spec_helper.rb
8
10
  Rakefile
9
- Manifest
10
11
  lib/back_it_up.rb
11
12
  lib/back_it_up/config.rb
13
+ lib/back_it_up/file_list.rb
12
14
  lib/back_it_up/file_packager.rb
13
15
  lib/back_it_up/command.rb
14
16
  lib/back_it_up/runner.rb
17
+ README.rdoc
18
+ Manifest
data/README.rdoc ADDED
@@ -0,0 +1,37 @@
1
+ = BackItUp
2
+
3
+ <em>This is still in the workings and right now it is only an advanced zip file creator.</em>
4
+
5
+ == Install
6
+
7
+ Add GitHub to your gem sources if you haven't already:
8
+
9
+ $ sudo gem sources -a http://gems.github.com
10
+
11
+ Install the gem:
12
+
13
+ $ sudo gem install robinsp-backitup
14
+
15
+ This should have installed the _backitup_ command. Running
16
+
17
+ $ backitup
18
+
19
+ ...should print the usage instructions if everything is set up ok.
20
+
21
+ == Usage
22
+
23
+ Create a backup script looking something like this
24
+
25
+ # sample.backitup
26
+ backup do
27
+ file '/home/robin/backup.this.file'
28
+
29
+ dir "~/Desktop/drop-in-me-for-backup"
30
+
31
+ destination_file "/tmp/backupfile"
32
+ end
33
+
34
+ Run *backitup* with your script file as argument
35
+
36
+ $ backitup sample.backitup
37
+
data/Rakefile CHANGED
@@ -2,8 +2,8 @@ require 'spec'
2
2
  require 'spec/rake/spectask'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('backitup', '0.0.1') do |p|
6
- p.description = "Simple backup"
5
+ Echoe.new('backitup', '0.0.2') do |p|
6
+ p.description = "Simple backup tool"
7
7
  p.url = "http://github.com/robinsp/backitup"
8
8
  p.author = "Robin Spainhour"
9
9
  p.email = "robin@robinspainhour.com"
data/backitup.gemspec CHANGED
@@ -2,24 +2,24 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{backitup}
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Robin Spainhour"]
9
- s.date = %q{2009-05-27}
9
+ s.date = %q{2009-05-28}
10
10
  s.default_executable = %q{backitup}
11
- s.description = %q{Simple backup}
11
+ s.description = %q{Simple backup tool}
12
12
  s.email = %q{robin@robinspainhour.com}
13
13
  s.executables = ["backitup"]
14
- s.extra_rdoc_files = ["bin/backitup", "lib/back_it_up.rb", "lib/back_it_up/config.rb", "lib/back_it_up/file_packager.rb", "lib/back_it_up/command.rb", "lib/back_it_up/runner.rb"]
15
- s.files = ["bin/backitup", "spec/test-config.backitup", "spec/file_packager_spec.rb", "spec/config_spec.rb", "spec/runner_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "Rakefile", "Manifest", "lib/back_it_up.rb", "lib/back_it_up/config.rb", "lib/back_it_up/file_packager.rb", "lib/back_it_up/command.rb", "lib/back_it_up/runner.rb", "backitup.gemspec"]
14
+ s.extra_rdoc_files = ["bin/backitup", "lib/back_it_up.rb", "lib/back_it_up/config.rb", "lib/back_it_up/file_list.rb", "lib/back_it_up/file_packager.rb", "lib/back_it_up/command.rb", "lib/back_it_up/runner.rb", "README.rdoc"]
15
+ s.files = ["bin/backitup", "sample.backitup", "spec/test-config.backitup", "spec/file_packager_spec.rb", "spec/config_spec.rb", "spec/runner_spec.rb", "spec/file_list_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "Rakefile", "lib/back_it_up.rb", "lib/back_it_up/config.rb", "lib/back_it_up/file_list.rb", "lib/back_it_up/file_packager.rb", "lib/back_it_up/command.rb", "lib/back_it_up/runner.rb", "README.rdoc", "Manifest", "backitup.gemspec"]
16
16
  s.has_rdoc = true
17
17
  s.homepage = %q{http://github.com/robinsp/backitup}
18
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Backitup"]
18
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Backitup", "--main", "README.rdoc"]
19
19
  s.require_paths = ["lib"]
20
20
  s.rubyforge_project = %q{backitup}
21
21
  s.rubygems_version = %q{1.3.2}
22
- s.summary = %q{Simple backup}
22
+ s.summary = %q{Simple backup tool}
23
23
 
24
24
  if s.respond_to? :specification_version then
25
25
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -1,23 +1,62 @@
1
1
  module BackItUp
2
- class Config
3
- attr_reader :files, :dirs, :dest_filename
2
+
3
+ # The backup script should look something like this
4
+ #
5
+ # # sample.backitup
6
+ #
7
+ # backup do
8
+ #
9
+ # file '/home/robin/backup.this.file'
10
+ #
11
+ # dir '~/Desktop/drop-in-me-for-backup'
12
+ #
13
+ # destination_file "/tmp/backupfile"
14
+ # end
15
+ #
16
+ # This will backup the file <tt>/home/robin/backup.this.file</tt> and all the files
17
+ # in the <tt>~/Desktop/drop-in-me-for-backup</tt> directory and its sub dirs, and
18
+ # place them in <tt>/tmp/backupfile_[date]_time.zip</tt>.
19
+ module ScriptDSL
4
20
 
5
- def initialize(file_handle)
6
- @files = []
7
- @dirs = []
8
-
9
- file_content = ""
10
-
11
- while l = file_handle.gets do
12
- file_content << l
21
+ # Starts off the backup script.
22
+ #
23
+ # Usage:
24
+ #
25
+ # backup do
26
+ # # add your files, dirs etc. here...
27
+ # end
28
+ def backup
29
+ yield
30
+ end
31
+
32
+ # File or directory name to add to the backup set. The given file name is expanded before
33
+ # added to the backup set.
34
+ #
35
+ # It is safer to use single quotes (especially on Windows file systems) as the support
36
+ # for escape sequences is not as great as double-quoted strings.
37
+ #
38
+ # file '~/importantfile' # is safer
39
+ # file "~/anotherfile" # ...than this
40
+ #
41
+ def file(filename = nil)
42
+ unless (filename == "" || filename == nil)
43
+ full_name = File.expand_path(filename)
44
+
45
+ if File.exists?(full_name)
46
+ if File.directory? full_name
47
+ @dirs << full_name
48
+ else
49
+ @files << full_name
50
+ end
51
+
52
+ else
53
+ puts "WARNING: File #{filename} could not be found"
54
+ end
13
55
  end
14
56
 
15
- eval(file_content)
16
57
  end
17
58
 
18
- def backup
19
- yield
20
- end
59
+ alias_method :dir, :file
21
60
 
22
61
  # Full path and name of the package file to create.
23
62
  # A timestamp will be appended to the filename and the extension is
@@ -33,23 +72,28 @@ module BackItUp
33
72
  @dest_filename = filename
34
73
  end
35
74
 
36
- def file(filename = nil)
75
+ end
76
+
77
+
78
+ class Config
79
+ include ScriptDSL
80
+ attr_reader :files, :dirs, :dest_filename
81
+
82
+ def initialize(file_handle)
83
+ @files = []
84
+ @dirs = []
85
+
86
+ file_content = ""
37
87
 
38
- unless (filename == "" || filename == nil)
39
- if File.exists?(filename)
40
- if File.directory? filename
41
- @dirs << filename
42
- else
43
- @files << filename
44
- end
45
-
46
- else
47
- puts "WARNING: File #{filename} could not be found"
48
- end
88
+ while l = file_handle.gets do
89
+ file_content << l
49
90
  end
50
91
 
92
+ eval(file_content)
51
93
  end
52
94
 
53
- alias_method :dir, :file
95
+ def each_file
96
+ FileList.new(@files, @dirs).files.each {|filename| yield filename }
97
+ end
54
98
  end
55
99
  end
@@ -0,0 +1,19 @@
1
+ require 'find'
2
+
3
+ module BackItUp
4
+ class FileList
5
+ attr_reader :files
6
+
7
+ def initialize(files, dirs)
8
+ @files = []
9
+ files.each {|f| @files << f }
10
+
11
+ dirs.each do |d|
12
+ Find.find(d) do |f|
13
+ next if File.directory?(f)
14
+ @files << f
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -12,25 +12,31 @@ module BackItUp
12
12
  end
13
13
 
14
14
  def package
15
- target_filename = create_target_filename
16
-
17
- prefix = File.basename(target_filename, ".zip")
18
-
19
15
  Zip::ZipFile.open(target_filename, Zip::ZipFile::CREATE) do |zip|
20
- @config.files.each do |filename|
21
- zip.add("./#{prefix}#{filename}", filename)
22
- end
16
+ @config.each_file { |filename| zip.add( zip_entry_name(filename), filename ) }
23
17
  end
24
18
 
25
19
  @produced_file = target_filename
26
20
  end
27
21
 
28
22
  protected
29
- def create_target_filename
30
- @config.dest_filename + "_#{timestamp}" + ".zip"
23
+ def target_filename
24
+ @target_filename ||= @config.dest_filename + "_#{timestamp}" + ".zip"
31
25
  end
32
26
 
33
27
  private
28
+ def zip_entry_name(filename)
29
+ zip_entry_prefix + replace_win_drive_letter_in(filename)
30
+ end
31
+
32
+ def replace_win_drive_letter_in(filename)
33
+ filename.gsub(/^(.):/, '/\1_drive')
34
+ end
35
+
36
+ def zip_entry_prefix
37
+ @prefix ||= File.basename(target_filename, ".zip")
38
+ end
39
+
34
40
  def timestamp
35
41
  Time.now.strftime("%Y%m%d_%H%M%S")
36
42
  end
data/lib/back_it_up.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require 'back_it_up/runner'
2
2
  require 'back_it_up/config'
3
3
  require 'back_it_up/file_packager'
4
+ require 'back_it_up/file_list'
data/sample.backitup ADDED
@@ -0,0 +1,11 @@
1
+
2
+ # sample.backitup
3
+
4
+ backup do
5
+
6
+ file '/home/robin/backup.this.file'
7
+
8
+ dir "~/Desktop/drop-in-me-for-backup"
9
+
10
+ destination_file "/tmp/backupfile"
11
+ end
data/spec/config_spec.rb CHANGED
@@ -16,6 +16,7 @@ describe BackItUp::Config do
16
16
  BackItUp::Config.new(File.open(test_file))
17
17
  end
18
18
 
19
+
19
20
  describe "" do
20
21
  before do
21
22
  mock_file = mock('mock-file')
@@ -31,6 +32,32 @@ describe BackItUp::Config do
31
32
  @config.dirs.should == []
32
33
  end
33
34
 
35
+ describe "each_file()" do
36
+ before do
37
+ @mock_file_list = mock("FileList")
38
+ @mock_file_list.stubs(:files).returns([])
39
+ BackItUp::FileList.stubs(:new).returns(@mock_file_list)
40
+ end
41
+
42
+ it "should create FileList" do
43
+ BackItUp::FileList.expects(:new).with(@config.files, @config.dirs).returns(@mock_file_list)
44
+ @config.each_file
45
+ end
46
+
47
+ it "should yield all files in FileList" do
48
+ expected_files = ["file_one", "file_two", "file_three"]
49
+
50
+ @mock_file_list.expects(:files).returns(expected_files)
51
+
52
+ result = []
53
+ @config.each_file do |f|
54
+ result << f
55
+ end
56
+
57
+ result.should == expected_files
58
+ end
59
+ end
60
+
34
61
  describe "destination_file()" do
35
62
 
36
63
  it "should save the filename to dest_filename attribute" do
@@ -68,6 +95,13 @@ describe BackItUp::Config do
68
95
  @config.file(file_name)
69
96
  end
70
97
 
98
+ it "should expand paths" do
99
+ File.stubs(:exists?).returns(true)
100
+ File.expects(:expand_path).with("filename").returns("expanded_filename")
101
+ @config.file("filename")
102
+ @config.files.pop.should == "expanded_filename"
103
+ end
104
+
71
105
  it "should not add non-existning files to files attribute" do
72
106
  file_name = "should-not-exist"
73
107
  @config.file(file_name)
@@ -79,6 +113,7 @@ describe BackItUp::Config do
79
113
  end
80
114
 
81
115
  it "should check if file exists" do
116
+ File.stubs(:expand_path).with("filename").returns("filename")
82
117
  File.expects(:exists?).with("filename").returns(false)
83
118
  @config.file("filename")
84
119
  end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe BackItUp::FileList do
4
+
5
+ it "should add files passed to initialize to files attribute" do
6
+ expected_files = %w{one two three}
7
+ list = BackItUp::FileList.new(expected_files, [] )
8
+ list.files.should == expected_files
9
+ end
10
+
11
+ it "should find all files in dirs passed to initilizer and add to files attribute" do
12
+ dirs = %w{dir_one dir_two dir_three}
13
+ Find.expects(:find).times(3).with { |d| dirs.include? d }.yields("one").then.yields("two").then.yields("three")
14
+ File.expects(:directory?).times(3).returns(false)
15
+
16
+ list = BackItUp::FileList.new([], dirs)
17
+
18
+ list.files.should == %w{one two three}
19
+ end
20
+
21
+ end
@@ -14,19 +14,18 @@ describe BackItUp::FilePackager do
14
14
  describe "package()" do
15
15
  before do
16
16
  @first_file_to_add = "/etc/passwd"
17
- @second_file_to_add = "/etc/httpd/apache.cfg"
18
17
 
19
18
  @configured_dst_filename = "/backups/a-file-name"
20
- mock_config = mock
21
- mock_config.stubs(:is_a? => true)
22
- mock_config.stubs(:dest_filename).returns(@configured_dst_filename)
23
- mock_config.stubs(:files).returns([@first_file_to_add, @second_file_to_add])
19
+ @mock_config = mock
20
+ @mock_config.stubs(:is_a? => true)
21
+ @mock_config.stubs(:dest_filename).returns(@configured_dst_filename)
22
+ @mock_config.stubs(:each_file).yields(@first_file_to_add)
24
23
 
25
24
  @mock_zip = mock("mock-zip")
26
25
  @mock_zip.stubs(:add)
27
26
  Zip::ZipFile.stubs(:open).yields(@mock_zip)
28
27
 
29
- @packager = BackItUp::FilePackager.new(mock_config)
28
+ @packager = BackItUp::FilePackager.new(@mock_config)
30
29
 
31
30
  end
32
31
 
@@ -55,11 +54,14 @@ describe BackItUp::FilePackager do
55
54
  end
56
55
 
57
56
  it "should add files to the zip" do
58
- prefix = "./#{File.basename(@configured_dst_filename)}"
59
-
57
+ prefix = "#{File.basename(@configured_dst_filename)}"
60
58
  @mock_zip.expects(:add).with( regexp_matches(/^#{prefix}.*#{@first_file_to_add}$/), @first_file_to_add )
61
- @mock_zip.expects(:add).with( regexp_matches(/^#{prefix}.*#{@second_file_to_add}$/), @second_file_to_add )
62
-
59
+ @packager.package
60
+ end
61
+
62
+ it "should strip the drive letter for windows files added to zip" do
63
+ @mock_config.stubs(:each_file).yields("C:\temp\myfile")
64
+ @mock_zip.expects(:add).with( regexp_matches(/\/C_drive/), regexp_matches(/.*/) )
63
65
  @packager.package
64
66
  end
65
67
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robinsp-backitup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robin Spainhour
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-27 00:00:00 -07:00
12
+ date: 2009-05-28 00:00:00 -07:00
13
13
  default_executable: backitup
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,7 +22,7 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
- description: Simple backup
25
+ description: Simple backup tool
26
26
  email: robin@robinspainhour.com
27
27
  executables:
28
28
  - backitup
@@ -32,24 +32,30 @@ extra_rdoc_files:
32
32
  - bin/backitup
33
33
  - lib/back_it_up.rb
34
34
  - lib/back_it_up/config.rb
35
+ - lib/back_it_up/file_list.rb
35
36
  - lib/back_it_up/file_packager.rb
36
37
  - lib/back_it_up/command.rb
37
38
  - lib/back_it_up/runner.rb
39
+ - README.rdoc
38
40
  files:
39
41
  - bin/backitup
42
+ - sample.backitup
40
43
  - spec/test-config.backitup
41
44
  - spec/file_packager_spec.rb
42
45
  - spec/config_spec.rb
43
46
  - spec/runner_spec.rb
47
+ - spec/file_list_spec.rb
44
48
  - spec/spec.opts
45
49
  - spec/spec_helper.rb
46
50
  - Rakefile
47
- - Manifest
48
51
  - lib/back_it_up.rb
49
52
  - lib/back_it_up/config.rb
53
+ - lib/back_it_up/file_list.rb
50
54
  - lib/back_it_up/file_packager.rb
51
55
  - lib/back_it_up/command.rb
52
56
  - lib/back_it_up/runner.rb
57
+ - README.rdoc
58
+ - Manifest
53
59
  - backitup.gemspec
54
60
  has_rdoc: true
55
61
  homepage: http://github.com/robinsp/backitup
@@ -59,6 +65,8 @@ rdoc_options:
59
65
  - --inline-source
60
66
  - --title
61
67
  - Backitup
68
+ - --main
69
+ - README.rdoc
62
70
  require_paths:
63
71
  - lib
64
72
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -79,6 +87,6 @@ rubyforge_project: backitup
79
87
  rubygems_version: 1.2.0
80
88
  signing_key:
81
89
  specification_version: 3
82
- summary: Simple backup
90
+ summary: Simple backup tool
83
91
  test_files: []
84
92