ruby-unison 0.0.0 → 0.0.1
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.md +18 -0
- data/VERSION +1 -1
- data/lib/unison.rb +16 -7
- data/ruby-unison.gemspec +63 -0
- data/spec/unison_spec.rb +31 -0
- metadata +4 -3
data/README.md
CHANGED
@@ -1,24 +1,42 @@
|
|
1
1
|
# ruby-unison
|
2
2
|
|
3
3
|
Ruby interface of the command of file synchronizer [unison](http://www.cis.upenn.edu/~bcpierce/unison/).
|
4
|
+
ruby-unison defines UnisonCommand class to execute unison in unison.rb.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
gem install ruby-unison
|
4
9
|
|
5
10
|
## Examples
|
6
11
|
|
7
12
|
### Basic usage
|
8
13
|
|
14
|
+
require 'unison'
|
9
15
|
uc = UnisonCommand.new("pref", "root1", "root2")
|
10
16
|
uc.execute
|
17
|
+
|
18
|
+
uc = UnisonCommand.new("root1", "root2")
|
19
|
+
uc.execute
|
11
20
|
|
12
21
|
### Dry run
|
13
22
|
|
23
|
+
require 'unison'
|
14
24
|
uc = UnisonCommand.new("pref", "root1", "root2")
|
15
25
|
uc.execute(true)
|
16
26
|
|
17
27
|
### Usage of unison options
|
18
28
|
|
29
|
+
require 'unison'
|
19
30
|
uc = UnisonCommand.new("root1", "root2", :force => "root2", :path => ["Document", "Desktop"], :auto => true)
|
20
31
|
uc.execute
|
21
32
|
|
33
|
+
### Change of unison path
|
34
|
+
|
35
|
+
require 'unison'
|
36
|
+
uc = UnisonCommand.new("root1", "root2")
|
37
|
+
uc.command = "/path/to/unison"
|
38
|
+
uc.execute
|
39
|
+
|
22
40
|
## Contributing to ruby-unison
|
23
41
|
|
24
42
|
- Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/lib/unison.rb
CHANGED
@@ -76,19 +76,21 @@ class UnisonCommand
|
|
76
76
|
class InvalidOption < StandardError
|
77
77
|
end
|
78
78
|
|
79
|
-
class
|
79
|
+
class NonExistentOption < StandardError
|
80
80
|
end
|
81
81
|
|
82
82
|
attr_accessor :profile, :root1, :root2, :option, :command
|
83
83
|
|
84
84
|
# +args+ accepts the following three pattern:
|
85
|
-
# - root1, root2, opts = {}
|
86
|
-
# - profilename, opts = {}
|
87
|
-
# - profilename, root1, root2, opts = {}
|
85
|
+
# - root1, root2, opts = \{\}
|
86
|
+
# - profilename, opts = \{\}
|
87
|
+
# - profilename, root1, root2, opts = \{\}
|
88
88
|
# We set option of unison command to optinal hash.
|
89
89
|
# The keys are symbols made from hypen-removed options of unison command and
|
90
90
|
# the values are booleans (true or false), strings, and arrays of strings
|
91
91
|
# corresponding to unison's options.
|
92
|
+
# Note that to set boolean option we do not use a string 'true' or 'false',
|
93
|
+
# but we use TrueClass, FalseClass, or NilClass.
|
92
94
|
def initialize(*args)
|
93
95
|
if Hash === args[-1]
|
94
96
|
@option = args[-1]
|
@@ -122,8 +124,15 @@ class UnisonCommand
|
|
122
124
|
if spec = UNISON_OPTION_SPEC[key.intern]
|
123
125
|
case spec
|
124
126
|
when :bool
|
125
|
-
|
126
|
-
|
127
|
+
case val
|
128
|
+
when TrueClass, FalseClass, NilClass
|
129
|
+
if val
|
130
|
+
cmd << "-#{key}"
|
131
|
+
else
|
132
|
+
cmd << "-#{key}=false"
|
133
|
+
end
|
134
|
+
else
|
135
|
+
raise UnisonCommand::InvalidOption, "We use TrueClass, FalseClass, or NilClass for #{key}."
|
127
136
|
end
|
128
137
|
when :array
|
129
138
|
k = "-#{key}"
|
@@ -144,7 +153,7 @@ class UnisonCommand
|
|
144
153
|
cmd << "-#{key}" << v
|
145
154
|
end
|
146
155
|
else
|
147
|
-
raise UnisonCommand::
|
156
|
+
raise UnisonCommand::NonExistentOption, "Nonexistent unison option: #{key.to_s}"
|
148
157
|
end
|
149
158
|
end
|
150
159
|
cmd.compact!
|
data/ruby-unison.gemspec
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{ruby-unison}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Takayuki YAMAGUCHI"]
|
12
|
+
s.date = %q{2011-05-12}
|
13
|
+
s.description = %q{Ruby interface of the command of file synchronizer unison}
|
14
|
+
s.email = %q{d@ytak.info}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".rspec",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"lib/unison.rb",
|
29
|
+
"ruby-unison.gemspec",
|
30
|
+
"spec/spec_helper.rb",
|
31
|
+
"spec/unison_spec.rb"
|
32
|
+
]
|
33
|
+
s.homepage = %q{http://github.com/ytaka/ruby-unison}
|
34
|
+
s.licenses = ["GPLv3"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = %q{1.6.2}
|
37
|
+
s.summary = %q{ruby-unison}
|
38
|
+
|
39
|
+
if s.respond_to? :specification_version then
|
40
|
+
s.specification_version = 3
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
|
44
|
+
s.add_development_dependency(%q<yard>, [">= 0.6.0"])
|
45
|
+
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
46
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.0"])
|
47
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<rspec>, [">= 2.5.0"])
|
50
|
+
s.add_dependency(%q<yard>, [">= 0.6.0"])
|
51
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
52
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.0"])
|
53
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
54
|
+
end
|
55
|
+
else
|
56
|
+
s.add_dependency(%q<rspec>, [">= 2.5.0"])
|
57
|
+
s.add_dependency(%q<yard>, [">= 0.6.0"])
|
58
|
+
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
59
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.0"])
|
60
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/spec/unison_spec.rb
CHANGED
@@ -20,6 +20,11 @@ describe UnisonCommand do
|
|
20
20
|
uc.execute(true).should == ["unison", "pref", "root1", "root2", "-auto"]
|
21
21
|
end
|
22
22
|
|
23
|
+
it "should return unison command with a boolean option false" do
|
24
|
+
uc = UnisonCommand.new("pref", "root1", "root2", :auto => false)
|
25
|
+
uc.execute(true).should == ["unison", "pref", "root1", "root2", "-auto=false"]
|
26
|
+
end
|
27
|
+
|
23
28
|
it "should return unison command with two arguments and a boolean option" do
|
24
29
|
uc = UnisonCommand.new("root1", "root2", :auto => true)
|
25
30
|
uc.execute(true).should == ["unison", "root1", "root2", "-auto"]
|
@@ -51,4 +56,30 @@ describe UnisonCommand do
|
|
51
56
|
"-path", "Document", "-path", "Desktop", "-auto"]
|
52
57
|
end
|
53
58
|
|
59
|
+
it "should raise UnisonCommand::InvalidOption" do
|
60
|
+
uc = UnisonCommand.new("root1", "root2", :backuplocation => "invalid")
|
61
|
+
lambda do
|
62
|
+
uc.execute
|
63
|
+
end.should raise_error(UnisonCommand::InvalidOption)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should raise UnisonCommand::InvalidOption" do
|
67
|
+
uc = UnisonCommand.new("root1", "root2", :auto => 'true')
|
68
|
+
lambda do
|
69
|
+
uc.execute
|
70
|
+
end.should raise_error(UnisonCommand::InvalidOption)
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should raise UnisonCommand::NonExistentOption" do
|
74
|
+
uc = UnisonCommand.new("root1", "root2", :autoo => true)
|
75
|
+
lambda do
|
76
|
+
uc.execute
|
77
|
+
end.should raise_error(UnisonCommand::NonExistentOption)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should change unison path" do
|
81
|
+
uc = UnisonCommand.new("root1", "root2")
|
82
|
+
uc.command = "/usr/local/bin/unison"
|
83
|
+
uc.execute(true).should == ["/usr/local/bin/unison", "root1", "root2"]
|
84
|
+
end
|
54
85
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ruby-unison
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Takayuki YAMAGUCHI
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-12 00:00:00 +09:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- Rakefile
|
88
88
|
- VERSION
|
89
89
|
- lib/unison.rb
|
90
|
+
- ruby-unison.gemspec
|
90
91
|
- spec/spec_helper.rb
|
91
92
|
- spec/unison_spec.rb
|
92
93
|
has_rdoc: true
|
@@ -103,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
104
|
requirements:
|
104
105
|
- - ">="
|
105
106
|
- !ruby/object:Gem::Version
|
106
|
-
hash: -
|
107
|
+
hash: -3840236895340394348
|
107
108
|
segments:
|
108
109
|
- 0
|
109
110
|
version: "0"
|