toys 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/toys.rb +1 -0
- data/lib/toys/builtins/system.rb +30 -0
- data/lib/toys/context.rb +1 -1
- data/lib/toys/helpers/exec.rb +1 -1
- data/lib/toys/helpers/file_utils.rb +7 -0
- data/lib/toys/parser.rb +14 -0
- data/lib/toys/template.rb +21 -0
- data/lib/toys/templates/gem_build.rb +63 -0
- data/lib/toys/templates/minitest.rb +41 -0
- data/lib/toys/tool.rb +1 -1
- data/lib/toys/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 562abaf505246d6b3a84c800908b19cfe9acbc6a57d5432bceccac31eaa107ef
|
4
|
+
data.tar.gz: 39efb6120be94eeb4479e8ae4fe782d796a49e5dcfd4e837735dd69986e3cfb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe6196e43402bce7c7e916dcc75906e5b420ce1882ed0ca6104b6f0a54c6263feba8bf2284c1e8b8d2ca783ed1dacb291078622912f84483628b9f003397ca9e
|
7
|
+
data.tar.gz: bd24a58dcdc1fd2f34c50b97d57129e031f17aaa77044af1c6b62a86d67a1ba32506d3234156cb66576f282de82953e95cf52460fc409f86a82ff5d6c64e42de
|
data/lib/toys.rb
CHANGED
data/lib/toys/builtins/system.rb
CHANGED
@@ -1,9 +1,39 @@
|
|
1
1
|
short_desc "A collection of system commands for toys"
|
2
2
|
long_desc "A collection of system commands for toys"
|
3
3
|
|
4
|
+
|
4
5
|
name "version" do
|
6
|
+
|
5
7
|
short_desc "Print current toys version"
|
8
|
+
|
6
9
|
execute do
|
7
10
|
puts Toys::VERSION
|
8
11
|
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
name "update" do
|
17
|
+
|
18
|
+
short_desc "Update toys if a newer version is available"
|
19
|
+
|
20
|
+
helper_module :exec
|
21
|
+
|
22
|
+
execute do
|
23
|
+
version_info = capture("gem query -q -r -e toys")
|
24
|
+
if version_info =~ /toys\s\((.+)\)/
|
25
|
+
latest_version = Gem::Version.new($1)
|
26
|
+
cur_version = Gem::Version.new(Toys::VERSION)
|
27
|
+
if latest_version > cur_version
|
28
|
+
logger.warn("Updating toys from #{cur_version} to #{latest_version}...")
|
29
|
+
sh("gem install toys")
|
30
|
+
else
|
31
|
+
logger.warn("Toys is already at the latest version: #{latest_version}")
|
32
|
+
end
|
33
|
+
else
|
34
|
+
logger.error("Could not get latest toys version")
|
35
|
+
exit(1)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
9
39
|
end
|
data/lib/toys/context.rb
CHANGED
data/lib/toys/helpers/exec.rb
CHANGED
data/lib/toys/parser.rb
CHANGED
@@ -60,6 +60,20 @@ module Toys
|
|
60
60
|
self
|
61
61
|
end
|
62
62
|
|
63
|
+
def expand(template, opts={})
|
64
|
+
if template.is_a?(Symbol)
|
65
|
+
template = template.to_s
|
66
|
+
file_name = template.gsub(/([a-zA-Z])([A-Z])/){ |m| "#{$1}_#{$2.downcase}" }.downcase
|
67
|
+
require "toys/templates/#{file_name}"
|
68
|
+
const_name = template.gsub(/(^|_)([a-zA-Z0-9])/){ |m| $2.upcase }
|
69
|
+
template = Toys::Templates.const_get(const_name)
|
70
|
+
end
|
71
|
+
opts = template.opts_initializer.call(opts)
|
72
|
+
yield opts if block_given?
|
73
|
+
instance_exec(opts, &template.expander)
|
74
|
+
self
|
75
|
+
end
|
76
|
+
|
63
77
|
def long_desc(desc)
|
64
78
|
@tool.long_desc = desc
|
65
79
|
self
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Toys
|
2
|
+
class Template
|
3
|
+
def initialize
|
4
|
+
@opts_initializer = ->(opts){opts}
|
5
|
+
@expander = ->(opts){}
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_init_opts(&block)
|
9
|
+
@opts_initializer = block
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_expand(&block)
|
14
|
+
@expander = block
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :opts_initializer
|
19
|
+
attr_reader :expander
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "rubygems/package"
|
2
|
+
|
3
|
+
module Toys
|
4
|
+
module Templates
|
5
|
+
GemBuild = Toys::Template.new
|
6
|
+
|
7
|
+
GemBuild.to_init_opts do |opts|
|
8
|
+
{
|
9
|
+
name: "build",
|
10
|
+
gem_name: nil,
|
11
|
+
push_gem: false,
|
12
|
+
tag: false,
|
13
|
+
push_tag: false
|
14
|
+
}.merge(opts)
|
15
|
+
end
|
16
|
+
|
17
|
+
GemBuild.to_expand do |opts|
|
18
|
+
toy_name = opts[:name] || "build"
|
19
|
+
gem_name = opts[:gem_name]
|
20
|
+
unless gem_name
|
21
|
+
candidates = ::Dir.glob("*.gemspec")
|
22
|
+
if candidates.size > 0
|
23
|
+
gem_name = candidates.first.sub(/\.gemspec$/, "")
|
24
|
+
else
|
25
|
+
raise Toys::ToysDefinitionError, "Could not find a gemspec"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
push_gem = opts[:push_gem]
|
29
|
+
tag = opts[:tag]
|
30
|
+
push_tag = opts[:push_tag]
|
31
|
+
|
32
|
+
name toy_name do
|
33
|
+
short_desc "#{push_gem ? 'Release' : 'Build'} the gem: #{gem_name}"
|
34
|
+
|
35
|
+
helper_module :file_utils
|
36
|
+
helper_module :exec
|
37
|
+
|
38
|
+
execute do
|
39
|
+
gemspec = Gem::Specification.load "#{gem_name}.gemspec"
|
40
|
+
version = gemspec.version
|
41
|
+
gemfile = "#{gem_name}-#{version}.gem"
|
42
|
+
Gem::Package.build gemspec
|
43
|
+
mkdir_p "pkg"
|
44
|
+
mv gemfile, "pkg"
|
45
|
+
if push_gem
|
46
|
+
if File.directory?(".git") && capture("git status -s").strip != ""
|
47
|
+
logger.error "Cannot push the gem when there are uncommited changes"
|
48
|
+
exit(1)
|
49
|
+
end
|
50
|
+
sh "gem push pkg/#{gemfile}", report_subprocess_errors: true
|
51
|
+
if tag
|
52
|
+
sh "git tag v#{version}", report_subprocess_errors: true
|
53
|
+
if push_tag
|
54
|
+
push_tag = "origin" if push_tag == true
|
55
|
+
sh "git push #{push_tag} v#{version}", report_subprocess_errors: true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "shellwords"
|
2
|
+
|
3
|
+
module Toys
|
4
|
+
module Templates
|
5
|
+
Minitest = Toys::Template.new
|
6
|
+
|
7
|
+
Minitest.to_init_opts do |opts|
|
8
|
+
{
|
9
|
+
name: "test",
|
10
|
+
libs: ["lib", "test"],
|
11
|
+
test_files: [],
|
12
|
+
warning: true
|
13
|
+
}.merge(opts)
|
14
|
+
end
|
15
|
+
|
16
|
+
Minitest.to_expand do |opts|
|
17
|
+
toy_name = opts[:name] || "build"
|
18
|
+
libs = opts[:libs] || []
|
19
|
+
warning = opts[:warning]
|
20
|
+
test_files = opts[:test_files] || []
|
21
|
+
lib_path = libs.join(File::PATH_SEPARATOR)
|
22
|
+
cmd = []
|
23
|
+
cmd << File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
|
24
|
+
cmd << "-I#{lib_path}" unless libs.empty?
|
25
|
+
cmd << "-w" if warning
|
26
|
+
cmd << "-e" << "ARGV.each{|f| load f}"
|
27
|
+
cmd << "--"
|
28
|
+
cmd = Shellwords.join(cmd + test_files)
|
29
|
+
|
30
|
+
name toy_name do
|
31
|
+
short_desc "Run minitest"
|
32
|
+
|
33
|
+
helper_module :exec
|
34
|
+
|
35
|
+
execute do
|
36
|
+
sh(cmd, report_subprocess_errors: true)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/toys/tool.rb
CHANGED
@@ -156,7 +156,7 @@ module Toys
|
|
156
156
|
mod = mod.to_s
|
157
157
|
file_name = mod.gsub(/([a-zA-Z])([A-Z])/){ |m| "#{$1}_#{$2.downcase}" }.downcase
|
158
158
|
require "toys/helpers/#{file_name}"
|
159
|
-
const_name = mod.gsub(/_([a-zA-Z0-9])/){ |m| $
|
159
|
+
const_name = mod.gsub(/(^|_)([a-zA-Z0-9])/){ |m| $2.upcase }
|
160
160
|
@modules << Toys::Helpers.const_get(const_name)
|
161
161
|
when String
|
162
162
|
@modules << mod
|
data/lib/toys/version.rb
CHANGED
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.
|
4
|
+
version: 0.2.0
|
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-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,7 +108,7 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.9'
|
111
|
-
description:
|
111
|
+
description: A simple command line tool framework
|
112
112
|
email:
|
113
113
|
- dazuma@gmail.com
|
114
114
|
executables:
|
@@ -123,8 +123,12 @@ files:
|
|
123
123
|
- lib/toys/context.rb
|
124
124
|
- lib/toys/errors.rb
|
125
125
|
- lib/toys/helpers/exec.rb
|
126
|
+
- lib/toys/helpers/file_utils.rb
|
126
127
|
- lib/toys/lookup.rb
|
127
128
|
- lib/toys/parser.rb
|
129
|
+
- lib/toys/template.rb
|
130
|
+
- lib/toys/templates/gem_build.rb
|
131
|
+
- lib/toys/templates/minitest.rb
|
128
132
|
- lib/toys/tool.rb
|
129
133
|
- lib/toys/version.rb
|
130
134
|
homepage: https://github.com/dazuma/toys
|