homesick 0.9.1 → 0.9.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/ChangeLog.markdown CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.9.2
2
+ * Set "dotfiles" as default castle name
3
+ * Introduce new commands
4
+ * `homesick show_path`
5
+ * `homesick status`
6
+ * `homesick diff`
7
+
1
8
  # 0.9.1
2
9
  * Fixed small bugs: #35, #40
3
10
 
data/Gemfile CHANGED
@@ -12,4 +12,7 @@ group :development do
12
12
  gem "rcov", :platforms => :mri_18
13
13
  gem "simplecov", :platforms => :mri_19
14
14
  gem "test-construct"
15
+ if RUBY_VERSION >= '1.9.2'
16
+ gem "rubocop"
17
+ end
15
18
  end
data/README.markdown CHANGED
@@ -77,9 +77,9 @@ and have home like this:
77
77
  |-- elisp
78
78
  `-- inits
79
79
 
80
- You may want to symlink only to `castle/home/.config/fooapp` instead of `castle/home/.config` because you already have `~/.config/barapp`. In this case, you can use .homesick_subdir. Please write "directories you want to look up sub direcoties (instead of just first depth)" in this file.
80
+ You may want to symlink only to `castle/home/.config/fooapp` instead of `castle/home/.config` because you already have `~/.config/barapp`. In this case, you can use .homesick_subdir. Please write "directories you want to look up sub directories (instead of just first depth)" in this file.
81
81
 
82
- castle/home/.homesick_subdir
82
+ castle/.homesick_subdir
83
83
 
84
84
  .config
85
85
 
@@ -100,7 +100,7 @@ Or `homesick track NESTED_FILE CASTLE` adds a line automatically. For example:
100
100
 
101
101
  homesick track .emacs.d/elisp castle
102
102
 
103
- castle/home/.homesick_subdir
103
+ castle/.homesick_subdir
104
104
 
105
105
  .config
106
106
  .emacs.d
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ Jeweler::Tasks.new do |gem|
22
22
  gem.email = ["josh@technicalpickles.com", "info@muratayusuke.com"]
23
23
  gem.homepage = "http://github.com/technicalpickles/homesick"
24
24
  gem.authors = ["Joshua Nichols", "Yusuke Murata"]
25
- gem.version = "0.9.1"
25
+ gem.version = "0.9.2"
26
26
  gem.license = "MIT"
27
27
  # Have dependencies? Add them to Gemfile
28
28
 
@@ -41,8 +41,18 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
41
41
  spec.rcov = true
42
42
  end
43
43
 
44
+ task :rubocop do
45
+ if RUBY_VERSION >= '1.9.2'
46
+ system('rubocop')
47
+ end
48
+ end
49
+
50
+ task :test do
51
+ Rake::Task['spec'].execute
52
+ Rake::Task['rubocop'].execute
53
+ end
44
54
 
45
- task :default => :spec
55
+ task :default => :test
46
56
 
47
57
  require 'rdoc/task'
48
58
  Rake::RDocTask.new do |rdoc|
data/bin/homesick CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'pathname'
4
4
  lib = Pathname.new(__FILE__).dirname.join('..', 'lib').expand_path
5
- $LOAD_PATH.unshift lib.to_s
5
+ $LOAD_PATH.unshift lib.to_s
6
6
 
7
7
  require 'homesick'
8
8
 
data/homesick.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{homesick}
8
- s.version = "0.9.1"
8
+ s.version = "0.9.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Joshua Nichols}, %q{Yusuke Murata}]
12
- s.date = %q{2013-06-17}
12
+ s.date = %q{2013-06-27}
13
13
  s.description = %q{
14
14
  A man's home (directory) is his castle, so don't leave home with out it.
15
15
 
@@ -29,7 +29,6 @@ Gem::Specification.new do |s|
29
29
  ".travis.yml",
30
30
  "ChangeLog.markdown",
31
31
  "Gemfile",
32
- "Gemfile.lock",
33
32
  "LICENSE",
34
33
  "README.markdown",
35
34
  "Rakefile",
data/lib/homesick.rb CHANGED
@@ -10,14 +10,16 @@ class Homesick < Thor
10
10
  add_runtime_options!
11
11
 
12
12
  GITHUB_NAME_REPO_PATTERN = /\A([A-Za-z_-]+\/[A-Za-z_-]+)\Z/
13
- SUBDIR_FILENAME = ".homesick_subdir"
13
+ SUBDIR_FILENAME = '.homesick_subdir'
14
14
 
15
- def initialize(args=[], options={}, config={})
15
+ DEFAULT_CASTLE_NAME = 'dotfiles'
16
+
17
+ def initialize(args = [], options = {}, config = {})
16
18
  super
17
19
  self.shell = Homesick::Shell.new
18
20
  end
19
21
 
20
- desc "clone URI", "Clone +uri+ as a castle for homesick"
22
+ desc 'clone URI', 'Clone +uri+ as a castle for homesick'
21
23
  def clone(uri)
22
24
  inside repos_dir do
23
25
  destination = nil
@@ -33,7 +35,7 @@ class Homesick < Thor
33
35
  elsif uri =~ GITHUB_NAME_REPO_PATTERN
34
36
  destination = Pathname.new($1)
35
37
  git_clone "git://github.com/#{$1}.git", :destination => destination
36
- elsif uri =~ /\/([^\/]*?)(\.git)?\Z/
38
+ elsif uri =~ /%r([^%r]*?)(\.git)?\Z/
37
39
  destination = Pathname.new($1)
38
40
  git_clone uri
39
41
  elsif uri =~ /[^:]+:([^:]+)(\.git)?\Z/
@@ -54,20 +56,20 @@ class Homesick < Thor
54
56
  if homesickrc.exist?
55
57
  proceed = shell.yes?("#{uri} has a .homesickrc. Proceed with evaling it? (This could be destructive)")
56
58
  if proceed
57
- shell.say_status "eval", homesickrc
59
+ shell.say_status 'eval', homesickrc
58
60
  inside destination do
59
61
  eval homesickrc.read, binding, homesickrc.expand_path
60
62
  end
61
63
  else
62
- shell.say_status "eval skip", "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue
64
+ shell.say_status 'eval skip', "not evaling #{homesickrc}, #{destination} may need manual configuration", :blue
63
65
  end
64
66
  end
65
67
  end
66
68
  end
67
69
 
68
- desc "pull CASTLE", "Update the specified castle"
69
- method_option :all, :type => :boolean, :default => false, :required => false, :desc => "Update all cloned castles"
70
- def pull(name="")
70
+ desc 'pull CASTLE', 'Update the specified castle'
71
+ method_option :all, :type => :boolean, :default => false, :required => false, :desc => 'Update all cloned castles'
72
+ def pull(name = DEFAULT_CASTLE_NAME)
71
73
  if options[:all]
72
74
  inside_each_castle do |castle|
73
75
  shell.say castle.to_s.gsub(repos_dir.to_s + '/', '') + ':'
@@ -79,22 +81,22 @@ class Homesick < Thor
79
81
 
80
82
  end
81
83
 
82
- desc "commit CASTLE", "Commit the specified castle's changes"
83
- def commit(name)
84
+ desc 'commit CASTLE', "Commit the specified castle's changes"
85
+ def commit(name = DEFAULT_CASTLE_NAME)
84
86
  commit_castle name
85
87
 
86
88
  end
87
89
 
88
- desc "push CASTLE", "Push the specified castle"
89
- def push(name)
90
+ desc 'push CASTLE', 'Push the specified castle'
91
+ def push(name = DEFAULT_CASTLE_NAME)
90
92
  push_castle name
91
93
 
92
94
  end
93
95
 
94
- desc "symlink CASTLE", "Symlinks all dotfiles from the specified castle"
95
- method_option :force, :default => false, :desc => "Overwrite existing conflicting symlinks without prompting."
96
- def symlink(name)
97
- check_castle_existance(name, "symlink")
96
+ desc 'symlink CASTLE', 'Symlinks all dotfiles from the specified castle'
97
+ method_option :force, :default => false, :desc => 'Overwrite existing conflicting symlinks without prompting.'
98
+ def symlink(name = DEFAULT_CASTLE_NAME)
99
+ check_castle_existance(name, 'symlink')
98
100
 
99
101
  inside castle_dir(name) do
100
102
  subdirs = subdirs(name)
@@ -109,8 +111,8 @@ class Homesick < Thor
109
111
  end
110
112
  end
111
113
 
112
- desc "track FILE CASTLE", "add a file to a castle"
113
- def track(file, castle)
114
+ desc 'track FILE CASTLE', 'add a file to a castle'
115
+ def track(file, castle = DEFAULT_CASTLE_NAME)
114
116
  castle = Pathname.new(castle)
115
117
  file = Pathname.new(file.chomp('/'))
116
118
  check_castle_existance(castle, 'track')
@@ -149,24 +151,44 @@ class Homesick < Thor
149
151
  end
150
152
 
151
153
  # are we tracking something nested? Add the parent dir to the manifest
152
- unless relative_dir.eql?(Pathname.new('.'))
153
- subdir_add(castle, relative_dir)
154
- end
154
+ subdir_add(castle, relative_dir) unless relative_dir.eql?(Pathname.new('.'))
155
155
  end
156
156
 
157
- desc "list", "List cloned castles"
157
+ desc 'list', 'List cloned castles'
158
158
  def list
159
159
  inside_each_castle do |castle|
160
160
  say_status castle.relative_path_from(repos_dir).to_s, `git config remote.origin.url`.chomp, :cyan
161
161
  end
162
162
  end
163
163
 
164
- desc "generate PATH", "generate a homesick-ready git repo at PATH"
164
+ desc 'status CASTLE', 'Shows the git status of a castle'
165
+ def status(castle = DEFAULT_CASTLE_NAME)
166
+ check_castle_existance(castle, 'status')
167
+ inside repos_dir.join(castle) do
168
+ git_status
169
+ end
170
+ end
171
+
172
+ desc 'diff CASTLE', 'Shows the git diff of uncommitted changes in a castle'
173
+ def diff(castle = DEFAULT_CASTLE_NAME)
174
+ check_castle_existance(castle, 'diff')
175
+ inside repos_dir.join(castle) do
176
+ git_diff
177
+ end
178
+ end
179
+
180
+ desc 'show_path CASTLE', 'Prints the path of a castle'
181
+ def show_path(castle = DEFAULT_CASTLE_NAME)
182
+ check_castle_existance(castle, 'show_path')
183
+ say repos_dir.join(castle)
184
+ end
185
+
186
+ desc 'generate PATH', 'generate a homesick-ready git repo at PATH'
165
187
  def generate(castle)
166
188
  castle = Pathname.new(castle).expand_path
167
189
 
168
190
  github_user = `git config github.user`.chomp
169
- github_user = nil if github_user == ""
191
+ github_user = nil if github_user == ''
170
192
  github_repo = castle.basename
171
193
 
172
194
  empty_directory castle
@@ -177,7 +199,7 @@ class Homesick < Thor
177
199
  git_remote_add 'origin', url
178
200
  end
179
201
 
180
- empty_directory "home"
202
+ empty_directory 'home'
181
203
  end
182
204
  end
183
205
 
@@ -208,7 +230,9 @@ class Homesick < Thor
208
230
  dirs = Pathname.glob("#{repos_dir}/**/.git", File::FNM_DOTMATCH)
209
231
  # reject paths that lie inside another castle, like git submodules
210
232
  return dirs.reject do |dir|
211
- dirs.any? {|other| dir != other && dir.fnmatch(other.parent.join('*').to_s) }
233
+ dirs.any? do |other|
234
+ dir != other && dir.fnmatch(other.parent.join('*').to_s)
235
+ end
212
236
  end
213
237
  end
214
238
 
@@ -222,7 +246,7 @@ class Homesick < Thor
222
246
  end
223
247
 
224
248
  def update_castle(castle)
225
- check_castle_existance(castle, "pull")
249
+ check_castle_existance(castle, 'pull')
226
250
  inside repos_dir.join(castle) do
227
251
  git_pull
228
252
  git_submodule_init
@@ -231,14 +255,14 @@ class Homesick < Thor
231
255
  end
232
256
 
233
257
  def commit_castle(castle)
234
- check_castle_existance(castle, "commit")
258
+ check_castle_existance(castle, 'commit')
235
259
  inside repos_dir.join(castle) do
236
260
  git_commit_all
237
261
  end
238
262
  end
239
263
 
240
264
  def push_castle(castle)
241
- check_castle_existance(castle, "push")
265
+ check_castle_existance(castle, 'push')
242
266
  inside repos_dir.join(castle) do
243
267
  git_push
244
268
  end
@@ -262,7 +286,9 @@ class Homesick < Thor
262
286
  def subdir_add(castle, path)
263
287
  subdir_filepath = subdir_file(castle)
264
288
  File.open(subdir_filepath, 'a+') do |subdir|
265
- subdir.puts path unless subdir.readlines.inject(false) { |memo, line| line.eql?("#{path.to_s}\n") || memo }
289
+ subdir.puts path unless subdir.readlines.reduce(false) do |memo, line|
290
+ line.eql?("#{path.to_s}\n") || memo
291
+ end
266
292
  end
267
293
 
268
294
  inside castle_dir(castle) do
@@ -308,7 +334,7 @@ class Homesick < Thor
308
334
  def symlink_each(castle, basedir, subdirs)
309
335
  absolute_basedir = Pathname.new(basedir).expand_path
310
336
  inside basedir do
311
- files = Pathname.glob('{.*,*}').reject{|a| [".", ".."].include?(a.to_s)}
337
+ files = Pathname.glob('{.*,*}').reject{ |a| ['.', '..'].include?(a.to_s) }
312
338
  files.each do |path|
313
339
  absolute_path = path.expand_path
314
340
  castle_home = castle_dir(castle)
@@ -16,13 +16,13 @@ class Homesick
16
16
  end
17
17
  end
18
18
 
19
- def git_init(path = ".")
19
+ def git_init(path = '.')
20
20
  path = Pathname.new(path)
21
21
 
22
22
  inside path do
23
- unless path.join('.git').exist?
23
+ if !path.join('.git').exist?
24
24
  say_status 'git init', '' unless options[:quiet]
25
- system "git init >/dev/null" unless options[:pretend]
25
+ system 'git init >/dev/null' unless options[:pretend]
26
26
  else
27
27
  say_status 'git init', 'already initialized', :blue unless options[:quiet]
28
28
  end
@@ -33,7 +33,7 @@ class Homesick
33
33
  existing_remote = `git config remote.#{name}.url`.chomp
34
34
  existing_remote = nil if existing_remote == ''
35
35
 
36
- unless existing_remote
36
+ if !existing_remote
37
37
  say_status 'git remote', "add #{name} #{url}" unless options[:quiet]
38
38
  system "git remote add #{name} #{url}" unless options[:pretend]
39
39
  else
@@ -43,27 +43,27 @@ class Homesick
43
43
 
44
44
  def git_submodule_init(config = {})
45
45
  say_status 'git submodule', 'init', :green unless options[:quiet]
46
- system "git submodule --quiet init" unless options[:pretend]
46
+ system 'git submodule --quiet init' unless options[:pretend]
47
47
  end
48
48
 
49
49
  def git_submodule_update(config = {})
50
50
  say_status 'git submodule', 'update', :green unless options[:quiet]
51
- system "git submodule --quiet update --init --recursive >/dev/null 2>&1" unless options[:pretend]
51
+ system 'git submodule --quiet update --init --recursive >/dev/null 2>&1' unless options[:pretend]
52
52
  end
53
53
 
54
54
  def git_pull(config = {})
55
55
  say_status 'git pull', '', :green unless options[:quiet]
56
- system "git pull --quiet" unless options[:pretend]
56
+ system 'git pull --quiet' unless options[:pretend]
57
57
  end
58
58
 
59
59
  def git_push(config = {})
60
60
  say_status 'git push', '', :green unless options[:quiet]
61
- system "git push" unless options[:pretend]
61
+ system 'git push' unless options[:pretend]
62
62
  end
63
63
 
64
64
  def git_commit_all(config = {})
65
65
  say_status 'git commit all', '', :green unless options[:quiet]
66
- system "git commit -v -a" unless options[:pretend]
66
+ system 'git commit -v -a' unless options[:pretend]
67
67
  end
68
68
 
69
69
  def git_add(file, config = {})
@@ -71,6 +71,16 @@ class Homesick
71
71
  system "git add #{file}" unless options[:pretend]
72
72
  end
73
73
 
74
+ def git_status(config = {})
75
+ say_status 'git status', '', :green unless options[:quiet]
76
+ system "git status" unless options[:pretend]
77
+ end
78
+
79
+ def git_diff(config = {})
80
+ say_status 'git diff', '', :green unless options[:quiet]
81
+ system "git diff" unless options[:pretend]
82
+ end
83
+
74
84
  def mv(source, destination, config = {})
75
85
  source = Pathname.new(source)
76
86
  destination = Pathname.new(destination + source.basename)
@@ -1,236 +1,258 @@
1
- require 'spec_helper'
1
+ require 'spec_helper'
2
2
 
3
- describe "homesick" do
3
+ describe 'homesick' do
4
4
  let(:home) { create_construct }
5
5
  after { home.destroy! }
6
6
 
7
- let(:castles) { home.directory(".homesick/repos") }
7
+ let(:castles) { home.directory('.homesick/repos') }
8
8
 
9
9
  let(:homesick) { Homesick.new }
10
10
 
11
11
  before { homesick.stub!(:repos_dir).and_return(castles) }
12
12
 
13
- describe "clone" do
14
- context "of a file" do
15
- it "should symlink existing directories" do
13
+ describe 'clone' do
14
+ context 'of a file' do
15
+ it 'should symlink existing directories' do
16
16
  somewhere = create_construct
17
17
  local_repo = somewhere.directory('wtf')
18
18
 
19
19
  homesick.clone local_repo
20
20
 
21
- castles.join("wtf").readlink.should == local_repo
21
+ castles.join('wtf').readlink.should == local_repo
22
22
  end
23
23
 
24
- context "when it exists in a repo directory" do
24
+ context 'when it exists in a repo directory' do
25
25
  before do
26
- existing_castle = given_castle("existing_castle")
26
+ existing_castle = given_castle('existing_castle')
27
27
  @existing_dir = existing_castle.parent
28
28
  end
29
29
 
30
- it "should not symlink" do
30
+ it 'should raise an error' do
31
31
  homesick.should_not_receive(:git_clone)
32
-
33
- homesick.clone @existing_dir.to_s rescue nil
34
- end
35
-
36
- it "should raise an error" do
37
32
  expect { homesick.clone @existing_dir.to_s }.to raise_error(/already cloned/i)
38
33
  end
39
34
  end
40
35
  end
41
36
 
42
- it "should clone git repo like file:///path/to.git" do
43
- bare_repo = File.join(create_construct.to_s, "dotfiles.git")
37
+ it 'should clone git repo like file:///path/to.git' do
38
+ bare_repo = File.join(create_construct.to_s, 'dotfiles.git')
44
39
  system "git init --bare #{bare_repo} >/dev/null 2>&1"
45
40
 
46
41
  homesick.clone "file://#{bare_repo}"
47
42
  File.directory?(File.join(home.to_s, '.homesick/repos/dotfiles')).should be_true
48
43
  end
49
44
 
50
- it "should clone git repo like git://host/path/to.git" do
45
+ it 'should clone git repo like git://host/path/to.git' do
51
46
  homesick.should_receive(:git_clone).with('git://github.com/technicalpickles/pickled-vim.git')
52
47
 
53
- homesick.clone "git://github.com/technicalpickles/pickled-vim.git"
48
+ homesick.clone 'git://github.com/technicalpickles/pickled-vim.git'
54
49
  end
55
50
 
56
- it "should clone git repo like git@host:path/to.git" do
51
+ it 'should clone git repo like git@host:path/to.git' do
57
52
  homesick.should_receive(:git_clone).with('git@github.com:technicalpickles/pickled-vim.git')
58
53
 
59
54
  homesick.clone 'git@github.com:technicalpickles/pickled-vim.git'
60
55
  end
61
56
 
62
- it "should clone git repo like http://host/path/to.git" do
57
+ it 'should clone git repo like http://host/path/to.git' do
63
58
  homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim.git')
64
59
 
65
60
  homesick.clone 'http://github.com/technicalpickles/pickled-vim.git'
66
61
  end
67
62
 
68
- it "should clone git repo like http://host/path/to" do
63
+ it 'should clone git repo like http://host/path/to' do
69
64
  homesick.should_receive(:git_clone).with('http://github.com/technicalpickles/pickled-vim')
70
65
 
71
66
  homesick.clone 'http://github.com/technicalpickles/pickled-vim'
72
67
  end
73
68
 
74
- it "should clone git repo like host-alias:repos.git" do
69
+ it 'should clone git repo like host-alias:repos.git' do
75
70
  homesick.should_receive(:git_clone).with('gitolite:pickled-vim.git')
76
71
 
77
72
  homesick.clone 'gitolite:pickled-vim.git'
78
73
  end
79
74
 
80
- it "should not try to clone a malformed uri like malformed" do
75
+ it 'should throw an exception when trying to clone a malformed uri like malformed' do
81
76
  homesick.should_not_receive(:git_clone)
82
-
83
- homesick.clone 'malformed' rescue nil
84
- end
85
-
86
- it "should throw an exception when trying to clone a malformed uri like malformed" do
87
77
  expect { homesick.clone 'malformed' }.to raise_error
88
78
  end
89
79
 
90
- it "should clone a github repo" do
80
+ it 'should clone a github repo' do
91
81
  homesick.should_receive(:git_clone).with('git://github.com/wfarr/dotfiles.git', :destination => Pathname.new('wfarr/dotfiles'))
92
82
 
93
- homesick.clone "wfarr/dotfiles"
83
+ homesick.clone 'wfarr/dotfiles'
94
84
  end
95
85
  end
96
86
 
97
- describe "symlink" do
98
- let(:castle) { given_castle("glencairn") }
87
+ describe 'symlink' do
88
+ let(:castle) { given_castle('glencairn') }
99
89
 
100
- it "links dotfiles from a castle to the home folder" do
101
- dotfile = castle.file(".some_dotfile")
90
+ it 'links dotfiles from a castle to the home folder' do
91
+ dotfile = castle.file('.some_dotfile')
102
92
 
103
- homesick.symlink("glencairn")
93
+ homesick.symlink('glencairn')
104
94
 
105
- home.join(".some_dotfile").readlink.should == dotfile
95
+ home.join('.some_dotfile').readlink.should == dotfile
106
96
  end
107
97
 
108
- it "links non-dotfiles from a castle to the home folder" do
109
- dotfile = castle.file("bin")
98
+ it 'links non-dotfiles from a castle to the home folder' do
99
+ dotfile = castle.file('bin')
110
100
 
111
- homesick.symlink("glencairn")
101
+ homesick.symlink('glencairn')
112
102
 
113
- home.join("bin").readlink.should == dotfile
103
+ home.join('bin').readlink.should == dotfile
114
104
  end
115
105
 
116
- context "when forced" do
106
+ context 'when forced' do
117
107
  let(:homesick) { Homesick.new [], :force => true }
118
108
 
119
- it "can override symlinks to directories" do
109
+ it 'can override symlinks to directories' do
120
110
  somewhere_else = create_construct
121
- existing_dotdir_link = home.join(".vim")
111
+ existing_dotdir_link = home.join('.vim')
122
112
  FileUtils.ln_s somewhere_else, existing_dotdir_link
123
113
 
124
- dotdir = castle.directory(".vim")
114
+ dotdir = castle.directory('.vim')
125
115
 
126
- homesick.symlink("glencairn")
116
+ homesick.symlink('glencairn')
127
117
 
128
118
  existing_dotdir_link.readlink.should == dotdir
129
119
  end
130
120
 
131
- it "can override existing directory" do
132
- somewhere_else = create_construct
133
- existing_dotdir = home.directory(".vim")
121
+ it 'can override existing directory' do
122
+ existing_dotdir = home.directory('.vim')
134
123
 
135
- dotdir = castle.directory(".vim")
124
+ dotdir = castle.directory('.vim')
136
125
 
137
- homesick.symlink("glencairn")
126
+ homesick.symlink('glencairn')
138
127
 
139
128
  existing_dotdir.readlink.should == dotdir
140
129
  end
141
130
  end
142
131
 
143
132
  context "with '.config' in .homesick_subdir" do
144
- let(:castle) { given_castle("glencairn", [".config"]) }
145
- it "can symlink in sub directory" do
146
- dotdir = castle.directory(".config")
147
- dotfile = dotdir.file(".some_dotfile")
133
+ let(:castle) { given_castle('glencairn', ['.config']) }
134
+ it 'can symlink in sub directory' do
135
+ dotdir = castle.directory('.config')
136
+ dotfile = dotdir.file('.some_dotfile')
148
137
 
149
- homesick.symlink("glencairn")
138
+ homesick.symlink('glencairn')
150
139
 
151
- home_dotdir = home.join(".config")
152
- home_dotdir.symlink?.should == false
153
- home_dotdir.join(".some_dotfile").readlink.should == dotfile
140
+ home_dotdir = home.join('.config')
141
+ home_dotdir.symlink?.should be == false
142
+ home_dotdir.join('.some_dotfile').readlink.should == dotfile
154
143
  end
155
144
  end
156
145
 
157
146
  context "with '.config/appA' in .homesick_subdir" do
158
- let(:castle) { given_castle("glencairn", [".config/appA"]) }
159
- it "can symlink in nested sub directory" do
160
- dotdir = castle.directory(".config").directory("appA")
161
- dotfile = dotdir.file(".some_dotfile")
147
+ let(:castle) { given_castle('glencairn', ['.config/appA']) }
148
+ it 'can symlink in nested sub directory' do
149
+ dotdir = castle.directory('.config').directory('appA')
150
+ dotfile = dotdir.file('.some_dotfile')
162
151
 
163
- homesick.symlink("glencairn")
152
+ homesick.symlink('glencairn')
164
153
 
165
- home_dotdir = home.join(".config").join("appA")
166
- home_dotdir.symlink?.should == false
167
- home_dotdir.join(".some_dotfile").readlink.should == dotfile
154
+ home_dotdir = home.join('.config').join('appA')
155
+ home_dotdir.symlink?.should be == false
156
+ home_dotdir.join('.some_dotfile').readlink.should == dotfile
168
157
  end
169
158
  end
170
159
 
171
- context "with '.config' and '.config/appA' in .homesick_subdir" do
172
- let(:castle) { given_castle("glencairn", [".config", ".config/appA"]) }
173
- it "can symlink under both of .config and .config/appA" do
174
- config_dir = castle.directory(".config")
175
- config_dotfile = config_dir.file(".some_dotfile")
176
- appA_dir = config_dir.directory("appA")
177
- appA_dotfile = appA_dir.file(".some_appfile")
178
-
179
- homesick.symlink("glencairn")
180
-
181
- home_config_dir = home.join(".config")
182
- home_appA_dir = home_config_dir.join("appA")
183
- home_config_dir.symlink?.should == false
184
- home_config_dir.join(".some_dotfile").readlink.should == config_dotfile
185
- home_appA_dir.symlink?.should == false
186
- home_appA_dir.join(".some_appfile").readlink.should == appA_dotfile
160
+ context "with '.config' and '.config/someapp' in .homesick_subdir" do
161
+ let(:castle) { given_castle('glencairn', ['.config', '.config/someapp']) }
162
+ it 'can symlink under both of .config and .config/someapp' do
163
+ config_dir = castle.directory('.config')
164
+ config_dotfile = config_dir.file('.some_dotfile')
165
+ someapp_dir = config_dir.directory('someapp')
166
+ someapp_dotfile = someapp_dir.file('.some_appfile')
167
+
168
+ homesick.symlink('glencairn')
169
+
170
+ home_config_dir = home.join('.config')
171
+ home_someapp_dir = home_config_dir.join('someapp')
172
+ home_config_dir.symlink?.should be == false
173
+ home_config_dir.join('.some_dotfile').readlink.should be == config_dotfile
174
+ home_someapp_dir.symlink?.should be == false
175
+ home_someapp_dir.join('.some_appfile').readlink.should == someapp_dotfile
176
+ end
177
+ end
178
+
179
+ context "when call with no castle name" do
180
+ let(:castle) { given_castle('dotfiles') }
181
+ it 'using default castle name: "dotfiles"' do
182
+ dotfile = castle.file('.some_dotfile')
183
+
184
+ homesick.symlink
185
+
186
+ home.join('.some_dotfile').readlink.should == dotfile
187
187
  end
188
188
  end
189
189
  end
190
190
 
191
- describe "list" do
192
- it "should say each castle in the castle directory" do
191
+ describe 'list' do
192
+ it 'should say each castle in the castle directory' do
193
193
  given_castle('zomg')
194
194
  given_castle('wtf/zomg')
195
195
 
196
- homesick.should_receive(:say_status).with("zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
197
- homesick.should_receive(:say_status).with("wtf/zomg", "git://github.com/technicalpickles/zomg.git", :cyan)
196
+ homesick.should_receive(:say_status).with('zomg', 'git://github.com/technicalpickles/zomg.git', :cyan)
197
+ homesick.should_receive(:say_status).with('wtf/zomg', 'git://github.com/technicalpickles/zomg.git', :cyan)
198
198
 
199
199
  homesick.list
200
200
  end
201
201
  end
202
202
 
203
- describe "pull" do
203
+ describe 'status' do
204
+
205
+ xit 'needs testing'
206
+
207
+ end
208
+
209
+ describe 'diff' do
204
210
 
205
- xit "needs testing"
211
+ xit 'needs testing'
206
212
 
207
- describe "--all" do
208
- xit "needs testing"
213
+ end
214
+
215
+ describe 'show_path' do
216
+ it 'should say the path of a castle' do
217
+ castle = given_castle('castle_repo')
218
+
219
+ homesick.should_receive(:say).with(castle.dirname)
220
+
221
+ homesick.show_path('castle_repo')
222
+ end
223
+ end
224
+
225
+ describe 'pull' do
226
+
227
+ xit 'needs testing'
228
+
229
+ describe '--all' do
230
+ xit 'needs testing'
209
231
  end
210
232
 
211
233
  end
212
234
 
213
- describe "commit" do
235
+ describe 'commit' do
214
236
 
215
- xit "needs testing"
237
+ xit 'needs testing'
216
238
 
217
239
  end
218
240
 
219
- describe "push" do
241
+ describe 'push' do
220
242
 
221
- xit "needs testing"
243
+ xit 'needs testing'
222
244
 
223
245
  end
224
246
 
225
- describe "track" do
226
- it "should move the tracked file into the castle" do
247
+ describe 'track' do
248
+ it 'should move the tracked file into the castle' do
227
249
  castle = given_castle('castle_repo')
228
250
 
229
251
  some_rc_file = home.file '.some_rc_file'
230
252
 
231
253
  homesick.track(some_rc_file.to_s, 'castle_repo')
232
254
 
233
- tracked_file = castle.join(".some_rc_file")
255
+ tracked_file = castle.join('.some_rc_file')
234
256
  tracked_file.should exist
235
257
 
236
258
  some_rc_file.readlink.should == tracked_file
@@ -258,7 +280,22 @@ describe "homesick" do
258
280
  some_nested_dir.realpath.should == tracked_file.realpath
259
281
  end
260
282
 
261
- describe "subdir_file" do
283
+ context "when call with no castle name" do
284
+ it 'using default castle name: "dotfiles"' do
285
+ castle = given_castle('dotfiles')
286
+
287
+ some_rc_file = home.file '.some_rc_file'
288
+
289
+ homesick.track(some_rc_file.to_s)
290
+
291
+ tracked_file = castle.join('.some_rc_file')
292
+ tracked_file.should exist
293
+
294
+ some_rc_file.readlink.should == tracked_file
295
+ end
296
+ end
297
+
298
+ describe 'subdir_file' do
262
299
 
263
300
  it 'should add the nested files parent to the subdir_file' do
264
301
  castle = given_castle('castle_repo')
data/spec/spec_helper.rb CHANGED
@@ -16,19 +16,19 @@ RSpec.configure do |config|
16
16
  homesick.stub(:say_status)
17
17
  end
18
18
 
19
- def given_castle(path, subdirs=[])
19
+ def given_castle(path, subdirs = [])
20
20
  name = Pathname.new(path).basename
21
21
  castles.directory(path) do |castle|
22
22
  Dir.chdir(castle) do
23
- system "git init >/dev/null 2>&1"
23
+ system 'git init >/dev/null 2>&1'
24
24
  system "git remote add origin git://github.com/technicalpickles/#{name}.git >/dev/null 2>&1"
25
- if subdirs then
25
+ if subdirs
26
26
  subdir_file = castle.join(Homesick::SUBDIR_FILENAME)
27
27
  subdirs.each do |subdir|
28
28
  system "echo #{subdir} >> #{subdir_file}"
29
29
  end
30
30
  end
31
- return castle.directory("home")
31
+ return castle.directory('home')
32
32
  end
33
33
  end
34
34
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: homesick
3
3
  version: !ruby/object:Gem::Version
4
- hash: 57
4
+ hash: 63
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 1
10
- version: 0.9.1
9
+ - 2
10
+ version: 0.9.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joshua Nichols
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-06-17 00:00:00 Z
19
+ date: 2013-06-27 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false
@@ -141,7 +141,6 @@ files:
141
141
  - .travis.yml
142
142
  - ChangeLog.markdown
143
143
  - Gemfile
144
- - Gemfile.lock
145
144
  - LICENSE
146
145
  - README.markdown
147
146
  - Rakefile
data/Gemfile.lock DELETED
@@ -1,42 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- diff-lcs (1.2.4)
5
- git (1.2.5)
6
- jeweler (1.8.4)
7
- bundler (~> 1.0)
8
- git (>= 1.2.5)
9
- rake
10
- rdoc
11
- json (1.8.0)
12
- multi_json (1.7.3)
13
- rake (10.0.4)
14
- rcov (1.0.0)
15
- rdoc (4.0.1)
16
- json (~> 1.4)
17
- rspec (2.13.0)
18
- rspec-core (~> 2.13.0)
19
- rspec-expectations (~> 2.13.0)
20
- rspec-mocks (~> 2.13.0)
21
- rspec-core (2.13.1)
22
- rspec-expectations (2.13.0)
23
- diff-lcs (>= 1.1.3, < 2.0)
24
- rspec-mocks (2.13.1)
25
- simplecov (0.7.1)
26
- multi_json (~> 1.0)
27
- simplecov-html (~> 0.7.1)
28
- simplecov-html (0.7.1)
29
- test-construct (1.2.0)
30
- thor (0.18.1)
31
-
32
- PLATFORMS
33
- ruby
34
-
35
- DEPENDENCIES
36
- jeweler (>= 1.6.2)
37
- rake (>= 0.8.7)
38
- rcov
39
- rspec (~> 2.10)
40
- simplecov
41
- test-construct
42
- thor (>= 0.14.0)