Symlink_Creator 1.0.0

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/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.swp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ -r turnip/rspec
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake', '~> 10.3.2'
4
+ gem 'json', '~> 1.7.7'
5
+
6
+ group :test do
7
+ gem "pry", "~> 0.9.12.2"
8
+ gem "rspec", "~> 2.11.0"
9
+ gem "turnip", "~> 1.0.0"
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ coderay (1.0.9)
5
+ diff-lcs (1.1.3)
6
+ gherkin (2.12.0)
7
+ multi_json (~> 1.3)
8
+ json (1.7.7)
9
+ method_source (0.8.1)
10
+ multi_json (1.7.3)
11
+ pry (0.9.12.2)
12
+ coderay (~> 1.0.5)
13
+ method_source (~> 0.8)
14
+ slop (~> 3.4)
15
+ rake (10.3.2)
16
+ rspec (2.11.0)
17
+ rspec-core (~> 2.11.0)
18
+ rspec-expectations (~> 2.11.0)
19
+ rspec-mocks (~> 2.11.0)
20
+ rspec-core (2.11.1)
21
+ rspec-expectations (2.11.3)
22
+ diff-lcs (~> 1.1.3)
23
+ rspec-mocks (2.11.3)
24
+ slop (3.4.4)
25
+ turnip (1.0.0)
26
+ gherkin (>= 2.5)
27
+ rspec (~> 2.0)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ json (~> 1.7.7)
34
+ pry (~> 0.9.12.2)
35
+ rake (~> 10.3.2)
36
+ rspec (~> 2.11.0)
37
+ turnip (~> 1.0.0)
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path("../../lib/create_symlink", __FILE__)
3
+ SymlinkCreator.start(*ARGV)
@@ -0,0 +1,7 @@
1
+ require File.expand_path("../../lib/profile", __FILE__)
2
+ module SymlinkCreator
3
+ def self.start(folder)
4
+ profile = Profile.new(folder)
5
+ profile.execute
6
+ end
7
+ end
data/lib/profile.rb ADDED
@@ -0,0 +1,47 @@
1
+ class Profile
2
+ attr_accessor :folder
3
+
4
+ def initialize(folder)
5
+ @folder = folder
6
+ end
7
+
8
+ def execute
9
+ prepare_folder
10
+ create_symlinks(@files)
11
+ end
12
+
13
+ def prepare_folder
14
+ @files = []
15
+ Dir.foreach(path) do |file|
16
+ unless file == '.git'
17
+ remove_old_symlinks(file)
18
+ remove_existing_files(file)
19
+ end
20
+ end
21
+ end
22
+
23
+ def remove_old_symlinks(file)
24
+ if File.symlink?("#{path}/../#{file}")
25
+ system("rm #{path}/../#{file}")
26
+ end
27
+ end
28
+
29
+ def remove_existing_files(file)
30
+ if File.exist?("#{path}/../#{file}")
31
+ puts "The #{file} already exists"
32
+ else
33
+ @files << file
34
+ end
35
+ end
36
+
37
+ def create_symlinks(files)
38
+ files.each do |file|
39
+ File.symlink("#{path}/#{file}", "#{path}/../#{file}")
40
+ puts "symlink created for #{file}"
41
+ end
42
+ end
43
+
44
+ def path
45
+ File.expand_path("~/#{folder}")
46
+ end
47
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module SymlinkCreator
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe SymlinkCreator do
4
+ describe '##start' do
5
+ it 'make a call setup profile command' do
6
+ Profile.any_instance.should_receive(:execute).once
7
+ SymlinkCreator.start 'folder'
8
+ end
9
+ end
10
+ end
11
+
12
+ class Profile
13
+ def initialize(folder)
14
+ @folder = folder
15
+ end
16
+ end
17
+
@@ -0,0 +1,12 @@
1
+ Feature: Create Symlinks
2
+ @create_symlinks
3
+ Scenario: Symlinks should be created for files in a directory
4
+ Given there are files in a directory
5
+ When I run the create symlink command
6
+ Then I should have symlinks created for each file in the directory
7
+
8
+ @create_symlinks
9
+ Scenario: Should create a symlink for your file even if symlinks already exists
10
+ Given there is a folder with symlinks already created
11
+ When I run the create symlink command with folder 3
12
+ Then the existing symlinks should be removed and created for my directory
@@ -0,0 +1,46 @@
1
+ steps_for :create_symlinks do
2
+ step 'there are files in a directory' do
3
+ Profile.any_instance.stub(:path).and_return('spec/test_data/profile')
4
+ end
5
+
6
+ step 'there is a folder with symlinks already created' do
7
+ path = "spec/test_data/profile3"
8
+ Profile.any_instance.stub(:path).and_return('spec/test_data/profile3')
9
+
10
+ file = 'Untitled.rft'
11
+ File.symlink("#{path}/#{file}", "#{path}/../#{file}")
12
+ end
13
+
14
+ step 'I run the create symlink command' do
15
+ SymlinkCreator.start 'test_data/profile'
16
+ end
17
+
18
+ step 'I run the create symlink command with folder 3' do
19
+ SymlinkCreator.start 'test_data/profile3'
20
+ end
21
+
22
+ step 'I should have symlinks created for each file in the directory' do
23
+ Dir.foreach('spec/test_data/profile') do |file|
24
+ unless file == '.' || '..'
25
+ File.symlink?(file).should be_true
26
+ end
27
+ end
28
+ ##removes synlink if exists
29
+ Dir.foreach('spec/test_data/profile') do |file|
30
+ if file != '.' && file != '..'
31
+ system("rm 'spec/test_data/#{file}'")
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ step 'the existing symlinks should be removed and created for my directory' do
38
+ File.readlink('spec/test_data/Untitled.rft').should == 'spec/test_data/profile3/Untitled.rft'
39
+ ##removes synlink if exists
40
+ Dir.foreach('spec/test_data/profile3') do |file|
41
+ if file != '.' && file != '..'
42
+ system("rm 'spec/test_data/#{file}'")
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ require File.expand_path("../../lib/profile", __FILE__)
3
+
4
+ describe Profile do
5
+ describe '#execute' do
6
+ let(:profile) { Profile.new 'some_folder' }
7
+ it 'should call prepare_folder and then create_symlinks' do
8
+ Profile.any_instance.should_receive(:prepare_folder)
9
+ Profile.any_instance.should_receive(:create_symlinks)
10
+ profile.execute
11
+ end
12
+ end
13
+
14
+ describe '#prepare_folder' do
15
+ let(:profile) { Profile.new 'spec/test_data/profile2' }
16
+ before :each do
17
+ profile.stub(:path).and_return('spec/test_data/profile2')
18
+ end
19
+
20
+ it 'makes a call remove old symlinks for each file in directory' do
21
+ profile.stub(:remove_existing_files).and_return(true)
22
+
23
+ Profile.any_instance.should_receive(:remove_old_symlinks).exactly(4).times
24
+ profile.prepare_folder
25
+ end
26
+
27
+ it 'makes a call to remove existing files for each file in directory' do
28
+ profile.stub(:remove_old_symlinks).and_return(true)
29
+
30
+ Profile.any_instance.should_receive(:remove_existing_files).exactly(4).times
31
+ profile.prepare_folder
32
+ end
33
+ end
34
+
35
+ describe "#remove_old_symlinks" do
36
+ let(:profile) { Profile.new 'some_folder' }
37
+ it 'removes symlinks for old files' do
38
+ File.symlink("spec/test_data/profile2/not_duplicate.txt", "spec/test_data/not_duplicate.txt")
39
+ profile.stub(:path).and_return('spec/test_data/profile2')
40
+ profile.remove_old_symlinks("not_duplicate.txt")
41
+
42
+ File.symlink?("spec/test_data/not_duplicate.txt").should == false
43
+ end
44
+
45
+ end
46
+
47
+ describe '#remove_existing_files' do
48
+ let(:profile) { Profile.new 'some_folder' }
49
+
50
+ it "return a file if it does not exist" do
51
+ profile.remove_existing_files('file.txt').should == ['file.txt']
52
+ end
53
+
54
+ it "not return the file if it does exist" do
55
+ profile.remove_existing_files('duplicate.txt').should_not == ['file.txt']
56
+ end
57
+ end
58
+
59
+ describe '#create_symlinks' do
60
+ let(:profile) { Profile.new 'spec/test_data/profile' }
61
+
62
+ it 'should create symlinks for files in a directory' do
63
+ files = []
64
+
65
+ Dir.foreach('spec/test_data/profile')do |file|
66
+ unless file == '.' || '..'
67
+ files << file
68
+ end
69
+ end
70
+
71
+ profile.create_symlinks(files)
72
+ files.each do |file|
73
+ File.symlink?("spec/test_data/#{file}").should == true
74
+ end
75
+
76
+ ## cleanup
77
+ files.each do |file|
78
+ system("rm 'spec/test_data/#{file}'")
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,5 @@
1
+ require 'rspec/core'
2
+ require File.expand_path("../../lib/create_symlink", __FILE__)
3
+
4
+
5
+ Dir.glob("spec/features/steps/**/*steps.rb") { |f| load f, true }
@@ -0,0 +1 @@
1
+ This file is a duplicate
@@ -0,0 +1,7 @@
1
+ {\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510
2
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
3
+ {\colortbl;\red255\green255\blue255;}
4
+ \margl1440\margr1440\vieww10800\viewh8400\viewkind0
5
+ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
6
+
7
+ \f0\fs24 \cf0 hi}
@@ -0,0 +1 @@
1
+ This file is a duplicate
@@ -0,0 +1 @@
1
+ This file is not
@@ -0,0 +1,7 @@
1
+ {\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510
2
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
3
+ {\colortbl;\red255\green255\blue255;}
4
+ \margl1440\margr1440\vieww10800\viewh8400\viewkind0
5
+ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
6
+
7
+ \f0\fs24 \cf0 hi}
@@ -0,0 +1,19 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "#{lib}/version.rb"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{Symlink_Creator}
7
+ s.version = SymlinkCreator::VERSION
8
+ s.author = "Andy Smith"
9
+ s.date = %q{2014-07-29}
10
+ s.summary = %q{Creates symlink for you from a specified folder}
11
+ s.files = `git ls-files`.split("\n")-%w(spec/Untitled.rft)
12
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") -%w(spec/Untitled.rft)
13
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
14
+ s.require_paths = ["lib"]
15
+ s.license = "MIT"
16
+
17
+ s.add_development_dependency "bundler", "~> 1.5"
18
+ s.add_development_dependency "rake"
19
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Symlink_Creator
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andy Smith
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-07-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.5'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.5'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
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
+ description:
47
+ email:
48
+ executables:
49
+ - SymlinkCreator
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - .rspec
55
+ - Gemfile
56
+ - Gemfile.lock
57
+ - Rakefile
58
+ - bin/SymlinkCreator
59
+ - lib/create_symlink.rb
60
+ - lib/profile.rb
61
+ - lib/version.rb
62
+ - spec/create_symlink_spec.rb
63
+ - spec/features/create_symlinks.feature
64
+ - spec/features/steps/create_symlinks_steps.rb
65
+ - spec/profile_spec.rb
66
+ - spec/spec_helper.rb
67
+ - spec/test_data/duplicate.txt
68
+ - spec/test_data/profile/Untitled.rtf
69
+ - spec/test_data/profile2/duplicate.txt
70
+ - spec/test_data/profile2/not_duplicate.txt
71
+ - spec/test_data/profile3/Untitled.rft
72
+ - symlink_creator.gemspec
73
+ homepage:
74
+ licenses:
75
+ - MIT
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ segments:
87
+ - 0
88
+ hash: 3599463298128991304
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 1.8.23
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: Creates symlink for you from a specified folder
101
+ test_files:
102
+ - spec/create_symlink_spec.rb
103
+ - spec/features/create_symlinks.feature
104
+ - spec/features/steps/create_symlinks_steps.rb
105
+ - spec/profile_spec.rb
106
+ - spec/spec_helper.rb
107
+ - spec/test_data/duplicate.txt
108
+ - spec/test_data/profile/Untitled.rtf
109
+ - spec/test_data/profile2/duplicate.txt
110
+ - spec/test_data/profile2/not_duplicate.txt
111
+ - spec/test_data/profile3/Untitled.rft