toys 0.3.10 → 0.3.11
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/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
|
- - ">="
|