dotman 0.0.1 → 0.0.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.
- checksums.yaml +4 -4
- data/README.md +2 -18
- data/bin/dot +13 -0
- data/lib/dotman.rb +6 -8
- data/lib/dotman/base.rb +40 -0
- data/lib/dotman/dotfile_collection.rb +47 -0
- data/lib/dotman/git.rb +23 -0
- data/lib/dotman/user.rb +68 -0
- data/lib/dotman/version.rb +1 -1
- data/spec/data/dotfiles/.bashrc +0 -0
- data/spec/data/dotfiles/.vimrc +0 -0
- data/spec/data/dotfiles/.zshrc +0 -0
- data/spec/data/dotfiles/some_nondot_file +0 -0
- data/spec/dotman/base_spec.rb +51 -0
- data/spec/dotman/dotfile_collection_spec.rb +10 -0
- data/spec/dotman_spec.rb +0 -17
- data/spec/git_spec.rb +2 -2
- data/spec/integration/dotfile_collection_integration_spec.rb +16 -0
- data/spec/integration/{dotman_integration_spec.rb → dotman_base_integration_spec.rb} +3 -3
- data/spec/integration/git_integration_spec.rb +42 -8
- data/spec/integration/user_integration_spec.rb +62 -0
- data/spec/spec_helper.rb +1 -0
- metadata +27 -6
- data/lib/git.rb +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fd8b469fcc0d6da51b7488b195248ecccd4b8d74
|
|
4
|
+
data.tar.gz: 462ec000404811976fdfff032020270d3b6e1251
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 53852745e415c58ca8bf1262088ce74b0f708434f1336588487e5ed742b6515b77d685997b673576a8f2891eeb70e0d42356f5fd527fdb9deeac2f806d9460de
|
|
7
|
+
data.tar.gz: ef869344289cfbe23a4ec377e552fb71e2e3ad8a4de9ae649ac4a9b636debeffd450eb06e1424df0f1a6db5f1775c7c28fef3eccfa9804b620e3b583170df265
|
data/README.md
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
1
|
# Dotman
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This is a work in progress. It is not yet in working condition.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Add this line to your application's Gemfile:
|
|
8
|
-
|
|
9
|
-
gem 'dotman'
|
|
10
|
-
|
|
11
|
-
And then execute:
|
|
12
|
-
|
|
13
|
-
$ bundle
|
|
14
|
-
|
|
15
|
-
Or install it yourself as:
|
|
16
|
-
|
|
17
|
-
$ gem install dotman
|
|
18
|
-
|
|
19
|
-
## Usage
|
|
20
|
-
|
|
21
|
-
TODO: Write usage instructions here
|
|
5
|
+
This gem will allow you to switch between different dotfiles on the same user account.
|
|
22
6
|
|
|
23
7
|
## Contributing
|
|
24
8
|
|
data/bin/dot
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
|
3
|
+
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require 'dotman'
|
|
6
|
+
|
|
7
|
+
case ARGV.first
|
|
8
|
+
when 'clone'
|
|
9
|
+
Dotman::Base.ensure_dotman_folder_exists
|
|
10
|
+
Dotman::Git.klone(ARGV[1], ARGV[2])
|
|
11
|
+
when 'use'
|
|
12
|
+
Dotman::User.set(ARGV[1])
|
|
13
|
+
end
|
data/lib/dotman.rb
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
+
require 'fileutils'
|
|
1
2
|
require "dotman/version"
|
|
2
|
-
require
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
3
|
+
require "dotman/base"
|
|
4
|
+
require "dotman/git"
|
|
5
|
+
require "dotman/dotfile_collection"
|
|
6
|
+
require "dotman/user"
|
|
7
|
+
|
data/lib/dotman/base.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Dotman
|
|
2
|
+
class Base
|
|
3
|
+
|
|
4
|
+
def self.default_folder
|
|
5
|
+
"#{ENV['HOME']}/.dotman/default"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.dotman_folder
|
|
9
|
+
"#{ENV['HOME']}/.dotman"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.current_dotman
|
|
13
|
+
File.join(ENV['HOME'], '.dotman', '.current')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.ensure_dotman_folder_exists
|
|
17
|
+
unless File.directory?(dotman_folder)
|
|
18
|
+
FileUtils.mkdir(dotman_folder)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.ensure_default_folder_exists
|
|
23
|
+
unless File.directory?(default_folder)
|
|
24
|
+
FileUtils.mkdir_p(default_folder)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.ensure_current_dotman_file_exists
|
|
29
|
+
unless File.exist?(current_dotman)
|
|
30
|
+
File.open(current_dotman, 'w') do |f|
|
|
31
|
+
f.write('default')
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
ensure_dotman_folder_exists
|
|
36
|
+
ensure_default_folder_exists
|
|
37
|
+
ensure_current_dotman_file_exists
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Dotman
|
|
2
|
+
|
|
3
|
+
DOTFILES_PATH = "#{ENV['HOME']}/.dotman/dotfiles.yml"
|
|
4
|
+
DOTFILES_YAML = File.exist?(DOTFILES_PATH) ? YAML::load_file(DOTFILES_PATH) : Hash.new
|
|
5
|
+
|
|
6
|
+
class DotfileCollection
|
|
7
|
+
|
|
8
|
+
attr_accessor :yaml
|
|
9
|
+
|
|
10
|
+
def self.find_by_alias(alias_name)
|
|
11
|
+
dotfile_collection = new
|
|
12
|
+
ensure_default_dotfile_configuration_exists
|
|
13
|
+
dotfile_collection.yaml = DOTFILES_YAML.fetch(alias_name) if DOTFILES_YAML
|
|
14
|
+
dotfile_collection
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.new_configuration(folder_name, alias_name = nil)
|
|
18
|
+
dotfile_collection = new
|
|
19
|
+
alias_name = folder_name unless alias_name
|
|
20
|
+
DOTFILES_YAML.store(alias_name, {
|
|
21
|
+
'folder_name' => folder_name
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
save_dotfile_yaml
|
|
25
|
+
dotfile_collection.yaml = DOTFILES_YAML
|
|
26
|
+
dotfile_collection
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def all_dotfiles
|
|
31
|
+
Dir.entries("#{Dotman::Base.dotman_folder}/#{@yaml['folder_name']}").select{|x| x =~ /\.{1}\w+/ }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def self.ensure_default_dotfile_configuration_exists
|
|
37
|
+
unless DOTFILES_YAML && DOTFILES_YAML['default']
|
|
38
|
+
new_configuration('default')
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.save_dotfile_yaml
|
|
43
|
+
File.open(DOTFILES_PATH, 'w') { |f| f.write DOTFILES_YAML.to_yaml }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/dotman/git.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Dotman
|
|
2
|
+
class Git
|
|
3
|
+
def self.klone(git_location, alias_name = nil)
|
|
4
|
+
unless git_location.nil?
|
|
5
|
+
clone_repository(git_location, alias_name)
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.folder_name(git_location)
|
|
10
|
+
folder_name = git_location.scan(/[^:]+[\/]?dotfile[s?]{1}/).first.gsub('/', '_')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.clone_repository(git_location, alias_name = nil)
|
|
14
|
+
dotfile_location = "#{ENV['HOME']}/.dotman/#{folder_name(git_location)}"
|
|
15
|
+
if (File.directory?(dotfile_location))
|
|
16
|
+
STDOUT.puts("Dotfiles were already cloned")
|
|
17
|
+
else
|
|
18
|
+
system "git clone #{git_location} #{dotfile_location}"
|
|
19
|
+
Dotman::DotfileCollection.new_configuration(folder_name(git_location), alias_name)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/dotman/user.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
module Dotman
|
|
2
|
+
class User
|
|
3
|
+
def initialize(shortcut)
|
|
4
|
+
@alias = shortcut
|
|
5
|
+
@collection = Dotman::DotfileCollection.find_by_alias(shortcut)
|
|
6
|
+
@folder_name = @collection.yaml['folder_name']
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
attr_reader :alias, :folder_name, :collection
|
|
10
|
+
|
|
11
|
+
def move_home_files_to_default
|
|
12
|
+
@collection.all_dotfiles.each do |file|
|
|
13
|
+
if File.exist?("#{ENV['HOME']}/#{file}")
|
|
14
|
+
FileUtils.mv("#{ENV['HOME']}/#{file}", Dotman::Base.default_folder)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.move_default_back_to_home
|
|
20
|
+
$default_user.collection.all_dotfiles.each do |file|
|
|
21
|
+
FileUtils.mv(Dotman::Base.default_folder + '/' + file, ENV['HOME'] )
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def symlink_dotfiles
|
|
26
|
+
@collection.all_dotfiles.each do |file|
|
|
27
|
+
FileUtils.ln_s(File.join(Dotman::Base.dotman_folder, @folder_name, file), File.join(ENV['HOME'], file))
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def remove_symlink_dotfiles
|
|
32
|
+
@collection.all_dotfiles.each do |file|
|
|
33
|
+
if File.symlink?(File.join(ENV['HOME'], file))
|
|
34
|
+
FileUtils.rm(File.join(ENV['HOME'], file))
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.set(shortcut)
|
|
40
|
+
current.remove_symlink_dotfiles
|
|
41
|
+
move_default_back_to_home
|
|
42
|
+
set_user = new(shortcut)
|
|
43
|
+
set_user.move_home_files_to_default
|
|
44
|
+
set_user.symlink_dotfiles
|
|
45
|
+
set_user.set_current_user
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def self.current
|
|
51
|
+
new(current_user_alias)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def set_current_user
|
|
55
|
+
File.open(Dotman::Base.current_dotman, 'w') do |f|
|
|
56
|
+
f.write(@alias)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def self.current_user_alias
|
|
62
|
+
File.open(Dotman::Base.current_dotman).read.strip
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
$default_user = new('default')
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
data/lib/dotman/version.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
describe Dotman::Base do
|
|
3
|
+
let (:dotfiles_folder) { File.expand_path('../../data/dotfiles', __FILE__) }
|
|
4
|
+
let!(:dotfiles) {FileUtils.touch "#{dotfiles_folder}/.vimrc"; FileUtils.touch "#{dotfiles_folder}/.bashrc"; FileUtils.touch "#{dotfiles_folder}/.zshrc" }
|
|
5
|
+
|
|
6
|
+
describe ".ensure_dotman_folder_exists" do
|
|
7
|
+
context "when `$HOME.dotman/` does not exist" do
|
|
8
|
+
it "creates the dotman directory" do
|
|
9
|
+
File.stub(:directory?).and_return(false)
|
|
10
|
+
FileUtils.should_receive(:mkdir).with("#{ENV['HOME']}/.dotman")
|
|
11
|
+
Dotman::Base.ensure_dotman_folder_exists
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "when $HOME.dotman/ exists" do
|
|
16
|
+
it "does nothing" do
|
|
17
|
+
File.stub(:directory?).and_return(true)
|
|
18
|
+
FileUtils.should_not_receive(:mkdir)
|
|
19
|
+
Dotman::Base.ensure_dotman_folder_exists
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe ".all_dotfiles" do
|
|
25
|
+
context "when dotfiles exist for a location" do
|
|
26
|
+
|
|
27
|
+
it "returns all the dotfiles" do
|
|
28
|
+
Dotman::Base.all_dotfiles(dotfiles_folder).should include('.vimrc', '.bashrc', '.zshrc')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should not contain . or .." do
|
|
32
|
+
Dotman::Base.all_dotfiles(dotfiles_folder).should_not include('..', '.')
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "does not contain non dotfiles" do
|
|
36
|
+
Dotman::Base.all_dotfiles(dotfiles_folder).should_not include('some_nondot_file')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe ".move_home_files_to_default" do
|
|
43
|
+
context "when having dotfiles in project" do
|
|
44
|
+
it "moves the files" do
|
|
45
|
+
Dotman::Base.move_home_files_to_default(dotfiles_folder)
|
|
46
|
+
Dir.entries(Dotman::Base.default_folder).should include('.vimrc', '.bashrc', '.zshrc')
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
data/spec/dotman_spec.rb
CHANGED
|
@@ -1,20 +1,3 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
describe Dotman do
|
|
3
|
-
describe "::ensure_dotman_folder_exists" do
|
|
4
|
-
context "$HOME.dotman/ does not exist" do
|
|
5
|
-
it "creates the dotman directory" do
|
|
6
|
-
File.stub(:directory?).and_return(true)
|
|
7
|
-
FileUtils.should_receive(:mkdir).with("$HOME/.dotman")
|
|
8
|
-
Dotman.ensure_dotman_folder_exists
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context "$HOME.dotman/ already exists" do
|
|
13
|
-
it "does nothing" do
|
|
14
|
-
File.stub(:directory?).and_return(false)
|
|
15
|
-
FileUtils.should_not_receive(:mkdir).with("$HOME/.dotman")
|
|
16
|
-
Dotman.ensure_dotman_folder_exists
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
3
|
end
|
data/spec/git_spec.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
-
describe Git do
|
|
2
|
+
describe Dotman::Git do
|
|
3
3
|
describe ".folder_name" do
|
|
4
4
|
it "returns the folder name of the git repo" do
|
|
5
|
-
Git.folder_name('git@github.com:Timbinous/dotfiles.git').should == "Timbinous_dotfiles"
|
|
5
|
+
Dotman::Git.folder_name('git@github.com:Timbinous/dotfiles.git').should == "Timbinous_dotfiles"
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
describe Dotman::DotfileCollection do
|
|
3
|
+
describe ".find_by_alias" do
|
|
4
|
+
context "when dotfile collection is found" do
|
|
5
|
+
let (:alias_name) { 'tim' }
|
|
6
|
+
let (:dotfile_collection_name) { 'Timbinous_dotfiles' }
|
|
7
|
+
let! (:dotfile_configuration) { Dotman::DotfileCollection.new_configuration(dotfile_collection_name, alias_name) }
|
|
8
|
+
it "returns the dotfile collection" do
|
|
9
|
+
Dotman::DotfileCollection.find_by_alias(alias_name)['folder_name'].should == dotfile_collection_name
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
after :all do
|
|
14
|
+
FileUtils.rm_r("#{ENV['HOME']}/.dotman/dotfiles.yml")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
-
describe Dotman do
|
|
3
|
-
context "dotman folder doesn't exist
|
|
2
|
+
describe Dotman::Base do
|
|
3
|
+
context "when .dotman folder doesn't exist in the home directory" do
|
|
4
4
|
before :all do
|
|
5
5
|
FileUtils.rm_rf("#{ENV['HOME']}/.dotman")
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
it "creates a new folder" do
|
|
9
9
|
File.directory?("#{ENV['HOME']}/.dotman").should == false
|
|
10
|
-
Dotman.ensure_dotman_folder_exists
|
|
10
|
+
Dotman::Base.ensure_dotman_folder_exists
|
|
11
11
|
File.directory?("#{ENV['HOME']}/.dotman").should == true
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -3,20 +3,54 @@
|
|
|
3
3
|
#
|
|
4
4
|
#
|
|
5
5
|
require 'spec_helper'
|
|
6
|
-
describe Git do
|
|
6
|
+
describe Dotman::Git do
|
|
7
7
|
before :all do
|
|
8
|
-
Dotman.ensure_dotman_folder_exists
|
|
9
|
-
FileUtils.rm_rf("#{ENV['HOME']}/.dotman/Timbinous_dotfiles")
|
|
8
|
+
Dotman::Base.ensure_dotman_folder_exists
|
|
10
9
|
end
|
|
11
10
|
|
|
12
11
|
context "cloning a new repo" do
|
|
13
|
-
|
|
12
|
+
|
|
13
|
+
let (:git_dotfile_repo_path) { "git@github.com:Timbinous/dotfiles.git" }
|
|
14
|
+
let (:git_folder_name) { Dotman::Git.folder_name(git_dotfile_repo_path) }
|
|
15
|
+
|
|
16
|
+
context "when no alias passed" do
|
|
17
|
+
|
|
18
|
+
it "clones to the $HOME/.dotman folder" do
|
|
19
|
+
expect {
|
|
20
|
+
Dotman::Git.clone_repository(git_dotfile_repo_path) }.
|
|
21
|
+
to change { File.directory?("#{ENV['HOME']}/.dotman/Timbinous_dotfiles") }.to true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "sets the yaml configuration" do
|
|
25
|
+
Dotman::DotfileCollection.find_by_alias(git_folder_name).should_not be_false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
after :all do
|
|
29
|
+
FileUtils.rm_r("#{ENV['HOME']}/.dotman/dotfiles.yml")
|
|
30
|
+
FileUtils.rm_rf("#{ENV['HOME']}/.dotman/Timbinous_dotfiles")
|
|
31
|
+
end
|
|
32
|
+
|
|
14
33
|
end
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
to
|
|
34
|
+
|
|
35
|
+
context "when alias was passed" do
|
|
36
|
+
|
|
37
|
+
it "clones to the $HOME/.dotman folder" do
|
|
38
|
+
expect {
|
|
39
|
+
Dotman::Git.clone_repository(git_dotfile_repo_path, 'tim') }.
|
|
40
|
+
to change { File.directory?("#{ENV['HOME']}/.dotman/Timbinous_dotfiles") }.to true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "sets the yaml configuration" do
|
|
44
|
+
Dotman::DotfileCollection.find_by_alias('tim').should_not be_false
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
after :all do
|
|
48
|
+
FileUtils.rm_r("#{ENV['HOME']}/.dotman/dotfiles.yml")
|
|
49
|
+
FileUtils.rm_rf("#{ENV['HOME']}/.dotman/Timbinous_dotfiles")
|
|
50
|
+
end
|
|
51
|
+
|
|
19
52
|
end
|
|
20
53
|
end
|
|
54
|
+
|
|
21
55
|
|
|
22
56
|
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
describe Dotman::User do
|
|
3
|
+
describe ".current_user_alias" do
|
|
4
|
+
before :all do
|
|
5
|
+
File.open(Dotman::Base.current_dotman, 'w') { |f| f.write 'tim' }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'returns the alias of the current user' do
|
|
9
|
+
Dotman::User.current_user_alias.should == 'tim'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#set_current_user" do
|
|
14
|
+
let (:user) { Dotman::User.new('frank') }
|
|
15
|
+
|
|
16
|
+
before :all do
|
|
17
|
+
Dotman::DotfileCollection.new_configuration('frankie_dotfiles', 'frank')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'writes to the .current file, the alias of the current user' do
|
|
21
|
+
user.set_current_user
|
|
22
|
+
Dotman::User.current_user_alias.should == 'frank'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
describe ".current" do
|
|
28
|
+
|
|
29
|
+
it 'returns the current users information' do
|
|
30
|
+
Dotman::User.current.folder_name.should == 'frankie_dotfiles'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "#set" do
|
|
35
|
+
|
|
36
|
+
before :each do
|
|
37
|
+
Dotman::Git.clone_repository("git@github.com:Timbinous/dotfiles.git", 'tim')
|
|
38
|
+
FileUtils.touch(["#{ENV['HOME']}/.vimrc", "#{ENV['HOME']}/.zshrc", "#{ENV['HOME']}/.bashrc"])
|
|
39
|
+
Dotman::User.set('tim')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "when not the current user" do
|
|
43
|
+
it "moves the default dotfiles over to the default folder" do
|
|
44
|
+
$default_user.collection.all_dotfiles.should_not be_empty
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "symlinks your dotfiles to the home directory" do
|
|
48
|
+
File.symlink?(File.join(ENV['HOME'], '.zshrc')).should be_true
|
|
49
|
+
File.symlink?(File.join(ENV['HOME'], '.vimrc')).should be_true
|
|
50
|
+
File.symlink?(File.join(ENV['HOME'], '.bashrc')).should be_true
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
after :each do
|
|
55
|
+
FileUtils.rm_r("#{ENV['HOME']}/.dotman/dotfiles.yml")
|
|
56
|
+
FileUtils.rm_rf("#{ENV['HOME']}/.dotman/Timbinous_dotfiles")
|
|
57
|
+
$default_user.collection.all_dotfiles.each do |df|
|
|
58
|
+
FileUtils.rm("#{ENV['HOME']}/.dotman/default/#{df}")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dotman
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tim
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-05-
|
|
11
|
+
date: 2013-05-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -69,7 +69,8 @@ dependencies:
|
|
|
69
69
|
description: Dotfiles Manager
|
|
70
70
|
email:
|
|
71
71
|
- timbinous@gmail.com
|
|
72
|
-
executables:
|
|
72
|
+
executables:
|
|
73
|
+
- dot
|
|
73
74
|
extensions: []
|
|
74
75
|
extra_rdoc_files: []
|
|
75
76
|
files:
|
|
@@ -79,14 +80,26 @@ files:
|
|
|
79
80
|
- LICENSE.txt
|
|
80
81
|
- README.md
|
|
81
82
|
- Rakefile
|
|
83
|
+
- bin/dot
|
|
82
84
|
- dotman.gemspec
|
|
83
85
|
- lib/dotman.rb
|
|
86
|
+
- lib/dotman/base.rb
|
|
87
|
+
- lib/dotman/dotfile_collection.rb
|
|
88
|
+
- lib/dotman/git.rb
|
|
89
|
+
- lib/dotman/user.rb
|
|
84
90
|
- lib/dotman/version.rb
|
|
85
|
-
-
|
|
91
|
+
- spec/data/dotfiles/.bashrc
|
|
92
|
+
- spec/data/dotfiles/.vimrc
|
|
93
|
+
- spec/data/dotfiles/.zshrc
|
|
94
|
+
- spec/data/dotfiles/some_nondot_file
|
|
95
|
+
- spec/dotman/base_spec.rb
|
|
96
|
+
- spec/dotman/dotfile_collection_spec.rb
|
|
86
97
|
- spec/dotman_spec.rb
|
|
87
98
|
- spec/git_spec.rb
|
|
88
|
-
- spec/integration/
|
|
99
|
+
- spec/integration/dotfile_collection_integration_spec.rb
|
|
100
|
+
- spec/integration/dotman_base_integration_spec.rb
|
|
89
101
|
- spec/integration/git_integration_spec.rb
|
|
102
|
+
- spec/integration/user_integration_spec.rb
|
|
90
103
|
- spec/spec_helper.rb
|
|
91
104
|
homepage: ''
|
|
92
105
|
licenses:
|
|
@@ -114,8 +127,16 @@ specification_version: 4
|
|
|
114
127
|
summary: Use this utility to manage your dotfiles and others who may use the same
|
|
115
128
|
login user as yourself
|
|
116
129
|
test_files:
|
|
130
|
+
- spec/data/dotfiles/.bashrc
|
|
131
|
+
- spec/data/dotfiles/.vimrc
|
|
132
|
+
- spec/data/dotfiles/.zshrc
|
|
133
|
+
- spec/data/dotfiles/some_nondot_file
|
|
134
|
+
- spec/dotman/base_spec.rb
|
|
135
|
+
- spec/dotman/dotfile_collection_spec.rb
|
|
117
136
|
- spec/dotman_spec.rb
|
|
118
137
|
- spec/git_spec.rb
|
|
119
|
-
- spec/integration/
|
|
138
|
+
- spec/integration/dotfile_collection_integration_spec.rb
|
|
139
|
+
- spec/integration/dotman_base_integration_spec.rb
|
|
120
140
|
- spec/integration/git_integration_spec.rb
|
|
141
|
+
- spec/integration/user_integration_spec.rb
|
|
121
142
|
- spec/spec_helper.rb
|
data/lib/git.rb
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
class Git
|
|
2
|
-
def self.klone(git_location)
|
|
3
|
-
# clone_repository(git_location)
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
def self.folder_name(git_location)
|
|
7
|
-
folder_name = git_location.scan(/[^:]+[\/]?dotfile[s?]{1}/).first.gsub('/', '_')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.clone_repository(git_location)
|
|
11
|
-
if (File.directory?("#{ENV['HOME']}/.dotman/#{folder_name(git_location)}"))
|
|
12
|
-
STDOUT.puts("Dotfiles were already cloned")
|
|
13
|
-
else
|
|
14
|
-
system "git clone #{git_location} #{ENV['HOME']}/.dotman/#{folder_name(git_location)}"
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|