pry 0.6.7 → 0.6.8
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/CHANGELOG +5 -0
- data/LICENSE +25 -25
- data/README.markdown +11 -2
- data/Rakefile +1 -1
- data/bin/pry +5 -4
- data/examples/example_basic.rb +17 -17
- data/examples/example_command_override.rb +35 -35
- data/examples/example_commands.rb +39 -39
- data/examples/example_hooks.rb +12 -12
- data/examples/example_image_edit.rb +71 -71
- data/examples/example_input.rb +10 -10
- data/examples/example_input2.rb +32 -32
- data/examples/example_output.rb +14 -14
- data/examples/example_print.rb +9 -9
- data/examples/example_prompt.rb +12 -12
- data/lib/pry/command_base.rb +150 -150
- data/lib/pry/commands.rb +43 -4
- data/lib/pry/completion.rb +202 -202
- data/lib/pry/core_extensions.rb +55 -55
- data/lib/pry/hooks.rb +19 -8
- data/lib/pry/pry_class.rb +37 -4
- data/lib/pry/pry_instance.rb +3 -3
- data/lib/pry/version.rb +1 -1
- data/test/test.rb +725 -681
- data/test/test_helper.rb +46 -38
- data/test/testrc +2 -0
- metadata +91 -59
data/CHANGELOG
CHANGED
data/LICENSE
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
License
|
2
|
-
-------
|
3
|
-
|
4
|
-
(The MIT License)
|
5
|
-
|
6
|
-
Copyright (c) 2011 John Mair (banisterfiend)
|
7
|
-
|
8
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
9
|
-
a copy of this software and associated documentation files (the
|
10
|
-
'Software'), to deal in the Software without restriction, including
|
11
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
12
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
-
permit persons to whom the Software is furnished to do so, subject to
|
14
|
-
the following conditions:
|
15
|
-
|
16
|
-
The above copyright notice and this permission notice shall be
|
17
|
-
included in all copies or substantial portions of the Software.
|
18
|
-
|
19
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
20
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
22
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
23
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
24
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
25
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1
|
+
License
|
2
|
+
-------
|
3
|
+
|
4
|
+
(The MIT License)
|
5
|
+
|
6
|
+
Copyright (c) 2011 John Mair (banisterfiend)
|
7
|
+
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
a copy of this software and associated documentation files (the
|
10
|
+
'Software'), to deal in the Software without restriction, including
|
11
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
the following conditions:
|
15
|
+
|
16
|
+
The above copyright notice and this permission notice shall be
|
17
|
+
included in all copies or substantial portions of the Software.
|
18
|
+
|
19
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
22
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
23
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
24
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
25
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
CHANGED
@@ -42,7 +42,7 @@ Example: Interacting with an object at runtime
|
|
42
42
|
|
43
43
|
With the `Object#pry` method we can pry (open an irb-like session) on
|
44
44
|
an object. In the example below we open a Pry session for the `Test` class and execute a method and add
|
45
|
-
an instance variable. The current thread is
|
45
|
+
an instance variable. The current thread is taken over by the Pry REPL loop for the duration of the session.
|
46
46
|
|
47
47
|
require 'pry'
|
48
48
|
|
@@ -164,7 +164,7 @@ end.
|
|
164
164
|
|
165
165
|
* Pry can be invoked at any time and on any object in the running program.
|
166
166
|
* Pry sessions can nest arbitrarily deeply -- to go back one level of nesting type 'exit' or 'quit' or 'back'
|
167
|
-
* Pry comes with syntax highlighting just use the `toggle-color` command to use it.
|
167
|
+
* Pry comes with syntax highlighting on by default just use the `toggle-color` command to use it.
|
168
168
|
* Use `_` to recover last result.
|
169
169
|
* Use `_pry_` to reference the Pry instance managing the current session.
|
170
170
|
* Pry supports tab completion.
|
@@ -240,6 +240,7 @@ If you want to access a method of the same name, prefix the invocation by whites
|
|
240
240
|
getting you out of a situation where the parsing process
|
241
241
|
goes wrong and you get stuck in an endless read loop.
|
242
242
|
* `status` shows status information about the current session.
|
243
|
+
* `whereami` shows the code context of the session.
|
243
244
|
* `version` Show Pry version information
|
244
245
|
* `help` shows the list of session commands with brief explanations.
|
245
246
|
* `toggle-color` turns on and off syntax highlighting.
|
@@ -265,6 +266,14 @@ If you want to access a method of the same name, prefix the invocation by whites
|
|
265
266
|
current one with `obj` as the receiver of the new session. Very useful
|
266
267
|
when exploring large or complicated runtime state.
|
267
268
|
|
269
|
+
Syntax Highlighting
|
270
|
+
--------------------
|
271
|
+
|
272
|
+
Syntax highlighting is on by default in Pry. You can toggle it on and
|
273
|
+
off in a session by using the `toggle-color` command. Alternatively,
|
274
|
+
you can turn it off permanently by putting the line `Pry.color =
|
275
|
+
false` in your `~/.pryrc` file.
|
276
|
+
|
268
277
|
Bindings and objects
|
269
278
|
--------------------
|
270
279
|
|
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@ def apply_spec_defaults(s)
|
|
26
26
|
s.has_rdoc = 'yard'
|
27
27
|
s.executables = ["pry"]
|
28
28
|
s.files = Dir["ext/**/extconf.rb", "ext/**/*.h", "ext/**/*.c", "lib/**/*.rb", "examples/**/*.rb",
|
29
|
-
"test/*.rb", "CHANGELOG", "LICENSE", "README.markdown", "Rakefile", ".gemtest"]
|
29
|
+
"test/*.rb", "test/testrc", "CHANGELOG", "LICENSE", "README.markdown", "Rakefile", ".gemtest"]
|
30
30
|
end
|
31
31
|
|
32
32
|
task :test do
|
data/bin/pry
CHANGED
@@ -35,8 +35,8 @@ See: `https://github.com/banister` for more information.
|
|
35
35
|
options[:loadrc] = false
|
36
36
|
end
|
37
37
|
|
38
|
-
opts.on("--color", "Start session
|
39
|
-
Pry.color =
|
38
|
+
opts.on("--no-color", "Start session without syntax highlighting.") do
|
39
|
+
Pry.color = false
|
40
40
|
end
|
41
41
|
|
42
42
|
opts.on("--simple-prompt", "Simple prompt mode.") do
|
@@ -65,10 +65,11 @@ See: `https://github.com/banister` for more information.
|
|
65
65
|
end
|
66
66
|
end.parse!
|
67
67
|
|
68
|
-
|
68
|
+
# invoked via cli
|
69
|
+
Pry.cli = true
|
69
70
|
|
70
71
|
# load ~/.pryrc, if not suppressed with -f option
|
71
|
-
|
72
|
+
Pry.should_load_rc = false if !options[:loadrc]
|
72
73
|
|
73
74
|
# create the actual context
|
74
75
|
context = Pry.binding_for(eval(options[:context_string]))
|
data/examples/example_basic.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
direc = File.dirname(__FILE__)
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
5
|
-
|
6
|
-
# define a local.
|
7
|
-
a = "a local variable"
|
8
|
-
|
9
|
-
# defing a top-level method.
|
10
|
-
def hello
|
11
|
-
puts "hello world!"
|
12
|
-
end
|
13
|
-
|
14
|
-
# Start pry session at top-level.
|
15
|
-
# The local variable `a` and the `hello` method will
|
16
|
-
# be accessible.
|
17
|
-
pry
|
1
|
+
direc = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require "#{direc}/../lib/pry"
|
5
|
+
|
6
|
+
# define a local.
|
7
|
+
a = "a local variable"
|
8
|
+
|
9
|
+
# defing a top-level method.
|
10
|
+
def hello
|
11
|
+
puts "hello world!"
|
12
|
+
end
|
13
|
+
|
14
|
+
# Start pry session at top-level.
|
15
|
+
# The local variable `a` and the `hello` method will
|
16
|
+
# be accessible.
|
17
|
+
pry
|
@@ -1,35 +1,35 @@
|
|
1
|
-
direc = File.dirname(__FILE__)
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
5
|
-
|
6
|
-
# Inherit standard command set, but tweak them by importing some and
|
7
|
-
# overriding others.
|
8
|
-
# Illustrates use of `command`, `run`, and `import_from` commands.
|
9
|
-
class MyCommands < Pry::CommandBase
|
10
|
-
|
11
|
-
# Override ls command
|
12
|
-
command "ls", "An unhelpful ls" do
|
13
|
-
output.puts "No, i refuse to display any useful information."
|
14
|
-
end
|
15
|
-
|
16
|
-
# bring in just the status command from Pry::Commands
|
17
|
-
import_from Pry::Commands, "status"
|
18
|
-
|
19
|
-
# analogy to Ruby's native alias_method idiom for decorating a method
|
20
|
-
alias_command "old_status", "status", ""
|
21
|
-
|
22
|
-
# Invoke one command from within another using `run`
|
23
|
-
command "status", "Modified status." do |x|
|
24
|
-
output.puts "About to show status, are you ready?"
|
25
|
-
run "old_status", x
|
26
|
-
output.puts "Finished showing status."
|
27
|
-
end
|
28
|
-
|
29
|
-
# bring in a few other commands
|
30
|
-
import_from Pry::Commands, "quit", "show-method"
|
31
|
-
end
|
32
|
-
|
33
|
-
# Start a Pry session using the commands defined in MyCommands
|
34
|
-
# Type 'help' in Pry to get a list of the commands and their descriptions
|
35
|
-
Pry.start(TOPLEVEL_BINDING, :commands => MyCommands)
|
1
|
+
direc = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require "#{direc}/../lib/pry"
|
5
|
+
|
6
|
+
# Inherit standard command set, but tweak them by importing some and
|
7
|
+
# overriding others.
|
8
|
+
# Illustrates use of `command`, `run`, and `import_from` commands.
|
9
|
+
class MyCommands < Pry::CommandBase
|
10
|
+
|
11
|
+
# Override ls command
|
12
|
+
command "ls", "An unhelpful ls" do
|
13
|
+
output.puts "No, i refuse to display any useful information."
|
14
|
+
end
|
15
|
+
|
16
|
+
# bring in just the status command from Pry::Commands
|
17
|
+
import_from Pry::Commands, "status"
|
18
|
+
|
19
|
+
# analogy to Ruby's native alias_method idiom for decorating a method
|
20
|
+
alias_command "old_status", "status", ""
|
21
|
+
|
22
|
+
# Invoke one command from within another using `run`
|
23
|
+
command "status", "Modified status." do |x|
|
24
|
+
output.puts "About to show status, are you ready?"
|
25
|
+
run "old_status", x
|
26
|
+
output.puts "Finished showing status."
|
27
|
+
end
|
28
|
+
|
29
|
+
# bring in a few other commands
|
30
|
+
import_from Pry::Commands, "quit", "show-method"
|
31
|
+
end
|
32
|
+
|
33
|
+
# Start a Pry session using the commands defined in MyCommands
|
34
|
+
# Type 'help' in Pry to get a list of the commands and their descriptions
|
35
|
+
Pry.start(TOPLEVEL_BINDING, :commands => MyCommands)
|
@@ -1,39 +1,39 @@
|
|
1
|
-
direc = File.dirname(__FILE__)
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
5
|
-
|
6
|
-
class MathCommands < Pry::CommandBase
|
7
|
-
command "greet", "Greet a person, e.g: greet john" do |name|
|
8
|
-
output.puts "Good afternoon #{name.capitalize}! Do you like Math?"
|
9
|
-
end
|
10
|
-
|
11
|
-
command "add", "Add a list of numbers together, e.g: add 1 2 3 4" do |*args|
|
12
|
-
output.puts "Total: #{args.map(&:to_f).inject(&:+)}"
|
13
|
-
end
|
14
|
-
|
15
|
-
command "multiply", "Multiply a list of numbers together, e.g: multiply 1 2 3 4" do |*args|
|
16
|
-
output.puts "Total: #{args.map(&:to_f).inject(&:*)}"
|
17
|
-
end
|
18
|
-
|
19
|
-
# Explicitly giving a description of "" to prevent command being
|
20
|
-
# displayed in 'help'
|
21
|
-
command "exit", "" do
|
22
|
-
throw :breakout, 0
|
23
|
-
end
|
24
|
-
|
25
|
-
# Bring in the "!" method from Pry::Commands
|
26
|
-
import_from Pry::Commands, "!"
|
27
|
-
end
|
28
|
-
|
29
|
-
# Since we provide math commands, let's have mathematical
|
30
|
-
# before_session and after_session hooks, and a mathematical prompt
|
31
|
-
math_prompt = [proc { "math> " }, proc { "math* " }]
|
32
|
-
math_hooks = {
|
33
|
-
:before_session => proc { |output, *| output.puts "Welcome! Let's do some math! Type 'help' for a list of commands." },
|
34
|
-
:after_session => proc { |output, *| output.puts "Goodbye!" }
|
35
|
-
}
|
36
|
-
|
37
|
-
# Start a Pry session using the commands defined in MyCommands
|
38
|
-
# Type 'help' in Pry to get a list of the commands and their descriptions
|
39
|
-
Pry.start(TOPLEVEL_BINDING, :commands => MathCommands, :prompt => math_prompt, :hooks => math_hooks)
|
1
|
+
direc = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require "#{direc}/../lib/pry"
|
5
|
+
|
6
|
+
class MathCommands < Pry::CommandBase
|
7
|
+
command "greet", "Greet a person, e.g: greet john" do |name|
|
8
|
+
output.puts "Good afternoon #{name.capitalize}! Do you like Math?"
|
9
|
+
end
|
10
|
+
|
11
|
+
command "add", "Add a list of numbers together, e.g: add 1 2 3 4" do |*args|
|
12
|
+
output.puts "Total: #{args.map(&:to_f).inject(&:+)}"
|
13
|
+
end
|
14
|
+
|
15
|
+
command "multiply", "Multiply a list of numbers together, e.g: multiply 1 2 3 4" do |*args|
|
16
|
+
output.puts "Total: #{args.map(&:to_f).inject(&:*)}"
|
17
|
+
end
|
18
|
+
|
19
|
+
# Explicitly giving a description of "" to prevent command being
|
20
|
+
# displayed in 'help'
|
21
|
+
command "exit", "" do
|
22
|
+
throw :breakout, 0
|
23
|
+
end
|
24
|
+
|
25
|
+
# Bring in the "!" method from Pry::Commands
|
26
|
+
import_from Pry::Commands, "!"
|
27
|
+
end
|
28
|
+
|
29
|
+
# Since we provide math commands, let's have mathematical
|
30
|
+
# before_session and after_session hooks, and a mathematical prompt
|
31
|
+
math_prompt = [proc { "math> " }, proc { "math* " }]
|
32
|
+
math_hooks = {
|
33
|
+
:before_session => proc { |output, *| output.puts "Welcome! Let's do some math! Type 'help' for a list of commands." },
|
34
|
+
:after_session => proc { |output, *| output.puts "Goodbye!" }
|
35
|
+
}
|
36
|
+
|
37
|
+
# Start a Pry session using the commands defined in MyCommands
|
38
|
+
# Type 'help' in Pry to get a list of the commands and their descriptions
|
39
|
+
Pry.start(TOPLEVEL_BINDING, :commands => MathCommands, :prompt => math_prompt, :hooks => math_hooks)
|
data/examples/example_hooks.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
direc = File.dirname(__FILE__)
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require "#{direc}/../lib/pry"
|
5
|
-
|
6
|
-
my_hooks = {
|
7
|
-
:before_session => proc { |out,
|
8
|
-
:after_session => proc { |out,
|
9
|
-
}
|
10
|
-
|
11
|
-
# Start a Pry session using the hooks hash defined in my_hooks
|
12
|
-
Pry.start(TOPLEVEL_BINDING, :hooks => my_hooks)
|
1
|
+
direc = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require "#{direc}/../lib/pry"
|
5
|
+
|
6
|
+
my_hooks = {
|
7
|
+
:before_session => proc { |out, target| out.puts "Opening #{target.eval('self')}." },
|
8
|
+
:after_session => proc { |out, target| out.puts "Closing #{target.eval('self')}." }
|
9
|
+
}
|
10
|
+
|
11
|
+
# Start a Pry session using the hooks hash defined in my_hooks
|
12
|
+
Pry.start(TOPLEVEL_BINDING, :hooks => my_hooks)
|
@@ -1,71 +1,71 @@
|
|
1
|
-
# Note: this requires you to have Gosu and TexPlay installed.
|
2
|
-
# `gem install gosu`
|
3
|
-
# `gem install texplay`
|
4
|
-
#
|
5
|
-
# Extra instructions for installing Gosu on Linux can be found here:
|
6
|
-
# http://code.google.com/p/gosu/wiki/GettingStartedOnLinux
|
7
|
-
#
|
8
|
-
# Instructions for using TexPlay can be found here:
|
9
|
-
# http://banisterfiend.wordpress.com/2008/08/23/texplay-an-image-manipulation-tool-for-ruby-and-gosu/
|
10
|
-
#
|
11
|
-
# Have fun! :)
|
12
|
-
|
13
|
-
direc = File.dirname(__FILE__)
|
14
|
-
|
15
|
-
require 'rubygems'
|
16
|
-
require "texplay"
|
17
|
-
require "#{direc}/../lib/pry"
|
18
|
-
|
19
|
-
WIDTH = 640
|
20
|
-
HEIGHT = 480
|
21
|
-
|
22
|
-
IMAGE_PROMPT = [ proc { "(image edit)> " }, proc { "(image edit)* " } ]
|
23
|
-
|
24
|
-
class ImageCommands < Pry::CommandBase
|
25
|
-
command "drawing_methods", "Show a list of TexPlay methods" do
|
26
|
-
output.puts "#{Pry.view(TexPlay.public_instance_methods)}"
|
27
|
-
end
|
28
|
-
|
29
|
-
command "exit", "Exit the program." do
|
30
|
-
output.puts "Thanks for dropping by!"
|
31
|
-
exit
|
32
|
-
end
|
33
|
-
|
34
|
-
import_from Pry::Commands, "ls", "!"
|
35
|
-
end
|
36
|
-
|
37
|
-
class WinClass < Gosu::Window
|
38
|
-
|
39
|
-
def initialize
|
40
|
-
super(WIDTH, HEIGHT, false)
|
41
|
-
@img = TexPlay.create_image(self, 200, 200).clear :color => :black
|
42
|
-
@img.rect 0, 0, @img.width - 1, @img.height - 1
|
43
|
-
|
44
|
-
@binding = Pry.binding_for(@img)
|
45
|
-
|
46
|
-
@pry_instance = Pry.new(:commands => ImageCommands, :prompt => IMAGE_PROMPT)
|
47
|
-
end
|
48
|
-
|
49
|
-
def draw
|
50
|
-
@img.draw_rot(WIDTH / 2, HEIGHT / 2, 1, 0, 0.5, 0.5)
|
51
|
-
end
|
52
|
-
|
53
|
-
def update
|
54
|
-
exit if button_down?(Gosu::KbEscape)
|
55
|
-
|
56
|
-
# We do not want a REPL session as the loop prevents the image
|
57
|
-
# being updated; instead we do a REP session, and let the image
|
58
|
-
# update each time the user presses enter. We maintain the same
|
59
|
-
# binding object to keep locals between calls to `Pry#rep()`
|
60
|
-
@pry_instance.rep(@binding)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
puts "Welcome to ImageEdit; type `help` for a list of commands and `drawing_methods` for a list of drawing methods available."
|
65
|
-
puts "--"
|
66
|
-
puts "Example: Try typing 'circle width/2, height/2, 95, :color => :blue, :fill => true'"
|
67
|
-
puts "If you want to save your image, type: save(\"img.png\")"
|
68
|
-
|
69
|
-
w = WinClass.new
|
70
|
-
w.show
|
71
|
-
|
1
|
+
# Note: this requires you to have Gosu and TexPlay installed.
|
2
|
+
# `gem install gosu`
|
3
|
+
# `gem install texplay`
|
4
|
+
#
|
5
|
+
# Extra instructions for installing Gosu on Linux can be found here:
|
6
|
+
# http://code.google.com/p/gosu/wiki/GettingStartedOnLinux
|
7
|
+
#
|
8
|
+
# Instructions for using TexPlay can be found here:
|
9
|
+
# http://banisterfiend.wordpress.com/2008/08/23/texplay-an-image-manipulation-tool-for-ruby-and-gosu/
|
10
|
+
#
|
11
|
+
# Have fun! :)
|
12
|
+
|
13
|
+
direc = File.dirname(__FILE__)
|
14
|
+
|
15
|
+
require 'rubygems'
|
16
|
+
require "texplay"
|
17
|
+
require "#{direc}/../lib/pry"
|
18
|
+
|
19
|
+
WIDTH = 640
|
20
|
+
HEIGHT = 480
|
21
|
+
|
22
|
+
IMAGE_PROMPT = [ proc { "(image edit)> " }, proc { "(image edit)* " } ]
|
23
|
+
|
24
|
+
class ImageCommands < Pry::CommandBase
|
25
|
+
command "drawing_methods", "Show a list of TexPlay methods" do
|
26
|
+
output.puts "#{Pry.view(TexPlay.public_instance_methods)}"
|
27
|
+
end
|
28
|
+
|
29
|
+
command "exit", "Exit the program." do
|
30
|
+
output.puts "Thanks for dropping by!"
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
|
34
|
+
import_from Pry::Commands, "ls", "!"
|
35
|
+
end
|
36
|
+
|
37
|
+
class WinClass < Gosu::Window
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
super(WIDTH, HEIGHT, false)
|
41
|
+
@img = TexPlay.create_image(self, 200, 200).clear :color => :black
|
42
|
+
@img.rect 0, 0, @img.width - 1, @img.height - 1
|
43
|
+
|
44
|
+
@binding = Pry.binding_for(@img)
|
45
|
+
|
46
|
+
@pry_instance = Pry.new(:commands => ImageCommands, :prompt => IMAGE_PROMPT)
|
47
|
+
end
|
48
|
+
|
49
|
+
def draw
|
50
|
+
@img.draw_rot(WIDTH / 2, HEIGHT / 2, 1, 0, 0.5, 0.5)
|
51
|
+
end
|
52
|
+
|
53
|
+
def update
|
54
|
+
exit if button_down?(Gosu::KbEscape)
|
55
|
+
|
56
|
+
# We do not want a REPL session as the loop prevents the image
|
57
|
+
# being updated; instead we do a REP session, and let the image
|
58
|
+
# update each time the user presses enter. We maintain the same
|
59
|
+
# binding object to keep locals between calls to `Pry#rep()`
|
60
|
+
@pry_instance.rep(@binding)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
puts "Welcome to ImageEdit; type `help` for a list of commands and `drawing_methods` for a list of drawing methods available."
|
65
|
+
puts "--"
|
66
|
+
puts "Example: Try typing 'circle width/2, height/2, 95, :color => :blue, :fill => true'"
|
67
|
+
puts "If you want to save your image, type: save(\"img.png\")"
|
68
|
+
|
69
|
+
w = WinClass.new
|
70
|
+
w.show
|
71
|
+
|