cli 1.1.1 → 1.2.0

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/Gemfile CHANGED
@@ -3,9 +3,9 @@ source "http://rubygems.org"
3
3
  # Add dependencies to develop your gem here.
4
4
  # Include everything needed to run rake, tests, features, etc.
5
5
  group :development do
6
- gem "rspec", "~> 2.3.0"
6
+ gem "rspec", "~> 2.4"
7
7
  gem "cucumber", ">= 0"
8
- gem "bundler", "~> 1.0.0"
8
+ gem "bundler", "~> 1.2"
9
9
  gem "jeweler", "~> 1.6.4"
10
10
  gem "rcov", ">= 0"
11
11
  gem "rdoc", "~> 3.9"
data/Gemfile.lock CHANGED
@@ -21,14 +21,14 @@ GEM
21
21
  rcov (0.9.11)
22
22
  rdoc (3.11)
23
23
  json (~> 1.4)
24
- rspec (2.3.0)
25
- rspec-core (~> 2.3.0)
26
- rspec-expectations (~> 2.3.0)
27
- rspec-mocks (~> 2.3.0)
28
- rspec-core (2.3.1)
29
- rspec-expectations (2.3.0)
30
- diff-lcs (~> 1.1.2)
31
- rspec-mocks (2.3.0)
24
+ rspec (2.11.0)
25
+ rspec-core (~> 2.11.0)
26
+ rspec-expectations (~> 2.11.0)
27
+ rspec-mocks (~> 2.11.0)
28
+ rspec-core (2.11.1)
29
+ rspec-expectations (2.11.3)
30
+ diff-lcs (~> 1.1.3)
31
+ rspec-mocks (2.11.2)
32
32
  ruby-ip (0.9.0)
33
33
  term-ansicolor (1.0.7)
34
34
 
@@ -36,10 +36,10 @@ PLATFORMS
36
36
  ruby
37
37
 
38
38
  DEPENDENCIES
39
- bundler (~> 1.0.0)
39
+ bundler (~> 1.2)
40
40
  cucumber
41
41
  jeweler (~> 1.6.4)
42
42
  rcov
43
43
  rdoc (~> 3.9)
44
- rspec (~> 2.3.0)
44
+ rspec (~> 2.4)
45
45
  ruby-ip (~> 0.9)
data/README.md CHANGED
@@ -389,6 +389,7 @@ The value after casting (if used) will be available from the `#parse` or `#parse
389
389
  In addition to *switch*, option hash can have following pairs:
390
390
 
391
391
  * **:default => value** - use default value of *value* if the option was not specified on the command argument list. The *value* will firstly be casted to string (with `#to_s`) and then it will be casted if casting is specified.
392
+ * **:default_label => label** - display *label* in usage rather than default value - useful to descirbe default value if default value is generated if no value is provided
392
393
  * **:cast => cast specifier** - cast the provided value (or default) with given *cast specifier*.
393
394
  The specifier can be a class constant (like `Integer` or `Float`); the value will be provided to `#new` method of the class and resulting object used as option value. When provided constant does not respond to `#new` (i.e. it is a module) the `#load` method will be tried. If provided specifier is a Proc (or `lambda {}`) the Proc will be called with the value and resulting value will be used. Otherwise `CLI::ParsingError::CastError` will be raised.
394
395
  * **:required => true** - if used and no *default* value is specified the `#parse` method will fail with `CLI::ParsingError::MissingOptionValueError` if the option was not specified in the command argument list. If `#parse!` method was used the program will exit with appropriate message.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.2.0
data/cli.gemspec CHANGED
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{cli}
8
- s.version = "1.1.1"
7
+ s.name = "cli"
8
+ s.version = "1.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jakub Pastuszek"]
12
- s.date = %q{2012-02-01}
13
- s.description = %q{Command Line Interface gem allows you to quickly specify command argument parser that will automatically generate usage, handle stdin, switches, options and arguments with default values and value casting}
14
- s.email = %q{jpastuszek@gmail.com}
12
+ s.date = "2012-11-11"
13
+ s.description = "Command Line Interface gem allows you to quickly specify command argument parser that will automatically generate usage, handle stdin, switches, options and arguments with default values and value casting"
14
+ s.email = "jpastuszek@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.md"
@@ -48,37 +48,36 @@ Gem::Specification.new do |s|
48
48
  "spec/switch_spec.rb",
49
49
  "spec/usage_spec.rb"
50
50
  ]
51
- s.homepage = %q{http://github.com/jpastuszek/cli}
51
+ s.homepage = "http://github.com/jpastuszek/cli"
52
52
  s.licenses = ["MIT"]
53
53
  s.require_paths = ["lib"]
54
- s.rubygems_version = %q{1.3.7}
55
- s.summary = %q{Command line argument parser with stdin handling and usage generator}
54
+ s.rubygems_version = "1.8.15"
55
+ s.summary = "Command line argument parser with stdin handling and usage generator"
56
56
 
57
57
  if s.respond_to? :specification_version then
58
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
59
58
  s.specification_version = 3
60
59
 
61
60
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
62
- s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
61
+ s.add_development_dependency(%q<rspec>, ["~> 2.4"])
63
62
  s.add_development_dependency(%q<cucumber>, [">= 0"])
64
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
63
+ s.add_development_dependency(%q<bundler>, ["~> 1.2"])
65
64
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
66
65
  s.add_development_dependency(%q<rcov>, [">= 0"])
67
66
  s.add_development_dependency(%q<rdoc>, ["~> 3.9"])
68
67
  s.add_development_dependency(%q<ruby-ip>, ["~> 0.9"])
69
68
  else
70
- s.add_dependency(%q<rspec>, ["~> 2.3.0"])
69
+ s.add_dependency(%q<rspec>, ["~> 2.4"])
71
70
  s.add_dependency(%q<cucumber>, [">= 0"])
72
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
71
+ s.add_dependency(%q<bundler>, ["~> 1.2"])
73
72
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
74
73
  s.add_dependency(%q<rcov>, [">= 0"])
75
74
  s.add_dependency(%q<rdoc>, ["~> 3.9"])
76
75
  s.add_dependency(%q<ruby-ip>, ["~> 0.9"])
77
76
  end
78
77
  else
79
- s.add_dependency(%q<rspec>, ["~> 2.3.0"])
78
+ s.add_dependency(%q<rspec>, ["~> 2.4"])
80
79
  s.add_dependency(%q<cucumber>, [">= 0"])
81
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
80
+ s.add_dependency(%q<bundler>, ["~> 1.2"])
82
81
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
83
82
  s.add_dependency(%q<rcov>, [">= 0"])
84
83
  s.add_dependency(%q<rdoc>, ["~> 3.9"])
data/lib/cli.rb CHANGED
@@ -354,7 +354,11 @@ class CLI
354
354
  end
355
355
  out.print " (#{o.switch_short})" if o.has_short?
356
356
  out.print ' (mandatory)' if o.mandatory?
357
- out.print " [%s]" % o.default if o.has_default?
357
+ if o.has_default_label?
358
+ out.print " [#{o.default_label}]"
359
+ elsif o.has_default?
360
+ out.print " [%s]" % o.default
361
+ end
358
362
  out.print " - #{o.description}" if o.description?
359
363
  out.puts
360
364
  end
@@ -369,7 +373,11 @@ class CLI
369
373
  out.print " #{a}*"
370
374
  end
371
375
  out.print ' (optional)' if not a.mandatory? and not a.has_default?
372
- out.print " [%s]" % (a.default.is_a?(Array) ? a.default.join(' ') : a.default) if a.has_default?
376
+ if a.has_default_label?
377
+ out.print " [#{a.default_label}]"
378
+ elsif a.has_default?
379
+ out.print " [%s]" % (a.default.is_a?(Array) ? a.default.join(' ') : a.default)
380
+ end
373
381
  out.print " - #{a.description}" if a.description?
374
382
  out.puts
375
383
  end
data/lib/cli/dsl.rb CHANGED
@@ -65,6 +65,14 @@ class CLI
65
65
  @options.member? :default
66
66
  end
67
67
 
68
+ def default_label
69
+ @options[:default_label].to_s
70
+ end
71
+
72
+ def has_default_label?
73
+ @options.member? :default_label
74
+ end
75
+
68
76
  def mandatory?
69
77
  not has_default? and @options[:required]
70
78
  end
data/spec/usage_spec.rb CHANGED
@@ -184,6 +184,50 @@ describe CLI do
184
184
  ss.usage.should include("4")
185
185
  end
186
186
 
187
+ it "should show default value for option" do
188
+ ss = CLI.new do
189
+ option :group, :default => 'red'
190
+ end
191
+ ss.usage.should include("[red]")
192
+ end
193
+
194
+ it "should show default label for option" do
195
+ ss = CLI.new do
196
+ option :group, :default_label => 'blue'
197
+ end
198
+ ss.usage.should include("[blue]")
199
+ end
200
+
201
+ it "should show default label rather than default value if available for option" do
202
+ ss = CLI.new do
203
+ option :group, :default_label => 'blue', :default => 'red'
204
+ end
205
+ ss.usage.should include("[blue]")
206
+ ss.usage.should_not include("[red]")
207
+ end
208
+
209
+ it "should show default value for argument" do
210
+ ss = CLI.new do
211
+ argument :group, :default => 'red'
212
+ end
213
+ ss.usage.should include("[red]")
214
+ end
215
+
216
+ it "should show default label for argument" do
217
+ ss = CLI.new do
218
+ argument :group, :default_label => 'blue'
219
+ end
220
+ ss.usage.should include("[blue]")
221
+ end
222
+
223
+ it "should show default label rather than default value if available for argument" do
224
+ ss = CLI.new do
225
+ argument :group, :default_label => 'blue', :default => 'red'
226
+ end
227
+ ss.usage.should include("[blue]")
228
+ ss.usage.should_not include("[red]")
229
+ end
230
+
187
231
  describe "usage line" do
188
232
  it "should suggest that arguments can be used in usage line" do
189
233
  ss = CLI.new do
@@ -191,7 +235,7 @@ describe CLI do
191
235
  end
192
236
 
193
237
  # switches will always be there due to implicit --help switch
194
- ss.usage.first.should == "Usage: rspec [switches] [--] location\n"
238
+ ss.usage.lines.first.should == "Usage: rspec [switches] [--] location\n"
195
239
  end
196
240
 
197
241
  it "should suggest that switches can be used in usage line" do
@@ -199,7 +243,7 @@ describe CLI do
199
243
  switch :location, :short => :l
200
244
  end
201
245
 
202
- ss.usage.first.should == "Usage: rspec [switches]\n"
246
+ ss.usage.lines.first.should == "Usage: rspec [switches]\n"
203
247
  end
204
248
 
205
249
  it "should suggest that options can be used in usage line" do
@@ -208,7 +252,7 @@ describe CLI do
208
252
  end
209
253
 
210
254
  # switches will always be there due to implicit --help switch
211
- ss.usage.first.should == "Usage: rspec [switches|options]\n"
255
+ ss.usage.lines.first.should == "Usage: rspec [switches|options]\n"
212
256
  end
213
257
 
214
258
  it "should suggest that switches or options can be used in usage line" do
@@ -217,7 +261,7 @@ describe CLI do
217
261
  option :size, :short => :s
218
262
  end
219
263
 
220
- ss.usage.first.should == "Usage: rspec [switches|options]\n"
264
+ ss.usage.lines.first.should == "Usage: rspec [switches|options]\n"
221
265
  end
222
266
 
223
267
  it "should suggest that option is mandatory" do
@@ -227,7 +271,7 @@ describe CLI do
227
271
  end
228
272
 
229
273
  # switches will always be there due to implicit --help switch
230
- ss.usage.first.should == "Usage: rspec [switches] --size <value> --group <value>\n"
274
+ ss.usage.lines.first.should == "Usage: rspec [switches] --size <value> --group <value>\n"
231
275
 
232
276
  ss = CLI.new do
233
277
  option :location, :short => :l
@@ -236,14 +280,14 @@ describe CLI do
236
280
  end
237
281
 
238
282
  # switches will always be there due to implicit --help switch
239
- ss.usage.first.should == "Usage: rspec [switches|options] --size <value> --group <value>\n"
283
+ ss.usage.lines.first.should == "Usage: rspec [switches|options] --size <value> --group <value>\n"
240
284
 
241
285
  ss = CLI.new do
242
286
  switch :location, :short => :l
243
287
  option :size, :short => :s, :required => true
244
288
  end
245
289
 
246
- ss.usage.first.should == "Usage: rspec [switches] --size <value>\n"
290
+ ss.usage.lines.first.should == "Usage: rspec [switches] --size <value>\n"
247
291
  end
248
292
 
249
293
  it "should suggest that argument is optional" do
@@ -255,7 +299,7 @@ describe CLI do
255
299
  end
256
300
 
257
301
  # switches will always be there due to implicit --help switch
258
- ss.usage.first.should == "Usage: rspec [switches] [--] location [size] [colour] group\n"
302
+ ss.usage.lines.first.should == "Usage: rspec [switches] [--] location [size] [colour] group\n"
259
303
  end
260
304
  end
261
305
 
@@ -300,7 +344,7 @@ describe CLI do
300
344
  switch :logging, :short => :l
301
345
  switch :run
302
346
  option :location, :short => :r, :description => "place where server is located"
303
- option :group, :default => 'red'
347
+ option :group, :default => 'red', :default_label => 'colour'
304
348
  options :power_up, :short => :p, :required => true
305
349
  option :speed, :short => :s, :cast => Integer
306
350
  option :the_number_of_the_beast, :short => :b, :cast => Integer, :default => 666, :description => "The number of the beast"
@@ -311,7 +355,7 @@ describe CLI do
311
355
  argument :string
312
356
  argument :limit, :cast => Integer, :required => false, :description => "limit in seconds"
313
357
  argument :unlock_code, :cast => Integer, :required => false
314
- argument :code, :cast => Integer, :default => '123', :description => "secret code"
358
+ argument :code, :cast => Integer, :default => '123', :description => "secret code", :default_label => 'generated'
315
359
  argument :illegal_prime, :cast => Integer, :description => "prime number that represents information that it is forbidden to possess or distribute"
316
360
  arguments :files, :cast => Pathname, :default => ['test', '1', '2'], :description => "files to process"
317
361
  end.usage
@@ -329,7 +373,7 @@ Switches:
329
373
  --version - display version string
330
374
  Options:
331
375
  --location (-r) - place where server is located
332
- --group [red]
376
+ --group [colour]
333
377
  --power-up* (-p) (mandatory)
334
378
  --speed (-s)
335
379
  --the-number-of-the-beast (-b) [666] - The number of the beast
@@ -340,7 +384,7 @@ Arguments:
340
384
  string
341
385
  limit (optional) - limit in seconds
342
386
  unlock-code (optional)
343
- code [123] - secret code
387
+ code [generated] - secret code
344
388
  illegal-prime - prime number that represents information that it is forbidden to possess or distribute
345
389
  files* [test 1 2] - files to process
346
390
  EOS
metadata CHANGED
@@ -1,147 +1,103 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cli
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 1
9
- - 1
10
- segments_generated: true
11
- version: 1.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
+ prerelease:
12
6
  platform: ruby
13
- authors:
7
+ authors:
14
8
  - Jakub Pastuszek
15
9
  autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
-
19
- date: 2012-02-01 00:00:00 +01:00
20
- default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
23
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-11-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70285351383820 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 2
31
- - 3
32
- - 0
33
- segments_generated: true
34
- version: 2.3.0
20
+ - !ruby/object:Gem::Version
21
+ version: '2.4'
35
22
  type: :development
36
- name: rspec
37
23
  prerelease: false
38
- version_requirements: *id001
39
- - !ruby/object:Gem::Dependency
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70285351383820
25
+ - !ruby/object:Gem::Dependency
26
+ name: cucumber
27
+ requirement: &70285351398720 !ruby/object:Gem::Requirement
41
28
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 3
46
- segments:
47
- - 0
48
- segments_generated: true
49
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
50
33
  type: :development
51
- name: cucumber
52
34
  prerelease: false
53
- version_requirements: *id002
54
- - !ruby/object:Gem::Dependency
55
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70285351398720
36
+ - !ruby/object:Gem::Dependency
37
+ name: bundler
38
+ requirement: &70285351396880 !ruby/object:Gem::Requirement
56
39
  none: false
57
- requirements:
40
+ requirements:
58
41
  - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 23
61
- segments:
62
- - 1
63
- - 0
64
- - 0
65
- segments_generated: true
66
- version: 1.0.0
42
+ - !ruby/object:Gem::Version
43
+ version: '1.2'
67
44
  type: :development
68
- name: bundler
69
45
  prerelease: false
70
- version_requirements: *id003
71
- - !ruby/object:Gem::Dependency
72
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70285351396880
47
+ - !ruby/object:Gem::Dependency
48
+ name: jeweler
49
+ requirement: &70285351395960 !ruby/object:Gem::Requirement
73
50
  none: false
74
- requirements:
51
+ requirements:
75
52
  - - ~>
76
- - !ruby/object:Gem::Version
77
- hash: 7
78
- segments:
79
- - 1
80
- - 6
81
- - 4
82
- segments_generated: true
53
+ - !ruby/object:Gem::Version
83
54
  version: 1.6.4
84
55
  type: :development
85
- name: jeweler
86
56
  prerelease: false
87
- version_requirements: *id004
88
- - !ruby/object:Gem::Dependency
89
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70285351395960
58
+ - !ruby/object:Gem::Dependency
59
+ name: rcov
60
+ requirement: &70285351395440 !ruby/object:Gem::Requirement
90
61
  none: false
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- hash: 3
95
- segments:
96
- - 0
97
- segments_generated: true
98
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
99
66
  type: :development
100
- name: rcov
101
67
  prerelease: false
102
- version_requirements: *id005
103
- - !ruby/object:Gem::Dependency
104
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *70285351395440
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: &70285351394160 !ruby/object:Gem::Requirement
105
72
  none: false
106
- requirements:
73
+ requirements:
107
74
  - - ~>
108
- - !ruby/object:Gem::Version
109
- hash: 21
110
- segments:
111
- - 3
112
- - 9
113
- segments_generated: true
114
- version: "3.9"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.9'
115
77
  type: :development
116
- name: rdoc
117
78
  prerelease: false
118
- version_requirements: *id006
119
- - !ruby/object:Gem::Dependency
120
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *70285351394160
80
+ - !ruby/object:Gem::Dependency
81
+ name: ruby-ip
82
+ requirement: &70285351393060 !ruby/object:Gem::Requirement
121
83
  none: false
122
- requirements:
84
+ requirements:
123
85
  - - ~>
124
- - !ruby/object:Gem::Version
125
- hash: 25
126
- segments:
127
- - 0
128
- - 9
129
- segments_generated: true
130
- version: "0.9"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.9'
131
88
  type: :development
132
- name: ruby-ip
133
89
  prerelease: false
134
- version_requirements: *id007
135
- description: Command Line Interface gem allows you to quickly specify command argument parser that will automatically generate usage, handle stdin, switches, options and arguments with default values and value casting
90
+ version_requirements: *70285351393060
91
+ description: Command Line Interface gem allows you to quickly specify command argument
92
+ parser that will automatically generate usage, handle stdin, switches, options and
93
+ arguments with default values and value casting
136
94
  email: jpastuszek@gmail.com
137
95
  executables: []
138
-
139
96
  extensions: []
140
-
141
- extra_rdoc_files:
97
+ extra_rdoc_files:
142
98
  - LICENSE.txt
143
99
  - README.md
144
- files:
100
+ files:
145
101
  - .document
146
102
  - .rspec
147
103
  - Gemfile
@@ -172,41 +128,32 @@ files:
172
128
  - spec/stdin_spec.rb
173
129
  - spec/switch_spec.rb
174
130
  - spec/usage_spec.rb
175
- has_rdoc: true
176
131
  homepage: http://github.com/jpastuszek/cli
177
- licenses:
132
+ licenses:
178
133
  - MIT
179
134
  post_install_message:
180
135
  rdoc_options: []
181
-
182
- require_paths:
136
+ require_paths:
183
137
  - lib
184
- required_ruby_version: !ruby/object:Gem::Requirement
138
+ required_ruby_version: !ruby/object:Gem::Requirement
185
139
  none: false
186
- requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- hash: 3
190
- segments:
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ segments:
191
145
  - 0
192
- segments_generated: true
193
- version: "0"
194
- required_rubygems_version: !ruby/object:Gem::Requirement
146
+ hash: -3157849412785804189
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
148
  none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
- segments_generated: true
203
- version: "0"
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
204
153
  requirements: []
205
-
206
154
  rubyforge_project:
207
- rubygems_version: 1.3.7
155
+ rubygems_version: 1.8.15
208
156
  signing_key:
209
157
  specification_version: 3
210
158
  summary: Command line argument parser with stdin handling and usage generator
211
159
  test_files: []
212
-