command_line_boss 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.commitlintrc.yml +16 -0
- data/.husky/commit-msg +1 -0
- data/.markdownlint.yml +25 -0
- data/.rubocop.yml +5 -32
- data/.yardopts +8 -1
- data/CHANGELOG.md +22 -0
- data/README.md +73 -18
- data/Rakefile +2 -9
- data/examples/create_spreadsheet/Rakefile +1 -10
- data/lib/command_line_boss/version.rb +1 -1
- data/package.json +11 -0
- metadata +58 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c18c2eeeebeba00361af947c2349049dcdb7d861358189e4b44be3f257a29d02
|
4
|
+
data.tar.gz: a52b032947e2aed16266af4374101236df602f9e2422d2aec2522a2dcee22d6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e57a7351d88aeac40f243fc3f7c595345562afca8a0a43ac989e8b166bed5113a6f38560a8267ee80941ec3a450395a3e0ebf8f30ab2534e7a7d4053fca1c2f
|
7
|
+
data.tar.gz: 3d4173cc96ce04aec95367795c36e2a3949e6ef2e542bb17f130c18d5912bfdd4ba5666a1a6ff5a77556a1d23077dbabd97546fd0856d69dcf953cfb078bd83f
|
data/.commitlintrc.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
extends: '@commitlint/config-conventional'
|
3
|
+
|
4
|
+
rules:
|
5
|
+
# See: https://commitlint.js.org/reference/rules.html
|
6
|
+
#
|
7
|
+
# Rules are made up by a name and a configuration array. The configuration array contains:
|
8
|
+
#
|
9
|
+
# * Severity [0..2]: 0 disable rule, 1 warning if violated, or 2 error if violated
|
10
|
+
# * Applicability [always|never]: never inverts the rule
|
11
|
+
# * Value: value to use for this rule
|
12
|
+
#
|
13
|
+
# Run `npx commitlint --print-config` to see the current setting for all rules.
|
14
|
+
#
|
15
|
+
body-leading-blank: [2, 'always']
|
16
|
+
footer-leading-blank: [2, 'always']
|
data/.husky/commit-msg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
npx --no-install commitlint --edit "$1"
|
data/.markdownlint.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
default: true
|
2
|
+
|
3
|
+
# Unordered list indentation
|
4
|
+
MD007: { indent: 2 }
|
5
|
+
|
6
|
+
# Line length
|
7
|
+
MD013: { line_length: 90, tables: false, code_blocks: false }
|
8
|
+
|
9
|
+
# Heading duplication is allowed for non-sibling headings
|
10
|
+
MD024: { siblings_only: true }
|
11
|
+
|
12
|
+
# Do not allow the specified trailing punctuation in a header
|
13
|
+
MD026: { punctuation: '.,;:' }
|
14
|
+
|
15
|
+
# Order list items must have a prefix that increases in numerical order
|
16
|
+
MD029: { style: 'ordered' }
|
17
|
+
|
18
|
+
# Lists do not need to be surrounded by blank lines
|
19
|
+
MD032: false
|
20
|
+
|
21
|
+
# Allow raw HTML in Markdown
|
22
|
+
MD033: false
|
23
|
+
|
24
|
+
# Allow emphasis to be used instead of a heading
|
25
|
+
MD036: false
|
data/.rubocop.yml
CHANGED
@@ -1,34 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
SuggestExtensions: false
|
4
|
-
DefaultFormatter: fuubar
|
5
|
-
|
6
|
-
# Output extra information for each offense to make it easier to diagnose:
|
7
|
-
DisplayCopNames: true
|
8
|
-
DisplayStyleGuide: true
|
9
|
-
ExtraDetails: true
|
1
|
+
inherit_gem:
|
2
|
+
main_branch_shared_rubocop_config: config/rubocop.yml
|
10
3
|
|
11
|
-
|
12
|
-
#
|
4
|
+
AllCops:
|
5
|
+
# Pin this project to Ruby 3.1 in case the shared config above is upgraded to 3.2
|
6
|
+
# or later.
|
13
7
|
TargetRubyVersion: 3.1
|
14
|
-
|
15
|
-
Gemspec/DevelopmentDependencies:
|
16
|
-
Enabled: false
|
17
|
-
|
18
|
-
Layout/LineLength:
|
19
|
-
Max: 120
|
20
|
-
|
21
|
-
# The DSL for RSpec and the gemspec file make it very hard to limit block length
|
22
|
-
Metrics/BlockLength:
|
23
|
-
Exclude:
|
24
|
-
- '**/*_spec.rb'
|
25
|
-
- '*.gemspec'
|
26
|
-
|
27
|
-
Metrics/ModuleLength:
|
28
|
-
CountAsOne: ['hash']
|
29
|
-
|
30
|
-
Metrics/ClassLength:
|
31
|
-
CountAsOne: ['hash']
|
32
|
-
|
33
|
-
Style/AsciiComments:
|
34
|
-
Enabled: false
|
data/.yardopts
CHANGED
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## v0.2.0 (2024-10-10)
|
9
|
+
|
10
|
+
[Full Changelog](https://github.com/main-branch/command_line_boss/compare/v0.1.0..v0.2.0)
|
11
|
+
|
12
|
+
Changes since v0.1.0:
|
13
|
+
|
14
|
+
* 4a6ace7 build: remove semver pr label check
|
15
|
+
* 05918a3 build: enforce conventional commit message formatting
|
16
|
+
* e5f91d1 Clarify purpose of the gem in the README
|
17
|
+
* ca16af0 Fix TargetRubyVersion Comment
|
18
|
+
* 30eef5d Use shared Rubocop config
|
19
|
+
* bbe9fe2 Update links in gemspec
|
20
|
+
* c167adc Add Slack badge for this project in README
|
21
|
+
* c442a80 Update yardopts with new standard options
|
22
|
+
* f9be39f Standardize YARD and Markdown Lint configurations
|
23
|
+
* bc7b9ae Update CODEOWNERS file
|
24
|
+
* 3879f0a Set JRuby —debug option when running tests in GitHub Actions workflows
|
25
|
+
* af10f27 Integrate simplecov-rspec into the project
|
26
|
+
* 22b1364 Update continuous integration and experimental ruby builds
|
27
|
+
* 2e2fa87 Enforce the use of semver tags on PRs
|
28
|
+
* 4464e2c Fix CHANGELOG.md
|
29
|
+
|
8
30
|
## v0.1.0 (2024-07-03)
|
9
31
|
|
10
32
|
[Full Changelog](https://github.com/main-branch/command_line_boss/compare/6cafbd0..v0.1.0)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# The `command_line_boss` gem
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/command_line_boss.svg)](https://badge.fury.io/rb/command_line_boss)
|
4
4
|
[![Documentation](https://img.shields.io/badge/Documentation-Latest-green)](https://rubydoc.info/gems/command_line_boss/)
|
@@ -6,14 +6,21 @@
|
|
6
6
|
[![Build Status](https://github.com/main-branch/command_line_boss/actions/workflows/continuous_integration.yml/badge.svg)](https://github.com/main-branch/command_line_boss/actions/workflows/continuous_integration.yml)
|
7
7
|
[![Maintainability](https://api.codeclimate.com/v1/badges/513b4d8d95a5e3a77ec6/maintainability)](https://codeclimate.com/github/main-branch/command_line_boss/maintainability)
|
8
8
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/513b4d8d95a5e3a77ec6/test_coverage)](https://codeclimate.com/github/main-branch/command_line_boss/test_coverage)
|
9
|
+
[![Conventional
|
10
|
+
Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
|
11
|
+
[![Slack](https://img.shields.io/badge/slack-main--branch/command__line__boss-yellow.svg?logo=slack)](https://main-branch.slack.com/archives/C07MQC0LNKF)
|
9
12
|
|
10
|
-
|
13
|
+
`command_line_boss` makes it easy to build, test, and maintain complex command line
|
14
|
+
interfaces. It is built on top of Ruby's `OptionParser` class and works best for
|
15
|
+
traditional options-based command-line interfaces that you would build with
|
16
|
+
`OptionParser`.
|
11
17
|
|
12
|
-
|
18
|
+
To use `command_line_boss` you are expected to already know how to define options
|
19
|
+
with `OptionParser`.
|
13
20
|
|
14
|
-
|
15
|
-
|
16
|
-
|
21
|
+
For defining command-line interfaces with multiple commands and subcommands (aka a
|
22
|
+
git-like interface), we recommend using a gem like [thor](http://whatisthor.com).
|
23
|
+
Other good alternatives also exist.
|
17
24
|
|
18
25
|
* [Installation](#installation)
|
19
26
|
* [Usage](#usage)
|
@@ -22,23 +29,36 @@ For defining complex command-line interfaces with multiple commands and subcomma
|
|
22
29
|
* [Start your command line parser class](#start-your-command-line-parser-class)
|
23
30
|
* [Define options](#define-options)
|
24
31
|
* [Define additional validations](#define-additional-validations)
|
25
|
-
* [Process
|
32
|
+
* [Process any remaining non-option arguments](#process-any-remaining-non-option-arguments)
|
26
33
|
* [Optional: define help output](#optional-define-help-output)
|
27
34
|
* [Use the parser](#use-the-parser)
|
28
35
|
* [Run the command line](#run-the-command-line)
|
29
36
|
* [Development](#development)
|
30
37
|
* [Contributing](#contributing)
|
38
|
+
* [Commit message guidelines](#commit-message-guidelines)
|
39
|
+
* [Pull request guidelines](#pull-request-guidelines)
|
31
40
|
* [License](#license)
|
32
41
|
* [Code of Conduct](#code-of-conduct)
|
33
42
|
|
34
43
|
## Installation
|
35
44
|
|
36
|
-
|
45
|
+
To install this gem, add to the following line to your application's gemspec OR
|
46
|
+
Gemfile:
|
37
47
|
|
38
|
-
|
39
|
-
|
48
|
+
gemspec:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
spec.add_development_dependency "command_line_boss", '~> 0.1'
|
52
|
+
```
|
53
|
+
|
54
|
+
Gemfile:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
gem "command_line_boss", "~> 0.1", groups: [:development, :test]
|
40
58
|
```
|
41
59
|
|
60
|
+
and then run `bundle install`.
|
61
|
+
|
42
62
|
If bundler is not being used to manage dependencies, install the gem by executing:
|
43
63
|
|
44
64
|
```shell
|
@@ -75,10 +95,11 @@ Make sure you have the `command_line_boss` gem installed.
|
|
75
95
|
|
76
96
|
### Design your command line
|
77
97
|
|
78
|
-
Design the command line following the
|
79
|
-
|
98
|
+
Design the command line following the [Google developer documentation style guide for
|
99
|
+
command line syntax](https://developers.google.com/style/code-syntax).
|
80
100
|
|
81
|
-
Here is what a simple example might look like that creates a spreadsheet with named
|
101
|
+
Here is what a simple example might look like that creates a spreadsheet with named
|
102
|
+
sheets:
|
82
103
|
|
83
104
|
```Text
|
84
105
|
Usage:
|
@@ -165,7 +186,7 @@ class CreateSpreadsheetCli < CommandLineBoss
|
|
165
186
|
end
|
166
187
|
```
|
167
188
|
|
168
|
-
### Process
|
189
|
+
### Process any remaining non-option arguments
|
169
190
|
|
170
191
|
Implement `parse_arguments` to deal the remaining non-option arguments from the
|
171
192
|
command line. Within this method, the `args` method returns the remaining
|
@@ -323,18 +344,52 @@ $
|
|
323
344
|
|
324
345
|
## Development
|
325
346
|
|
326
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake
|
347
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake
|
348
|
+
spec` to run the tests. You can also run `bin/console` for an interactive prompt that
|
349
|
+
will allow you to experiment.
|
327
350
|
|
328
351
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
329
352
|
|
330
353
|
## Contributing
|
331
354
|
|
332
|
-
Bug reports and pull requests are welcome on GitHub at
|
355
|
+
Bug reports and pull requests are welcome on GitHub at
|
356
|
+
https://github.com/main_branch/command_line_boss. This project is intended to be a
|
357
|
+
safe, welcoming space for collaboration, and contributors are expected to adhere to
|
358
|
+
the [code of
|
359
|
+
conduct](https://github.com/main_branch/command_line_boss/blob/main/CODE_OF_CONDUCT.md).
|
360
|
+
|
361
|
+
### Commit message guidelines
|
362
|
+
|
363
|
+
All commit messages must follow the [Conventional Commits
|
364
|
+
standard](https://www.conventionalcommits.org/en/v1.0.0/). This helps us maintain a
|
365
|
+
clear and structured commit history, automate versioning, and generate changelogs
|
366
|
+
effectively.
|
367
|
+
|
368
|
+
To ensure compliance, this project includes:
|
369
|
+
|
370
|
+
* A git commit-msg hook that validates your commit messages before they are accepted.
|
371
|
+
|
372
|
+
To activate the hook, you must have node installed and run `npm install`.
|
373
|
+
|
374
|
+
* A GitHub Actions workflow that will enforce the Conventional Commit standard as
|
375
|
+
part of the continuous integration pipeline.
|
376
|
+
|
377
|
+
Any commit message that does not conform to the Conventional Commits standard will
|
378
|
+
cause the workflow to fail and not allow the PR to be merged.
|
379
|
+
|
380
|
+
### Pull request guidelines
|
381
|
+
|
382
|
+
All pull requests must be merged using rebase merges. This ensures that commit
|
383
|
+
messages from the feature branch are preserved in the release branch, keeping the
|
384
|
+
history clean and meaningful.
|
333
385
|
|
334
386
|
## License
|
335
387
|
|
336
|
-
The gem is available as open source under the terms of the [MIT
|
388
|
+
The gem is available as open source under the terms of the [MIT
|
389
|
+
License](https://opensource.org/licenses/MIT).
|
337
390
|
|
338
391
|
## Code of Conduct
|
339
392
|
|
340
|
-
Everyone interacting in the CommandLineBoss project's codebases, issue trackers, chat
|
393
|
+
Everyone interacting in the CommandLineBoss project's codebases, issue trackers, chat
|
394
|
+
rooms and mailing lists is expected to follow the [code of
|
395
|
+
conduct](https://github.com/[USERNAME]/command_line_boss/blob/main/CODE_OF_CONDUCT.md).
|
data/Rakefile
CHANGED
@@ -44,16 +44,9 @@ CLEAN << 'rspec-report.xml'
|
|
44
44
|
|
45
45
|
require 'rubocop/rake_task'
|
46
46
|
|
47
|
-
RuboCop::RakeTask.new
|
48
|
-
t.options = %w[
|
49
|
-
--format fuubar
|
50
|
-
--format json --out rubocop-report.json
|
51
|
-
--display-cop-names
|
52
|
-
--config .rubocop.yml
|
53
|
-
]
|
54
|
-
end
|
47
|
+
RuboCop::RakeTask.new
|
55
48
|
|
56
|
-
|
49
|
+
# YARD
|
57
50
|
|
58
51
|
unless RUBY_PLATFORM == 'java'
|
59
52
|
# yard:build
|
@@ -38,13 +38,4 @@ CLOBBER << 'Gemfile.lock'
|
|
38
38
|
|
39
39
|
require 'rubocop/rake_task'
|
40
40
|
|
41
|
-
RuboCop::RakeTask.new
|
42
|
-
t.options = %w[
|
43
|
-
--format fuubar
|
44
|
-
--format json --out rubocop-report.json
|
45
|
-
--display-cop-names
|
46
|
-
--config .rubocop.yml
|
47
|
-
]
|
48
|
-
end
|
49
|
-
|
50
|
-
CLEAN << 'rubocop-report.json'
|
41
|
+
RuboCop::RakeTask.new
|
data/package.json
ADDED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: command_line_boss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Couball
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: logger
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler-audit
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -30,14 +44,14 @@ dependencies:
|
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
47
|
+
version: '2.1'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1
|
54
|
+
version: '2.1'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: csv
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,20 @@ dependencies:
|
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '2.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: main_branch_shared_rubocop_config
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.1'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rake
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +128,14 @@ dependencies:
|
|
100
128
|
requirements:
|
101
129
|
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: '1.
|
131
|
+
version: '1.66'
|
104
132
|
type: :development
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
136
|
- - "~>"
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version: '1.
|
138
|
+
version: '1.66'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: simplecov
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +164,20 @@ dependencies:
|
|
136
164
|
- - "~>"
|
137
165
|
- !ruby/object:Gem::Version
|
138
166
|
version: '0.8'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: simplecov-rspec
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.3'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.3'
|
139
181
|
- !ruby/object:Gem::Dependency
|
140
182
|
name: turnip
|
141
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,6 +250,9 @@ executables: []
|
|
208
250
|
extensions: []
|
209
251
|
extra_rdoc_files: []
|
210
252
|
files:
|
253
|
+
- ".commitlintrc.yml"
|
254
|
+
- ".husky/commit-msg"
|
255
|
+
- ".markdownlint.yml"
|
211
256
|
- ".rspec"
|
212
257
|
- ".rubocop.yml"
|
213
258
|
- ".yardopts"
|
@@ -234,6 +279,7 @@ files:
|
|
234
279
|
- lib/command_line_boss/help_option.rb
|
235
280
|
- lib/command_line_boss/logger_options.rb
|
236
281
|
- lib/command_line_boss/version.rb
|
282
|
+
- package.json
|
237
283
|
homepage: https://github.com/main-branch/command_line_boss
|
238
284
|
licenses:
|
239
285
|
- MIT
|
@@ -241,8 +287,8 @@ metadata:
|
|
241
287
|
allowed_push_host: https://rubygems.org
|
242
288
|
homepage_uri: https://github.com/main-branch/command_line_boss
|
243
289
|
source_code_uri: https://github.com/main-branch/command_line_boss
|
244
|
-
|
245
|
-
|
290
|
+
documentation_uri: https://rubydoc.info/gems/command_line_boss/0.2.0
|
291
|
+
changelog_uri: https://rubydoc.info/gems/command_line_boss/0.2.0/file/CHANGELOG.md
|
246
292
|
rubygems_mfa_required: 'true'
|
247
293
|
post_install_message:
|
248
294
|
rdoc_options: []
|
@@ -258,8 +304,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
258
304
|
- - ">="
|
259
305
|
- !ruby/object:Gem::Version
|
260
306
|
version: '0'
|
261
|
-
requirements:
|
262
|
-
|
307
|
+
requirements:
|
308
|
+
- 'Platform: Mac, Linux, or Windows'
|
309
|
+
- 'Ruby: MRI 3.1 or later, TruffleRuby 24 or later, or JRuby 9.4 or later'
|
310
|
+
rubygems_version: 3.5.16
|
263
311
|
signing_key:
|
264
312
|
specification_version: 4
|
265
313
|
summary: Command Line Boss is a convenience layer over OptionsParser
|