sheldon 0.5.5 → 0.6.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/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
|