sheldon 0.5.5 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/sheldon +42 -13
- data/lib/sheldon/brain.rb +1 -1
- data/lib/sheldon/memory.rb +1 -1
- data/lib/sheldon/sheldon.rb +2 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 487c6c4147a1150abb17257433fcda2b6f6ad629
|
4
|
+
data.tar.gz: 53510c73fd4fda5290524726616714f012ccbb27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84bf9a06bd954b774f95b1d8888fe6b271e7a5a2f09d178365720110d24ceea9fcf2734f32f3939359349e2687c7b3ecc07405b7578910d5d6cbf74a7494ab20
|
7
|
+
data.tar.gz: 0d21743a01c3495b37c257f7c5ad670eb7f754f15dd6d0a83ea3a35ee82c51b8097a8c6a805705947edf77e8ecc00c7750bce63901deb2f92e820a50f97c15a0
|
data/bin/sheldon
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require "thor"
|
3
|
+
require "tty-prompt"
|
3
4
|
require_relative "../lib/sheldon"
|
4
5
|
|
5
6
|
module CLI
|
@@ -18,23 +19,23 @@ module CLI
|
|
18
19
|
if sheldon.build(abs_build_path)
|
19
20
|
announce("Built #{File.basename(rel_path_to_target)}")
|
20
21
|
else
|
21
|
-
|
22
|
+
prompt.error("Could not find any config_ files at #{abs_build_path}")
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
26
27
|
desc "forget recall_cue", "Remove file/folder from Sheldon's brain"
|
27
28
|
def forget(recall_cue=nil)
|
28
|
-
recall_cue ||=
|
29
|
+
recall_cue ||= cue_picker("What would you like to forget?")
|
29
30
|
with_exception_handling { sheldon.forget(recall_cue) }
|
30
31
|
announce("I've forgotten about #{recall_cue}. Let us never mention it again.")
|
31
32
|
end
|
32
33
|
|
33
|
-
desc "learn
|
34
|
+
desc "learn path_to_target", "Add a new file/folder to Sheldon's brain. Supply a recall_cue at runtime."
|
34
35
|
def learn(rel_path_to_target)
|
35
36
|
abs_learn_path = File.expand_path(rel_path_to_target)
|
36
37
|
default_cue = File.basename(rel_path_to_target)
|
37
|
-
recall_cue = ask("Recall Cue For File/Folder", default: default_cue)
|
38
|
+
recall_cue = prompt.ask("Recall Cue For File/Folder", default: default_cue, required: true)
|
38
39
|
with_exception_handling { sheldon.learn(recall_cue, abs_learn_path) }
|
39
40
|
with_exception_handling { sheldon.recall(recall_cue) }
|
40
41
|
end
|
@@ -42,21 +43,36 @@ module CLI
|
|
42
43
|
desc "list", "List all recall cues known by Sheldon"
|
43
44
|
def list
|
44
45
|
sheldon.list_cues.each do |recall_cue|
|
45
|
-
sheldon.recalled?(recall_cue) ? say(recall_cue, :green) : say(recall_cue, :red)
|
46
|
+
sheldon.recalled?(recall_cue) ? prompt.say(recall_cue, color: :green) : prompt.say(recall_cue, color: :red)
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
desc "
|
50
|
+
desc "open recall_cue", "Open your file/folder contents in your default editor"
|
51
|
+
def open(recall_cue=nil)
|
52
|
+
editor = ENV['EDITOR']
|
53
|
+
error_and_exit("Your system does not define a default editor. Please set $EDITOR and try again.") if editor.nil?
|
54
|
+
|
55
|
+
recall_cue ||= cue_picker("What would you like to open?")
|
56
|
+
error_and_exit("#{recall_cue} has not been recalled on this computer. Use `sheldon recall #{recall_cue}` and then try again.") unless sheldon.recalled?(recall_cue)
|
57
|
+
|
58
|
+
with_exception_handling do
|
59
|
+
memory_entry = sheldon.brain.memory.recall(recall_cue)
|
60
|
+
filepath = add_home(memory_entry[:filepath])
|
61
|
+
system("#{ENV['EDITOR']} '#{filepath}'")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
desc "recall recall_cue", "Recall a previously learnt file/directory to it's original location on the filesystem.\nUse `sheldon list` for available cues."
|
50
66
|
option :i, type: :boolean, desc: "Interactive mode - prompts Y/N for each available recall_cue"
|
51
67
|
|
52
68
|
def recall(recall_cue=nil)
|
53
69
|
if options[:i]
|
54
70
|
sheldon.list_cues.each do |recall_cue|
|
55
|
-
answer =
|
71
|
+
answer = prompt.yes?("Recall #{recall_cue}?")
|
56
72
|
with_exception_handling { sheldon.recall(recall_cue) if answer.downcase == "y" }
|
57
73
|
end
|
58
74
|
else
|
59
|
-
recall_cue
|
75
|
+
recall_cue = cue_picker("What would you like to recall?")
|
60
76
|
with_exception_handling { sheldon.recall(recall_cue) }
|
61
77
|
end
|
62
78
|
|
@@ -65,16 +81,16 @@ module CLI
|
|
65
81
|
|
66
82
|
desc "setup path_to_data_directory", "Setup Sheldon on this host, supplying the path that where Sheldon's data directory can be found, or should be created."
|
67
83
|
def setup(rel_data_path=nil)
|
68
|
-
rel_data_path ||= ask("Please supply location for new/existing data directory")
|
84
|
+
rel_data_path ||= prompt.ask("Please supply location for new/existing data directory", required: true)
|
69
85
|
abs_data_path = File.expand_path(rel_data_path)
|
70
86
|
with_exception_handling do
|
71
87
|
sheldon = ::Sheldon.new(abs_data_path)
|
72
88
|
|
73
89
|
if sheldon.brain.present?
|
74
|
-
|
90
|
+
prompt.ok("Using existing Sheldon database found at #{abs_data_path}.")
|
75
91
|
else
|
76
92
|
sheldon.setup!
|
77
|
-
|
93
|
+
prompt.ok("New Sheldon database created at #{abs_data_path}")
|
78
94
|
end
|
79
95
|
|
80
96
|
write_to_dotfile("data_directory", sheldon.brain.location)
|
@@ -93,6 +109,19 @@ module CLI
|
|
93
109
|
puts logo + " Sheldon" + logo + " #{message}"
|
94
110
|
end
|
95
111
|
|
112
|
+
def error_and_exit(message)
|
113
|
+
prompt.error(message)
|
114
|
+
exit!
|
115
|
+
end
|
116
|
+
|
117
|
+
def prompt
|
118
|
+
@prompt ||= TTY::Prompt.new(interrupt: :exit)
|
119
|
+
end
|
120
|
+
|
121
|
+
def cue_picker(message)
|
122
|
+
prompt.select(message, sheldon.list_cues, per_page: 20, filter: true)
|
123
|
+
end
|
124
|
+
|
96
125
|
def read_from_dotfile(key)
|
97
126
|
dotfile = YAML::Store.new(add_home(".sheldon"))
|
98
127
|
dotfile.transaction { dotfile[key] }
|
@@ -104,7 +133,7 @@ module CLI
|
|
104
133
|
|
105
134
|
def sheldon_data_dir
|
106
135
|
sheldon_data_dir = read_from_dotfile("data_directory") || ENV['SHELDON_DATA_DIR']
|
107
|
-
sheldon_data_dir ||
|
136
|
+
sheldon_data_dir || error_and_exit("No configuration found. Please run `sheldon setup`")
|
108
137
|
end
|
109
138
|
|
110
139
|
def with_exception_handling(&block)
|
@@ -113,7 +142,7 @@ module CLI
|
|
113
142
|
if options[:debug]
|
114
143
|
puts ([e.inspect] + e.backtrace).join("\n")
|
115
144
|
else
|
116
|
-
|
145
|
+
prompt.error(e.message + "\nUse --debug to print backtrace")
|
117
146
|
end
|
118
147
|
exit!
|
119
148
|
end
|
data/lib/sheldon/brain.rb
CHANGED
@@ -24,7 +24,7 @@ class Brain
|
|
24
24
|
def learn(recall_cue, abs_learn_path)
|
25
25
|
raise "recall cue cannot be empty." if recall_cue.strip.empty?
|
26
26
|
raise "This cue has already been used." if has_cue?(recall_cue)
|
27
|
-
raise "Unable to find a file or folder at #{abs_learn_path}" unless File.
|
27
|
+
raise "Unable to find a file or folder at #{abs_learn_path}" unless File.exist?(abs_learn_path)
|
28
28
|
|
29
29
|
brain_path = brain_path_for_cue(recall_cue)
|
30
30
|
FileUtils.mkdir_p(brain_path)
|
data/lib/sheldon/memory.rb
CHANGED
data/lib/sheldon/sheldon.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require "fileutils"
|
2
2
|
|
3
3
|
class Sheldon
|
4
|
-
VERSION = "0.
|
4
|
+
VERSION = "0.6.0".freeze
|
5
5
|
attr_reader :brain, :builder
|
6
6
|
|
7
7
|
def initialize(sheldon_data_dir)
|
8
|
-
unless Dir.
|
8
|
+
unless Dir.exist?(sheldon_data_dir)
|
9
9
|
raise MissingDataDirectoryException, "Directory #{sheldon_data_dir} does not exist."
|
10
10
|
end
|
11
11
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sheldon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Jones
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tty-prompt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|