pry-macro 0.0.1 → 0.0.2
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/.rspec +2 -0
- data/.travis.yml +1 -0
- data/Guardfile +24 -0
- data/README.md +60 -11
- data/Rakefile +5 -0
- data/lib/pry-macro.rb +46 -14
- data/lib/pry-macro/version.rb +1 -1
- data/pry-macro.gemspec +5 -1
- data/spec/pry-macro_spec.rb +82 -0
- data/spec/spec_helper.rb +8 -0
- metadata +53 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 177ddefdcbd1a0559fb3a4c515100cc9efd693ca
|
4
|
+
data.tar.gz: eaa0cf476554da956516491d56529022f06430ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 071baa80cd6584b7b346038ec4fde4edbcfa2487e0325d9f09128d396cf7a76f6e156d7a1f95098f7f6b3cc9717931338adb1d8cc3107ea51904580119b796f8
|
7
|
+
data.tar.gz: 36e363f4bd719d7db88673a6f3281f3a48abba35e25fb4ca80a44aa3a9f130c5b4ceaf366689556023c31b2cf9f12fc02783e180300c0b297ed0ea68e7f33b6f
|
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
language: ruby
|
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
|
9
|
+
# Rails example
|
10
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
+
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
+
watch('config/routes.rb') { "spec/routing" }
|
15
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
16
|
+
|
17
|
+
# Capybara features specs
|
18
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
19
|
+
|
20
|
+
# Turnip features and steps
|
21
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
22
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
23
|
+
end
|
24
|
+
|
data/README.md
CHANGED
@@ -5,7 +5,63 @@ Record command line actions for replaying.
|
|
5
5
|
## How is this different from play and history?
|
6
6
|
|
7
7
|
You can dynamically make your own command sets and have them saved for
|
8
|
-
later.
|
8
|
+
later, as well as use pry commands.
|
9
|
+
|
10
|
+
## Basic Usage
|
11
|
+
|
12
|
+
Start recording:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
[1] pry(main)> record
|
16
|
+
[2] pry(main)> 1
|
17
|
+
=> 1
|
18
|
+
[3] pry(main)> 'foo'
|
19
|
+
=> "foo"
|
20
|
+
[4] pry(main)> ls
|
21
|
+
self.methods: inspect to_s
|
22
|
+
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_
|
23
|
+
```
|
24
|
+
|
25
|
+
Stop the recording and name it:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
[5] pry(main)> stop
|
29
|
+
Macro Name: testing
|
30
|
+
```
|
31
|
+
|
32
|
+
Run it like any other command:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
[6] pry(main)> testing
|
36
|
+
=> 1
|
37
|
+
=> "foo"
|
38
|
+
self.methods: inspect to_s
|
39
|
+
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_
|
40
|
+
```
|
41
|
+
|
42
|
+
Like it? You can save it and have it automatically append to your PryRC:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
[10] pry(main)> save-macro testing
|
46
|
+
```
|
47
|
+
|
48
|
+
...and here it is, nice and formatted:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
Pry::Commands.block_command 'testing', 'no description' do
|
52
|
+
_pry_.input = StringIO.new(
|
53
|
+
<<-MACRO.gsub(/^ {4,6}/, '')
|
54
|
+
1
|
55
|
+
'foo'
|
56
|
+
ls
|
57
|
+
MACRO
|
58
|
+
)
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
## More Advanced Usage
|
63
|
+
|
64
|
+
We're working on getting the Wiki up to date to cover more advanced usage.
|
9
65
|
|
10
66
|
## Why?
|
11
67
|
|
@@ -20,13 +76,9 @@ later.
|
|
20
76
|
The possibilities here are endless. Make your own command sets as you
|
21
77
|
REPL along from what you've already written.
|
22
78
|
|
23
|
-
##
|
24
|
-
|
25
|
-
Want to "live code" for a presentation? Set it on auto-pilot and let it
|
26
|
-
code itself. Define a keystroke to "type" the next command and watch it
|
27
|
-
go.
|
79
|
+
## To do
|
28
80
|
|
29
|
-
|
81
|
+
Next step is finding out how to properly test Pry and getting RSPEC written up for this.
|
30
82
|
|
31
83
|
## Installation
|
32
84
|
|
@@ -42,13 +94,10 @@ Or install it yourself as:
|
|
42
94
|
|
43
95
|
$ gem install pry-macro
|
44
96
|
|
45
|
-
## Usage
|
46
|
-
|
47
|
-
TODO: Write usage instructions here
|
48
97
|
|
49
98
|
## Contributing
|
50
99
|
|
51
|
-
1. Fork it ( http://github.com
|
100
|
+
1. Fork it ( http://github.com/baweaver/pry-macro/fork )
|
52
101
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
53
102
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
54
103
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
data/lib/pry-macro.rb
CHANGED
@@ -7,6 +7,12 @@ module PryMacro
|
|
7
7
|
|
8
8
|
Commands = Pry::CommandSet.new do
|
9
9
|
create_command 'record', 'Starts a recording session' do
|
10
|
+
banner <<-BANNER
|
11
|
+
Usage: record
|
12
|
+
|
13
|
+
Starts recording a macro.
|
14
|
+
BANNER
|
15
|
+
|
10
16
|
def process
|
11
17
|
# Define a few extra ivars on the current pry session so we can persist some state to use
|
12
18
|
unless _pry_.instance_variable_defined?(:@record_stack)
|
@@ -21,6 +27,14 @@ module PryMacro
|
|
21
27
|
end
|
22
28
|
|
23
29
|
create_command 'stop', 'Stops a recording session, and saves a macro' do
|
30
|
+
banner <<-BANNER
|
31
|
+
Usage: stop [-n name] [-d desc]
|
32
|
+
|
33
|
+
Stops recording a macro, loads the command, and caches it for later saving if
|
34
|
+
desired. If no name is provided, user will be prompted for one. Descriptions
|
35
|
+
may be provided, but will default to 'no description'
|
36
|
+
BANNER
|
37
|
+
|
24
38
|
def setup
|
25
39
|
if !_pry_.instance_variable_defined?(:@record_stack) && _pry_.record_stack.empty?
|
26
40
|
raise 'Cannot stop recording when no recorder is running'
|
@@ -35,12 +49,21 @@ module PryMacro
|
|
35
49
|
.to_a
|
36
50
|
.last(session_end - session_begin - 1)
|
37
51
|
.reduce(StringIO.new) { |io, item| io.puts(item); io }
|
52
|
+
end
|
38
53
|
|
39
|
-
|
40
|
-
|
54
|
+
def options(opts)
|
55
|
+
opts.on :n, :name, "Name to use to define the macro",
|
56
|
+
optional_argument: true, as: String
|
57
|
+
opts.on :d, :desc, "Description of the macro",
|
58
|
+
optional_argument: true, as: String
|
59
|
+
opts.on :v, :verbose, "Echoes back the macro definition"
|
41
60
|
end
|
42
61
|
|
43
62
|
def process
|
63
|
+
# Have to have a name to execute this later
|
64
|
+
name = opts[:n] || ask('Macro Name: ')
|
65
|
+
desc = opts[:d] || 'no description'
|
66
|
+
|
44
67
|
history_lines = @history.string.lines.map { |s| " #{s}"}.join.chomp.tap { |h|
|
45
68
|
h.sub!(/^ {6}/,'') # First line won't need the spacing
|
46
69
|
}
|
@@ -48,7 +71,7 @@ module PryMacro
|
|
48
71
|
# Save the command into a string, and make it look decent
|
49
72
|
# Tinge of a heredocs hack
|
50
73
|
command_string = <<-COMMAND_STRING.gsub(/^ {10}/, '')
|
51
|
-
Pry::Commands.block_command '#{
|
74
|
+
Pry::Commands.block_command '#{name}', '#{desc}' do
|
52
75
|
_pry_.input = StringIO.new(
|
53
76
|
<<-MACRO.gsub(/^ {4,6}/, '')
|
54
77
|
#{history_lines}
|
@@ -57,7 +80,7 @@ module PryMacro
|
|
57
80
|
end
|
58
81
|
COMMAND_STRING
|
59
82
|
|
60
|
-
puts command_string
|
83
|
+
puts command_string if opts[:v]
|
61
84
|
|
62
85
|
# ...so that we can save the contents for saving later (optional)
|
63
86
|
_pry_.macro_strings << MacroString.new(@name, command_string)
|
@@ -66,22 +89,31 @@ module PryMacro
|
|
66
89
|
end
|
67
90
|
end
|
68
91
|
|
69
|
-
create_command '
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
92
|
+
create_command 'save-macro', 'Saves a named macro to your .pryrc file on the tail end' do
|
93
|
+
banner <<-BANNER
|
94
|
+
Usage: save-macro [-p path]
|
95
|
+
|
96
|
+
Saves a cached macro to your ~/.pryrc or the path specified.
|
97
|
+
BANNER
|
98
|
+
|
99
|
+
def options(opts)
|
100
|
+
opts.on :p, :path, "Pathname to save macro in",
|
101
|
+
optional_argument: true, as: String
|
75
102
|
end
|
76
103
|
|
77
104
|
def process
|
78
105
|
raise 'No Macros are defined!' unless _pry_.instance_variable_defined?(:@macro_strings)
|
79
|
-
|
80
|
-
|
81
|
-
|
106
|
+
raise 'Invalid path!' if opts[:p] && !Dir[opts[:p]]
|
107
|
+
raise 'Must specify the macro to save!' if args.empty?
|
108
|
+
|
109
|
+
path = opts[:p] || Dir.home
|
110
|
+
macro = _pry_.macro_strings.find(
|
111
|
+
# If nothing is found, raise the error
|
112
|
+
-> { raise "Command #{args.first} not found!" }
|
113
|
+
) { |m| m.name == args.first }
|
82
114
|
|
83
115
|
# Append the Pryrc with the macro, leaving blank lines
|
84
|
-
File.open(File.join(
|
116
|
+
File.open(File.join(path, '.pryrc'), 'a') { |f| f.puts '', macro.command, '' }
|
85
117
|
end
|
86
118
|
end
|
87
119
|
end
|
data/lib/pry-macro/version.rb
CHANGED
data/pry-macro.gemspec
CHANGED
@@ -9,7 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Brandon Weaver"]
|
10
10
|
spec.email = ["keystonelemur@gmail.com"]
|
11
11
|
spec.summary = %q{Macros for Pry}
|
12
|
-
spec.
|
12
|
+
spec.description = %q{Macro Recording and Saving functionality for pry}
|
13
|
+
spec.homepage = "https://github.com/baweaver/pry-macro"
|
13
14
|
spec.license = "MIT"
|
14
15
|
|
15
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -19,6 +20,9 @@ Gem::Specification.new do |spec|
|
|
19
20
|
|
20
21
|
spec.add_development_dependency "bundler", "~> 1.5"
|
21
22
|
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "guard"
|
25
|
+
spec.add_development_dependency "guard-rspec"
|
22
26
|
|
23
27
|
spec.add_runtime_dependency "pry"
|
24
28
|
spec.add_runtime_dependency "pry-plus"
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# require 'spec_helper'
|
2
|
+
|
3
|
+
# Need to find a more effective way to spec this all out. There are some nuances I haven't quite
|
4
|
+
# grasped in mocking out pry commands. As soon as I can figure out the last few bits this will
|
5
|
+
# get built on Travis and put under a bit more process.
|
6
|
+
|
7
|
+
# describe 'PryMacro' do
|
8
|
+
# before :all do
|
9
|
+
# @str_output = StringIO.new
|
10
|
+
|
11
|
+
# @t = pry_tester do
|
12
|
+
# def insert_nil_input
|
13
|
+
# @pry.update_input_history(nil)
|
14
|
+
# end
|
15
|
+
|
16
|
+
# def last_exception=(e)
|
17
|
+
# @pry.last_exception = e
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# _pry_.stub(
|
22
|
+
# input: @t.pry.input
|
23
|
+
# )
|
24
|
+
|
25
|
+
# @t.eval 'record'
|
26
|
+
# @t.pry.input = StringIO.new('1')
|
27
|
+
# binding.pry
|
28
|
+
# @t.eval 'stop -n test_macro'
|
29
|
+
# end
|
30
|
+
|
31
|
+
# describe '#record' do
|
32
|
+
# it 'sets instance variables on @t.pry' do
|
33
|
+
# expect(@t.pry.instance_variable_defined?(:@record_stack)).to be_true
|
34
|
+
# expect(@t.pry.instance_variable_defined?(:@macro_strings)).to be_true
|
35
|
+
# end
|
36
|
+
# end
|
37
|
+
|
38
|
+
# describe '#stop' do
|
39
|
+
# context 'Record stack is empty' do
|
40
|
+
# before { @t.pry.stub(record_stack: []) }
|
41
|
+
|
42
|
+
# it 'raises an error' do
|
43
|
+
# expect { @t.eval 'stop' }.to raise_error()
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
|
47
|
+
# context 'Record stack present' do
|
48
|
+
# it 'pops the start from the record stack' do
|
49
|
+
# expect(@t.pry.record_stack.empty?).to be_true
|
50
|
+
# end
|
51
|
+
|
52
|
+
# it 'creates a the macro' do
|
53
|
+
# expect(@t.eval 'test_macro').to be(1)
|
54
|
+
# end
|
55
|
+
|
56
|
+
# it 'caches the macro in @macro_strings' do
|
57
|
+
# expect(@t.pry.macro_strings.first.name).to be ('test_macro')
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
# end
|
61
|
+
|
62
|
+
# describe '#save-macro' do
|
63
|
+
# context 'No Macros are defined' do
|
64
|
+
# before { @t.pry.stub(macro_strings: [])}
|
65
|
+
|
66
|
+
# it 'raises an error' do
|
67
|
+
# expect { @t.eval 'save' }.to raise_error()
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
|
71
|
+
# context 'Macros are defined' do
|
72
|
+
# it 'saves the macro to .pryrc' do
|
73
|
+
# fake_file = StringIO.new
|
74
|
+
# File.stub(puts: fake_file)
|
75
|
+
|
76
|
+
# @t.eval 'save'
|
77
|
+
|
78
|
+
# expect(fake_file.string).to_not be_empty
|
79
|
+
# end
|
80
|
+
# end
|
81
|
+
# end
|
82
|
+
# end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-macro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Weaver
|
@@ -38,6 +38,48 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
41
83
|
- !ruby/object:Gem::Dependency
|
42
84
|
name: pry
|
43
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +122,7 @@ dependencies:
|
|
80
122
|
- - '>='
|
81
123
|
- !ruby/object:Gem::Version
|
82
124
|
version: '0'
|
83
|
-
description:
|
125
|
+
description: Macro Recording and Saving functionality for pry
|
84
126
|
email:
|
85
127
|
- keystonelemur@gmail.com
|
86
128
|
executables: []
|
@@ -88,14 +130,19 @@ extensions: []
|
|
88
130
|
extra_rdoc_files: []
|
89
131
|
files:
|
90
132
|
- .gitignore
|
133
|
+
- .rspec
|
134
|
+
- .travis.yml
|
91
135
|
- Gemfile
|
136
|
+
- Guardfile
|
92
137
|
- LICENSE.txt
|
93
138
|
- README.md
|
94
139
|
- Rakefile
|
95
140
|
- lib/pry-macro.rb
|
96
141
|
- lib/pry-macro/version.rb
|
97
142
|
- pry-macro.gemspec
|
98
|
-
|
143
|
+
- spec/pry-macro_spec.rb
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
homepage: https://github.com/baweaver/pry-macro
|
99
146
|
licenses:
|
100
147
|
- MIT
|
101
148
|
metadata: {}
|
@@ -119,5 +166,7 @@ rubygems_version: 2.2.1
|
|
119
166
|
signing_key:
|
120
167
|
specification_version: 4
|
121
168
|
summary: Macros for Pry
|
122
|
-
test_files:
|
169
|
+
test_files:
|
170
|
+
- spec/pry-macro_spec.rb
|
171
|
+
- spec/spec_helper.rb
|
123
172
|
has_rdoc:
|