optparse 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8de11374b27b7f909eda2151c07df0a81eb3385fadedcfcf017e2407f5bbab30
4
- data.tar.gz: 9b94b1a58d6ecccec7c516bfa6fdb8ed7eb7d58fb079c5fb77af86d9214a0b2b
3
+ metadata.gz: f8070528a5fa8e91d067053a532c9771c71f63d16d6a31622c7ca3c6e487c425
4
+ data.tar.gz: e854fcd1fe22dd596fe2650e4141e59124d0f78ae492de3164b250a4d18cc9de
5
5
  SHA512:
6
- metadata.gz: 4361581a6e38d86d531b988fabe314682ae4c600e459780facdca18b2addd2b639fa77b1fbeb0d5120c44f6c4c4b67fbcceb3fbeb26dfc2df6c4185007efd780
7
- data.tar.gz: a9bc19932e9eec5854f70b7c1e4a4f0ade1b0d95779d6a29339499ed238500d60d1add5b24cb59be8582a839fa32834521fc655c76231ab6c727986559b81842
6
+ metadata.gz: 3e246c2d76a0b033b8f31e4d0c850050281b6722e3d7d4ae5e11de16bc00ad337f75243b2b932b915cc45406294038d7b770c3e2150d3faab5bc674135ce6355
7
+ data.tar.gz: 75b3d9526ad311161ad01507616dbd60ec97714a1440d10b15702bf360a3f0d081a5cade68d25d6bed50f56ed19599d657e7fb4e56d130b50b51861d501b08ce
data/README.md CHANGED
@@ -57,4 +57,3 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
57
57
  ## Contributing
58
58
 
59
59
  Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/optparse.
60
-
data/lib/optparse.rb CHANGED
@@ -72,10 +72,10 @@
72
72
  # require 'optparse'
73
73
  #
74
74
  # options = {}
75
- # OptionParser.new do |opts|
76
- # opts.banner = "Usage: example.rb [options]"
75
+ # OptionParser.new do |parser|
76
+ # parser.banner = "Usage: example.rb [options]"
77
77
  #
78
- # opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
78
+ # parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
79
79
  # options[:verbose] = v
80
80
  # end
81
81
  # end.parse!
@@ -96,15 +96,15 @@
96
96
  # def self.parse(options)
97
97
  # args = Options.new("world")
98
98
  #
99
- # opt_parser = OptionParser.new do |opts|
100
- # opts.banner = "Usage: example.rb [options]"
99
+ # opt_parser = OptionParser.new do |parser|
100
+ # parser.banner = "Usage: example.rb [options]"
101
101
  #
102
- # opts.on("-nNAME", "--name=NAME", "Name to say hello to") do |n|
102
+ # parser.on("-nNAME", "--name=NAME", "Name to say hello to") do |n|
103
103
  # args.name = n
104
104
  # end
105
105
  #
106
- # opts.on("-h", "--help", "Prints this help") do
107
- # puts opts
106
+ # parser.on("-h", "--help", "Prints this help") do
107
+ # puts parser
108
108
  # exit
109
109
  # end
110
110
  # end
@@ -241,10 +241,10 @@
241
241
  # require 'optparse'
242
242
  #
243
243
  # params = {}
244
- # OptionParser.new do |opts|
245
- # opts.on('-a')
246
- # opts.on('-b NUM', Integer)
247
- # opts.on('-v', '--verbose')
244
+ # OptionParser.new do |parser|
245
+ # parser.on('-a')
246
+ # parser.on('-b NUM', Integer)
247
+ # parser.on('-v', '--verbose')
248
248
  # end.parse!(into: params)
249
249
  #
250
250
  # p params
@@ -419,7 +419,7 @@
419
419
  # have any questions, file a ticket at http://bugs.ruby-lang.org.
420
420
  #
421
421
  class OptionParser
422
- OptionParser::Version = "0.1.0"
422
+ OptionParser::Version = "0.1.1"
423
423
 
424
424
  # :stopdoc:
425
425
  NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
@@ -1091,6 +1091,7 @@ XXX
1091
1091
  @summary_width = width
1092
1092
  @summary_indent = indent
1093
1093
  @default_argv = ARGV
1094
+ @require_exact = false
1094
1095
  add_officious
1095
1096
  yield self if block_given?
1096
1097
  end
@@ -1164,6 +1165,10 @@ XXX
1164
1165
  # Strings to be parsed in default.
1165
1166
  attr_accessor :default_argv
1166
1167
 
1168
+ # Whether to require that options match exactly (disallows providing
1169
+ # abbreviated long option as short option).
1170
+ attr_accessor :require_exact
1171
+
1167
1172
  #
1168
1173
  # Heading banner preceding summary.
1169
1174
  #
@@ -1305,13 +1310,16 @@ XXX
1305
1310
  private :notwice
1306
1311
 
1307
1312
  SPLAT_PROC = proc {|*a| a.length <= 1 ? a.first : a} # :nodoc:
1313
+
1314
+ # :call-seq:
1315
+ # make_switch(params, block = nil)
1308
1316
  #
1309
1317
  # Creates an OptionParser::Switch from the parameters. The parsed argument
1310
1318
  # value is passed to the given block, where it can be processed.
1311
1319
  #
1312
1320
  # See at the beginning of OptionParser for some full examples.
1313
1321
  #
1314
- # +opts+ can include the following elements:
1322
+ # +params+ can include the following elements:
1315
1323
  #
1316
1324
  # [Argument style:]
1317
1325
  # One of the following:
@@ -1498,11 +1506,16 @@ XXX
1498
1506
  nolong
1499
1507
  end
1500
1508
 
1509
+ # :call-seq:
1510
+ # define(*params, &block)
1511
+ #
1501
1512
  def define(*opts, &block)
1502
1513
  top.append(*(sw = make_switch(opts, block)))
1503
1514
  sw[0]
1504
1515
  end
1505
1516
 
1517
+ # :call-seq:
1518
+ # on(*params, &block)
1506
1519
  #
1507
1520
  # Add option switch and handler. See #make_switch for an explanation of
1508
1521
  # parameters.
@@ -1513,11 +1526,16 @@ XXX
1513
1526
  end
1514
1527
  alias def_option define
1515
1528
 
1529
+ # :call-seq:
1530
+ # define_head(*params, &block)
1531
+ #
1516
1532
  def define_head(*opts, &block)
1517
1533
  top.prepend(*(sw = make_switch(opts, block)))
1518
1534
  sw[0]
1519
1535
  end
1520
1536
 
1537
+ # :call-seq:
1538
+ # on_head(*params, &block)
1521
1539
  #
1522
1540
  # Add option switch like with #on, but at head of summary.
1523
1541
  #
@@ -1527,11 +1545,17 @@ XXX
1527
1545
  end
1528
1546
  alias def_head_option define_head
1529
1547
 
1548
+ # :call-seq:
1549
+ # define_tail(*params, &block)
1550
+ #
1530
1551
  def define_tail(*opts, &block)
1531
1552
  base.append(*(sw = make_switch(opts, block)))
1532
1553
  sw[0]
1533
1554
  end
1534
1555
 
1556
+ #
1557
+ # :call-seq:
1558
+ # on_tail(*params, &block)
1535
1559
  #
1536
1560
  # Add option switch like with #on, but at tail of summary.
1537
1561
  #
@@ -1583,6 +1607,9 @@ XXX
1583
1607
  opt.tr!('_', '-')
1584
1608
  begin
1585
1609
  sw, = complete(:long, opt, true)
1610
+ if require_exact && !sw.long.include?(arg)
1611
+ raise InvalidOption, arg
1612
+ end
1586
1613
  rescue ParseError
1587
1614
  raise $!.set_option(arg, true)
1588
1615
  end
@@ -1607,6 +1634,7 @@ XXX
1607
1634
  val = arg.delete_prefix('-')
1608
1635
  has_arg = true
1609
1636
  rescue InvalidOption
1637
+ raise if require_exact
1610
1638
  # if no short options match, try completion with long
1611
1639
  # options.
1612
1640
  sw, = complete(:long, opt)
@@ -1618,7 +1646,12 @@ XXX
1618
1646
  end
1619
1647
  begin
1620
1648
  opt, cb, val = sw.parse(val, argv) {|*exc| raise(*exc) if eq}
1649
+ rescue ParseError
1650
+ raise $!.set_option(arg, arg.length > 2)
1651
+ else
1621
1652
  raise InvalidOption, arg if has_arg and !eq and arg == "-#{opt}"
1653
+ end
1654
+ begin
1622
1655
  argv.unshift(opt) if opt and (!rest or (opt = opt.sub(/\A-*/, '-')) != '-')
1623
1656
  val = cb.call(val) if cb
1624
1657
  setter.call(sw.switch_name, val) if setter
@@ -1749,7 +1782,7 @@ XXX
1749
1782
  #
1750
1783
  def visit(id, *args, &block)
1751
1784
  @stack.reverse_each do |el|
1752
- el.send(id, *args, &block)
1785
+ el.__send__(id, *args, &block)
1753
1786
  end
1754
1787
  nil
1755
1788
  end
@@ -2,6 +2,9 @@
2
2
  require 'optparse'
3
3
 
4
4
  class OptionParser
5
+ # :call-seq:
6
+ # define_by_keywords(options, method, **params)
7
+ #
5
8
  def define_by_keywords(options, meth, **opts)
6
9
  meth.parameters.each do |type, name|
7
10
  case type
@@ -0,0 +1,21 @@
1
+ # -*- bash -*-
2
+ #
3
+ # Completion for bash:
4
+ #
5
+ # (1) install this file,
6
+ #
7
+ # (2) load the script, and
8
+ # . ~/.profile.d/rb_optparse.bash
9
+ #
10
+ # (3) define completions in your .bashrc,
11
+ # rb_optparse command_using_optparse_1
12
+ # rb_optparse command_using_optparse_2
13
+
14
+ _rb_optparse() {
15
+ COMPREPLY=($("${COMP_WORDS[0]}" "--*-completion-bash=${COMP_WORDS[COMP_CWORD]}"))
16
+ return 0
17
+ }
18
+
19
+ rb_optparse () {
20
+ [ $# = 0 ] || complete -o default -F _rb_optparse "$@"
21
+ }
@@ -0,0 +1,39 @@
1
+ # -*- zsh -*-
2
+ #
3
+ # Completion for zsh:
4
+ # (based on <http://d.hatena.ne.jp/rubikitch/20071002/zshcomplete>)
5
+ #
6
+ # (1) install this file.
7
+ # mkdir -p ~/.zsh.d
8
+ # cp rb_optparse.zsh ~/.zsh.d/rb_optparse.zsh
9
+ #
10
+ # (2) load the script, and add a directory to fpath before compinit.
11
+ # echo '. ~/.zsh.d/rb_optparse.zsh' >> "${ZDOTDIR:-~}/.zshrc"
12
+ # echo 'fpath=(~/.zsh.d/Completion $fpath)' >> "${ZDOTDIR:-~}/.zshrc"
13
+ # echo 'autoload -U compinit; compinit' >> "${ZDOTDIR:-~}/.zshrc"
14
+ #
15
+ # (3) restart zsh.
16
+ #
17
+ # (4) generate completion files once.
18
+ # generate-complete-function/ruby/optparse COMMAND1
19
+ # generate-complete-function/ruby/optparse COMMAND2
20
+ #
21
+
22
+ generate-complete-function/ruby/optparse ()
23
+ {
24
+ local cmpl="_${1:t}"
25
+ mkdir -p "${ZSH_COMPLETION_DIR-$HOME/.zsh.d/Completion}"
26
+ $1 "--*-completion-zsh=${1:t}" >! "${ZSH_COMPLETION_DIR-$HOME/.zsh.d/Completion}/$cmpl"
27
+ if [[ $(type -w "$cmpl") == "${cmpl}: function" ]]; then
28
+ unfunction "$cmpl"
29
+ autoload -U "$cmpl"
30
+ else
31
+ compinit "$cmpl"
32
+ fi
33
+ }
34
+
35
+ compdef _command generate-complete-function/ruby/optparse
36
+
37
+ for cmd in "$@"; do
38
+ generate-complete-function/ruby/optparse "$cmd"
39
+ done
data/optparse.gemspec CHANGED
@@ -16,7 +16,6 @@ Gem::Specification.new do |spec|
16
16
  spec.summary = %q{OptionParser is a class for command-line option analysis.}
17
17
  spec.description = %q{OptionParser is a class for command-line option analysis.}
18
18
  spec.homepage = "https://github.com/ruby/optparse"
19
- spec.license = ["Ruby", "BSD-2-Clause"]
20
19
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
21
20
  spec.licenses = ["Ruby", "BSD-2-Clause"]
22
21
 
@@ -24,7 +23,9 @@ Gem::Specification.new do |spec|
24
23
  spec.metadata["source_code_uri"] = spec.homepage
25
24
 
26
25
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
27
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
26
+ `git ls-files -z`.split("\x0").reject { |f|
27
+ f.match(%r{\A(?:(?:test|spec|features)/|Gemfile|\.(?:editor|git))})
28
+ }
28
29
  end
29
30
  spec.bindir = "exe"
30
31
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
@@ -0,0 +1,34 @@
1
+ task "build" => "changelogs"
2
+
3
+ changelog = proc do |output, ver = nil, prev = nil|
4
+ ver &&= Gem::Version.new(ver)
5
+ range = [[prev], [ver, "HEAD"]].map {|ver, branch| ver ? "v#{ver.to_s}" : branch}.compact.join("..")
6
+ IO.popen(%W[git log --format=fuller --topo-order --no-merges #{range}]) do |log|
7
+ line = log.gets
8
+ FileUtils.mkpath(File.dirname(output))
9
+ File.open(output, "wb") do |f|
10
+ f.print "-*- coding: utf-8 -*-\n\n", line
11
+ log.each_line do |line|
12
+ line.sub!(/^(?!:)(?:Author|Commit)?(?:Date)?: /, ' \&')
13
+ line.sub!(/ +$/, '')
14
+ f.print(line)
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ tags = IO.popen(%w[git tag -l v[0-9]*]).grep(/v(.*)/) {$1}
21
+ tags.sort_by! {|tag| tag.scan(/\d+/).map(&:to_i)}
22
+ tags.inject(nil) do |prev, tag|
23
+ task("logs/ChangeLog-#{tag}") {|t| changelog[t.name, tag, prev]}
24
+ tag
25
+ end
26
+
27
+ desc "Make ChangeLog"
28
+ task "ChangeLog", [:ver, :prev] do |t, ver: nil, prev: tags.last|
29
+ changelog[t.name, ver, prev]
30
+ end
31
+
32
+ changelogs = ["ChangeLog", *tags.map {|tag| "logs/ChangeLog-#{tag}"}]
33
+ task "changelogs" => changelogs
34
+ CLOBBER.concat(changelogs) << "logs"
@@ -0,0 +1,5 @@
1
+ task "build" => "date_epoch"
2
+
3
+ task "date_epoch" do
4
+ ENV["SOURCE_DATE_EPOCH"] = IO.popen(%W[git -C #{__dir__} log -1 --format=%ct], &:read).chomp
5
+ end
@@ -0,0 +1,47 @@
1
+ class << (helper = Bundler::GemHelper.instance)
2
+ def mainfile
3
+ "lib/#{File.basename(gemspec.loaded_from, ".gemspec")}.rb"
4
+ end
5
+
6
+ def update_version
7
+ File.open(mainfile, "r+b") do |f|
8
+ d = f.read
9
+ if d.sub!(/^(\s*OptionParser::Version\s*=\s*)".*"/) {$1 + gemspec.version.to_s.dump}
10
+ f.rewind
11
+ f.truncate(0)
12
+ f.print(d)
13
+ end
14
+ end
15
+ end
16
+
17
+ def commit_bump
18
+ sh(%W[git -C #{File.dirname(gemspec.loaded_from)} commit -m bump\ up\ to\ #{gemspec.version}
19
+ #{mainfile}])
20
+ end
21
+
22
+ def version=(v)
23
+ gemspec.version = v
24
+ update_version
25
+ commit_bump
26
+ end
27
+ end
28
+
29
+ major, minor, teeny = helper.gemspec.version.segments
30
+
31
+ task "bump:teeny" do
32
+ helper.version = Gem::Version.new("#{major}.#{minor}.#{teeny+1}")
33
+ end
34
+
35
+ task "bump:minor" do
36
+ helper.version = Gem::Version.new("#{major}.#{minor+1}.0")
37
+ end
38
+
39
+ task "bump:major" do
40
+ helper.version = Gem::Version.new("#{major+1}.0.0")
41
+ end
42
+
43
+ task "bump" => "bump:teeny"
44
+
45
+ task "tag" do
46
+ helper.__send__(:tag_version)
47
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optparse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobu Nakada
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-18 00:00:00.000000000 Z
11
+ date: 2021-03-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: OptionParser is a class for command-line option analysis.
14
14
  email:
@@ -17,15 +17,9 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - ".github/workflows/test.yml"
21
- - ".gitignore"
22
20
  - COPYING
23
- - Gemfile
24
- - Gemfile.lock
25
21
  - README.md
26
22
  - Rakefile
27
- - bin/console
28
- - bin/setup
29
23
  - lib/optionparser.rb
30
24
  - lib/optparse.rb
31
25
  - lib/optparse/ac.rb
@@ -35,7 +29,12 @@ files:
35
29
  - lib/optparse/time.rb
36
30
  - lib/optparse/uri.rb
37
31
  - lib/optparse/version.rb
32
+ - misc/rb_optparse.bash
33
+ - misc/rb_optparse.zsh
38
34
  - optparse.gemspec
35
+ - rakelib/changelogs.rake
36
+ - rakelib/epoch.rake
37
+ - rakelib/version.rake
39
38
  homepage: https://github.com/ruby/optparse
40
39
  licenses:
41
40
  - Ruby
@@ -58,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
57
  - !ruby/object:Gem::Version
59
58
  version: '0'
60
59
  requirements: []
61
- rubygems_version: 3.1.2
60
+ rubygems_version: 3.3.0.dev
62
61
  signing_key:
63
62
  specification_version: 4
64
63
  summary: OptionParser is a class for command-line option analysis.
@@ -1,24 +0,0 @@
1
- name: test
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- build:
7
- name: build (${{ matrix.ruby }} / ${{ matrix.os }})
8
- strategy:
9
- matrix:
10
- ruby: [ 2.7, 2.6, 2.5, head ]
11
- os: [ ubuntu-latest, macos-latest ]
12
- runs-on: ${{ matrix.os }}
13
- steps:
14
- - uses: actions/checkout@master
15
- - name: Set up Ruby
16
- uses: ruby/setup-ruby@v1
17
- with:
18
- ruby-version: ${{ matrix.ruby }}
19
- - name: Install dependencies
20
- run: |
21
- gem install bundler --no-document
22
- bundle install
23
- - name: Run test
24
- run: rake test
data/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "rake"
4
- gem "test-unit"
data/Gemfile.lock DELETED
@@ -1,17 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- power_assert (1.2.0)
5
- rake (13.0.1)
6
- test-unit (3.3.5)
7
- power_assert
8
-
9
- PLATFORMS
10
- ruby
11
-
12
- DEPENDENCIES
13
- rake
14
- test-unit
15
-
16
- BUNDLED WITH
17
- 2.2.0.dev
data/bin/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "optparse"
5
-
6
- require "irb"
7
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install