dotify 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  script: bundle exec rspec spec
3
+ after_script: bundle exec cucumber
3
4
  rvm:
4
5
  - 1.8.7
5
6
  - 1.9.2
data/Gemfile CHANGED
@@ -1,4 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in dotify.gemspec
4
- gemspec
3
+ gem 'thor'
4
+ gem 'multi_json'
5
+ gem 'git'
6
+
7
+ group :test, :development do
8
+ gem 'rspec', '~> 2.11.0'
9
+ gem 'simplecov'
10
+ gem 'cucumber'
11
+ gem 'webmock'
12
+ gem 'vcr'
13
+
14
+ gem 'guard-rspec'
15
+ gem 'guard-cucumber'
16
+ end
data/Guardfile CHANGED
@@ -1,9 +1,15 @@
1
1
  # A sample Guardfile
2
2
  # More info at https://github.com/guard/guard#readme
3
3
 
4
- guard 'rspec', :version => 2 do
4
+ guard 'rspec', :all_on_start => false, :all_after_pass => false, :notification => false, :version => 2 do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
6
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
7
  watch('spec/spec_helper.rb') { "spec" }
8
8
  end
9
9
 
10
+
11
+ guard 'cucumber', :cli => '--no-profile --color', :notification => false, :all_on_pass => false, :all_on_start => false do
12
+ watch(%r{^features/.+\.feature$})
13
+ watch(%r{^features/support/.+$}) { 'features' }
14
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
15
+ end
@@ -14,12 +14,4 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "dotify"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Dotify::VERSION
17
-
18
- gem.add_dependency "thor"
19
- gem.add_dependency "multi_json"
20
- gem.add_dependency "git"
21
- gem.add_development_dependency "guard-rspec"
22
- gem.add_development_dependency "rspec"
23
- gem.add_development_dependency "webmock"
24
- gem.add_development_dependency "vcr"
25
17
  end
@@ -0,0 +1,13 @@
1
+ Feature: linking files to Dotify
2
+
3
+ In order to manage dotfiles
4
+ we need to be able to link files
5
+ from the home directory -> ~/.dotify.
6
+
7
+ Scenario: Linking a file
8
+ Given I have setup Dotify
9
+ And the following files are in home:
10
+ | .bash_profile |
11
+ | .gemrc |
12
+ When they get linked by Dotify
13
+ Then they are all linked to the dotify path
@@ -0,0 +1,10 @@
1
+ Feature: Setting up Dotify
2
+
3
+ We need to be able to setup Dotify
4
+ on our system.
5
+
6
+ Scenario: Setting up dotify
7
+ Given Dotify is not setup
8
+ When I try to setup Dotify
9
+ Then .dotify should exist in home
10
+ Then .dotrc should exist in home
@@ -0,0 +1,25 @@
1
+ Given /^the following files are in home:$/i do |table|
2
+ @files_to_link = table.raw.flatten
3
+ @files_to_link.each { |file| `touch #{Dotify::Config.home(file)}` }
4
+ end
5
+
6
+ Given /^(.*) does not exist in (home|dotify)$/i do |file, location|
7
+ location = location == 'home' ? :home : :path
8
+ puts `rm -rf #{Dotify::Config.send(location, file)}`
9
+ end
10
+
11
+ When /^they get linked by Dotify$/ do
12
+ @files_to_link.each { |file| Dotify::Unit.new(file).link }
13
+ end
14
+
15
+ Then /^they are all linked to the dotify path$/i do
16
+ @files_to_link.each do |file|
17
+ File.exists?(Dotify::Config.path(file)).should == true
18
+ File.readlink(Dotify::Config.home(file)).should == Dotify::Config.path(file)
19
+ end
20
+ end
21
+
22
+ Then /^\.(\S*) should exist in (home|dotify)$/ do |file, location|
23
+ where = location == "home" ? :home : :path
24
+ File.exists?(Dotify::Config.send(where, "." + file)).should == true
25
+ end
@@ -0,0 +1,12 @@
1
+ Given /^Dotify is not setup$/ do
2
+ system "rm -rf #{File.join(ENV["HOME"], ".dotify")}"
3
+ end
4
+
5
+ Given /^I have setup Dotify$/i do
6
+ system "mkdir -p #{Dotify::Config.path}"
7
+ system "touch #{Dotify::Config.home(".dotrc")}"
8
+ end
9
+
10
+ When /^I try to setup Dotify$/ do
11
+ Dotify::CLI.new.setup
12
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'thor/util'
3
+ require 'fileutils'
4
+
5
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
6
+ require 'dotify'
7
+
8
+ Before do
9
+ @__orig_home = ENV["HOME"]
10
+ ENV["HOME"] = "/tmp"
11
+ `rm -rf #{File.join(ENV["HOME"], '.bash_profile')}`
12
+ `rm -rf #{File.join(ENV["HOME"], '.gemrc')}`
13
+ end
14
+
15
+ After do
16
+ ENV["HOME"] = @__orig_home
17
+ end
@@ -7,7 +7,7 @@ module Dotify
7
7
 
8
8
  autoload :Config, 'dotify/config'
9
9
  autoload :Collection, 'dotify/collection'
10
- autoload :List, 'dotify/list'
10
+ autoload :Filter, 'dotify/filter'
11
11
  autoload :Unit, 'dotify/unit'
12
12
  autoload :CLI, 'dotify/cli'
13
13
 
@@ -18,4 +18,8 @@ module Dotify
18
18
  def self.version
19
19
  VERSION
20
20
  end
21
+
22
+ def self.collection
23
+ @collection ||= Collection.new
24
+ end
21
25
  end
@@ -7,8 +7,6 @@ require 'net/http'
7
7
  require 'dotify'
8
8
  require 'dotify/version_checker'
9
9
 
10
- Dotify::Config.load_config!
11
-
12
10
  module Dotify
13
11
 
14
12
  class Git
@@ -70,6 +68,15 @@ module Dotify
70
68
  end
71
69
  end
72
70
 
71
+ desc :list, "List the installed dotfiles"
72
+ def list
73
+ say "Dotify is managing #{Dotify.collection.linked.count} files:\n", :blue
74
+ Dotify.collection.linked.each do |unit|
75
+ say " * #{unit.filename}", :yellow
76
+ end
77
+ $stdout.write "\n"
78
+ end
79
+
73
80
  desc 'edit [FILE]', "Edit a dotify file"
74
81
  method_option :save, :aliases => '-s', :default => false, :type => :boolean, :require => true, :desc => "Save Dotify files and push to Github"
75
82
  def edit(file)
@@ -148,9 +155,9 @@ module Dotify
148
155
  # Link a single file
149
156
  return link_file Unit.new(file), options unless file.nil?
150
157
  # Relink the files
151
- return collection.linked.each { |file| link_file(file, options) } if options[:relink]
158
+ return Dotify.collection.linked.each { |file| link_file(file, options) } if options[:relink]
152
159
  # Link the files
153
- collection.unlinked.each { |file| link_file(file, options) }
160
+ Dotify.collection.unlinked.each { |file| link_file(file, options) }
154
161
  end
155
162
 
156
163
  desc 'unlink [[FILENAME]]', "Unlink one or all of your dotfiles (FILENAME is optional)"
@@ -166,15 +173,11 @@ module Dotify
166
173
  # Unlink a single file
167
174
  return unlink_file Unit.new(file), options unless file.nil?
168
175
  # Unlink the files
169
- collection.linked.each { |file| unlink_file(file, options) }
176
+ Dotify.collection.linked.each { |file| unlink_file(file, options) }
170
177
  end
171
178
 
172
179
  no_tasks do
173
180
 
174
- def collection
175
- @collection ||= Collection.new
176
- end
177
-
178
181
  def not_setup_warning
179
182
  say "Dotify has not been setup yet! You need to run 'dotify setup' first.", :yellow
180
183
  end
@@ -1,5 +1,3 @@
1
- Dotify::Config.load_config!
2
-
3
1
  module Dotify
4
2
  class Collection
5
3
 
@@ -10,12 +8,12 @@ module Dotify
10
8
  # Pulls an array of Units from the home
11
9
  # directory.
12
10
  def initialize
13
- @units ||= List.home
11
+ @units ||= Filter.home
14
12
  end
15
13
 
16
14
  # Defined each method for Enumerable
17
15
  def each(&block)
18
- @units.each(&block)
16
+ units.each(&block)
19
17
  end
20
18
 
21
19
  # Linked files are those files which have a
@@ -32,11 +30,11 @@ module Dotify
32
30
  end
33
31
 
34
32
  def to_s
35
- @units
33
+ units.to_s
36
34
  end
37
35
 
38
36
  def inspect
39
- @units.map(&:inspect)
37
+ units.map(&:inspect)
40
38
  end
41
39
 
42
40
  end
@@ -3,71 +3,70 @@ require 'thor/util'
3
3
  require 'yaml'
4
4
 
5
5
  module Dotify
6
- class Config
7
-
8
- DIRNAME = '.dotify'
9
- CONFIG_FILE = '.dotrc'
10
- EDITOR = 'vim'
11
- DEFAULT_IGNORE = {
12
- :dotify => %w[.DS_Store .git .gitmodule],
13
- :dotfiles => %w[.DS_Store .Trash .dropbox .dotify]
14
- }
15
-
16
- class << self
6
+ module Config
7
+
8
+ extend self
9
+
10
+ DEFAULTS = {
11
+ :dirname => '.dotify',
12
+ :file => '.dotrc',
13
+ :editor => 'vim',
14
+ :ignore => {
15
+ :dotify => %w[.DS_Store .git .gitmodule],
16
+ :dotfiles => %w[.DS_Store .Trash .dropbox .dotify]
17
+ }
18
+ }.freeze
19
+
20
+ def dirname
21
+ @dirname ||= DEFAULTS[:dirname]
22
+ end
17
23
 
18
- def dirname
19
- @dirname ||= DIRNAME
20
- end
24
+ def home(file_or_path = nil)
25
+ file_or_path.nil? ? user_home : File.join(user_home, file_or_path)
26
+ end
21
27
 
22
- def home(file_or_path = nil)
23
- file_or_path.nil? ? user_home : File.join(user_home, file_or_path)
24
- end
28
+ def path(file_or_path = nil)
29
+ joins = [self.home, dirname]
30
+ joins << file_or_path unless file_or_path.nil?
31
+ File.join *joins
32
+ end
25
33
 
26
- def path(file_or_path = nil)
27
- joins = [self.home, dirname]
28
- joins << file_or_path unless file_or_path.nil?
29
- File.join *joins
30
- end
34
+ def installed?
35
+ File.exists?(path) && File.directory?(path)
36
+ end
31
37
 
32
- def installed?
33
- File.exists?(path) && File.directory?(path)
34
- end
38
+ def editor
39
+ retrieve.fetch(:editor, DEFAULTS[:editor])
40
+ end
35
41
 
36
- def editor
37
- config.fetch(:editor, 'vim')
38
- end
42
+ def ignore(what)
43
+ (retrieve.fetch(:ignore, {}).fetch(what, []) + DEFAULTS[:ignore].fetch(what, [])).uniq
44
+ end
39
45
 
40
- def load_config!
41
- config = File.exists?(file) ? (YAML.load_file(file) || {}) : {}
42
- symbolize_keys!(config)
43
- end
46
+ def retrieve
47
+ @hash ||= File.exists?(file) ? YAML.load_file(file) : {}
48
+ symbolize_keys! @hash
49
+ rescue TypeError
50
+ {}
51
+ end
44
52
 
45
- def ignore(what)
46
- (config.fetch(:ignore, {}).fetch(what, []) + DEFAULT_IGNORE.fetch(what, [])).uniq
47
- end
53
+ def file
54
+ File.join(home, DEFAULTS[:file])
55
+ end
48
56
 
49
- def config
50
- @config || load_config!
51
- end
57
+ private
52
58
 
53
- def file
54
- File.join(home, CONFIG_FILE)
59
+ def user_home
60
+ Thor::Util.user_home
55
61
  end
56
62
 
57
- private
58
-
59
- def user_home
60
- Thor::Util.user_home
61
- end
62
-
63
- def symbolize_keys!(opts)
64
- sym_opts = {}
65
- opts.each do |key, value|
66
- sym_opts[key.to_sym] = value.is_a?(Hash) ? symbolize_keys!(value) : value
67
- end
68
- sym_opts
63
+ def symbolize_keys!(opts)
64
+ sym_opts = {}
65
+ opts.each do |key, value|
66
+ sym_opts[key.to_sym] = value.is_a?(Hash) ? symbolize_keys!(value) : value
69
67
  end
68
+ sym_opts
69
+ end
70
70
 
71
- end
72
71
  end
73
72
  end
@@ -1,7 +1,7 @@
1
1
  require 'dotify'
2
2
 
3
3
  module Dotify
4
- class List
4
+ class Filter
5
5
  class << self
6
6
 
7
7
  def home
@@ -65,7 +65,7 @@ module Dotify
65
65
  end
66
66
 
67
67
  def inspect
68
- "#<Dotify::Unit @filename='#{@filename}' @linked=#{linked?}>"
68
+ "#<Dotify::Unit filename: '#{@filename}' linked: #{linked?}>"
69
69
  end
70
70
 
71
71
  def linked_to_dotify?
@@ -73,11 +73,9 @@ module Dotify
73
73
  end
74
74
 
75
75
  def symlink
76
- begin
77
- File.readlink dotfile
78
- rescue
79
- NoSymlink
80
- end
76
+ File.readlink dotfile
77
+ rescue
78
+ NoSymlink
81
79
  end
82
80
 
83
81
  end
@@ -1,3 +1,3 @@
1
1
  module Dotify
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.3"
3
3
  end
@@ -7,13 +7,23 @@ module Dotify
7
7
  let!(:cli) { CLI.new }
8
8
  before do
9
9
  Dotify.stub(:installed?).and_return true
10
- cli.stub(:exec)
11
- cli.stub(:collection) { Collection.new }
10
+ vimrc = Unit.new('.zshrc')
11
+ vimrc.stub(:linked?).and_return(true)
12
+ bash_profile = Unit.new('.bash_profile')
13
+ bash_profile.stub(:linked?).and_return(true)
14
+ gitconfig = Unit.new('.gitconfig')
15
+ gitconfig.stub(:linked?).and_return(false)
16
+ zshrc = Unit.new('.zshrc')
17
+ zshrc.stub(:linked?).and_return(false)
18
+ Filter.stub(:home).and_return([vimrc, bash_profile, gitconfig, zshrc])
12
19
  end
13
20
 
14
21
  describe CLI, "#edit" do
15
22
  let(:unit) { double('unit', :linked? => true, :dotify => '/tmp/dotify/.vimrc') }
16
- before { Unit.stub(:new).and_return(unit) }
23
+ before do
24
+ Unit.stub(:new).and_return(unit)
25
+ cli.stub(:exec)
26
+ end
17
27
  it "should open the editor with the passed file" do
18
28
  cli.should_receive(:exec).with([Config.editor, unit.dotify].join(" "))
19
29
  cli.edit('.vimrc')
@@ -32,22 +42,19 @@ module Dotify
32
42
 
33
43
  describe CLI, "#link" do
34
44
  before do
35
- cli.stub(:collection).and_return(
36
- double('collection', {
37
- :unlinked => [double('.zshrc', :in_home_dir? => true, :linked? => false), double('.gitconfig', :in_home_dir? => true, :linked? => false)],
38
- :linked => [double('.vimrc', :in_home_dir? => true, :linked? => true)]
39
- })
40
- )
41
45
  cli.stub(:link_file)
42
46
  end
43
47
  it "should loop through all unlinked files" do
44
- cli.collection.should_receive(:unlinked)
45
- cli.should_receive(:link_file).exactly(cli.collection.unlinked.size).times
48
+ Dotify.collection.should_receive(:unlinked).and_return Dotify.collection.reject(&:linked?)
49
+ cli.link
50
+ end
51
+ it "should call link_file on the right files" do
52
+ cli.should_receive(:link_file).exactly(Dotify.collection.unlinked.size).times
46
53
  cli.link
47
54
  end
48
55
  it "should relink all of the files located in Dotify" do
49
- cli.collection.should_not_receive(:unlinked)
50
- cli.collection.should_receive(:linked)
56
+ Dotify.collection.should_not_receive(:unlinked)
57
+ Dotify.collection.should_receive(:linked).and_return []
51
58
  cli.stub(:options).and_return({ :relink => true })
52
59
  cli.link
53
60
  end
@@ -64,17 +71,14 @@ module Dotify
64
71
 
65
72
  describe CLI, "#unlink" do
66
73
  before do
67
- cli.stub(:collection).and_return double(:linked => [double('.vimrc', :linked? => true), double('.bashrc', :linked? => true)])
68
74
  cli.stub(:unlink_file)
69
75
  end
70
76
  it "should loop through all unlinked files" do
71
- cli.collection.should_receive(:linked)
77
+ Dotify.collection.should_receive(:linked).and_return Dotify.collection.select(&:linked?)
72
78
  cli.unlink
73
79
  end
74
80
  it "should call CLI#unlink_file the right number of times" do
75
- cli.collection.should_receive(:linked)
76
- cli.stub(:unlink_file)
77
- cli.should_receive(:unlink_file).exactly(cli.collection.linked.size).times
81
+ cli.should_receive(:unlink_file).exactly(Dotify.collection.linked.size).times
78
82
  cli.unlink
79
83
  end
80
84
  it "attempt to link one single file" do
@@ -19,15 +19,15 @@ module Dotify
19
19
  end
20
20
  end
21
21
 
22
- it "should pull the right files from List.home" do
22
+ it "should pull the right files from Filter.home" do
23
23
  files = [stub, stub, stub]
24
- List.stub(:home).and_return files
24
+ Filter.stub(:home).and_return files
25
25
  collection.units.should == files
26
26
  end
27
27
 
28
28
  describe Collection, "#linked" do
29
29
  before do
30
- List.stub(:home).and_return home_files
30
+ collection.stub(:units).and_return home_files
31
31
  end
32
32
  let(:linked) { collection.linked }
33
33
  it "should return the right Units" do
@@ -42,7 +42,7 @@ module Dotify
42
42
 
43
43
  describe Collection, "#unlinked" do
44
44
  before do
45
- List.stub(:home).and_return home_files
45
+ collection.stub(:units).and_return home_files
46
46
  end
47
47
  let(:unlinked) { collection.unlinked }
48
48
  it "should return the right Units" do
@@ -55,5 +55,15 @@ module Dotify
55
55
  end
56
56
  end
57
57
 
58
+ it "should call #to_s on the units" do
59
+ collection.units.should_receive(:to_s)
60
+ collection.to_s
61
+ end
62
+
63
+ it "should call #inspect on the units" do
64
+ collection.units.each { |u| u.should_receive(:inspect) }
65
+ collection.inspect
66
+ end
67
+
58
68
  end
59
69
  end
@@ -2,6 +2,38 @@ require 'spec_helper'
2
2
 
3
3
  module Dotify
4
4
  describe Config do
5
+
6
+ describe Config, "#load_config!" do
7
+ it "should not raise a TypeError if the .dotrc file is empty (this is a problem with Psych not liking loading empty files)" do
8
+ system "mkdir -p #{Config.home}"
9
+ system "touch #{Config.home(".fake-dotrc")}"
10
+ Config.stub(:file).and_return Config.home(".fake-dotrc")
11
+ expect { Config.retrieve }.not_to raise_error TypeError
12
+ end
13
+ context "unit tests" do
14
+ before do
15
+ Config.instance_variable_set("@hash", nil)
16
+ File.stub(:exists?).with(Config.file).and_return true
17
+ end
18
+ it "should return an empty hash" do
19
+ YAML.stub(:load_file).with(Config.file).and_return({})
20
+ Config.retrieve.should == {}
21
+ end
22
+ it "should return an the hash returned by YAML#load_file" do
23
+ YAML.stub(:load_file).and_return({ :test => 'example' })
24
+ Config.retrieve.should == { :test => 'example' }
25
+ end
26
+ it "should symbolize the keys returned" do
27
+ YAML.stub(:load_file).and_return({ 'test' => 'example' })
28
+ Config.retrieve.should == { :test => 'example' }
29
+ end
30
+ it "should only try to set config from the config file once" do
31
+ YAML.should_receive(:load_file).with(Config.file).once.and_return({ 'test' => 'example' })
32
+ 5.times { Config.retrieve }
33
+ end
34
+ end
35
+ end
36
+
5
37
  describe Config, "#installed?" do
6
38
  it "should return true if Dotify has been setup" do
7
39
  File.should_receive(:exists?).with(Config.path).and_return(true)
@@ -34,15 +66,15 @@ module Dotify
34
66
 
35
67
  describe "options" do
36
68
  before do
37
- Config.stub(:config) do
69
+ Config.stub(:retrieve) do
38
70
  { :ignore => { :dotfiles => %w[.gemrc], :dotify => %w[.gitmodule] } }
39
71
  end
40
72
  end
41
73
  it "should set a default editor" do
42
- Config.editor.should == Config::EDITOR
74
+ Config.editor.should == Config::DEFAULTS[:editor]
43
75
  end
44
76
  it "should allow a custom editor" do
45
- Config.stub(:config) do
77
+ Config.stub(:retrieve) do
46
78
  { :editor => 'subl' }
47
79
  end
48
80
  Config.editor.should == 'subl'
@@ -57,12 +89,12 @@ module Dotify
57
89
 
58
90
  describe "ignore files" do
59
91
  before do
60
- Config.stub(:config) do
92
+ Config.stub(:retrieve) do
61
93
  { :ignore => { :dotfiles => %w[.gemrc], :dotify => %w[.gitmodule] } }
62
94
  end
63
95
  end
64
96
  it "should have a default set of dotfiles" do
65
- Config.stub(:config).and_return({})
97
+ Config.stub(:retrieve).and_return({})
66
98
  Config.ignore(:dotify).should include '.git'
67
99
  Config.ignore(:dotify).should include '.gitmodule'
68
100
  Config.ignore(:dotfiles).should include '.dropbox'
@@ -1,15 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Dotify
4
- describe List do
4
+ describe Filter do
5
5
 
6
- describe List, "#home" do
7
- it "should call List#list with the correct path" do
8
- List.should_receive(:units).with("/tmp/home/.*").once.and_return([])
9
- List.home
6
+ describe Filter, "#home" do
7
+ it "should call Filter#units with the correct path" do
8
+ Filter.should_receive(:units).with("/tmp/home/.*").once.and_return([])
9
+ Filter.home
10
10
  end
11
11
  it "should drop files that have been specified to be ignored" do
12
- List.stub(:units) do
12
+ Filter.stub(:units) do
13
13
  [
14
14
  Unit.new('.zshrc'),
15
15
  Unit.new('.bashrc'),
@@ -18,7 +18,7 @@ module Dotify
18
18
  ]
19
19
  end
20
20
  Config.stub(:ignore).with(:dotfiles).and_return %w[.zshrc .vimrc]
21
- result = List.home.map(&:filename)
21
+ result = Filter.home.map(&:filename)
22
22
  result.should include '.bashrc'
23
23
  result.should include '.gitconfig'
24
24
  result.should_not include '.zshrc'
@@ -26,13 +26,13 @@ module Dotify
26
26
  end
27
27
  end
28
28
 
29
- describe List, "#dotify" do
30
- it "should call List#list with the correct path" do
31
- List.should_receive(:units).with("/tmp/home/.dotify/.*").once.and_return([])
32
- List.dotify
29
+ describe Filter, "#dotify" do
30
+ it "should call Filter#units with the correct path" do
31
+ Filter.should_receive(:units).with("/tmp/home/.dotify/.*").once.and_return([])
32
+ Filter.dotify
33
33
  end
34
34
  it "should drop files that have been specified to be ignored" do
35
- List.stub(:units) do
35
+ Filter.stub(:units) do
36
36
  [
37
37
  Unit.new(".gitconfig"),
38
38
  Unit.new('.vimrc'),
@@ -42,7 +42,7 @@ module Dotify
42
42
  ]
43
43
  end
44
44
  Config.stub(:ignore).with(:dotify).and_return %w[.gitconfig .bashrc]
45
- result = List.filenames(List.dotify)
45
+ result = Filter.filenames(Filter.dotify)
46
46
  result.should include '.vimrc'
47
47
  result.should include '.zshrc'
48
48
  result.should include '.fakefile'
@@ -51,17 +51,17 @@ module Dotify
51
51
  end
52
52
  end
53
53
 
54
- describe List, "#units" do
54
+ describe Filter, "#units" do
55
55
  let(:glob) { '/spec/test/.*' }
56
56
  it "should pull the glob of dotfiles from a directory" do
57
57
  Dir.should_receive(:[]).with(glob).and_return(%w[. .. /spec/test/.vimrc /spec/test/.bashrc /spec/test/.zshrc])
58
- List.units(glob)
58
+ Filter.units(glob)
59
59
  end
60
60
  describe "return values" do
61
61
  before do
62
62
  Dir.stub(:[]).with(glob).and_return(%w[. .. /spec/test/.vimrc /spec/test/.bashrc /spec/test/.zshrc])
63
63
  end
64
- let(:files) { List.units(glob) }
64
+ let(:files) { Filter.units(glob) }
65
65
  it "should return the right directories" do
66
66
  f = files.map(&:filename)
67
67
  f.should include '.vimrc'
@@ -76,12 +76,12 @@ module Dotify
76
76
  end
77
77
  end
78
78
 
79
- describe List, "#filenames" do
79
+ describe Filter, "#filenames" do
80
80
  let(:files) { [
81
81
  Unit.new('.vimrc'), Unit.new('.bashrc'), Unit.new('.zshrc')
82
82
  ] }
83
83
  it "return only the filenames of the units" do
84
- result = List.filenames(files)
84
+ result = Filter.filenames(files)
85
85
  result.should include '.vimrc'
86
86
  result.should include '.bashrc'
87
87
  result.should include '.zshrc'
@@ -153,5 +153,15 @@ module Dotify
153
153
  end
154
154
  end
155
155
 
156
+ describe "inspecting unit" do
157
+ it "should display properly" do
158
+ Unit.new(".zshrc").inspect.should == "#<Dotify::Unit filename: '.zshrc' linked: false>"
159
+ bash = Unit.new(".bashrc")
160
+ bash.stub(:linked?).and_return true
161
+ bash.inspect.should == "#<Dotify::Unit filename: '.bashrc' linked: true>"
162
+
163
+ end
164
+ end
165
+
156
166
  end
157
167
  end
@@ -18,16 +18,14 @@ module Dotify
18
18
  end
19
19
  describe VersionChecker, "#current?" do
20
20
  it "should be false if version is not current" do
21
- with_constants "Dotify::VERSION" => '0.2.0' do
21
+ stub_const "Dotify::VERSION", '0.2.0'
22
22
  VersionChecker.stub(:version).and_return('0.1.9')
23
- VersionChecker.current?.should == false
24
- end
25
- end
23
+ VersionChecker.current?.should == false
24
+ end
26
25
  it "should be true if version is current" do
27
- with_constants "Dotify::VERSION" => '0.2.0' do
28
- VersionChecker.stub(:version).and_return('0.2.0')
29
- VersionChecker.current?.should == true
30
- end
26
+ stub_const "Dotify::VERSION", '0.2.0'
27
+ VersionChecker.stub(:version).and_return('0.2.0')
28
+ VersionChecker.current?.should == true
31
29
  end
32
30
  end
33
31
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dotify do
4
+ it "#installed? should be a shortcut method to Config#installed?" do
5
+ Dotify::Config.stub(:installed?).and_return true
6
+ Dotify.installed?.should == true
7
+ Dotify::Config.stub(:installed?).and_return false
8
+ Dotify.installed?.should == false
9
+ end
10
+
11
+ it "version is a shortcut method to Dotify::VERSION" do
12
+ Dotify.version.should == Dotify::VERSION
13
+ end
14
+
15
+ it "version is a shortcut method to Dotify::VERSION" do
16
+ Dotify.collection.should be_instance_of Dotify::Collection
17
+ end
18
+ end
@@ -5,8 +5,11 @@
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
7
  $:.unshift File.expand_path("../../lib", __FILE__)
8
- require 'dotify'
9
- Dir["./spec/support/**/*.rb"].each { |f| require f }
8
+ require 'thor/util'
9
+ require 'simplecov'
10
+ SimpleCov.start do
11
+ add_filter '/spec/support'
12
+ end
10
13
 
11
14
  RSpec.configure do |config|
12
15
  config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -14,11 +17,9 @@ RSpec.configure do |config|
14
17
  config.filter_run :focus
15
18
 
16
19
  config.before(:each) do
17
- class Thor
18
- module Util
19
- end
20
- end
21
20
  Thor::Util.stub(:user_home) { '/tmp/home' }
22
- #Dotify::Config.stub(:home) { '/tmp/home' }
23
21
  end
24
22
  end
23
+
24
+ require 'dotify'
25
+ Dir["./spec/support/**/*.rb"].each { |f| require f }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,120 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-07 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: thor
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: multi_json
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: git
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: guard-rspec
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: rspec
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: webmock
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: vcr
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
12
+ date: 2012-07-13 00:00:00.000000000 Z
13
+ dependencies: []
126
14
  description: A CLI Tool for managing your dotfiles
127
15
  email:
128
16
  - mbridges.91@gmail.com
@@ -141,28 +29,32 @@ files:
141
29
  - Rakefile
142
30
  - bin/dotify
143
31
  - dotify.gemspec
32
+ - features/linking_files.feature
33
+ - features/setting_up_dotify.feature
34
+ - features/step_definitions/linking_files.rb
35
+ - features/step_definitions/setting_up_dotify.rb
36
+ - features/support/env.rb
144
37
  - lib/dotify.rb
145
38
  - lib/dotify/cli.rb
146
39
  - lib/dotify/collection.rb
147
40
  - lib/dotify/config.rb
148
41
  - lib/dotify/errors.rb
149
- - lib/dotify/list.rb
42
+ - lib/dotify/filter.rb
150
43
  - lib/dotify/unit.rb
151
44
  - lib/dotify/version.rb
152
45
  - lib/dotify/version_checker.rb
153
46
  - spec/dotify/cli_spec.rb
154
47
  - spec/dotify/collection_spec.rb
155
48
  - spec/dotify/config_spec.rb
156
- - spec/dotify/list_spec.rb
49
+ - spec/dotify/filter_spec.rb
157
50
  - spec/dotify/unit_spec.rb
158
51
  - spec/dotify/version_checker_spec.rb
52
+ - spec/dotify_spec.rb
159
53
  - spec/fixtures/.dotrc-default
160
54
  - spec/fixtures/vcr/version_check.yml
161
55
  - spec/spec_helper.rb
162
56
  - spec/support/vcr.rb
163
- - spec/support/with_constants.rb
164
57
  - templates/.dotrc
165
- - templates/.gitkeep
166
58
  homepage: https://github.com/mattdbridges/dotify
167
59
  licenses: []
168
60
  post_install_message:
@@ -188,14 +80,19 @@ signing_key:
188
80
  specification_version: 3
189
81
  summary: A CLI Tool for managing your dotfiles
190
82
  test_files:
83
+ - features/linking_files.feature
84
+ - features/setting_up_dotify.feature
85
+ - features/step_definitions/linking_files.rb
86
+ - features/step_definitions/setting_up_dotify.rb
87
+ - features/support/env.rb
191
88
  - spec/dotify/cli_spec.rb
192
89
  - spec/dotify/collection_spec.rb
193
90
  - spec/dotify/config_spec.rb
194
- - spec/dotify/list_spec.rb
91
+ - spec/dotify/filter_spec.rb
195
92
  - spec/dotify/unit_spec.rb
196
93
  - spec/dotify/version_checker_spec.rb
94
+ - spec/dotify_spec.rb
197
95
  - spec/fixtures/.dotrc-default
198
96
  - spec/fixtures/vcr/version_check.yml
199
97
  - spec/spec_helper.rb
200
98
  - spec/support/vcr.rb
201
- - spec/support/with_constants.rb
@@ -1,49 +0,0 @@
1
- module Kernel
2
- def silence_warnings
3
- with_warnings(nil) { yield }
4
- end
5
-
6
- def with_warnings(flag)
7
- old_verbose, $VERBOSE = $VERBOSE, flag
8
- yield
9
- ensure
10
- $VERBOSE = old_verbose
11
- end
12
- end
13
-
14
- def constantize(camel_cased_word)
15
- names = camel_cased_word.split('::')
16
- names.shift if names.empty? || names.first.empty?
17
-
18
- constant = Object
19
- names.each do |name|
20
- constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
21
- end
22
- constant
23
- end
24
-
25
- def parse(constant)
26
- source, _, constant_name = constant.to_s.rpartition('::')
27
-
28
- [constantize(source), constant_name]
29
- end
30
-
31
- def with_constants(constants, &block)
32
- saved_constants = {}
33
- constants.each do |constant, val|
34
- source_object, const_name = parse(constant)
35
-
36
- saved_constants[constant] = source_object.const_get(const_name)
37
- Kernel::silence_warnings { source_object.const_set(const_name, val) }
38
- end
39
-
40
- begin
41
- block.call
42
- ensure
43
- constants.each do |constant, val|
44
- source_object, const_name = parse(constant)
45
-
46
- Kernel::silence_warnings { source_object.const_set(const_name, saved_constants[constant]) }
47
- end
48
- end
49
- end
File without changes