toothpick 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Y2VkNGY1ZTBhY2M2ZTg3ZWY1MDU2MzJiOTI4MzNlZTlhZmUwYmJlMQ==
4
+ YmYzYmU2NjJmZTg2MWU2NTNjNWE5OTI1ZDNhMmI3ODNlMmEzMjE5Mw==
5
5
  data.tar.gz: !binary |-
6
- ZWI0ZmYxYzM3YjhkMGEyMmIyMjczODlkMDhiMmVjMzg5MjJjNThjNg==
6
+ NDM2YWM0NjVjMDRkN2NkYzVjMDMzYjgzZmM4NmQ3MGJlOTI4ZDlmMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YWJkOTI5ZWNkNGI4Y2QyYzk4MDU2OTMxZjY5ZDMyNTFlNGNlMmU1YmIwYzgx
10
- OTI5NDJiN2EzMWJjYzE2YWY4Zjc2ZTg2MjcwZGM4ZmFiYzM0OWUzY2NiOTE5
11
- YzdkYzdjYTFlMjU2ZjEyOGE3YzIwOTNhMDdjNGRhYmRjYTgyODk=
9
+ NDZiNjQ5YmE3MWZkM2U3ZjE0MTQxODRmYTUyNDdmZjQ5ZmJiZWJjNGRhYWI2
10
+ N2FmNTcyYjI4NzIxM2Y4MmIwZGQ3Y2Q5NzA4NTM2NjE1Mjk4ZWI3YWY2MjFk
11
+ MDM5N2ZhNmQ3ZGU4MDgwOTc4YmYxNzg3ZmNiNjU3YjBiYjFiZjg=
12
12
  data.tar.gz: !binary |-
13
- MTYyODljMjM4MmNkZWU1YjVmOWFiYjFjZTQzNmE4ZmIyNDU4OGUzOTg0OTkw
14
- NDkwMDI1YTEzMTQzNzhlOGQzN2E3MDQyMjY3MGU5ODRhYmU4ZDlhMTFiZTRh
15
- YzBiZmU1YWY5NGFjYWU2ZDE5MzQxNmQ0NjJmYWMwOTdhZWFjNWI=
13
+ OGQyNTUyNGM3YWY2OTA5YzJhNWIyYjBiNmJkODJkMTcwNjgxM2UyYmJkMWNi
14
+ OTViZDExMGE4NjQ3Yzc4NjE1ZDhlYjI0OTFhZjQ3OTVjMzcwNDliNmE3ZDU5
15
+ NzEyYjQ2YWFkMzRkMzk3OTc4MmFkNDNhODVhMDVmM2M2ZmUwNjM=
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - ruby-head
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # Toothpick
2
- ![toothpick](http://i39.tinypic.com/2vw7erb.png)
1
+ ![toothpick](http://i39.tinypic.com/2vw7erb.png) *For the fine art of picking*
2
+
3
+ [![Build Status](https://travis-ci.org/code-mancers/toothpick.png?branch=master)](https://travis-ci.org/code-mancers/toothpick)
3
4
 
4
- For the art of picking.
5
5
 
6
6
  ## Installation
7
7
 
@@ -10,7 +10,7 @@ For the art of picking.
10
10
  ## Usage
11
11
 
12
12
  #Setup toothpick
13
- toothpick init
13
+ toothpick init git@github.com:code-mancers/picks.git
14
14
 
15
15
  #Open today's pick file for editing
16
16
  toothpick new
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -7,7 +7,6 @@ module Toothpick
7
7
  module Commands
8
8
 
9
9
  TOOTHPICK_HOME = ENV['HOME'] + "/.toothpick"
10
- PICK_FILENAME = Date.today.strftime + ".md"
11
10
 
12
11
  def self.init(picks_repo)
13
12
  Git.clone_repo(picks_repo, TOOTHPICK_HOME)
@@ -40,7 +39,11 @@ module Toothpick
40
39
  end
41
40
 
42
41
  def self.pick_file_path
43
- File.join(TOOTHPICK_HOME, PICK_FILENAME)
42
+ File.join(TOOTHPICK_HOME, pick_filename)
43
+ end
44
+
45
+ def self.pick_filename
46
+ Time.now.utc.to_date.strftime + ".md"
44
47
  end
45
48
 
46
49
  end
data/lib/toothpick/git.rb CHANGED
@@ -22,7 +22,11 @@ module Toothpick
22
22
  def commit
23
23
  system("cd #{git_dir} "\
24
24
  "&& git add --all "\
25
- "&& git commit --allow-empty-message -m ''")
25
+ "&& git commit -m '#{make_commit_message}'")
26
+ end
27
+
28
+ def make_commit_message
29
+ "Added pick by #{ENV['USER']} on #{Time.now}"
26
30
  end
27
31
 
28
32
  def push
@@ -4,7 +4,7 @@ module Toothpick
4
4
  def initialize(picks_dir, string)
5
5
  # Works only with the_silver_searcher for now
6
6
  unless `cd #{picks_dir} && ag --version`.nil?
7
- space_separated_filenames = `ag -l #{string}`
7
+ space_separated_filenames = `ag -l #{string}`.split.join(' ')
8
8
  unless space_separated_filenames.empty?
9
9
  system("$EDITOR #{space_separated_filenames}")
10
10
  end
@@ -1,3 +1,3 @@
1
1
  module Toothpick
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require 'support/fake_env'
3
+ require 'support/pickfile_shared_examples'
4
+ require 'support/git_shared_examples'
5
+ require 'toothpick/commands'
6
+
7
+ describe Toothpick::Commands do
8
+ let(:git_repo) { 'git@github.com:code-mancers/picks.git' }
9
+ let(:toothpick_home) { Toothpick::Commands::TOOTHPICK_HOME }
10
+ let(:git) { double(Toothpick::Git) }
11
+
12
+ describe "::TOOTHPICK_HOME" do
13
+ it "should return .toothpick in user's home" do
14
+ expect(toothpick_home).to eql('/home/user/.toothpick')
15
+ end
16
+ end
17
+
18
+ describe ".init" do
19
+ it "should clone the git repo" do
20
+ Toothpick::Git.should_receive(:clone_repo).with(git_repo, toothpick_home)
21
+ Toothpick::Commands::init(git_repo)
22
+ end
23
+ end
24
+
25
+ describe ".new_pick" do
26
+ before(:each) do
27
+ end
28
+ context "when toothpick init was done" do
29
+ before(:each) do
30
+ Toothpick::Git.should_receive(:on_git?).and_return(true)
31
+ end
32
+
33
+ include_examples "pickfile should be written successfully"
34
+ include_examples "it should update, commit and push git"
35
+
36
+ specify { Toothpick::Commands::new_pick }
37
+ end
38
+
39
+ context "when toothpick init was not done" do
40
+ before(:each) do
41
+ Toothpick::Git.should_receive(:on_git?).and_return(false)
42
+ end
43
+
44
+ it "should raise ToothpickNotInitialized error" do
45
+ Toothpick::Git.should_not_receive(:new)
46
+ expect { Toothpick::Commands::new_pick }
47
+ .to raise_error(Toothpick::Errors::ToothpickNotInitialized)
48
+ end
49
+ end
50
+ end
51
+ end
data/spec/git_spec.rb ADDED
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'toothpick/git'
3
+
4
+ describe Toothpick::Git do
5
+ describe ".clone_repo" do
6
+ let(:repo) { 'git@github.com:code-mancers/picks.git' }
7
+ let(:target_dir) { '/home/emil' }
8
+ let(:expected_git_command) { "git clone #{repo} #{target_dir}" }
9
+
10
+ it "should git clone to target directory" do
11
+ Toothpick::Git.should_receive(:system).with(expected_git_command)
12
+ Toothpick::Git::clone_repo(repo, target_dir)
13
+ end
14
+ end
15
+
16
+ describe ".on_git?" do
17
+ context "when directory is on git" do
18
+ it "should return true" do
19
+ Toothpick::Git.on_git?(Dir.pwd).should be_true
20
+ end
21
+ end
22
+ context "when directory is not on git" do
23
+ it "should return false" do
24
+ Toothpick::Git.on_git?('/tmp').should be_false
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "Instance methods" do
30
+ let(:git) { Toothpick::Git.new('/home/emil') }
31
+ before(:each) do
32
+ git.should_receive(:system).with(expected_git_command)
33
+ end
34
+
35
+ describe "#update" do
36
+ let(:expected_git_command) do
37
+ "cd /home/emil && git pull --rebase"
38
+ end
39
+ it "should git pull --rebase" do
40
+ git.update
41
+ end
42
+ end
43
+
44
+ describe "#commit" do
45
+ let(:expected_git_command) do
46
+ %r{cd /home/emil && git add --all && git commit}
47
+ end
48
+ it "should git add and commit without commit message" do
49
+ git.commit
50
+ end
51
+ end
52
+
53
+ describe "#push" do
54
+ let(:expected_git_command) do
55
+ "cd /home/emil && git push origin master"
56
+ end
57
+ it "should git push to origin master" do
58
+ git.push
59
+ end
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ end
@@ -0,0 +1,2 @@
1
+ ENV['HOME'] = '/home/user'
2
+ ENV['EDITOR'] = 'notepad' #heh
@@ -0,0 +1,8 @@
1
+ shared_examples "it should update, commit and push git" do
2
+ before(:each) do
3
+ Toothpick::Git.should_receive(:new).with(toothpick_home).and_return(git)
4
+ git.should_receive(:update)
5
+ git.should_receive(:commit)
6
+ git.should_receive(:push)
7
+ end
8
+ end
File without changes
@@ -0,0 +1,12 @@
1
+ shared_examples "pickfile should be written successfully" do
2
+ before(:each) do
3
+ today_in_utc = Time.now.utc.to_date.strftime
4
+
5
+ Kernel.should_receive(:spawn)
6
+ .with("$EDITOR #{toothpick_home}/#{today_in_utc}.md")
7
+ .and_return('pid')
8
+ Process.should_receive(:waitpid).with('pid')
9
+ $?.should_receive(:success?).and_return(true)
10
+ File.should_receive(:exists?).and_return(true)
11
+ end
12
+ end
data/toothpick.gemspec CHANGED
@@ -21,5 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "pry"
24
+ spec.add_development_dependency "rspec"
24
25
  spec.add_dependency "thor"
25
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toothpick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Soman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-18 00:00:00.000000000 Z
11
+ date: 2014-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: thor
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +89,8 @@ extensions: []
75
89
  extra_rdoc_files: []
76
90
  files:
77
91
  - .gitignore
92
+ - .rspec
93
+ - .travis.yml
78
94
  - Gemfile
79
95
  - LICENSE.txt
80
96
  - README.md
@@ -86,6 +102,13 @@ files:
86
102
  - lib/toothpick/git.rb
87
103
  - lib/toothpick/search.rb
88
104
  - lib/toothpick/version.rb
105
+ - spec/commands_spec.rb
106
+ - spec/git_spec.rb
107
+ - spec/spec_helper.rb
108
+ - spec/support/fake_env.rb
109
+ - spec/support/git_shared_examples.rb
110
+ - spec/support/mock_process_spawn.rb
111
+ - spec/support/pickfile_shared_examples.rb
89
112
  - toothpick.gemspec
90
113
  homepage: ''
91
114
  licenses:
@@ -111,5 +134,11 @@ rubygems_version: 2.1.11
111
134
  signing_key:
112
135
  specification_version: 4
113
136
  summary: Easily create and share your picks over git
114
- test_files: []
115
- has_rdoc:
137
+ test_files:
138
+ - spec/commands_spec.rb
139
+ - spec/git_spec.rb
140
+ - spec/spec_helper.rb
141
+ - spec/support/fake_env.rb
142
+ - spec/support/git_shared_examples.rb
143
+ - spec/support/mock_process_spawn.rb
144
+ - spec/support/pickfile_shared_examples.rb