pry-command-set-registry 0.1.1 → 0.1.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/.travis.yml +11 -0
- data/Gemfile +2 -0
- data/README.md +184 -6
- data/lib/pry_command_set_registry/command_set.rb +27 -0
- data/lib/pry_command_set_registry/version.rb +1 -1
- data/test/test_helper.rb +8 -0
- data/test/unit/command_set_test.rb +41 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d66c39fac051c68eb25c6b359e765cdb9e1911ed
|
4
|
+
data.tar.gz: becc29a1efe602bcd26bdc0f915263183f5266d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f8c0108a095b1d2ed833dbd1489336534f52e1880967cad7f6d711458b3d1da15c09eee34e04172d02605185bf9cdbb967102a82a0fffc97db3fc6f11f6ff9c
|
7
|
+
data.tar.gz: 66ac3d4fa32f2a9eb37129922faaf97a810b7ad555ccfb165dd2151272033624eb0c9931d32329f7f345684cbbe3183bd19b3ce33658aeb4c3ee22d46510be24
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,29 +1,207 @@
|
|
1
1
|
# PryCommandSetRegistry
|
2
|
+
[](http://badge.fury.io/rb/pry-command-set-registry)
|
3
|
+
[](http://www.rubydoc.info/gems/pry-command-set-registry)
|
4
|
+
[](https://travis-ci.org/tdg5/pry-command-set-registry)
|
5
|
+
[](https://coveralls.io/r/tdg5/pry-command-set-registry)
|
6
|
+
[](https://codeclimate.com/github/tdg5/pry-command-set-registry)
|
7
|
+
[](https://gemnasium.com/tdg5/pry-command-set-registry)
|
2
8
|
|
3
|
-
Plugin
|
9
|
+
Plugin facilitating easy definition and importation of command sets for
|
10
|
+
[Pry](https://github.com/pry/pry). Creates a central registry for command sets
|
4
11
|
|
5
12
|
## Installation
|
6
13
|
|
7
14
|
Add this line to your application's Gemfile:
|
8
15
|
|
9
|
-
|
16
|
+
```bash
|
17
|
+
gem 'pry-command-set-registry'
|
18
|
+
```
|
10
19
|
|
11
20
|
And then execute:
|
12
21
|
|
13
|
-
|
22
|
+
```bash
|
23
|
+
$ bundle
|
24
|
+
```
|
14
25
|
|
15
26
|
Or install it yourself as:
|
16
27
|
|
17
|
-
|
28
|
+
```bash
|
29
|
+
$ gem install pry-command-set-registry
|
30
|
+
```
|
18
31
|
|
19
32
|
## Usage
|
20
33
|
|
21
|
-
|
34
|
+
`Pry` should handle loading the plugin automatically. If not, you can require the
|
35
|
+
plugin like so:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
require "pry-command-set-registry"
|
39
|
+
```
|
40
|
+
|
41
|
+
### Commands and Command Set Definition
|
42
|
+
|
43
|
+
Once the plugin has been loaded you can view the commands it adds to `pry` using
|
44
|
+
the `help` command in `pry`:
|
45
|
+
|
46
|
+
```
|
47
|
+
$ pry
|
48
|
+
[1] pry(main)> help
|
49
|
+
# ... Skipping unrelated commands ...
|
50
|
+
|
51
|
+
Command set registry
|
52
|
+
import-set Import a pry command set
|
53
|
+
list-sets List registered command sets
|
54
|
+
|
55
|
+
[2] pry(main)>
|
56
|
+
```
|
57
|
+
|
58
|
+
The `import-set` and `list-sets` commands are the primary means of interacting
|
59
|
+
with the command set registry in `Pry`.
|
60
|
+
|
61
|
+
#### The `list-sets` command
|
62
|
+
|
63
|
+
The `list-sets` command displays a list of all registered command sets. Unless
|
64
|
+
you define your own command sets or include another library or plugin that
|
65
|
+
registers a command set, this list will be empty initially:
|
66
|
+
|
67
|
+
```
|
68
|
+
[2] pry(main)> list-sets
|
69
|
+
Registered Command Sets:
|
70
|
+
|
71
|
+
[3] pry(main)>
|
72
|
+
```
|
73
|
+
|
74
|
+
#### Defining a command set
|
75
|
+
|
76
|
+
Defining and registering a command set can be accomplished via the
|
77
|
+
`PryCommandSetRegistry` constant. In particular,
|
78
|
+
[`PryCommandSetRegistry.define_command_set`](http://www.rubydoc.info/gems/pry-command-set-registry/PryCommandSetRegistry.define_command_set)
|
79
|
+
provides a thin wrapper around [`Pry::CommandSet#block_command`](http://www.rubydoc.info/github/pry/pry/Pry/CommandSet:block_command)
|
80
|
+
allowing for the definition of new command sets.
|
81
|
+
|
82
|
+
Consider the following command set definition complimenting [Pry's poetic
|
83
|
+
side](https://github.com/pry/pry/blob/5e8d69e8b38b5df4c520e5faff74533c16f531a0/lib/pry/commands/easter_eggs.rb#L41)
|
84
|
+
with something a little more punk rock:
|
22
85
|
|
23
86
|
```ruby
|
24
|
-
|
87
|
+
PryCommandSetRegistry.define_command_set("PunkRock", "Pry, but more punk rock", :group => "PunkRock") do
|
88
|
+
london_calling = <<-LONDON_CALLING
|
89
|
+
--
|
90
|
+
London calling to the faraway towns
|
91
|
+
Now war is declared and battle come down
|
92
|
+
|
93
|
+
London calling to the underworld
|
94
|
+
Come out of the cupboard, you boys and girls
|
95
|
+
|
96
|
+
London calling, now don't look to us
|
97
|
+
Phony Beatlemania has bitten the dust
|
98
|
+
|
99
|
+
London calling, see we ain't got no swing
|
100
|
+
'Cept for the ring of that truncheon thing
|
101
|
+
|
102
|
+
The ice age is coming, the sun is zooming in
|
103
|
+
Meltdown expected, the wheat is growin' thin
|
104
|
+
Engines stop running, but I have no fear
|
105
|
+
'Cause London is drowning, and I, I live by the river
|
106
|
+
|
107
|
+
-- The Clash
|
108
|
+
LONDON_CALLING
|
109
|
+
command("london-calling", "If you have to ask then you need more help than Pry can provide") do
|
110
|
+
output.puts(london_calling)
|
111
|
+
end
|
112
|
+
end
|
25
113
|
```
|
26
114
|
|
115
|
+
If we copy and paste the above into `Pry`, we'll have defined and registered our
|
116
|
+
first command set! Once a command set has been registered, it will appear when
|
117
|
+
the `list-sets` command is invoked:
|
118
|
+
|
119
|
+
```
|
120
|
+
[4] pry(main)> list-sets
|
121
|
+
Registered Command Sets:
|
122
|
+
PunkRock - Pry, but more punk rock
|
123
|
+
|
124
|
+
[5] pry(main)>
|
125
|
+
```
|
126
|
+
|
127
|
+
#### The `import-set` command
|
128
|
+
|
129
|
+
To import a registered command set into the current `Pry` session, use the
|
130
|
+
`import-set` command. The `import-set` command is a [built-in `Pry` command](https://github.com/pry/pry/blob/5e8d69e8b38b5df4c520e5faff74533c16f531a0/lib/pry/commands/import_set.rb),
|
131
|
+
but it's worth noting that `PryCommandSetRegistry` overrides the default command
|
132
|
+
to include fallback behavior for retrieving command sets from the registry
|
133
|
+
[[source]](https://github.com/tdg5/pry-command-set-registry/blob/4f9914969dcfa4a826c9672bd152e12d2e7e37f6/lib/pry_command_set_registry/commands.rb#L7).
|
134
|
+
This extended behavior allows command sets to be included in a variety of
|
135
|
+
formats. For example, each of the following will all import the `PunkRock`
|
136
|
+
command set into the current `Pry` session:
|
137
|
+
|
138
|
+
```
|
139
|
+
[5] pry(main)> import-set PunkRock
|
140
|
+
[6] pry(main)> import-set "PunkRock"
|
141
|
+
[7] pry(main)> import-set :PunkRock
|
142
|
+
```
|
143
|
+
|
144
|
+
Even when a constant is defined with the same name as a command set, a constant
|
145
|
+
style name can still be used. This is possible because `PryCommandSetRegistry`
|
146
|
+
uses a registry that is separate from Ruby's constants. At lookup time if
|
147
|
+
`PryCommandSetRegistry` evaluates the given name as a constant, but that constant
|
148
|
+
doesn't look like a command set, it will fallback to checking the registry for a
|
149
|
+
command set with the same name. For example, ignoring the fact that we've already
|
150
|
+
imported the `PunkRock` command set three times, the following would still work
|
151
|
+
as expected:
|
152
|
+
|
153
|
+
```
|
154
|
+
[8] pry(main)> PunkRock = "Never Mind the Bollocks"
|
155
|
+
[9] pry(main)> import-set PunkRock
|
156
|
+
```
|
157
|
+
|
158
|
+
Now that we've imported the `PunkRock` command set, the commands it provides
|
159
|
+
will appear when the `help` command is invoked:
|
160
|
+
|
161
|
+
```
|
162
|
+
[10] pry(main)> help
|
163
|
+
# ... Skipping unrelated commands ...
|
164
|
+
PunkRock
|
165
|
+
london-calling If you have to ask then you need more help than Pry can provide
|
166
|
+
|
167
|
+
[11] pry(main)>
|
168
|
+
```
|
169
|
+
|
170
|
+
Finally, we can invoke the added command by name:
|
171
|
+
|
172
|
+
```
|
173
|
+
[11] pry(main)> london-calling
|
174
|
+
--
|
175
|
+
London calling to the faraway towns
|
176
|
+
Now war is declared and battle come down
|
177
|
+
|
178
|
+
London calling to the underworld
|
179
|
+
Come out of the cupboard, you boys and girls
|
180
|
+
|
181
|
+
London calling, now don't look to us
|
182
|
+
Phony Beatlemania has bitten the dust
|
183
|
+
|
184
|
+
London calling, see we ain't got no swing
|
185
|
+
'Cept for the ring of that truncheon thing
|
186
|
+
|
187
|
+
The ice age is coming, the sun is zooming in
|
188
|
+
Meltdown expected, the wheat is growin' thin
|
189
|
+
Engines stop running, but I have no fear
|
190
|
+
'Cause London is drowning, and I, I live by the river
|
191
|
+
|
192
|
+
-- The Clash
|
193
|
+
|
194
|
+
[12] pry(main)>
|
195
|
+
```
|
196
|
+
|
197
|
+
### Pry on, dude!
|
198
|
+
|
199
|
+
That's about it for basic usage of `PryCommandSetRegistry`. Make sure to check
|
200
|
+
out the [`PryCommandSetRegistry` docs](http://www.rubydoc.info/gems/pry-command-set-registry)
|
201
|
+
for more in-depth coverage of the inner workings of `PryCommandSetRegistry`.
|
202
|
+
Also make sure to check out the excellent [page on custom commands in the
|
203
|
+
`Pry` wiki](https://github.com/pry/pry/wiki/Custom-commands)!
|
204
|
+
|
27
205
|
## Contributing
|
28
206
|
|
29
207
|
1. Fork it ( https://github.com/tdg5/pry-command-set-registry/fork )
|
@@ -45,6 +45,33 @@ module PryCommandSetRegistry
|
|
45
45
|
apply_group_name_to_commands
|
46
46
|
end
|
47
47
|
|
48
|
+
# @overload extend(*modules)
|
49
|
+
# Adds the instance methods from each module given as a parameter to the
|
50
|
+
# command set. If both a block and modules are provided an ArgumentError
|
51
|
+
# will be raised.
|
52
|
+
# @param [Module] *modules One or more modules to extend the command set
|
53
|
+
# with.
|
54
|
+
# @return [PryCommandSetRegistry::CommandSet] Returns the command set
|
55
|
+
# object.
|
56
|
+
# @raise [ArgumentError] if called with modules and block or called with
|
57
|
+
# neither modules nor block.
|
58
|
+
# @overload extend
|
59
|
+
# Evaluates the block in the context of the command set instance. If both
|
60
|
+
# a block and arguments are provided an ArgumentError will be raised.
|
61
|
+
# @yield [] The given block is evaluated on the command set instance.
|
62
|
+
# @return [PryCommandSetRegistry::CommandSet] Returns the command set
|
63
|
+
# object.
|
64
|
+
# @raise [ArgumentError] if called with modules and block or called with
|
65
|
+
# neither modules nor block.
|
66
|
+
def extend(*modules)
|
67
|
+
if modules.any?
|
68
|
+
return super unless block_given?
|
69
|
+
raise ArgumentError, "Cannot call extend with block and modules!"
|
70
|
+
end
|
71
|
+
instance_eval(&Proc.new)
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
48
75
|
private
|
49
76
|
|
50
77
|
# If a group name was provided, adds that group to all commands in the
|
data/test/test_helper.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
if ENV["CI"]
|
2
|
+
require "simplecov"
|
3
|
+
require "coveralls"
|
4
|
+
Coveralls.wear!
|
5
|
+
SimpleCov.formatter = Coveralls::SimpleCov::Formatter
|
6
|
+
SimpleCov.root(File.expand_path("../..", __FILE__))
|
7
|
+
end
|
8
|
+
|
1
9
|
require "minitest/autorun"
|
2
10
|
require "mocha/setup"
|
3
11
|
require "pry_command_set_registry"
|
@@ -40,6 +40,47 @@ class CommandSetTest < PryCommandSetRegistry::TestCase
|
|
40
40
|
assert_equal group, instance.each.first.last.group
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
context "#extend" do
|
45
|
+
subject { @subject }
|
46
|
+
|
47
|
+
setup do
|
48
|
+
@name = "Foo"
|
49
|
+
description = "Bar"
|
50
|
+
@subject = Subject.new(@name, description, &default_command_set_proc)
|
51
|
+
end
|
52
|
+
|
53
|
+
should "raise ArgumentError if neither arguments nor block are given" do
|
54
|
+
assert_raises(ArgumentError) { subject.extend }
|
55
|
+
end
|
56
|
+
|
57
|
+
should "raise ArgumentError if arguments and block are given" do
|
58
|
+
block_called = false
|
59
|
+
block = lambda { block_called = true }
|
60
|
+
dummy = Module.new
|
61
|
+
subject.expects(:instance_eval).never
|
62
|
+
assert_raises(ArgumentError) do
|
63
|
+
subject.extend(dummy, &block)
|
64
|
+
end
|
65
|
+
refute_kind_of(dummy, subject)
|
66
|
+
refute(block_called, "Expected block given to extend with arguments not to be called!")
|
67
|
+
end
|
68
|
+
|
69
|
+
should "yield to super if any arguments are given and no block given" do
|
70
|
+
dummy = Module.new
|
71
|
+
subject.expects(:instance_eval).never
|
72
|
+
result = subject.extend(dummy)
|
73
|
+
assert_kind_of(dummy, subject)
|
74
|
+
assert_equal subject, result
|
75
|
+
end
|
76
|
+
|
77
|
+
should "execute the block in the context of the command set if no arguments are given" do
|
78
|
+
receiver_in_block = nil
|
79
|
+
result = subject.extend { receiver_in_block = self }
|
80
|
+
assert_equal subject, receiver_in_block
|
81
|
+
assert_equal subject, result
|
82
|
+
end
|
83
|
+
end
|
43
84
|
end
|
44
85
|
|
45
86
|
# Proc is called with instance eval, so closure must be used to allow
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-command-set-registry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Guinther
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
63
64
|
- Gemfile
|
64
65
|
- Guardfile
|
65
66
|
- LICENSE
|