winton-rbackup 0.1.1 → 0.1.2

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/README.markdown CHANGED
@@ -15,12 +15,16 @@ Create ~/.rbackup.yml
15
15
  ---------------------
16
16
 
17
17
  <pre>
18
- documents:
19
- source: ~/Documents
20
- destination: /Volumes/USB Key
21
- exclude:
22
- - Software
23
- - Virtual Machines.localized
18
+ usb:
19
+ documents:
20
+ source: ~/Documents
21
+ destination: /Volumes/USB Key
22
+ exclude:
23
+ - Software
24
+ - Virtual Machines.localized
25
+ pictures:
26
+ source: ~/Pictures
27
+ destination: /Volumes/USB Key
24
28
  </pre>
25
29
 
26
30
  Backup
@@ -28,4 +32,9 @@ Backup
28
32
 
29
33
  <pre>
30
34
  rbackup documents
35
+ // backs up documents
36
+ rbackup usb
37
+ // backs up documents and pictures
38
+ rbackup
39
+ // backs up all profiles
31
40
  </pre>
data/gemspec.rb CHANGED
@@ -16,5 +16,5 @@ GEM_SPEC = Gem::Specification.new do |s|
16
16
  s.name = GEM_NAME
17
17
  s.platform = Gem::Platform::RUBY
18
18
  s.require_path = "lib"
19
- s.version = "0.1.1"
19
+ s.version = "0.1.2"
20
20
  end
data/lib/rbackup.rb CHANGED
@@ -13,14 +13,11 @@ class RBackup
13
13
  attr_accessor :profiles, :yaml
14
14
 
15
15
  def initialize(*args)
16
- @profiles = args
17
- configure
18
- if @profiles.empty?
19
- @profiles = @yaml.keys
20
- end
16
+ get_yaml
17
+ get_profiles(args, @yaml)
21
18
  end
22
19
 
23
- def configure
20
+ def get_yaml
24
21
  if $TESTING
25
22
  config = SPEC + '/fixtures/rbackup.yml'
26
23
  else
@@ -45,37 +42,65 @@ class RBackup
45
42
  paths.collect { |path| path.gsub(' ', '\ ') }.join(' ')
46
43
  end
47
44
 
48
- def run
49
- @profiles.each do |profile|
50
- if config = yaml[profile]
51
- destination = config['destination']
52
- exclude = config['exclude'].to_a
53
- source = config['source'].to_a
45
+ def get_profiles(input, hash, force=false)
46
+ @profiles ||= []
47
+ hash.each do |key, value|
48
+ next unless value.respond_to?(:keys)
49
+ is_profile = value['source'] && value['destination']
50
+ if input.include?(key) || input.empty? || force
51
+ if is_profile
52
+ @profiles << value
53
+ else
54
+ get_profiles(input, value, true)
55
+ end
56
+ elsif !is_profile
57
+ get_profiles(input, value, force)
58
+ end
59
+ end
60
+ end
61
+
62
+ def rsync(profile)
63
+ destination = profile['destination']
64
+ source = profile['source'].to_a
54
65
 
55
- FileUtils.mkdir_p destination
66
+ FileUtils.mkdir_p destination
56
67
 
57
- options = "--numeric-ids -EaxzSv"
58
- # --numeric-ids don't map uid/gid values by user/group name
59
- # -E, --extended-attributes copy extended attributes, resource forks
60
- # -a, --archive recursion and preserve almost everything (-rlptgoD)
61
- # -x, --one-file-system don't cross filesystem boundaries
62
- # -z, --compress compress file data during the transfer
63
- # -S, --sparse handle sparse files efficiently
64
- # -v, --verbose verbose
68
+ options = "--numeric-ids -axzSv"
69
+ # --numeric-ids don't map uid/gid values by user/group name
70
+ # -a, --archive recursion and preserve almost everything (-rlptgoD)
71
+ # -x, --one-file-system don't cross filesystem boundaries
72
+ # -z, --compress compress file data during the transfer
73
+ # -S, --sparse handle sparse files efficiently
74
+ # -v, --verbose verbose
75
+
76
+ if destination.include?('@') || source.include?('@')
77
+ options += ' -e ssh'
78
+ # -e, --rsh=COMMAND specify the remote shell to use
79
+ else
80
+ options += 'E'
81
+ # -E, --extended-attributes copy extended attributes, resource forks
82
+ end
65
83
 
66
- ex = exclude.collect { |e| "--exclude='#{e}'" }.join(' ')
67
- # --exclude=PATTERN use one of these for each file you want to exclude
84
+ if profile['exclude']
85
+ exclude = profile['exclude'].to_a
86
+ exclude = exclude.collect { |e| "--exclude='#{e}'" }.join(' ')
87
+ # --exclude=PATTERN use one of these for each file you want to exclude
88
+ else
89
+ exclude = nil
90
+ end
68
91
 
69
- cmd = "rsync #{options} #{ex} #{esc(source)} #{esc(destination)}"
70
- if $TESTING
71
- `#{cmd}`
72
- else
73
- puts "Executing: #{cmd}"
74
- system(cmd)
75
- end
76
- else
77
- error("Profile #{profile} not found.")
78
- end
92
+ cmd = "rsync #{options} #{exclude} #{esc(source)} #{esc(destination)}"
93
+ if $TESTING
94
+ `#{cmd}`
95
+ else
96
+ puts "Executing: #{cmd}"
97
+ system(cmd)
98
+ end
99
+ end
100
+
101
+ def run
102
+ @profiles.each do |profile|
103
+ rsync(profile)
79
104
  end
80
105
  end
81
106
  end
data/rbackup.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{rbackup}
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Winton Welsh"]
9
- s.date = %q{2009-09-07}
9
+ s.date = %q{2009-09-24}
10
10
  s.default_executable = %q{rbackup}
11
11
  s.email = %q{mail@wintoni.us}
12
12
  s.executables = ["rbackup"]
@@ -14,12 +14,12 @@ Gem::Specification.new do |s|
14
14
  s.files = ["bin", "bin/rbackup", "gemspec.rb", "lib", "lib/rbackup.rb", "MIT-LICENSE", "Rakefile", "rbackup.gemspec", "README.markdown", "spec", "spec/fixtures", "spec/fixtures/destination", "spec/fixtures/rbackup.yml", "spec/fixtures/source", "spec/fixtures/source/1.txt", "spec/fixtures/source/2.txt", "spec/fixtures/source/3.txt", "spec/rbackup_spec.rb", "spec/spec.opts", "spec/spec_helper.rb"]
15
15
  s.homepage = %q{http://github.com/winton/rbackup}
16
16
  s.require_paths = ["lib"]
17
- s.rubygems_version = %q{1.3.1}
17
+ s.rubygems_version = %q{1.3.5}
18
18
  s.summary = %q{Backup your stuff with Ruby and Rsync}
19
19
 
20
20
  if s.respond_to? :specification_version then
21
21
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
- s.specification_version = 2
22
+ s.specification_version = 3
23
23
 
24
24
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
25
  else
@@ -1,10 +1,21 @@
1
1
  profile_1:
2
2
  source: SPEC/fixtures/source/*
3
3
  destination: SPEC/fixtures/destination
4
- exclude: 2.txt
4
+ exclude: 1.txt
5
5
  profile_2:
6
6
  source: SPEC/fixtures/source/*
7
7
  destination: SPEC/fixtures/destination
8
- exclude:
9
- - 2.txt
10
- - 3.txt
8
+ exclude: 2.txt
9
+ profile_3:
10
+ profile_4:
11
+ source: SPEC/fixtures/source/*
12
+ destination: SPEC/fixtures/destination
13
+ exclude:
14
+ - 1.txt
15
+ - 2.txt
16
+ profile_5:
17
+ source: SPEC/fixtures/source/*
18
+ destination: SPEC/fixtures/destination
19
+ exclude:
20
+ - 1.txt
21
+ - 3.txt
data/spec/rbackup_spec.rb CHANGED
@@ -10,18 +10,19 @@ describe RBackup do
10
10
  it "should backup all profiles" do
11
11
  RBackup.new.run
12
12
  File.exists?(SPEC + '/fixtures/destination/1.txt').should == true
13
- File.exists?(SPEC + '/fixtures/destination/2.txt').should == false
13
+ File.exists?(SPEC + '/fixtures/destination/2.txt').should == true
14
14
  File.exists?(SPEC + '/fixtures/destination/3.txt').should == true
15
15
  File.read(SPEC + '/fixtures/destination/1.txt').should == '1'
16
+ File.read(SPEC + '/fixtures/destination/2.txt').should == '2'
16
17
  File.read(SPEC + '/fixtures/destination/3.txt').should == '3'
17
18
  end
18
19
 
19
20
  it "should backup profile_1" do
20
21
  RBackup.new('profile_1').run
21
- File.exists?(SPEC + '/fixtures/destination/1.txt').should == true
22
- File.exists?(SPEC + '/fixtures/destination/2.txt').should == false
22
+ File.exists?(SPEC + '/fixtures/destination/1.txt').should == false
23
+ File.exists?(SPEC + '/fixtures/destination/2.txt').should == true
23
24
  File.exists?(SPEC + '/fixtures/destination/3.txt').should == true
24
- File.read(SPEC + '/fixtures/destination/1.txt').should == '1'
25
+ File.read(SPEC + '/fixtures/destination/2.txt').should == '2'
25
26
  File.read(SPEC + '/fixtures/destination/3.txt').should == '3'
26
27
  end
27
28
 
@@ -29,7 +30,17 @@ describe RBackup do
29
30
  RBackup.new('profile_2').run
30
31
  File.exists?(SPEC + '/fixtures/destination/1.txt').should == true
31
32
  File.exists?(SPEC + '/fixtures/destination/2.txt').should == false
32
- File.exists?(SPEC + '/fixtures/destination/3.txt').should == false
33
+ File.exists?(SPEC + '/fixtures/destination/3.txt').should == true
33
34
  File.read(SPEC + '/fixtures/destination/1.txt').should == '1'
35
+ File.read(SPEC + '/fixtures/destination/3.txt').should == '3'
36
+ end
37
+
38
+ it "should backup profile_3" do
39
+ RBackup.new('profile_3').run
40
+ File.exists?(SPEC + '/fixtures/destination/1.txt').should == false
41
+ File.exists?(SPEC + '/fixtures/destination/2.txt').should == true
42
+ File.exists?(SPEC + '/fixtures/destination/3.txt').should == true
43
+ File.read(SPEC + '/fixtures/destination/2.txt').should == '2'
44
+ File.read(SPEC + '/fixtures/destination/3.txt').should == '3'
34
45
  end
35
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winton-rbackup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Winton Welsh
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-07 00:00:00 -07:00
12
+ date: 2009-09-24 00:00:00 -07:00
13
13
  default_executable: rbackup
14
14
  dependencies: []
15
15
 
@@ -67,7 +67,7 @@ requirements: []
67
67
  rubyforge_project:
68
68
  rubygems_version: 1.3.5
69
69
  signing_key:
70
- specification_version: 2
70
+ specification_version: 3
71
71
  summary: Backup your stuff with Ruby and Rsync
72
72
  test_files: []
73
73