pry-note 0.2.5 → 0.2.6
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.
- data/lib/pry-note.rb +25 -0
- data/lib/pry-note/commands.rb +45 -46
- data/lib/pry-note/hooks.rb +2 -2
- data/lib/pry-note/version.rb +1 -1
- data/pry-note.gemspec +2 -2
- data/test/test_pry_note.rb +53 -16
- metadata +2 -2
data/lib/pry-note.rb
CHANGED
@@ -24,4 +24,29 @@ module PryNote
|
|
24
24
|
expanded_path = File.expand_path(file_name)
|
25
25
|
File.open(expanded_path, "w") { |f| f.puts YAML.dump(PryNote.notes) }
|
26
26
|
end
|
27
|
+
|
28
|
+
# @return [Pry::Method, Pry::WrappedModule, Pry::Command] The code_object
|
29
|
+
def self.retrieve_code_object_safely(name, target, _pry_)
|
30
|
+
code_object = Pry::Helpers::CommandHelpers.retrieve_code_object_from_string(name, target) ||
|
31
|
+
_pry_.commands.find_command(name)
|
32
|
+
|
33
|
+
if !code_object
|
34
|
+
raise Pry::CommandError, "No code object found named #{name}"
|
35
|
+
elsif code_object.name.to_s == ""
|
36
|
+
raise Pry::CommandError, "Object #{name} doesn't have a proper name, can't create note"
|
37
|
+
end
|
38
|
+
|
39
|
+
code_object
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [String] the `name` of the code object
|
43
|
+
def self.code_object_name(co)
|
44
|
+
if co.is_a?(Pry::Method)
|
45
|
+
co.name_with_owner
|
46
|
+
elsif co.is_a?(Pry::WrappedModule)
|
47
|
+
co.name
|
48
|
+
elsif co <= Pry::Command
|
49
|
+
co.command_name
|
50
|
+
end
|
51
|
+
end
|
27
52
|
end
|
data/lib/pry-note/commands.rb
CHANGED
@@ -27,7 +27,7 @@ Pry::Commands.create_command "note" do
|
|
27
27
|
cmd.on :export
|
28
28
|
cmd.on :load
|
29
29
|
cmd.on :delete do |opt|
|
30
|
-
opt.on :all, "Delete all notes."
|
30
|
+
opt.on :a, :all, "Delete all notes."
|
31
31
|
end
|
32
32
|
|
33
33
|
cmd.on :edit do |opt|
|
@@ -50,6 +50,10 @@ Pry::Commands.create_command "note" do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
def code_object_name(co)
|
54
|
+
PryNote.code_object_name(co)
|
55
|
+
end
|
56
|
+
|
53
57
|
def process
|
54
58
|
if opts.command?(:add)
|
55
59
|
cmd_opts = opts[:add]
|
@@ -87,15 +91,7 @@ Pry::Commands.create_command "note" do
|
|
87
91
|
end
|
88
92
|
|
89
93
|
def retrieve_code_object_safely(name)
|
90
|
-
|
91
|
-
|
92
|
-
if !code_object
|
93
|
-
raise Pry::CommandError, "No code object found named #{name}"
|
94
|
-
elsif code_object.name.to_s == ""
|
95
|
-
raise Pry::CommandError, "Object #{name} doesn't have a proper name, can't create note"
|
96
|
-
end
|
97
|
-
|
98
|
-
code_object
|
94
|
+
PryNote.retrieve_code_object_safely(name, target, _pry_)
|
99
95
|
end
|
100
96
|
|
101
97
|
def default_object_name
|
@@ -109,10 +105,6 @@ Pry::Commands.create_command "note" do
|
|
109
105
|
end
|
110
106
|
end
|
111
107
|
|
112
|
-
def code_object_name(co)
|
113
|
-
co.is_a?(Pry::Method) ? co.name_with_owner : co.name
|
114
|
-
end
|
115
|
-
|
116
108
|
def add_note(name, message=nil)
|
117
109
|
name ||= default_object_name
|
118
110
|
co_name = code_object_name(retrieve_code_object_safely(name))
|
@@ -129,51 +121,58 @@ Pry::Commands.create_command "note" do
|
|
129
121
|
output.puts "Added note to #{co_name}!"
|
130
122
|
end
|
131
123
|
|
124
|
+
# @param [String] co_name Name of note object.
|
125
|
+
# @param [String, nil] note_number_s The note number as a string
|
126
|
+
# @param [Boolean] must_provide_number Whether note number is
|
127
|
+
# allowed to be nil.
|
128
|
+
def ensure_note_number_in_range(co_name, note_number_s, must_provide_number=true)
|
129
|
+
if notes[co_name]
|
130
|
+
total_notes = notes[co_name].count
|
131
|
+
else
|
132
|
+
raise Pry::CommandError, "No notes available for #{co_name}"
|
133
|
+
end
|
134
|
+
|
135
|
+
if !note_number_s && !must_provide_number
|
136
|
+
# we're allowed nil, so just return
|
137
|
+
return
|
138
|
+
elsif !note_number_s
|
139
|
+
raise Pry::CommandError, "Must specify a note number. Allowable range is 1-#{total_notes}."
|
140
|
+
elsif note_number_s.to_i < 1 || note_number_s.to_i > total_notes
|
141
|
+
raise Pry::CommandError, "Invalid note number (#{note_number_s}). Allowable range is 1-#{total_notes}."
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
132
145
|
def reedit_note(name, message=nil)
|
133
146
|
name, note_number_s = name.split(/:(\d+)$/)
|
134
147
|
co_name = code_object_name(retrieve_code_object_safely(name))
|
135
|
-
raise Pry::CommandError, "No notes to edit!" if !notes[co_name]
|
136
148
|
|
137
|
-
|
138
|
-
note_number = note_number_s.to_i
|
149
|
+
ensure_note_number_in_range(co_name, note_number_s)
|
139
150
|
|
140
|
-
|
141
|
-
|
142
|
-
out << "No notes to edit for #{co_name}!\n"
|
143
|
-
elsif !note_number_s
|
144
|
-
raise Pry::CommandError, "Must specify a note number. Allowable range is 1-#{total_notes}."
|
145
|
-
elsif note_number < 1 || note_number > total_notes
|
146
|
-
raise Pry::CommandError, "Invalid note number (#{note_number}). Allowable range is 1-#{total_notes}."
|
151
|
+
if message
|
152
|
+
new_content = message
|
147
153
|
else
|
148
|
-
|
149
|
-
|
150
|
-
else
|
151
|
-
old_content = notes[co_name][note_number.to_i - 1]
|
152
|
-
new_content = edit_note(co_name, old_content.to_s)
|
153
|
-
end
|
154
|
-
|
155
|
-
notes[co_name][note_number.to_i - 1] = new_content
|
156
|
-
out << "Updated note #{note_number} for #{co_name}!\n"
|
154
|
+
old_content = notes[co_name][note_number.to_i - 1]
|
155
|
+
new_content = edit_note(co_name, old_content.to_s)
|
157
156
|
end
|
157
|
+
|
158
|
+
notes[co_name][note_number_s.to_i - 1] = new_content
|
159
|
+
output.puts "Updated note #{note_number_s} for #{co_name}!\n"
|
158
160
|
end
|
159
161
|
|
160
162
|
def delete_note(name)
|
161
|
-
name,
|
163
|
+
name, note_number_s = name.split(/:(\d+)$/)
|
162
164
|
co_name = code_object_name(retrieve_code_object_safely(name))
|
163
165
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
notes[co_name].delete_at(note_number.to_i - 1)
|
166
|
+
ensure_note_number_in_range(co_name, note_number_s, false)
|
167
|
+
|
168
|
+
if note_number_s
|
169
|
+
notes[co_name].delete_at(note_number_s.to_i - 1)
|
169
170
|
notes.delete(co_name) if notes[co_name].empty?
|
170
|
-
|
171
|
+
output.puts "Deleted note #{note_number_s} for #{co_name}!\n"
|
171
172
|
else
|
172
173
|
notes.delete(co_name)
|
173
|
-
|
174
|
+
output.puts "Deleted all notes for #{text.bold(co_name)}!\n"
|
174
175
|
end
|
175
|
-
|
176
|
-
stagger_output out
|
177
176
|
end
|
178
177
|
|
179
178
|
def create_note_output(name, verbose=false)
|
@@ -202,8 +201,8 @@ Pry::Commands.create_command "note" do
|
|
202
201
|
end
|
203
202
|
|
204
203
|
def list_all
|
204
|
+
out = ""
|
205
205
|
if notes.any?
|
206
|
-
out = ""
|
207
206
|
out << text.bold("Showing all available notes:\n")
|
208
207
|
notes.each do |key, content|
|
209
208
|
begin
|
@@ -220,12 +219,12 @@ Pry::Commands.create_command "note" do
|
|
220
219
|
end
|
221
220
|
|
222
221
|
def list_notes
|
222
|
+
out = ""
|
223
223
|
if notes.any?
|
224
|
-
out = ""
|
225
224
|
out << text.bold("Showing all available notes:\n\n")
|
226
225
|
notes.each do |key, content|
|
227
226
|
begin
|
228
|
-
if
|
227
|
+
if retrieve_code_object_safely(key)
|
229
228
|
out << "#{text.bold(key)} has #{content.count} notes\n"
|
230
229
|
end
|
231
230
|
rescue
|
data/lib/pry-note/hooks.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
reminder = proc do
|
2
2
|
begin
|
3
|
-
co =
|
4
|
-
co_name =
|
3
|
+
co = PryNote.retrieve_code_object_safely(args.first.to_s, target, _pry_)
|
4
|
+
co_name = PryNote.code_object_name(co)
|
5
5
|
if PryNote.notes.keys.include?(co_name)
|
6
6
|
output.puts "\n\n#{text.bold("Notes:")}\n--\n\n"
|
7
7
|
|
data/lib/pry-note/version.rb
CHANGED
data/pry-note.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "pry-note"
|
5
|
-
s.version = "0.2.
|
5
|
+
s.version = "0.2.6"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["John Mair (banisterfiend)"]
|
9
|
-
s.date = "2012-12-
|
9
|
+
s.date = "2012-12-02"
|
10
10
|
s.description = "Ease refactoring and exploration by attaching notes to methods and classes in Pry"
|
11
11
|
s.email = "jrmair@gmail.com"
|
12
12
|
s.files = ["README.md", "Rakefile", "lib/pry-note.rb", "lib/pry-note/commands.rb", "lib/pry-note/hooks.rb", "lib/pry-note/version.rb", "pry-note.gemspec", "test/helper.rb", "test/test_pry_note.rb"]
|
data/test/test_pry_note.rb
CHANGED
@@ -20,7 +20,7 @@ describe PryNote do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
describe "note add" do
|
23
|
-
describe "
|
23
|
+
describe "notes added with editor" do
|
24
24
|
it 'should open the editor' do
|
25
25
|
used_editor = nil
|
26
26
|
Pry.config.editor = proc { used_editor = true; nil }
|
@@ -28,13 +28,13 @@ describe PryNote do
|
|
28
28
|
used_editor.should == true
|
29
29
|
end
|
30
30
|
|
31
|
-
it 'should
|
31
|
+
it 'should store the added note' do
|
32
32
|
Pry.config.editor = proc { nil }
|
33
33
|
@t.process_command "note add PryNote::TestClass"
|
34
34
|
PryNote.notes["PryNote::TestClass"].count.should == 1
|
35
35
|
end
|
36
36
|
|
37
|
-
it 'should
|
37
|
+
it 'should use default content when none other given' do
|
38
38
|
Pry.config.editor = proc { nil }
|
39
39
|
@t.process_command "note add PryNote::TestClass"
|
40
40
|
PryNote.notes["PryNote::TestClass"].first.should =~ /Enter note content here/
|
@@ -54,6 +54,12 @@ describe PryNote do
|
|
54
54
|
PryNote.notes["PryNote::TestClass#ping"].first.should =~ /my note/
|
55
55
|
end
|
56
56
|
|
57
|
+
it 'should add a new note for a command' do
|
58
|
+
@t.process_command "note add show-source -m 'my note'"
|
59
|
+
@t.last_output.should =~ /Added note to show-source/
|
60
|
+
PryNote.notes["show-source"].first.should =~ /my note/
|
61
|
+
end
|
62
|
+
|
57
63
|
it 'should add a new note for a class' do
|
58
64
|
@t.process_command "note add PryNote::TestClass -m 'my note'"
|
59
65
|
@t.last_output.should =~ /Added note to PryNote::TestClass/
|
@@ -61,15 +67,15 @@ describe PryNote do
|
|
61
67
|
end
|
62
68
|
end
|
63
69
|
|
64
|
-
describe "implicit object" do
|
65
|
-
it 'should add a new note for class of object
|
70
|
+
describe "implicit object ('current' object extracted from binding)" do
|
71
|
+
it 'should add a new note for class of current object, when not in a method context' do
|
66
72
|
@t.process_command "cd 0"
|
67
73
|
@t.process_command "note add -m 'my note'"
|
68
74
|
@t.last_output.should =~ /Added note to Fixnum/
|
69
75
|
PryNote.notes["Fixnum"].first.should =~ /my note/
|
70
76
|
end
|
71
77
|
|
72
|
-
it 'should add a new note for a method
|
78
|
+
it 'should add a new note for a method, when in method context' do
|
73
79
|
o = PryNote::TestClass.new
|
74
80
|
t = pry_tester(o.ping)
|
75
81
|
t.process_command "note add -m 'my note'"
|
@@ -139,6 +145,19 @@ describe PryNote do
|
|
139
145
|
end
|
140
146
|
end
|
141
147
|
|
148
|
+
describe "note list" do
|
149
|
+
it 'should list note counts for each object' do
|
150
|
+
@t.process_command "note add PryNote::TestClass -m 'my note1'"
|
151
|
+
@t.process_command "note list"
|
152
|
+
@t.last_output.should =~ /PryNote::TestClass has 1 notes/
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should indicate when there are no notes available' do
|
156
|
+
@t.process_command "note list"
|
157
|
+
@t.last_output.should =~ /No notes available/
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
142
161
|
describe "note edit" do
|
143
162
|
describe "errors" do
|
144
163
|
it 'should error when not given a note number' do
|
@@ -160,11 +179,11 @@ describe PryNote do
|
|
160
179
|
it 'should error when editing object with no notes' do
|
161
180
|
capture_exception do
|
162
181
|
@t.process_command "note edit PryNote::TestClass:2 -m 'bing'"
|
163
|
-
end.message.should =~ /No notes
|
182
|
+
end.message.should =~ /No notes available/
|
164
183
|
end
|
165
184
|
end
|
166
185
|
|
167
|
-
describe "-m switch" do
|
186
|
+
describe "-m switch (used to amend note inline and bypass editor)" do
|
168
187
|
it 'should amend the content of a note' do
|
169
188
|
@t.process_command "note add PryNote::TestClass -m 'my note1'"
|
170
189
|
@t.process_command "note edit PryNote::TestClass:1 -m 'bing'"
|
@@ -175,12 +194,6 @@ describe PryNote do
|
|
175
194
|
end
|
176
195
|
|
177
196
|
describe "note show" do
|
178
|
-
it 'should display method source when -v flag is used' do
|
179
|
-
@t.process_command "note add PryNote::TestClass -m 'my note1'"
|
180
|
-
@t.process_command "note show PryNote::TestClass -v"
|
181
|
-
@t.last_output.should =~ /ping/
|
182
|
-
end
|
183
|
-
|
184
197
|
it 'should just display number of notes by default' do
|
185
198
|
@t.process_command "note add PryNote::TestClass -m 'my note1'"
|
186
199
|
@t.process_command "note add PryNote::TestClass -m 'my note2'"
|
@@ -189,13 +202,19 @@ describe PryNote do
|
|
189
202
|
@t.last_output.should.not =~ /ping/
|
190
203
|
end
|
191
204
|
|
205
|
+
it 'should display method source when -v flag is used' do
|
206
|
+
@t.process_command "note add PryNote::TestClass -m 'my note1'"
|
207
|
+
@t.process_command "note show PryNote::TestClass -v"
|
208
|
+
@t.last_output.should =~ /ping/
|
209
|
+
end
|
210
|
+
|
192
211
|
it 'should ignore :number suffix (as used in edit and delete)' do
|
193
212
|
@t.process_command "note add PryNote::TestClass -m 'my note2'"
|
194
213
|
@t.process_command "note show PryNote::TestClass:99"
|
195
214
|
@t.last_output.should =~ /1/
|
196
215
|
end
|
197
216
|
|
198
|
-
it 'should
|
217
|
+
it 'should display notes for current object (class)' do
|
199
218
|
@t.process_command "note add PryNote::TestClass -m 'my note1'"
|
200
219
|
@t.process_command "note add PryNote::TestClass -m 'my note2'"
|
201
220
|
@t.process_command "cd PryNote::TestClass"
|
@@ -203,13 +222,31 @@ describe PryNote do
|
|
203
222
|
@t.last_output.should =~ /ping/
|
204
223
|
end
|
205
224
|
|
206
|
-
it 'should
|
225
|
+
it 'should display notes for current object (method)' do
|
207
226
|
t = pry_tester(Pad.obj.ping)
|
208
227
|
t.process_command "note add PryNote::TestClass#ping -m 'my note1'"
|
209
228
|
t.process_command "note add PryNote::TestClass#ping -m 'my note2'"
|
210
229
|
t.process_command "note show -v"
|
211
230
|
t.last_output.should =~ /binding/
|
212
231
|
end
|
232
|
+
|
233
|
+
describe "command notes" do
|
234
|
+
it 'should show notes for a command' do
|
235
|
+
@t.process_command "note add show-source -m 'my note1'"
|
236
|
+
@t.process_command "note show show-source"
|
237
|
+
@t.last_output.should =~ /show-source/
|
238
|
+
@t.last_output.should =~ /my note1/
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'should show command source when -v switch is used' do
|
242
|
+
@t.process_command "note add show-source -m 'my note1'"
|
243
|
+
@t.process_command "note show show-source -v"
|
244
|
+
|
245
|
+
# note this test may fail in future if we change command
|
246
|
+
# creation API
|
247
|
+
@t.last_output.should =~ /create_command/
|
248
|
+
end
|
249
|
+
end
|
213
250
|
end
|
214
251
|
|
215
252
|
describe "note export" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-note
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|