toys 0.3.10 → 0.3.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +2 -2
- data/bin/toys +1 -0
- data/builtins/do.rb +4 -2
- data/builtins/system.rb +3 -1
- data/docs/guide.md +193 -72
- data/lib/toys.rb +2 -0
- data/lib/toys/standard_cli.rb +10 -8
- data/lib/toys/templates/clean.rb +3 -1
- data/lib/toys/templates/gem_build.rb +4 -2
- data/lib/toys/templates/minitest.rb +5 -4
- data/lib/toys/templates/rdoc.rb +5 -3
- data/lib/toys/templates/rubocop.rb +3 -1
- data/lib/toys/templates/yardoc.rb +11 -7
- data/lib/toys/version.rb +3 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e808d6aa4a3e6a57484c458c7c2633ce1dc248991327c69d3c728b3eb502f135
|
4
|
+
data.tar.gz: 5092670abd0a8cdf65d6d62dc1d34455229022e9780384ec2d91dd34553a8615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 932274290953fe6bbcc60f58c87b808b2f0ebec867ca6a8d21c9342ca49788131fbad9f1d7755147c4f5635177da7615e51d22f88fe91d9fe617a499b20b2748
|
7
|
+
data.tar.gz: 5d4f9b1651d79c9cbb71cedc014cbf1af5c63f22817a1f7a87f588316ee5080b8afb0a0437275428d15a15ac4bce188cd021d94f594703e165237a6dadf90fd4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 0.3.11 / 2018-07-02
|
4
|
+
|
5
|
+
* CHANGED: Require Ruby 2.3 or later
|
6
|
+
* CHANGED: Renamed "set" directive to "static" to reduce confusion with Tool#set.
|
7
|
+
* ADDED: Convenience methods for getting option values
|
8
|
+
|
3
9
|
### 0.3.10 / 2018-06-30
|
4
10
|
|
5
11
|
* CHANGED: Dropped Tool#option. Use Tool#get instead.
|
data/README.md
CHANGED
@@ -34,7 +34,7 @@ Unlike most command line frameworks, Toys is *not primarily* designed to help
|
|
34
34
|
you build and ship a custom command line binary written in Ruby. However, you
|
35
35
|
*can* use it in that way by building with the "toys-core" API, available as a
|
36
36
|
separate gem. For more info on using toys-core, see
|
37
|
-
https://
|
37
|
+
https://www.rubydoc.info/gems/toys-core
|
38
38
|
|
39
39
|
## Quick Start
|
40
40
|
|
@@ -71,7 +71,7 @@ leading period). Copy the following into the file, and save it:
|
|
71
71
|
desc "My first tool!"
|
72
72
|
flag :whom, default: "world"
|
73
73
|
def run
|
74
|
-
puts "Hello, #{
|
74
|
+
puts "Hello, #{whom}!"
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
data/bin/toys
CHANGED
data/builtins/do.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -55,8 +57,8 @@ flag :delim, "-d", "--delim=VALUE",
|
|
55
57
|
remaining_args :args, desc: "A series of tools to run, separated by the delimiter"
|
56
58
|
|
57
59
|
def run
|
58
|
-
|
59
|
-
.chunk { |arg| arg ==
|
60
|
+
args
|
61
|
+
.chunk { |arg| arg == delim ? :_separator : true }
|
60
62
|
.each do |_, action|
|
61
63
|
code = cli.run(action)
|
62
64
|
exit(code) unless code.zero?
|
data/builtins/system.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -61,7 +63,7 @@ tool "update" do
|
|
61
63
|
cur_version = ::Gem::Version.new(::Toys::VERSION)
|
62
64
|
if latest_version > cur_version
|
63
65
|
prompt = "Update toys from #{cur_version} to #{latest_version}?"
|
64
|
-
exit(1) unless
|
66
|
+
exit(1) unless yes || confirm(prompt)
|
65
67
|
result = terminal.spinner(leading_text: "Installing Toys version #{latest_version}... ",
|
66
68
|
final_text: "Done.\n") do
|
67
69
|
exec(["gem", "install", "toys", "--version", latest_version.to_s],
|
data/docs/guide.md
CHANGED
@@ -265,8 +265,8 @@ Consider the following example:
|
|
265
265
|
flag :shout, "-s", "--shout", desc: "Greet loudly."
|
266
266
|
|
267
267
|
def run
|
268
|
-
greeting = "Hello, #{
|
269
|
-
greeting.upcase! if
|
268
|
+
greeting = "Hello, #{whom}!"
|
269
|
+
greeting.upcase! if shout
|
270
270
|
puts greeting
|
271
271
|
end
|
272
272
|
end
|
@@ -454,7 +454,7 @@ integer during parsing:
|
|
454
454
|
tool "args-demo" do
|
455
455
|
required_arg :age, accept: Integer
|
456
456
|
def run
|
457
|
-
age
|
457
|
+
puts "Next year I will be #{age + 1}" # Age is an integer
|
458
458
|
...
|
459
459
|
|
460
460
|
If you pass a non-integer for this argument, Toys will report a usage error.
|
@@ -505,8 +505,8 @@ You can also declare the value to be optional:
|
|
505
505
|
|
506
506
|
flag :whom, "--whom[=VALUE]"
|
507
507
|
flag :whom, "--whom [VALUE]"
|
508
|
-
flag :whom, "-
|
509
|
-
flag :whom, "-w VALUE"
|
508
|
+
flag :whom, "-w[VALUE]"
|
509
|
+
flag :whom, "-w [VALUE]"
|
510
510
|
|
511
511
|
Note that if you define multiple flags together, they will all be coerced to
|
512
512
|
the same "type". That is, if one takes a value, they all will implicitly take
|
@@ -541,7 +541,7 @@ integer during parsing:
|
|
541
541
|
tool "args-demo" do
|
542
542
|
flag :age, accept: Integer
|
543
543
|
def run
|
544
|
-
|
544
|
+
puts "Next year I will be #{age + 1}" # Age is an integer
|
545
545
|
...
|
546
546
|
|
547
547
|
If you pass a non-integer for this flag value, Toys will report a usage error.
|
@@ -651,17 +651,38 @@ Let's revisit the "greet" example we covered earlier.
|
|
651
651
|
flag :shout, "-s", "--shout"
|
652
652
|
|
653
653
|
def run
|
654
|
-
greeting = "Hello, #{
|
655
|
-
greeting.upcase! if
|
654
|
+
greeting = "Hello, #{whom}!"
|
655
|
+
greeting.upcase! if shout
|
656
656
|
puts greeting
|
657
657
|
end
|
658
658
|
end
|
659
659
|
|
660
|
-
Note
|
660
|
+
Note that you can produce output or interact with the console using the normal
|
661
|
+
Ruby `$stdout`, `$stderr`, and `$stdin` streams.
|
662
|
+
|
663
|
+
Note also how the `run` method can access values that were assigned by flags or
|
664
|
+
positional arguments by just calling a method with that flag or argument name.
|
665
|
+
When you declare a flag or argument, if the option name is a symbol that is a
|
666
|
+
valid Ruby method name, Toys will provide a method of that name that you can
|
667
|
+
call to get the value.
|
668
|
+
|
669
|
+
If you create a flag or argument whose option name is not a symbol _or_ is not
|
670
|
+
a valid method name, you can still get the value by calling the
|
661
671
|
[Toys::Tool#get](https://www.rubydoc.info/gems/toys-core/Toys%2FTool:get)
|
662
|
-
method
|
663
|
-
|
664
|
-
|
672
|
+
method. For example:
|
673
|
+
|
674
|
+
tool "greet" do
|
675
|
+
# The name "whom-to-greet" is not a valid method name.
|
676
|
+
optional_arg "whom-to-greet", default: "world"
|
677
|
+
flag :shout, "-s", "--shout"
|
678
|
+
|
679
|
+
def run
|
680
|
+
# We can access the "whom-to-greet" option using the "get" method.
|
681
|
+
greeting = "Hello, #{get('whom-to-greet')}!"
|
682
|
+
greeting.upcase! if shout
|
683
|
+
puts greeting
|
684
|
+
end
|
685
|
+
end
|
665
686
|
|
666
687
|
If a tool's `run` method finishes normally, Toys will exit with a result code
|
667
688
|
of 0, indicating success. You may exit immediately and/or provide a nonzero
|
@@ -680,7 +701,26 @@ exit with a nonzero code.
|
|
680
701
|
|
681
702
|
Finally, you may also define additional methods within the tool. These are
|
682
703
|
available to be called by your `run` method, and can be used to decompose your
|
683
|
-
tool implementation.
|
704
|
+
tool implementation. Here's a contrived example:
|
705
|
+
|
706
|
+
tool "greet-many" do
|
707
|
+
# Support any number of arguments on the command line
|
708
|
+
remaining_args :whom, default: ["world"]
|
709
|
+
flag :shout, "-s", "--shout"
|
710
|
+
|
711
|
+
# You can define helper methods like this.
|
712
|
+
def greet(name)
|
713
|
+
greeting = "Hello, #{name}!"
|
714
|
+
greeting.upcase! if shout
|
715
|
+
puts greeting
|
716
|
+
end
|
717
|
+
|
718
|
+
def run
|
719
|
+
whom.each do |name|
|
720
|
+
greet(name)
|
721
|
+
end
|
722
|
+
end
|
723
|
+
end
|
684
724
|
|
685
725
|
This should be enough to get you started implementing tools. A variety of
|
686
726
|
additional features are available for your tool implementation and will be
|
@@ -795,7 +835,7 @@ For example, one way to create a "greet" tool, as we saw before, is to write a
|
|
795
835
|
tool "greet" do
|
796
836
|
optional_arg :whom, default: "world"
|
797
837
|
def run
|
798
|
-
puts "Hello, #{
|
838
|
+
puts "Hello, #{whom}"
|
799
839
|
end
|
800
840
|
end
|
801
841
|
|
@@ -804,7 +844,7 @@ creating a file `greet.rb` inside that directory. The contents would be:
|
|
804
844
|
|
805
845
|
optional_arg :whom, default: "world"
|
806
846
|
def run
|
807
|
-
puts "Hello, #{
|
847
|
+
puts "Hello, #{whom}"
|
808
848
|
end
|
809
849
|
|
810
850
|
Notice that we did not use a `tool "greet"` block here. That is because the
|
@@ -1084,8 +1124,6 @@ that makes Highline available. It also automatically installs the highline
|
|
1084
1124
|
gem (version 2.x) if it is not available. For more information, see the
|
1085
1125
|
[Toys::StandardMixins::Highline mixin module](https://www.rubydoc.info/gems/toys-core/Toys/StandardMixins/Highline).
|
1086
1126
|
|
1087
|
-
Additional mixins are forthcoming...
|
1088
|
-
|
1089
1127
|
## Sharing Code
|
1090
1128
|
|
1091
1129
|
As you accumulate additional and more complex tools, you may find that some of
|
@@ -1639,6 +1677,144 @@ essentially identical to the Toys files provided for the **toys** and
|
|
1639
1677
|
end
|
1640
1678
|
end
|
1641
1679
|
|
1680
|
+
## Using Third-Party Gems
|
1681
|
+
|
1682
|
+
The Ruby community has developed many resources for building command line
|
1683
|
+
tools, including a variety of gems that provide alternate command line parsing,
|
1684
|
+
control of the ANSI terminal, formatted output such as trees and tables, and
|
1685
|
+
effects such as hidden input, progress bars, various subprocess tools, and so
|
1686
|
+
forth.
|
1687
|
+
|
1688
|
+
This section describes how to use a third-party gem in your tool.
|
1689
|
+
|
1690
|
+
### Activating Gems
|
1691
|
+
|
1692
|
+
The toys gem itself includes only two gems: **toys** and **toys-core**. It has
|
1693
|
+
no other gem dependencies. However, if you want to use a third-party gem in
|
1694
|
+
your tool, Toys provides a convenient mechanism to ensure the gem is installed.
|
1695
|
+
|
1696
|
+
If the gem is needed to *define* the tool, use the `gem` directive to ensure
|
1697
|
+
the gem is installed and activated. This takes the name of the gem, and an
|
1698
|
+
optional set of version requirements. If a gem matching the given version
|
1699
|
+
requirements is installed, it is activated. If not, the gem is installed (which
|
1700
|
+
the user can confirm or abort). Or, if Toys is being run in a bundle, a message
|
1701
|
+
is printed informing the user that they need to add the gem to their Gemfile.
|
1702
|
+
|
1703
|
+
For example, here's a way to configure a tool with flags for each of the
|
1704
|
+
HighLine styles:
|
1705
|
+
|
1706
|
+
tool "highline-styles-demo" do
|
1707
|
+
gem "highline", "~> 2.0"
|
1708
|
+
require "highline"
|
1709
|
+
HighLine::BuiltinStyles::STYLES.each do |style|
|
1710
|
+
style = style.downcase
|
1711
|
+
flag style.to_sym, "--#{style}", "Apply #{style} to the text"
|
1712
|
+
end
|
1713
|
+
def run
|
1714
|
+
# ...
|
1715
|
+
|
1716
|
+
If the gem is *not* needed to define the tool, but is needed to *run* the tool,
|
1717
|
+
then you can call
|
1718
|
+
[Toys::Tool#gem](https://www.rubydoc.info/gems/toys-core/Toys%2FTool:gem) from
|
1719
|
+
your `run` method. Here's an example:
|
1720
|
+
|
1721
|
+
tool "rake" do
|
1722
|
+
disable_argument_passing
|
1723
|
+
def run
|
1724
|
+
gem "rake", "~> 12.0"
|
1725
|
+
Kernel.exec(["rake"] + args)
|
1726
|
+
end
|
1727
|
+
end
|
1728
|
+
|
1729
|
+
If a gem satisfying the given version constraints is already activated, it
|
1730
|
+
remains active. If a gem with a conflicting version is already activated, an
|
1731
|
+
exception is raised.
|
1732
|
+
|
1733
|
+
If you are not in the Toys DSL context—e.g. you are writing a class-based
|
1734
|
+
mixin—you should use
|
1735
|
+
[Toys::Utils::Gems.activate](https://www.rubydoc.info/gems/toys-core/Toys%2FUtils%2FGems:activate)
|
1736
|
+
instead. For example:
|
1737
|
+
|
1738
|
+
Toys::Utils::Gems.activate("highline", "~> 2.0")
|
1739
|
+
|
1740
|
+
Note these methods are a bit different from the
|
1741
|
+
[gem method](http://ruby-doc.org/stdlib/libdoc/rubygems/rdoc/Kernel.html)
|
1742
|
+
provided by Rubygems. The Toys version attempts to install a missing gem for
|
1743
|
+
you, whereas Rubygems will just throw an exception.
|
1744
|
+
|
1745
|
+
### Useful Gems
|
1746
|
+
|
1747
|
+
Now that you know how to ensure a gem is installed, let's look at some third-
|
1748
|
+
party gems that you might find useful when writing tools.
|
1749
|
+
|
1750
|
+
We already saw how to use the **highline** gem. Highline generally provides two
|
1751
|
+
features: terminal styling, and prompts. For these capabilities and many more,
|
1752
|
+
you might also consider [TTY](https://github.com/piotrmurach/tty). It comprises
|
1753
|
+
a suite of gems that you can use separately or in tandem. Here are a few
|
1754
|
+
examples.
|
1755
|
+
|
1756
|
+
To produce styled output, consider
|
1757
|
+
[Pastel](https://github.com/piotrmurach/pastel).
|
1758
|
+
|
1759
|
+
tool "fancy-output" do
|
1760
|
+
def run
|
1761
|
+
gem "pastel", "~> 0.7"
|
1762
|
+
require "pastel"
|
1763
|
+
pastel = Pastel.new
|
1764
|
+
puts pastel.red("Rubies!")
|
1765
|
+
end
|
1766
|
+
end
|
1767
|
+
|
1768
|
+
To create rich user prompts, consider
|
1769
|
+
[tty-prompt](https://github.com/piotrmurach/tty-prompt).
|
1770
|
+
|
1771
|
+
tool "favorite-language" do
|
1772
|
+
def run
|
1773
|
+
gem "tty-prompt", "~> 0.16"
|
1774
|
+
require "tty-prompt"
|
1775
|
+
prompt = TTY::Prompt.new
|
1776
|
+
lang = prompt.select("What is your favorite language?",
|
1777
|
+
%w[Elixir Java Python Ruby Rust Other])
|
1778
|
+
prompt.say("#{lang} is awesome!")
|
1779
|
+
end
|
1780
|
+
end
|
1781
|
+
|
1782
|
+
To create tabular output, consider
|
1783
|
+
[tty-table](https://github.com/piotrmurach/tty-table).
|
1784
|
+
|
1785
|
+
tool "matrix" do
|
1786
|
+
def run
|
1787
|
+
gem "tty-table", "~> 0.10"
|
1788
|
+
require "tty-table"
|
1789
|
+
table = TTY::Table.new(["Language", "Creator"],
|
1790
|
+
[["Ruby", "Matz"],
|
1791
|
+
["Python", "Guido"],
|
1792
|
+
["Elixir", "Jose"]])
|
1793
|
+
puts table.render(:ascii)
|
1794
|
+
end
|
1795
|
+
end
|
1796
|
+
|
1797
|
+
To show progress, consider
|
1798
|
+
[tty-progressbar](https://github.com/piotrmurach/tty-progressbar) for
|
1799
|
+
deterministic processes, or
|
1800
|
+
[tty-spinner](https://github.com/piotrmurach/tty-spinner) for
|
1801
|
+
non-deterministic.
|
1802
|
+
|
1803
|
+
tool "waiting" do
|
1804
|
+
def run
|
1805
|
+
gem "tty-progressbar", "~> 0.15"
|
1806
|
+
require "tty-progressbar"
|
1807
|
+
bar = TTY::ProgressBar.new("Waiting [:bar]", total: 30)
|
1808
|
+
30.times do
|
1809
|
+
sleep(0.1)
|
1810
|
+
bar.advance(1)
|
1811
|
+
end
|
1812
|
+
end
|
1813
|
+
end
|
1814
|
+
|
1815
|
+
A variety of other useful gems can also be found in
|
1816
|
+
[this article](https://lab.hookops.com/ruby-cli-gems.html).
|
1817
|
+
|
1642
1818
|
## Advanced Tool Definition Techniques
|
1643
1819
|
|
1644
1820
|
This section covers some additional features that are often useful for writing
|
@@ -1775,61 +1951,6 @@ Here is an example that wraps calls to git:
|
|
1775
1951
|
end
|
1776
1952
|
end
|
1777
1953
|
|
1778
|
-
### Activating Gems
|
1779
|
-
|
1780
|
-
Sometimes implementing a tool will require a third-party gem. Some mixins also
|
1781
|
-
utilize a gem. Toys provides a way to help the user install such gems if
|
1782
|
-
needed.
|
1783
|
-
|
1784
|
-
If the gem is needed to *define* the tool, use the `gem` directive to ensure
|
1785
|
-
the gem is installed and activated. This takes the name of the gem, and an
|
1786
|
-
optional set of version requirements. If a gem matching the given version
|
1787
|
-
requirements is installed, it is activated. If not, the gem is installed (which
|
1788
|
-
the user can confirm or abort). Or, if Toys is being run in a bundle, a message
|
1789
|
-
is printed informing the user that they need to add the gem to their Gemfile.
|
1790
|
-
|
1791
|
-
For example, here's a way to configure a tool with flags for each of the
|
1792
|
-
HighLine styles:
|
1793
|
-
|
1794
|
-
tool "highline-styles-demo" do
|
1795
|
-
gem "highline", "~> 2.0"
|
1796
|
-
require "highline"
|
1797
|
-
HighLine::BuiltinStyles::STYLES.each do |style|
|
1798
|
-
style = style.downcase
|
1799
|
-
flag style.to_sym, "--#{style}", "Apply #{style} to the text"
|
1800
|
-
end
|
1801
|
-
def run
|
1802
|
-
# ...
|
1803
|
-
|
1804
|
-
If the gem is *not* needed to define the tool, but is needed to *run* the tool,
|
1805
|
-
then you can call
|
1806
|
-
[Toys::Tool#gem](https://www.rubydoc.info/gems/toys-core/Toys%2FTool:gem) from
|
1807
|
-
your `run` method. Here's an example:
|
1808
|
-
|
1809
|
-
tool "rake" do
|
1810
|
-
disable_argument_passing
|
1811
|
-
def run
|
1812
|
-
gem "rake", "~> 12.0"
|
1813
|
-
Kernel.exec(["rake"] + args)
|
1814
|
-
end
|
1815
|
-
end
|
1816
|
-
|
1817
|
-
If a gem satisfying the given version constraints is already activated, it
|
1818
|
-
remains active. If a gem with a conflicting version is already activated, an
|
1819
|
-
exception is raised.
|
1820
|
-
|
1821
|
-
If you are not in the Toys DSL context—e.g. you are writing a class-based
|
1822
|
-
mixin—you should use
|
1823
|
-
[Toys::Utils::Gems.activate](https://www.rubydoc.info/gems/toys-core/Toys%2FUtils%2FGems:activate)
|
1824
|
-
instead. For example:
|
1825
|
-
|
1826
|
-
Toys::Utils::Gems.activate("highline", "~> 2.0")
|
1827
|
-
|
1828
|
-
Note these methods are a bit different from the
|
1829
|
-
[gem method](http://ruby-doc.org/stdlib-2.5.1/libdoc/rubygems/rdoc/Kernel.html)
|
1830
|
-
provided by Rubygems. The Toys version attempts to install a missing gem for
|
1831
|
-
you, whereas Rubygems will just throw an exception.
|
1832
|
-
|
1833
1954
|
## Toys Administration Using the System Tools
|
1834
1955
|
|
1835
1956
|
Toys comes with a few built-in tools, including some that let you administer
|
data/lib/toys.rb
CHANGED
data/lib/toys/standard_cli.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -45,37 +47,37 @@ module Toys
|
|
45
47
|
# Standard toys configuration directory name
|
46
48
|
# @return [String]
|
47
49
|
#
|
48
|
-
CONFIG_DIR_NAME = ".toys"
|
50
|
+
CONFIG_DIR_NAME = ".toys"
|
49
51
|
|
50
52
|
##
|
51
53
|
# Standard toys configuration file name
|
52
54
|
# @return [String]
|
53
55
|
#
|
54
|
-
CONFIG_FILE_NAME = ".toys.rb"
|
56
|
+
CONFIG_FILE_NAME = ".toys.rb"
|
55
57
|
|
56
58
|
##
|
57
59
|
# Standard index file name in a toys configuration
|
58
60
|
# @return [String]
|
59
61
|
#
|
60
|
-
INDEX_FILE_NAME = ".toys.rb"
|
62
|
+
INDEX_FILE_NAME = ".toys.rb"
|
61
63
|
|
62
64
|
##
|
63
65
|
# Standard toys preload file name
|
64
66
|
# @return [String]
|
65
67
|
#
|
66
|
-
PRELOAD_FILE_NAME = ".preload.rb"
|
68
|
+
PRELOAD_FILE_NAME = ".preload.rb"
|
67
69
|
|
68
70
|
##
|
69
71
|
# Name of standard toys binary
|
70
72
|
# @return [String]
|
71
73
|
#
|
72
|
-
BINARY_NAME = "toys"
|
74
|
+
BINARY_NAME = "toys"
|
73
75
|
|
74
76
|
##
|
75
77
|
# Short description for the standard root tool
|
76
78
|
# @return [String]
|
77
79
|
#
|
78
|
-
DEFAULT_ROOT_DESC = "Your personal command line tool"
|
80
|
+
DEFAULT_ROOT_DESC = "Your personal command line tool"
|
79
81
|
|
80
82
|
##
|
81
83
|
# Help text for the standard root tool
|
@@ -85,13 +87,13 @@ module Toys
|
|
85
87
|
"Toys is your personal command line tool. You can add to the list of commands below by" \
|
86
88
|
" writing scripts in Ruby using a simple DSL, and Toys will organize and document them" \
|
87
89
|
" and make them available globally or scoped to specific directories that you choose." \
|
88
|
-
" For detailed information, see https://www.rubydoc.info/gems/toys"
|
90
|
+
" For detailed information, see https://www.rubydoc.info/gems/toys"
|
89
91
|
|
90
92
|
##
|
91
93
|
# Short description for the verion flag
|
92
94
|
# @return [String]
|
93
95
|
#
|
94
|
-
DEFAULT_VERSION_FLAG_DESC = "Show the version of Toys."
|
96
|
+
DEFAULT_VERSION_FLAG_DESC = "Show the version of Toys."
|
95
97
|
|
96
98
|
##
|
97
99
|
# Create a standard CLI, configured with the appropriate paths and
|
data/lib/toys/templates/clean.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -39,7 +41,7 @@ module Toys
|
|
39
41
|
# Default tool name
|
40
42
|
# @return [String]
|
41
43
|
#
|
42
|
-
DEFAULT_TOOL_NAME = "clean"
|
44
|
+
DEFAULT_TOOL_NAME = "clean"
|
43
45
|
|
44
46
|
##
|
45
47
|
# Create the template settings for the Clean template.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -39,7 +41,7 @@ module Toys
|
|
39
41
|
# Default tool name
|
40
42
|
# @return [String]
|
41
43
|
#
|
42
|
-
DEFAULT_TOOL_NAME = "build"
|
44
|
+
DEFAULT_TOOL_NAME = "build"
|
43
45
|
|
44
46
|
##
|
45
47
|
# Create the template settings for the GemBuild template.
|
@@ -106,7 +108,7 @@ module Toys
|
|
106
108
|
logger.error "Cannot push the gem when there are uncommited changes"
|
107
109
|
exit(1)
|
108
110
|
end
|
109
|
-
exit(1) unless
|
111
|
+
exit(1) unless yes || confirm("Release #{gemfile}?")
|
110
112
|
exec(["gem", "push", "pkg/#{gemfile}"])
|
111
113
|
if template.tag
|
112
114
|
exec(["git", "tag", "v#{version}"])
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -39,13 +41,13 @@ module Toys
|
|
39
41
|
# Default version requirements for the minitest gem.
|
40
42
|
# @return [Array<String>]
|
41
43
|
#
|
42
|
-
DEFAULT_GEM_VERSION_REQUIREMENTS = "~> 5.0"
|
44
|
+
DEFAULT_GEM_VERSION_REQUIREMENTS = "~> 5.0"
|
43
45
|
|
44
46
|
##
|
45
47
|
# Default tool name
|
46
48
|
# @return [String]
|
47
49
|
#
|
48
|
-
DEFAULT_TOOL_NAME = "test"
|
50
|
+
DEFAULT_TOOL_NAME = "test"
|
49
51
|
|
50
52
|
##
|
51
53
|
# Default set of library paths
|
@@ -110,9 +112,8 @@ module Toys
|
|
110
112
|
lib_path = template.libs.join(::File::PATH_SEPARATOR)
|
111
113
|
ruby_args << "-I#{lib_path}"
|
112
114
|
end
|
113
|
-
ruby_args << "-w" if
|
115
|
+
ruby_args << "-w" if warnings
|
114
116
|
|
115
|
-
tests = self[:tests]
|
116
117
|
if tests.empty?
|
117
118
|
Array(template.files).each do |pattern|
|
118
119
|
tests.concat(::Dir.glob(pattern))
|
data/lib/toys/templates/rdoc.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -39,19 +41,19 @@ module Toys
|
|
39
41
|
# Default version requirements for the rdoc gem.
|
40
42
|
# @return [Array<String>]
|
41
43
|
#
|
42
|
-
DEFAULT_GEM_VERSION_REQUIREMENTS = ">= 5.0.0"
|
44
|
+
DEFAULT_GEM_VERSION_REQUIREMENTS = ">= 5.0.0"
|
43
45
|
|
44
46
|
##
|
45
47
|
# Default tool name
|
46
48
|
# @return [String]
|
47
49
|
#
|
48
|
-
DEFAULT_TOOL_NAME = "rdoc"
|
50
|
+
DEFAULT_TOOL_NAME = "rdoc"
|
49
51
|
|
50
52
|
##
|
51
53
|
# Default output directory
|
52
54
|
# @return [String]
|
53
55
|
#
|
54
|
-
DEFAULT_OUTPUT_DIR = "html"
|
56
|
+
DEFAULT_OUTPUT_DIR = "html"
|
55
57
|
|
56
58
|
##
|
57
59
|
# Create the template settings for the Rdoc template.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -45,7 +47,7 @@ module Toys
|
|
45
47
|
# Default tool name
|
46
48
|
# @return [String]
|
47
49
|
#
|
48
|
-
DEFAULT_TOOL_NAME = "rubocop"
|
50
|
+
DEFAULT_TOOL_NAME = "rubocop"
|
49
51
|
|
50
52
|
##
|
51
53
|
# Create the template settings for the Rubocop template.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -39,13 +41,13 @@ module Toys
|
|
39
41
|
# Default version requirements for the yard gem.
|
40
42
|
# @return [String]
|
41
43
|
#
|
42
|
-
DEFAULT_GEM_VERSION_REQUIREMENTS = "~> 0.9"
|
44
|
+
DEFAULT_GEM_VERSION_REQUIREMENTS = "~> 0.9"
|
43
45
|
|
44
46
|
##
|
45
47
|
# Default tool name
|
46
48
|
# @return [String]
|
47
49
|
#
|
48
|
-
DEFAULT_TOOL_NAME = "yardoc"
|
50
|
+
DEFAULT_TOOL_NAME = "yardoc"
|
49
51
|
|
50
52
|
##
|
51
53
|
# Create the template settings for the Yardoc template.
|
@@ -156,7 +158,7 @@ module Toys
|
|
156
158
|
default: template.generate_output,
|
157
159
|
desc: "Whether to generate output"
|
158
160
|
else
|
159
|
-
|
161
|
+
static :generate_output, template.generate_output
|
160
162
|
end
|
161
163
|
|
162
164
|
include :exec
|
@@ -178,7 +180,7 @@ module Toys
|
|
178
180
|
stats_options = template.stats_options.dup
|
179
181
|
stats_options << "--list-undoc" if template.fail_on_undocumented_objects
|
180
182
|
run_options << "--fail-on-warning" if template.fail_on_warning
|
181
|
-
run_options << "--no-output" unless
|
183
|
+
run_options << "--no-output" unless generate_output
|
182
184
|
run_options << "--output-dir" << template.output_dir if template.output_dir
|
183
185
|
run_options << "--no-public" unless template.show_public
|
184
186
|
run_options << "--protected" if template.show_protected
|
@@ -197,20 +199,22 @@ module Toys
|
|
197
199
|
|
198
200
|
result = exec_proc(proc { ::YARD::CLI::Yardoc.run(*run_options) })
|
199
201
|
if result.error?
|
200
|
-
puts("Yardoc encountered errors", :red, :bold) unless verbosity
|
202
|
+
puts("Yardoc encountered errors", :red, :bold) unless verbosity.negative?
|
201
203
|
exit(1)
|
202
204
|
end
|
203
205
|
unless stats_options.empty?
|
204
206
|
result = exec_proc(proc { ::YARD::CLI::Stats.run(*stats_options) }, out: :capture)
|
205
207
|
puts result.captured_out
|
206
208
|
if result.error?
|
207
|
-
puts("Yardoc encountered errors", :red, :bold) unless verbosity
|
209
|
+
puts("Yardoc encountered errors", :red, :bold) unless verbosity.negative?
|
208
210
|
exit(1)
|
209
211
|
end
|
210
212
|
exit_on_nonzero_status(result)
|
211
213
|
if template.fail_on_undocumented_objects
|
212
214
|
if result.captured_out =~ /Undocumented\sObjects:/
|
213
|
-
|
215
|
+
unless verbosity.negative?
|
216
|
+
puts("Yardoc encountered undocumented objects", :red, :bold)
|
217
|
+
end
|
214
218
|
exit(1)
|
215
219
|
end
|
216
220
|
end
|
data/lib/toys/version.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright 2018 Daniel Azuma
|
2
4
|
#
|
3
5
|
# All rights reserved.
|
@@ -32,5 +34,5 @@ module Toys
|
|
32
34
|
# Current version of the Toys command line binary
|
33
35
|
# @return [String]
|
34
36
|
#
|
35
|
-
VERSION = "0.3.
|
37
|
+
VERSION = "0.3.11"
|
36
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: toys-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.3.
|
19
|
+
version: 0.3.11
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.3.
|
26
|
+
version: 0.3.11
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 2.
|
138
|
+
version: 2.3.0
|
139
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
141
|
- - ">="
|