code_snippet 0.2.7 → 0.3.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -5
- data/README.md +4 -7
- data/bin/code_snippet +20 -0
- data/bin/snippet +11 -53
- data/code_snippet.gemspec +1 -0
- data/lib/code_snippet/cli.rb +71 -27
- data/lib/code_snippet/commands/list_snippets.rb +41 -0
- data/lib/code_snippet/commands/print_path.rb +20 -0
- data/lib/code_snippet/commands/print_version.rb +19 -0
- data/lib/code_snippet/commands/show_snippet.rb +57 -0
- data/lib/code_snippet/commands.rb +13 -0
- data/lib/code_snippet/manager.rb +5 -1
- data/lib/code_snippet/version.rb +1 -1
- data/spec/code_snippet/cli_spec.rb +203 -0
- data/spec/code_snippet/commands/list_snippets_spec.rb +67 -0
- data/spec/code_snippet/commands/print_path_spec.rb +22 -0
- data/spec/code_snippet/commands/print_version_spec.rb +21 -0
- data/spec/code_snippet/commands/show_snippet_spec.rb +202 -0
- data/spec/{snippet → code_snippet}/manager_spec.rb +25 -2
- data/spec/{snippet → code_snippet}/snip_spec.rb +0 -0
- metadata +37 -15
- data/bitbucket-pipelines.yml +0 -18
- data/lib/code_snippet/cli/commands.rb +0 -82
- data/lib/code_snippet/cli/presenters.rb +0 -42
- data/spec/snippet/cli/commands_spec.rb +0 -104
- data/spec/snippet/cli/presenters_spec.rb +0 -72
- data/spec/snippet/cli_spec.rb +0 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8150df6bfc6ffaa3432d2bc2e867406e2600bf4c7a66c2a4f944ead7dbfa78b3
|
4
|
+
data.tar.gz: 6377217cee2607224d5716a353b8d27ffe4311858464650c24b1bef66561cb2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 948f14c6989daf999bed5b262cb6c77eb5f8d7c2e5eeb2910fcf1ae80b31b6303ec1b0e821967c74680c90ab244cd0e9b1d4ed3cc016bd188143747a7fc18e86
|
7
|
+
data.tar.gz: 1ba523a6bf7278e7183fcca35150a01ddb5dac22186426344c5f2b995bd121b9ddf4d1f92d594f247f1db6f8e24552d386cab84bcc6b48d42c8361d100614c2c
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
code_snippet (0.
|
4
|
+
code_snippet (0.3.0)
|
5
5
|
clipboard
|
6
6
|
ffi
|
7
7
|
hashie
|
8
8
|
highline (~> 2.0)
|
9
9
|
logger (~> 1.4)
|
10
|
+
thor
|
10
11
|
tty-prompt
|
11
12
|
tty-table
|
12
13
|
|
@@ -22,7 +23,7 @@ GEM
|
|
22
23
|
thread_safe (~> 0.3, >= 0.3.1)
|
23
24
|
bump (0.6.1)
|
24
25
|
byebug (11.0.1)
|
25
|
-
clipboard (1.3.
|
26
|
+
clipboard (1.3.6)
|
26
27
|
codeclimate-engine-rb (0.4.1)
|
27
28
|
virtus (~> 1.0)
|
28
29
|
coderay (1.1.2)
|
@@ -34,7 +35,7 @@ GEM
|
|
34
35
|
docile (1.3.2)
|
35
36
|
equalizer (0.0.11)
|
36
37
|
erubis (2.7.0)
|
37
|
-
ffi (1.15.
|
38
|
+
ffi (1.15.4)
|
38
39
|
flay (2.12.1)
|
39
40
|
erubis (~> 2.7.0)
|
40
41
|
path_expander (~> 1.0)
|
@@ -51,7 +52,7 @@ GEM
|
|
51
52
|
json (2.2.0)
|
52
53
|
launchy (2.4.3)
|
53
54
|
addressable (~> 2.3)
|
54
|
-
logger (1.4.
|
55
|
+
logger (1.4.4)
|
55
56
|
method_source (0.9.2)
|
56
57
|
parallel (1.19.1)
|
57
58
|
parser (2.5.3.0)
|
@@ -113,6 +114,7 @@ GEM
|
|
113
114
|
unicode-display_width (>= 1.5, < 3.0)
|
114
115
|
unicode_utils (~> 1.4)
|
115
116
|
strings-ansi (0.2.0)
|
117
|
+
thor (1.1.0)
|
116
118
|
thread_safe (0.3.6)
|
117
119
|
tty-color (0.6.0)
|
118
120
|
tty-cursor (0.7.1)
|
@@ -155,4 +157,4 @@ DEPENDENCIES
|
|
155
157
|
yard (~> 0.9)
|
156
158
|
|
157
159
|
BUNDLED WITH
|
158
|
-
2.2.
|
160
|
+
2.2.27
|
data/README.md
CHANGED
@@ -35,12 +35,9 @@ Once you have a set of snippets, run `snippet list` to show a list of all your s
|
|
35
35
|
```bash
|
36
36
|
$ snippet list
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|for_i |.go |/Users/me/Code/templates/snippets/golang/for_i.go |
|
42
|
-
|table_test |.go |/Users/me/Code/templates/snippets/golang/table_test.go |
|
43
|
-
+---------------------+----+-----------------------------------------------------------------+
|
38
|
+
NAME LANG
|
39
|
+
for_i .go
|
40
|
+
table_test .go
|
44
41
|
```
|
45
42
|
|
46
43
|
You can then show a snippet by executing `snippet show <name>`:
|
@@ -53,7 +50,7 @@ for 1 := 1; i < 10; i++ {
|
|
53
50
|
}
|
54
51
|
```
|
55
52
|
|
56
|
-
You can copy the snippet straight to the clipboard by adding the
|
53
|
+
You can copy the snippet straight to the clipboard by adding the `--copy` to the end of the command.
|
57
54
|
|
58
55
|
## Tests and Quality
|
59
56
|
|
data/bin/code_snippet
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib_path = File.expand_path('../lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
|
5
|
+
|
6
|
+
require 'pry'
|
7
|
+
require 'code_snippet/cli'
|
8
|
+
|
9
|
+
Signal.trap('INT') do
|
10
|
+
warn("\n#{caller.join("\n")}: interrupted")
|
11
|
+
exit(1)
|
12
|
+
end
|
13
|
+
|
14
|
+
begin
|
15
|
+
CodeSnippet::CLI.start
|
16
|
+
rescue StandardError => e
|
17
|
+
puts "ERROR: #{e.message}"
|
18
|
+
puts e.backtrace.join("\n")
|
19
|
+
exit 1
|
20
|
+
end
|
data/bin/snippet
CHANGED
@@ -1,62 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
lib_path = File.expand_path('../lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
|
4
5
|
|
5
|
-
require '
|
6
|
-
require 'optparse'
|
7
|
-
require 'highline'
|
8
|
-
|
9
|
-
require 'code_snippet'
|
6
|
+
require 'pry'
|
10
7
|
require 'code_snippet/cli'
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
\s\s\s\s--trace\t\t trace mode on
|
17
|
-
-l, --language\t snippet language filter
|
18
|
-
-c, --copy\t\t copy snippet to clipboard
|
19
|
-
|
20
|
-
-h, --help\t\t print usage
|
21
|
-
|
22
|
-
Commands:
|
23
|
-
show\t\t\t finds and shows snippet
|
24
|
-
list\t\t\t displays a list of snippets
|
25
|
-
|
26
|
-
path\t\t\t prints configured SNIPPET_DIR
|
27
|
-
version\t\t prints gem version
|
28
|
-
".freeze
|
29
|
-
|
30
|
-
@trace = false
|
31
|
-
@overwrite = false
|
32
|
-
|
33
|
-
OptionParser.new do |opts|
|
34
|
-
opts.banner = USAGE
|
35
|
-
opts.on('--trace') { @trace = true }
|
36
|
-
|
37
|
-
opts.on('-l', '--language STRING') { |l| @lang = l }
|
38
|
-
opts.on('-c', '--copy BOOL') { @copy = true }
|
39
|
-
|
40
|
-
opts.on_tail('-h', '--help') do
|
41
|
-
CodeSnippet::CLI.print_message_and_exit(USAGE)
|
42
|
-
end
|
43
|
-
end.parse!
|
9
|
+
Signal.trap('INT') do
|
10
|
+
warn("\n#{caller.join("\n")}: interrupted")
|
11
|
+
exit(1)
|
12
|
+
end
|
44
13
|
|
45
14
|
begin
|
46
|
-
|
47
|
-
|
48
|
-
cmd = ARGV.shift
|
49
|
-
CodeSnippet::CLI::Commands.public_send(
|
50
|
-
cmd.to_sym,
|
51
|
-
@lang,
|
52
|
-
!@copy.nil?,
|
53
|
-
ARGV
|
54
|
-
)
|
15
|
+
CodeSnippet::CLI.start
|
55
16
|
rescue StandardError => e
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
CodeSnippet::CLI.print_message_and_exit(USAGE)
|
17
|
+
puts "ERROR: #{e.message}"
|
18
|
+
puts e.backtrace.join("\n")
|
19
|
+
exit 1
|
60
20
|
end
|
61
|
-
|
62
|
-
exit(0)
|
data/code_snippet.gemspec
CHANGED
data/lib/code_snippet/cli.rb
CHANGED
@@ -1,19 +1,78 @@
|
|
1
|
-
require '
|
2
|
-
require 'code_snippet/cli/presenters'
|
3
|
-
|
1
|
+
require 'thor'
|
4
2
|
require 'logger'
|
5
3
|
|
4
|
+
require 'code_snippet'
|
5
|
+
require 'code_snippet/commands'
|
6
|
+
|
6
7
|
module CodeSnippet
|
7
8
|
# Command line interface helpers and actions
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
class CLI < ::Thor
|
10
|
+
package_name 'CodeSnippet'
|
11
|
+
|
12
|
+
desc 'version', 'Print code snippet version to STDOUT'
|
13
|
+
|
14
|
+
##
|
15
|
+
# Runs version command
|
16
|
+
#
|
17
|
+
def version
|
18
|
+
cmd = CodeSnippet::Commands::PrintVersion.new(options)
|
19
|
+
cmd.run
|
20
|
+
end
|
21
|
+
|
22
|
+
map %w[--version -v] => :version
|
23
|
+
|
24
|
+
desc 'path', 'Print snippet directory path to STDOUT'
|
25
|
+
|
26
|
+
##
|
27
|
+
# Runs version command
|
28
|
+
#
|
29
|
+
def path
|
30
|
+
cmd = CodeSnippet::Commands::PrintPath.new(snip_dir, options)
|
31
|
+
cmd.run
|
32
|
+
end
|
33
|
+
|
34
|
+
desc 'show', 'Find and show snippet'
|
35
|
+
|
36
|
+
method_option(
|
37
|
+
:name,
|
38
|
+
type: :string,
|
39
|
+
desc: 'Name of snippet'
|
40
|
+
)
|
41
|
+
|
42
|
+
method_option(
|
43
|
+
:copy,
|
44
|
+
type: :boolean,
|
45
|
+
desc: 'Should copy snippet to clipboard',
|
46
|
+
default: false
|
47
|
+
)
|
48
|
+
|
49
|
+
##
|
50
|
+
# Show snippet command
|
51
|
+
#
|
52
|
+
def show
|
53
|
+
cmd = CodeSnippet::Commands::ShowSnippet.new(manager, options)
|
54
|
+
cmd.run
|
55
|
+
end
|
56
|
+
|
57
|
+
desc 'list', 'List all known snippets'
|
58
|
+
|
59
|
+
##
|
60
|
+
# Show snippet command
|
61
|
+
#
|
62
|
+
def list
|
63
|
+
cmd = CodeSnippet::Commands::ListSnippets.new(manager, options)
|
64
|
+
cmd.run
|
65
|
+
end
|
66
|
+
|
67
|
+
no_commands do
|
11
68
|
##
|
12
69
|
# Retrieves snippet dir from environment
|
13
70
|
#
|
14
71
|
def snip_dir
|
15
72
|
@snippet_dir = ENV['SNIPPET_DIR']
|
73
|
+
|
16
74
|
raise 'SNIPPET_DIR environment variable not set' unless @snippet_dir
|
75
|
+
|
17
76
|
unless File.exist?(@snippet_dir)
|
18
77
|
raise "SNIPPET_DIR #{@snippet_dir} does not exist"
|
19
78
|
end
|
@@ -22,30 +81,15 @@ module CodeSnippet
|
|
22
81
|
end
|
23
82
|
|
24
83
|
##
|
25
|
-
#
|
84
|
+
# Loads and creates snippet manager
|
26
85
|
#
|
27
|
-
|
28
|
-
@logger ||= Logger.new(STDOUT)
|
29
|
-
@logger.formatter = proc do |_sev, _time, _prog, msg|
|
30
|
-
"#{msg}\n"
|
31
|
-
end
|
32
|
-
|
33
|
-
@logger
|
34
|
-
end
|
35
|
-
|
36
|
-
##
|
37
|
-
# Prints command line message to CLI
|
86
|
+
# @return [CodeSnippet::Manager]
|
38
87
|
#
|
39
|
-
def
|
40
|
-
|
41
|
-
|
88
|
+
def manager
|
89
|
+
@manager ||= CodeSnippet::Manager.new(snip_dir)
|
90
|
+
@manager.load
|
42
91
|
|
43
|
-
|
44
|
-
# Prints a message and then exits with given status code
|
45
|
-
#
|
46
|
-
def print_message_and_exit(message, exit_code = 1)
|
47
|
-
print_message(message)
|
48
|
-
exit(exit_code)
|
92
|
+
@manager
|
49
93
|
end
|
50
94
|
end
|
51
95
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'tty-prompt'
|
2
|
+
require 'tty-table'
|
3
|
+
|
4
|
+
module CodeSnippet
|
5
|
+
module Commands
|
6
|
+
# Lists snippets in STDOUT
|
7
|
+
class ListSnippets
|
8
|
+
##
|
9
|
+
# Output table header
|
10
|
+
#
|
11
|
+
RESULT_HEADER = %w[NAME LANG].freeze
|
12
|
+
|
13
|
+
def initialize(manager, options = Hashie::Mash.new)
|
14
|
+
@manager = manager
|
15
|
+
@options = options
|
16
|
+
@prompt = TTY::Prompt.new
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# Prints a list of snippets to STDOUT
|
21
|
+
#
|
22
|
+
def run
|
23
|
+
puts(snippet_list_table.render.strip)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def snippet_list_table
|
29
|
+
TTY::Table.new(
|
30
|
+
header: RESULT_HEADER,
|
31
|
+
rows: @manager.snippets.map do |snip|
|
32
|
+
[
|
33
|
+
snip.name.downcase,
|
34
|
+
snip.ext
|
35
|
+
]
|
36
|
+
end
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'tty-prompt'
|
2
|
+
|
3
|
+
module CodeSnippet
|
4
|
+
module Commands
|
5
|
+
# Prints gem version to STDOUT
|
6
|
+
class PrintPath
|
7
|
+
def initialize(snip_dir, options = Hashie::Mash.new)
|
8
|
+
@snip_dir = snip_dir
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
##
|
13
|
+
# Prints gem version
|
14
|
+
#
|
15
|
+
def run
|
16
|
+
puts(@snip_dir)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'tty-prompt'
|
2
|
+
|
3
|
+
module CodeSnippet
|
4
|
+
module Commands
|
5
|
+
# Prints snippet path to STDOUT
|
6
|
+
class PrintVersion
|
7
|
+
def initialize(options = Hashie::Mash.new)
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
##
|
12
|
+
# Prints snippet path
|
13
|
+
#
|
14
|
+
def run
|
15
|
+
puts(CodeSnippet::VERSION)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'clipboard'
|
2
|
+
require 'tty-prompt'
|
3
|
+
|
4
|
+
module CodeSnippet
|
5
|
+
module Commands
|
6
|
+
# Shows snippet in STDOUT
|
7
|
+
class ShowSnippet
|
8
|
+
def initialize(manager, options = Hashie::Mash.new)
|
9
|
+
@manager = manager
|
10
|
+
@options = options
|
11
|
+
@prompt = TTY::Prompt.new
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# Prints snippet path
|
16
|
+
#
|
17
|
+
def run
|
18
|
+
name = @options.name
|
19
|
+
name ||= @prompt.select(
|
20
|
+
'Please choose snippet',
|
21
|
+
@manager.snippet_names
|
22
|
+
)
|
23
|
+
|
24
|
+
snips = find_snippets(name)
|
25
|
+
snip = pick_snippet(snips)
|
26
|
+
|
27
|
+
if @options.copy
|
28
|
+
Clipboard.copy(snip.content)
|
29
|
+
puts "COPIED: #{snip.path}"
|
30
|
+
end
|
31
|
+
|
32
|
+
puts(snip.content)
|
33
|
+
end
|
34
|
+
|
35
|
+
def find_snippets(name)
|
36
|
+
snips = @manager.find(name)
|
37
|
+
raise "unable to find #{name}" if snips.empty?
|
38
|
+
|
39
|
+
snips
|
40
|
+
end
|
41
|
+
|
42
|
+
def pick_snippet(snips)
|
43
|
+
snip = snips.first
|
44
|
+
if snips.length > 1
|
45
|
+
snip_name = @prompt.select(
|
46
|
+
'Multiple snippets found, which one would you like to view?',
|
47
|
+
snips.map(&:name)
|
48
|
+
)
|
49
|
+
|
50
|
+
snip = @manager.find(snip_name).first
|
51
|
+
end
|
52
|
+
|
53
|
+
snip
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/code_snippet/manager.rb
CHANGED
@@ -10,7 +10,7 @@ module CodeSnippet
|
|
10
10
|
@snippets = []
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def load
|
14
14
|
Dir.glob(File.join(@snippet_dir, '**', '*')).each do |file|
|
15
15
|
next if File.directory?(file)
|
16
16
|
|
@@ -46,5 +46,9 @@ module CodeSnippet
|
|
46
46
|
ext_query = ->(snip) { snip.ext == ext }
|
47
47
|
filter(ext_query)
|
48
48
|
end
|
49
|
+
|
50
|
+
def snippet_names
|
51
|
+
@snippets.map(&:name)
|
52
|
+
end
|
49
53
|
end
|
50
54
|
end
|
data/lib/code_snippet/version.rb
CHANGED
@@ -0,0 +1,203 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe CodeSnippet::CLI do
|
4
|
+
let(:options) { Hashie::Mash.new }
|
5
|
+
let(:snip_dir) { 'path/to/snippets' }
|
6
|
+
let(:snip_exist) { true }
|
7
|
+
|
8
|
+
subject { described_class.new }
|
9
|
+
|
10
|
+
before do
|
11
|
+
allow(subject).to receive(:options)
|
12
|
+
.and_return(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#version' do
|
16
|
+
let(:command) { double }
|
17
|
+
|
18
|
+
before do
|
19
|
+
allow(command).to receive(:run)
|
20
|
+
allow(CodeSnippet::Commands::PrintVersion)
|
21
|
+
.to receive(:new)
|
22
|
+
.and_return(command)
|
23
|
+
|
24
|
+
subject.version
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'passes options to command' do
|
28
|
+
expect(CodeSnippet::Commands::PrintVersion)
|
29
|
+
.to have_received(:new).with(options)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'runs command' do
|
33
|
+
expect(command).to have_received(:run)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#path' do
|
38
|
+
let(:command) { double }
|
39
|
+
|
40
|
+
before do
|
41
|
+
allow(ENV)
|
42
|
+
.to receive(:[])
|
43
|
+
.with('SNIPPET_DIR')
|
44
|
+
.and_return(snip_dir)
|
45
|
+
|
46
|
+
allow(File)
|
47
|
+
.to receive(:exist?)
|
48
|
+
.with(snip_dir)
|
49
|
+
.and_return(snip_exist)
|
50
|
+
|
51
|
+
allow(command).to receive(:run)
|
52
|
+
allow(CodeSnippet::Commands::PrintPath)
|
53
|
+
.to receive(:new)
|
54
|
+
.and_return(command)
|
55
|
+
|
56
|
+
subject.path
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'passes snip_dir and options to command' do
|
60
|
+
expect(CodeSnippet::Commands::PrintPath)
|
61
|
+
.to have_received(:new).with(snip_dir, options)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'runs command' do
|
65
|
+
expect(command).to have_received(:run)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#show' do
|
70
|
+
let(:command) { double }
|
71
|
+
let(:manager) { CodeSnippet::Manager }
|
72
|
+
|
73
|
+
before do
|
74
|
+
allow(command).to receive(:run)
|
75
|
+
allow(subject)
|
76
|
+
.to receive(:manager)
|
77
|
+
.and_return(manager)
|
78
|
+
|
79
|
+
allow(CodeSnippet::Commands::ShowSnippet)
|
80
|
+
.to receive(:new)
|
81
|
+
.and_return(command)
|
82
|
+
|
83
|
+
subject.show
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'passes manager and options to command' do
|
87
|
+
expect(CodeSnippet::Commands::ShowSnippet)
|
88
|
+
.to have_received(:new).with(manager, options)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'runs command' do
|
92
|
+
expect(command).to have_received(:run)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#list' do
|
97
|
+
let(:command) { double }
|
98
|
+
let(:manager) { CodeSnippet::Manager }
|
99
|
+
|
100
|
+
before do
|
101
|
+
allow(command).to receive(:run)
|
102
|
+
allow(subject)
|
103
|
+
.to receive(:manager)
|
104
|
+
.and_return(manager)
|
105
|
+
|
106
|
+
allow(CodeSnippet::Commands::ListSnippets)
|
107
|
+
.to receive(:new)
|
108
|
+
.and_return(command)
|
109
|
+
|
110
|
+
subject.list
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'passes manager and options to command' do
|
114
|
+
expect(CodeSnippet::Commands::ListSnippets)
|
115
|
+
.to have_received(:new).with(manager, options)
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'runs command' do
|
119
|
+
expect(command).to have_received(:run)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe '#snip_dir' do
|
124
|
+
let(:snip_dir) { 'path/to/snippet/dir' }
|
125
|
+
let(:snip_dir_exist) { false }
|
126
|
+
|
127
|
+
before do
|
128
|
+
allow(ENV)
|
129
|
+
.to receive(:[])
|
130
|
+
.with('SNIPPET_DIR')
|
131
|
+
.and_return(snip_dir)
|
132
|
+
|
133
|
+
allow(File)
|
134
|
+
.to receive(:exist?)
|
135
|
+
.and_return(snip_dir_exist)
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'when environment variable not set' do
|
139
|
+
let(:snip_dir) { nil }
|
140
|
+
|
141
|
+
it 'raises env var not set runtime error' do
|
142
|
+
expect do
|
143
|
+
subject.snip_dir
|
144
|
+
end.to raise_error(
|
145
|
+
RuntimeError,
|
146
|
+
'SNIPPET_DIR environment variable not set'
|
147
|
+
)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context 'when snippet directory does not exist' do
|
152
|
+
it 'raises env var not exist runtime error' do
|
153
|
+
expect do
|
154
|
+
subject.snip_dir
|
155
|
+
end.to raise_error(
|
156
|
+
RuntimeError,
|
157
|
+
"SNIPPET_DIR #{snip_dir} does not exist"
|
158
|
+
)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'when environment variable set and directory exists' do
|
163
|
+
let(:snip_dir_exist) { true }
|
164
|
+
|
165
|
+
it 'returns snippet dir' do
|
166
|
+
expect(subject.snip_dir).to eq snip_dir
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe '#manager' do
|
172
|
+
let(:snip_dir) { 'path/to/snip/dir' }
|
173
|
+
let(:manager) { double(CodeSnippet::Manager) }
|
174
|
+
|
175
|
+
before do
|
176
|
+
allow(subject)
|
177
|
+
.to receive(:snip_dir)
|
178
|
+
.and_return(snip_dir)
|
179
|
+
|
180
|
+
allow(CodeSnippet::Manager)
|
181
|
+
.to receive(:new)
|
182
|
+
.and_return(manager)
|
183
|
+
|
184
|
+
allow(manager).to receive(:load)
|
185
|
+
|
186
|
+
@manager = subject.manager
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'creates a new snip with snip dir' do
|
190
|
+
expect(CodeSnippet::Manager)
|
191
|
+
.to have_received(:new)
|
192
|
+
.with(snip_dir)
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'loads manager' do
|
196
|
+
expect(manager).to have_received(:load)
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'returns manager' do
|
200
|
+
expect(@manager).to eq manager
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|