playwright-cli 0.1.15 → 0.1.16
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/Gemfile.lock +1 -1
- data/README.md +115 -83
- data/lib/ext/hanami/option.rb +11 -0
- data/lib/ext/hanami/parser.rb +42 -0
- data/lib/ext/hanami.rb +2 -0
- data/lib/playwright/cli/version.rb +1 -1
- data/lib/playwright/cli.rb +2 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 368e6d76fcbddcc447c51c1aa01f2b026db700402fcc1bfa548a18968e1ffa35
|
4
|
+
data.tar.gz: 49222ff68b9e74a729f4e2992407b2c9eba996345b1e9649a064c4d456985c39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbb18e3e1632c70d251650d6c5c0c7f159b457948537824fef5af96908b0f64ab77056c361fb54408c81e98203db5bdda9aaa4c850b519b06849019d50b5e5cf
|
7
|
+
data.tar.gz: 4dfaa28467dfdd1f5e0a82ec6494c899e79ae22a50d58f33dcbb0e803aa67a1e1ff36694189c3e70ba3736295866f45abc3704372c15d0f2adc4abccaa25138e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -5,11 +5,30 @@ Ruby command line applications. It's first goal is to provide a solid generator
|
|
5
5
|
for building command line apps in Ruby. It's built on top of [Hanami::CLI](https://github.com/hanami/cli),
|
6
6
|
so all of their documentation applies here as well.
|
7
7
|
|
8
|
+
## Table of Contents
|
9
|
+
|
10
|
+
- [Installation](#installation)
|
11
|
+
- [Usage](#usage)
|
12
|
+
- [Check The Version](#check-the-version)
|
13
|
+
- [Create An App](#create-an-app)
|
14
|
+
- [Helpers](#helpers)
|
15
|
+
- [Display](#display)
|
16
|
+
- [Ask](#ask)
|
17
|
+
- [OS](#os)
|
18
|
+
- [Arguments & Options](#arguments--options)
|
19
|
+
- [Validations](#validations)
|
20
|
+
- [Edit An App](#edit-an-app)
|
21
|
+
- [List Apps](#list-apps)
|
22
|
+
- [Delete An App](#delete-an-app)
|
23
|
+
- [Contributing](#contributing)
|
24
|
+
- [License](#license)
|
25
|
+
|
8
26
|
## Installation
|
9
27
|
|
10
28
|
Install this gem with:
|
11
|
-
|
29
|
+
```shell
|
12
30
|
$ gem install playwright-cli
|
31
|
+
```
|
13
32
|
|
14
33
|
## Usage
|
15
34
|
|
@@ -17,7 +36,7 @@ Install this gem with:
|
|
17
36
|
|
18
37
|
To check the version:
|
19
38
|
```shell
|
20
|
-
$ playwright -v #=> 0.1.
|
39
|
+
$ playwright -v #=> 0.1.16
|
21
40
|
```
|
22
41
|
|
23
42
|
### Create An App
|
@@ -32,46 +51,46 @@ you should replace. The `#call` method is what is ultimately run.
|
|
32
51
|
It will look something like this:
|
33
52
|
|
34
53
|
```ruby
|
35
|
-
#!/usr/bin/env ruby
|
54
|
+
#!/usr/bin/env ruby
|
36
55
|
|
37
|
-
require 'bundler/inline'
|
38
|
-
gemfile do
|
39
|
-
|
40
|
-
|
41
|
-
end
|
56
|
+
require 'bundler/inline'
|
57
|
+
gemfile do
|
58
|
+
source 'https://rubygems.org'
|
59
|
+
gem 'playwright-cli', require: 'playwright/cli'
|
60
|
+
end
|
42
61
|
|
43
|
-
module MyScript
|
44
|
-
|
45
|
-
|
46
|
-
|
62
|
+
module MyScript
|
63
|
+
module CLI
|
64
|
+
module Commands
|
65
|
+
extend Playwright::CLI::Registry
|
47
66
|
|
48
|
-
|
49
|
-
|
67
|
+
class Root < Playwright::CLI::Command
|
68
|
+
desc "Says a greeting to the name given. This is an example."
|
50
69
|
|
51
|
-
|
70
|
+
argument :name, required: true, desc: 'Whom shall I greet?'
|
52
71
|
|
53
|
-
|
54
|
-
|
55
|
-
|
72
|
+
example [
|
73
|
+
"\"Johnny Boy\" #=> Why, hello Johnny Boy!"
|
74
|
+
]
|
56
75
|
|
57
|
-
|
58
|
-
|
59
|
-
|
76
|
+
def call(name:, **)
|
77
|
+
display.print "Why, hello #{name}!"
|
78
|
+
end
|
60
79
|
|
61
|
-
|
80
|
+
end
|
62
81
|
|
63
|
-
|
82
|
+
register_root Root
|
64
83
|
|
84
|
+
end
|
65
85
|
end
|
66
86
|
end
|
67
|
-
end
|
68
87
|
|
69
|
-
Playwright::CLI.new(MyScript::CLI::Commands).call
|
88
|
+
Playwright::CLI.new(MyScript::CLI::Commands).call
|
70
89
|
|
71
90
|
```
|
72
91
|
|
73
92
|
```shell
|
74
|
-
$ my-script tom #=> Why, hello tom!
|
93
|
+
$ my-script tom #=> Why, hello tom!
|
75
94
|
```
|
76
95
|
Most of this code is simply wrapping [Hanami::CLI](https://github.com/hanami/cli), so their documentation
|
77
96
|
will be the best source of information for you in handling arguments and options.
|
@@ -87,49 +106,49 @@ as in the example below.
|
|
87
106
|
Hanami::CLI is built for more intricate command line apps, so playwright allows
|
88
107
|
you to generate that as well.
|
89
108
|
```shell
|
90
|
-
$ playwright g my-script --type=expanded
|
109
|
+
$ playwright g my-script --type=expanded
|
91
110
|
```
|
92
111
|
This will give you a mostly similar main class:
|
93
112
|
|
94
113
|
```ruby
|
95
|
-
#!/usr/bin/env ruby
|
114
|
+
#!/usr/bin/env ruby
|
115
|
+
|
116
|
+
require 'bundler/inline'
|
117
|
+
gemfile do
|
118
|
+
source 'https://rubygems.org'
|
119
|
+
gem 'playwright-cli', require: 'playwright/cli'
|
120
|
+
end
|
96
121
|
|
97
|
-
|
98
|
-
gemfile do
|
99
|
-
source 'https://rubygems.org'
|
100
|
-
gem 'playwright-cli', require: 'playwright/cli'
|
101
|
-
end
|
122
|
+
require_relative 'lib/version'
|
102
123
|
|
103
|
-
|
124
|
+
module MyScript
|
125
|
+
module CLI
|
126
|
+
module Commands
|
127
|
+
extend Playwright::CLI::Registry
|
104
128
|
|
105
|
-
|
106
|
-
|
107
|
-
module Commands
|
108
|
-
extend Playwright::CLI::Registry
|
129
|
+
class Greet < Playwright::CLI::Command
|
130
|
+
desc "Says a greeting to the name given. This is an example."
|
109
131
|
|
110
|
-
|
111
|
-
desc "Says a greeting to the name given. This is an example."
|
132
|
+
argument :name, required: true, desc: 'Whom shall I greet?'
|
112
133
|
|
113
|
-
|
134
|
+
example [
|
135
|
+
"\"Johnny Boy\" #=> Why, hello Johnny Boy!"
|
136
|
+
]
|
114
137
|
|
115
|
-
|
116
|
-
|
117
|
-
|
138
|
+
def call(name:, **)
|
139
|
+
display.print "Why, hello #{name}!"
|
140
|
+
end
|
118
141
|
|
119
|
-
def call(name:, **)
|
120
|
-
puts "Why, hello #{name}!"
|
121
142
|
end
|
122
143
|
|
123
|
-
|
124
|
-
|
125
|
-
register 'greet', Greet
|
126
|
-
register 'version', Version, aliases: ['v', '-v', '--version']
|
144
|
+
register 'greet', Greet
|
145
|
+
register 'version', Version, aliases: ['v', '-v', '--version']
|
127
146
|
|
147
|
+
end
|
128
148
|
end
|
129
149
|
end
|
130
|
-
end
|
131
150
|
|
132
|
-
Playwright::CLI.new(MyScript::CLI::Commands).call
|
151
|
+
Playwright::CLI.new(MyScript::CLI::Commands).call
|
133
152
|
```
|
134
153
|
It will also give you a new file structure with an example (version) command:
|
135
154
|
```
|
@@ -146,36 +165,36 @@ with aliases.
|
|
146
165
|
|
147
166
|
Version class simply looks like this:
|
148
167
|
```ruby
|
149
|
-
module MyScript
|
150
|
-
|
168
|
+
module MyScript
|
169
|
+
module CLI
|
170
|
+
|
171
|
+
VERSION = "0.0.1"
|
151
172
|
|
152
|
-
|
173
|
+
module Commands
|
174
|
+
extend Playwright::CLI::Registry
|
153
175
|
|
154
|
-
|
155
|
-
|
176
|
+
class Version < Playwright::CLI::Command
|
177
|
+
desc "Responds with the version number."
|
156
178
|
|
157
|
-
|
158
|
-
desc "Responds with the version number."
|
179
|
+
example ["#=> #{VERSION}"]
|
159
180
|
|
160
|
-
|
181
|
+
def call(**)
|
182
|
+
display.print VERSION
|
183
|
+
end
|
161
184
|
|
162
|
-
def call(**)
|
163
|
-
puts VERSION
|
164
185
|
end
|
165
186
|
|
166
187
|
end
|
167
|
-
|
168
188
|
end
|
169
189
|
end
|
170
|
-
end
|
171
190
|
```
|
172
191
|
|
173
192
|
This is useful for command line apps that will have multiple functions. This
|
174
193
|
example would let you do:
|
175
194
|
|
176
195
|
```shell
|
177
|
-
$ my-script greet tom #=> Why, hello tom!
|
178
|
-
$ my-script version #=> 0.0.1
|
196
|
+
$ my-script greet tom #=> Why, hello tom!
|
197
|
+
$ my-script version #=> 0.0.1
|
179
198
|
```
|
180
199
|
|
181
200
|
### Helpers
|
@@ -195,11 +214,11 @@ A good example would be if you ask a user, "File already exists? Overwrite it?
|
|
195
214
|
[yn]" and they choose 'n'
|
196
215
|
|
197
216
|
```ruby
|
198
|
-
class Greet < Playwright::CLI::Command
|
199
|
-
|
200
|
-
|
217
|
+
class Greet < Playwright::CLI::Command
|
218
|
+
def call(**)
|
219
|
+
display.print "Hello!", color: :blue
|
220
|
+
end
|
201
221
|
end
|
202
|
-
end
|
203
222
|
```
|
204
223
|
|
205
224
|
#### Ask
|
@@ -209,11 +228,11 @@ The Ask helper has 3 actions, `question`, `boolean_question`, and
|
|
209
228
|
and `url_question` validate the response. `question` does not.
|
210
229
|
|
211
230
|
```ruby
|
212
|
-
class Greet < Playwright::CLI::Command
|
213
|
-
|
214
|
-
|
231
|
+
class Greet < Playwright::CLI::Command
|
232
|
+
def call(**)
|
233
|
+
ask.boolean_question "What's your name?" #=> "What's your name? [yn]"
|
234
|
+
end
|
215
235
|
end
|
216
|
-
end
|
217
236
|
```
|
218
237
|
|
219
238
|
#### OS
|
@@ -222,12 +241,25 @@ The OS helper has 2 actions, `open_url` and `open_editor`. `open_url` takes a
|
|
222
241
|
url and an optional name. `open_editor` takes a path and an optional name.
|
223
242
|
|
224
243
|
```ruby
|
225
|
-
class Greet < Playwright::CLI::Command
|
226
|
-
|
227
|
-
|
228
|
-
|
244
|
+
class Greet < Playwright::CLI::Command
|
245
|
+
def call(**)
|
246
|
+
os.open_url url: 'http://google.com', name: 'google'
|
247
|
+
os.open_editor path: Dir.pwd, name: 'working directory'
|
248
|
+
end
|
229
249
|
end
|
230
|
-
|
250
|
+
```
|
251
|
+
|
252
|
+
|
253
|
+
### Arguments & Options
|
254
|
+
|
255
|
+
#### Validations
|
256
|
+
|
257
|
+
You can add validations to your arguments and options by passing a proc or an
|
258
|
+
array of procs to your argument or option declaration. The script will throw an
|
259
|
+
error if the proc evaluates to false
|
260
|
+
|
261
|
+
```
|
262
|
+
argument :url, validations: Proc.new { |url| URL_REGEX =~ url }
|
231
263
|
```
|
232
264
|
|
233
265
|
### Edit An App
|
@@ -238,7 +270,7 @@ editor to use when opening one of your playwright scripts.
|
|
238
270
|
Use:
|
239
271
|
|
240
272
|
```shell
|
241
|
-
$ echo $EDITOR
|
273
|
+
$ echo $EDITOR
|
242
274
|
```
|
243
275
|
|
244
276
|
To see what playwright will default to. You can update this in your ~/.bashrc
|
@@ -249,7 +281,7 @@ In the future, I plan on allowing that to be a config you can set
|
|
249
281
|
To edit an app:
|
250
282
|
|
251
283
|
```shell
|
252
|
-
$ playwright edit my-script
|
284
|
+
$ playwright edit my-script
|
253
285
|
```
|
254
286
|
|
255
287
|
`e` can be used instead of `edit`.
|
@@ -259,7 +291,7 @@ $ playwright edit my-script
|
|
259
291
|
To see all Playwright apps, use:
|
260
292
|
|
261
293
|
```shell
|
262
|
-
$ playwright list
|
294
|
+
$ playwright list
|
263
295
|
```
|
264
296
|
|
265
297
|
`l`, `-l`, `--list` can be used instead of `list`.
|
@@ -269,7 +301,7 @@ $ playwright list
|
|
269
301
|
Deleting a playwright app is simply:
|
270
302
|
|
271
303
|
```shell
|
272
|
-
$ playwright destroy my-script
|
304
|
+
$ playwright destroy my-script
|
273
305
|
```
|
274
306
|
|
275
307
|
`delete` or `d` can be used instead of `destroy`
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Hanami
|
2
|
+
class CLI
|
3
|
+
module Parser
|
4
|
+
|
5
|
+
# Copied and adjusted from hanami/cli codebase to handle validations
|
6
|
+
def self.call(command, arguments, names)
|
7
|
+
|
8
|
+
command.arguments.map.with_index do |arg, idx|
|
9
|
+
arg_value = arguments[idx]
|
10
|
+
unless [*arg.validations].all? { |validation| validation.call(arg_value) }
|
11
|
+
return Result.failure "Error: Invalid argument provided: #{arg_value}" if arg_value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
parsed_options = {}
|
16
|
+
|
17
|
+
OptionParser.new do |opts|
|
18
|
+
command.options.each do |option|
|
19
|
+
opts.on(*option.parser_options) do |value|
|
20
|
+
# This conditional enforces validations
|
21
|
+
if option.validations.all? { |validation| validation.call(value) }
|
22
|
+
parsed_options[option.name.to_sym] = value
|
23
|
+
else
|
24
|
+
return Result.failure "Error: Invalid option provided: #{option.name}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on_tail("-h", "--help") do
|
30
|
+
return Result.help
|
31
|
+
end
|
32
|
+
end.parse!(arguments)
|
33
|
+
|
34
|
+
parsed_options = command.default_params.merge(parsed_options)
|
35
|
+
parse_required_params(command, arguments, names, parsed_options)
|
36
|
+
rescue ::OptionParser::ParseError
|
37
|
+
return Result.failure
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/ext/hanami.rb
ADDED
data/lib/playwright/cli.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: playwright-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Gregory
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -173,6 +173,9 @@ files:
|
|
173
173
|
- lib/assets/templates/script_readme_template.erb
|
174
174
|
- lib/assets/templates/simple_script_template.erb
|
175
175
|
- lib/assets/templates/version_subcommand_template.erb
|
176
|
+
- lib/ext/hanami.rb
|
177
|
+
- lib/ext/hanami/option.rb
|
178
|
+
- lib/ext/hanami/parser.rb
|
176
179
|
- lib/playwright/cli.rb
|
177
180
|
- lib/playwright/cli/command.rb
|
178
181
|
- lib/playwright/cli/commands.rb
|