sheet 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -16,6 +16,7 @@ sheet # with no arguments it will just list all your sheets
16
16
  sheet git # opens git sheet
17
17
  sheet new git # creates git sheet
18
18
  sheet edit git # edit git sheet
19
+ sheet copy git # Copies content of the sheet to the clipboard
19
20
  ```
20
21
 
21
22
  Use `sheet new <term>` to create your first sheet. Useful for jotting
@@ -40,6 +41,12 @@ automatically open that url for you
40
41
  Please note that to open urls, sheet will use the `open` command on mac
41
42
  os x and `xdg-open` in linux. Patches welcome for other systems.
42
43
 
44
+ ### Copying sheets
45
+
46
+ sheet will use either `pbcopy` or `xclip` to copy the content of a sheet
47
+ to the clipboard, make sure you have one of those installed (or open an
48
+ issue indicating another copy program).
49
+
43
50
  ### Behind the scenes
44
51
 
45
52
  `sheet` stores your sheets in text files in the
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -5,6 +5,7 @@
5
5
  require 'sheet/open'
6
6
  require 'sheet/write'
7
7
  require 'sheet/list'
8
+ require 'sheet/copy'
8
9
 
9
10
  class Sheet
10
11
 
@@ -56,13 +57,25 @@ class Sheet
56
57
  def open_command
57
58
  if RUBY_PLATFORM =~ /darwin/
58
59
  'open'
59
- elsif RUBY_PLATFORM =~ /linux/
60
+ elsif RUBY_PLATFORM =~ /linux/ && command_available?('xdg-open')
60
61
  'xdg-open'
61
62
  else
62
63
  nil
63
64
  end
64
65
  end
65
66
 
67
+ # Returns the copy to clipboard command or nil if no command is
68
+ # found
69
+ def copy_command
70
+ ['pbcopy', 'xclip'].find { |cmd| command_available?(cmd) }
71
+ end
72
+
73
+ # Utility to check wherever a command is available in the user
74
+ # system
75
+ def command_available?(cmd)
76
+ %x!type #{cmd}!.chomp.length > 0
77
+ end
78
+
66
79
  end
67
80
 
68
81
  # Creates a new instance of Sheet, usually followed by a call to {#process}
@@ -73,11 +86,14 @@ class Sheet
73
86
 
74
87
  # Where the dispatching really happens. We check to see what the user
75
88
  # intended to do and then instantiate the proper class
89
+ # TODO: refactor in a switch statement
76
90
  def process
77
91
  if ['new', 'edit'].include?(@args[0])
78
92
  write(@args[1])
79
93
  elsif ['ls', 'list'].include?(@args[0]) || @args.empty?
80
94
  list
95
+ elsif ['cp', 'copy'].include?(@args[0])
96
+ copy(@args[1])
81
97
  else
82
98
  open(@args[0])
83
99
  end
@@ -96,4 +112,8 @@ class Sheet
96
112
  def list
97
113
  Sheet::List.new.list
98
114
  end
115
+
116
+ def copy(name)
117
+ Sheet::Copy.new(name).copy
118
+ end
99
119
  end
@@ -0,0 +1,39 @@
1
+ class Sheet
2
+ class Copy
3
+
4
+ attr_accessor :name
5
+
6
+ def initialize(name)
7
+ @name = name
8
+ end
9
+
10
+ def copy
11
+ if name
12
+ check_if_sheet_exists_and_copy_sheet
13
+ else
14
+ Sheet.write("Please specify a sheet name!")
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def check_if_sheet_exists_and_copy_sheet
21
+ if Sheet.sheet_exists?(name)
22
+ copy_sheet
23
+ else
24
+ Sheet.write("A sheet named #{name} could not be found")
25
+ end
26
+ end
27
+
28
+ def copy_sheet
29
+ copy_cmd = Sheet.copy_command
30
+ if copy_cmd
31
+ Sheet.exec("cat #{Sheet::sheet_path(name)} | #{copy_cmd}")
32
+ Sheet.write("Copied!")
33
+ else
34
+ Sheet.write("Could not copy sheet, no copy command found")
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "sheet"
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Oscar Del Ben"]
@@ -28,10 +28,12 @@ Gem::Specification.new do |s|
28
28
  "VERSION",
29
29
  "bin/sheet",
30
30
  "lib/sheet.rb",
31
+ "lib/sheet/copy.rb",
31
32
  "lib/sheet/list.rb",
32
33
  "lib/sheet/open.rb",
33
34
  "lib/sheet/write.rb",
34
35
  "sheet.gemspec",
36
+ "spec/sheet/copy_spec.rb",
35
37
  "spec/sheet/list_spec.rb",
36
38
  "spec/sheet/open_spec.rb",
37
39
  "spec/sheet/sheet_spec.rb",
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sheet::Copy do
4
+
5
+ it 'should copy the snippet' do
6
+ cmd = "cat #{Sheet.sheet_path('git')} | pbcopy"
7
+ Sheet.should_receive(:exec).with(cmd)
8
+ Sheet.should_receive(:write).with("Copied!")
9
+
10
+ Sheet.stub(:copy_command) { 'pbcopy' }
11
+ Sheet.stub(:sheet_exists?).with('git') { true }
12
+
13
+ Sheet::Copy.new('git').copy
14
+ end
15
+
16
+ it 'should show an error if name is nil' do
17
+ Sheet.should_receive(:write).with("Please specify a sheet name!")
18
+
19
+ Sheet::Copy.new(nil).copy
20
+ end
21
+
22
+ it 'should show an error if snippet is not found' do
23
+ Sheet.should_receive(:write).with("A sheet named git could not be found")
24
+ Sheet.stub(:sheet_exists?).with('git') { false }
25
+
26
+ Sheet::Copy.new('git').copy
27
+ end
28
+
29
+ it 'should show a message if no copy program was found' do
30
+ Sheet.should_receive(:write).with("Could not copy sheet, no copy command found")
31
+
32
+ Sheet.stub(:copy_command) { nil }
33
+ Sheet.stub(:sheet_exists?).with('git') { true }
34
+
35
+ Sheet::Copy.new('git').copy
36
+ end
37
+
38
+ end
39
+
@@ -5,7 +5,7 @@ describe Sheet::List do
5
5
 
6
6
  it 'calls system ls' do
7
7
  cmd = "ls #{Sheet.sheets_dir}"
8
- Shret.should_receive(:exec).with(cmd, true)
8
+ Sheet.should_receive(:exec).with(cmd, true)
9
9
 
10
10
  Sheet::List.new.list
11
11
  end
@@ -49,4 +49,14 @@ describe Sheet do
49
49
  Sheet.new.process
50
50
  end
51
51
  end
52
+
53
+ describe 'copy sheet' do
54
+ it 'should instantiate Sheet::Copy' do
55
+ copy = double('Sheet::Copy')
56
+ copy.should_receive(:copy)
57
+
58
+ Sheet::Copy.stub(:new).with('git') { copy }
59
+ Sheet.new('copy', 'git').process
60
+ end
61
+ end
52
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sheet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -95,10 +95,12 @@ files:
95
95
  - VERSION
96
96
  - bin/sheet
97
97
  - lib/sheet.rb
98
+ - lib/sheet/copy.rb
98
99
  - lib/sheet/list.rb
99
100
  - lib/sheet/open.rb
100
101
  - lib/sheet/write.rb
101
102
  - sheet.gemspec
103
+ - spec/sheet/copy_spec.rb
102
104
  - spec/sheet/list_spec.rb
103
105
  - spec/sheet/open_spec.rb
104
106
  - spec/sheet/sheet_spec.rb
@@ -119,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
121
  version: '0'
120
122
  segments:
121
123
  - 0
122
- hash: -850166153184772653
124
+ hash: 1707118375102558031
123
125
  required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  none: false
125
127
  requirements: