quickl 0.2.1 → 0.2.2
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.
- data/CHANGELOG.md +15 -0
- data/Gemfile.lock +6 -6
- data/Manifest.txt +2 -1
- data/README.md +28 -6
- data/bin/quickl +20 -2
- data/lib/quickl/naming.rb +3 -7
- data/lib/quickl/version.rb +1 -1
- data/quickl.gemspec +1 -1
- data/quickl.noespec +2 -2
- data/tasks/clean.rake +3 -0
- data/templates/single.erb +42 -0
- metadata +110 -69
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
# 0.2.2 / 2011.07.12
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
|
5
|
+
* Added a template/delegator.erb template (quickl --layout=delegator ...)
|
6
|
+
* Added --[no-]header and --[no-]footer options to the template generator
|
7
|
+
|
8
|
+
* Bug fixes
|
9
|
+
|
10
|
+
* The gem is now shipped with the template/single.erb file. This fixes the
|
11
|
+
'quickl' commandline that generates skeletons as illustrated in README
|
12
|
+
(patch and thanks to Rit Li)
|
13
|
+
* Broken links to the examples from the README are fixed (Travis Briggs)
|
14
|
+
* Other typos fixed that led to failures on --help in examples (Tomasz Łoszko)
|
15
|
+
|
1
16
|
# 0.2.1 / 2011.06.19
|
2
17
|
|
3
18
|
* Enhancements
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
quickl (0.2.
|
4
|
+
quickl (0.2.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
bluecloth (2.0.
|
9
|
+
bluecloth (2.0.11)
|
10
10
|
diff-lcs (1.1.2)
|
11
|
-
rake (0.
|
11
|
+
rake (0.9.2)
|
12
12
|
rspec (2.4.0)
|
13
13
|
rspec-core (~> 2.4.0)
|
14
14
|
rspec-expectations (~> 2.4.0)
|
@@ -17,8 +17,8 @@ GEM
|
|
17
17
|
rspec-expectations (2.4.0)
|
18
18
|
diff-lcs (~> 1.1.2)
|
19
19
|
rspec-mocks (2.4.0)
|
20
|
-
wlang (0.10.
|
21
|
-
yard (0.6.
|
20
|
+
wlang (0.10.2)
|
21
|
+
yard (0.6.8)
|
22
22
|
|
23
23
|
PLATFORMS
|
24
24
|
java
|
@@ -28,7 +28,7 @@ DEPENDENCIES
|
|
28
28
|
bluecloth (~> 2.0.9)
|
29
29
|
bundler (~> 1.0)
|
30
30
|
quickl!
|
31
|
-
rake (~> 0.
|
31
|
+
rake (~> 0.9.2)
|
32
32
|
rspec (~> 2.4.0)
|
33
33
|
wlang (~> 0.10.1)
|
34
34
|
yard (~> 0.6.4)
|
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Quickl
|
2
2
|
|
3
3
|
* http://github.com/blambeau/quickl
|
4
|
+
* http://rubydoc.info/github/blambeau/quickl/master/frames
|
4
5
|
|
5
6
|
## Description
|
6
7
|
|
@@ -13,7 +14,7 @@ Quickl helps you create commandline programs as simply as:
|
|
13
14
|
# Usage: ...
|
14
15
|
#
|
15
16
|
# OPTIONS:
|
16
|
-
# #{
|
17
|
+
# #{summarized_options}
|
17
18
|
#
|
18
19
|
# DESCRIPTION
|
19
20
|
# Long description here...
|
@@ -36,7 +37,8 @@ Running them as simply as:
|
|
36
37
|
|
37
38
|
SimpleCommand.run(ARGV)
|
38
39
|
|
39
|
-
From simple command to complex delegator (_ala_ 'git [--version] [--help] COMMAND [cmd options] ARGS...'),
|
40
|
+
From simple command to complex delegator (_ala_ 'git [--version] [--help] COMMAND [cmd options] ARGS...'),
|
41
|
+
Quickl provides (or aims at providing) the following features:
|
40
42
|
|
41
43
|
* Simple command creations via simple classes
|
42
44
|
* Delegator commands and categories via ruby namespaces and naming conventions
|
@@ -69,12 +71,31 @@ Try this:
|
|
69
71
|
|
70
72
|
Additional examples (see examples folder):
|
71
73
|
|
72
|
-
* [hello world example](https://github.com/blambeau/quickl/blob/master/examples/
|
74
|
+
* [hello world example](https://github.com/blambeau/quickl/blob/master/examples/hello)
|
73
75
|
* [delegator example](https://github.com/blambeau/quickl/blob/master/examples/delegator)
|
74
76
|
|
77
|
+
## Related work
|
78
|
+
|
79
|
+
A few other gems similarly provide tools to generate commandline app.
|
80
|
+
|
81
|
+
* https://github.com/wycats/thor provides a way to bundle command line utilities
|
82
|
+
as class methods. It also provides an alternative to Rake and therefore sees
|
83
|
+
commands as tasks. It is more mature that quickl but is also a bit more
|
84
|
+
opinionated IMHO. If you want one command by class, use quickl; one command by
|
85
|
+
method, go for thor instead.
|
86
|
+
* https://github.com/mdub/clamp is very similar to quickl as well, even more
|
87
|
+
similar than thor in fact. Clamp supports subcommands and options (not through
|
88
|
+
OptionParser, though). It does not have the quickl's auto-documentation
|
89
|
+
feature, but has an automatic --help. I would say that Clamp is maybe a bit
|
90
|
+
lighter and 'straight to the point' than quickl, but also more magic and
|
91
|
+
opinionated.
|
92
|
+
* See also: http://trollop.rubyforge.org/, http://clip.rubyforge.org/
|
93
|
+
|
75
94
|
## Version policy
|
76
95
|
|
77
|
-
Until version 1.0.0, moditications of public interfaces increase the minor version,
|
96
|
+
Until version 1.0.0, moditications of public interfaces increase the minor version,
|
97
|
+
while other changes increase the tiny version. After version 1.0.0, same changes will
|
98
|
+
affect major and minor versions, respectively.
|
78
99
|
|
79
100
|
0.1.0 -> 0.1.1 # enhancements and private API changes
|
80
101
|
0.1.0 -> 0.2.0 # broken API on public interfaces
|
@@ -87,7 +108,8 @@ Public interfaces are:
|
|
87
108
|
* Naming conventions (module <-> command conversions)
|
88
109
|
* Default reactions to errors (Quickl::Help, Quickl::Exit, ...)
|
89
110
|
|
90
|
-
Until version 1.0.0, to preserve your application from hurting changes you should
|
111
|
+
Until version 1.0.0, to preserve your application from hurting changes you should
|
112
|
+
require quickl as follows:
|
91
113
|
|
92
|
-
gem 'quickl', '
|
114
|
+
gem 'quickl', '~> 0.2.0' # Assuming current version is 0.2.xx
|
93
115
|
require 'quickl'
|
data/bin/quickl
CHANGED
@@ -34,6 +34,12 @@ class Quickl::Main < Quickl::Command(__FILE__, __LINE__)
|
|
34
34
|
# Name of the command to generate
|
35
35
|
attr_reader :cmd_name
|
36
36
|
|
37
|
+
# Generate require header
|
38
|
+
attr_reader :header
|
39
|
+
|
40
|
+
# Generate require footer
|
41
|
+
attr_reader :footer
|
42
|
+
|
37
43
|
# Creates a command instance
|
38
44
|
def initialize
|
39
45
|
@layout = :single
|
@@ -43,8 +49,8 @@ class Quickl::Main < Quickl::Command(__FILE__, __LINE__)
|
|
43
49
|
# Install options
|
44
50
|
options do |opt|
|
45
51
|
|
46
|
-
opt.on("--layout=LAYOUT", [:single],
|
47
|
-
"Select specific command layout (single)") do |l|
|
52
|
+
opt.on("--layout=LAYOUT", [:single, :delegator],
|
53
|
+
"Select specific command layout (single,delegator)") do |l|
|
48
54
|
@layout = l
|
49
55
|
end
|
50
56
|
|
@@ -55,6 +61,18 @@ class Quickl::Main < Quickl::Command(__FILE__, __LINE__)
|
|
55
61
|
raise Quickl::InvalidOption, "Unknown option helpers: #{unknown.join(',')}"
|
56
62
|
end
|
57
63
|
end
|
64
|
+
|
65
|
+
@header = true
|
66
|
+
opt.on('--[no-]header',
|
67
|
+
"Generate header (require rubygems + quickl)"){|value|
|
68
|
+
@header = value
|
69
|
+
}
|
70
|
+
|
71
|
+
@footer = true
|
72
|
+
opt.on('--[no-]footer',
|
73
|
+
"Generate footer (command execution)"){|value|
|
74
|
+
@footer = value
|
75
|
+
}
|
58
76
|
|
59
77
|
# Show the help and exit
|
60
78
|
opt.on_tail("--help", "Show help") do
|
data/lib/quickl/naming.rb
CHANGED
@@ -35,15 +35,11 @@ module Quickl
|
|
35
35
|
def module2command(mod)
|
36
36
|
case mod
|
37
37
|
when Module
|
38
|
-
|
39
|
-
name = name.gsub(/[A-Z]/){|x| "-#{x.downcase}"}[1..-1]
|
38
|
+
module2command(RubyTools::class_unqualified_name(mod))
|
40
39
|
when String
|
41
|
-
|
42
|
-
name = name.gsub(/[A-Z]/){|x| "-#{x.downcase}"}[1..-1]
|
40
|
+
mod.gsub(/[A-Z]/){|x| "-#{x.downcase}"}[1..-1]
|
43
41
|
when Symbol
|
44
|
-
|
45
|
-
name = name.gsub(/[A-Z]/){|x| "-#{x.downcase}"}[1..-1]
|
46
|
-
name.to_sym
|
42
|
+
module2command(mod.to_s).to_sym
|
47
43
|
else
|
48
44
|
raise ArgumentError, "Invalid module argument #{mod.class}"
|
49
45
|
end
|
data/lib/quickl/version.rb
CHANGED
data/quickl.gemspec
CHANGED
@@ -123,7 +123,7 @@ Gem::Specification.new do |s|
|
|
123
123
|
# One call to add_development_dependency('gem_name', 'gem version requirement')
|
124
124
|
# for each development dependency. These gems are required for developers
|
125
125
|
#
|
126
|
-
s.add_development_dependency("rake", "~> 0.
|
126
|
+
s.add_development_dependency("rake", "~> 0.9.2")
|
127
127
|
s.add_development_dependency("bundler", "~> 1.0")
|
128
128
|
s.add_development_dependency("rspec", "~> 2.4.0")
|
129
129
|
s.add_development_dependency("yard", "~> 0.6.4")
|
data/quickl.noespec
CHANGED
@@ -18,7 +18,7 @@ variables:
|
|
18
18
|
|
19
19
|
# Version of your library
|
20
20
|
version:
|
21
|
-
0.2.
|
21
|
+
0.2.2
|
22
22
|
|
23
23
|
# Project summary (~ 1 line).
|
24
24
|
summary: |-
|
@@ -42,7 +42,7 @@ variables:
|
|
42
42
|
# Gem dependencies. (- {name: ..., version: ..., groups: [...]}, ...)
|
43
43
|
dependencies:
|
44
44
|
# Rake is required for developers, as usual
|
45
|
-
- {name: rake, version: "~> 0.
|
45
|
+
- {name: rake, version: "~> 0.9.2", groups: [development]}
|
46
46
|
# Bundler is required for developers and is used by the Rakefile
|
47
47
|
- {name: bundler, version: "~> 1.0", groups: [development]}
|
48
48
|
# RSpec is required to run 'rake spec'. See tasks/spec.rake
|
data/tasks/clean.rake
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
<% if header %>
|
2
|
+
begin
|
3
|
+
require 'quickl'
|
4
|
+
rescue LoadError
|
5
|
+
require 'rubygems'
|
6
|
+
gem 'quickl'
|
7
|
+
retry
|
8
|
+
end
|
9
|
+
<% end %>
|
10
|
+
#
|
11
|
+
# FIX: overview
|
12
|
+
#
|
13
|
+
# SYNOPSIS
|
14
|
+
# #{command_name} [options] ARGS...
|
15
|
+
#
|
16
|
+
# OPTIONS
|
17
|
+
# #{summarized_options}
|
18
|
+
#
|
19
|
+
# DESCRIPTION
|
20
|
+
# FIX: description
|
21
|
+
#
|
22
|
+
class <%= cmd_class_name %> < Quickl::Command(__FILE__, __LINE__)
|
23
|
+
|
24
|
+
VERSION = "0.1.0"
|
25
|
+
|
26
|
+
# Install options
|
27
|
+
options do |opt|
|
28
|
+
<%= option_helpers.collect{|s| tabto(s,4)}.join("\n") %>
|
29
|
+
end
|
30
|
+
|
31
|
+
# Run the command
|
32
|
+
def execute(args)
|
33
|
+
# FIX: do something here
|
34
|
+
puts "Hello #{args.join(' and ')} from #{program_name}"
|
35
|
+
end
|
36
|
+
|
37
|
+
end # class <%= cmd_class_name %>
|
38
|
+
<% if footer %>
|
39
|
+
if __FILE__ == $0
|
40
|
+
<%= cmd_class_name %>.run(ARGV)
|
41
|
+
end
|
42
|
+
<% end %>
|
metadata
CHANGED
@@ -1,95 +1,132 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: quickl
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Bernard Lambeau
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
|
17
|
-
requirement: &83708950 !ruby/object:Gem::Requirement
|
17
|
+
|
18
|
+
date: 2011-07-12 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
18
22
|
none: false
|
19
|
-
requirements:
|
23
|
+
requirements:
|
20
24
|
- - ~>
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
hash: 63
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 9
|
30
|
+
- 2
|
31
|
+
version: 0.9.2
|
23
32
|
type: :development
|
33
|
+
requirement: *id001
|
24
34
|
prerelease: false
|
25
|
-
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
|
28
|
-
requirement: &83708460 !ruby/object:Gem::Requirement
|
35
|
+
name: rake
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
29
38
|
none: false
|
30
|
-
requirements:
|
39
|
+
requirements:
|
31
40
|
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 15
|
43
|
+
segments:
|
44
|
+
- 1
|
45
|
+
- 0
|
46
|
+
version: "1.0"
|
34
47
|
type: :development
|
48
|
+
requirement: *id002
|
35
49
|
prerelease: false
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
|
39
|
-
requirement: &83707960 !ruby/object:Gem::Requirement
|
50
|
+
name: bundler
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
40
53
|
none: false
|
41
|
-
requirements:
|
54
|
+
requirements:
|
42
55
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 31
|
58
|
+
segments:
|
59
|
+
- 2
|
60
|
+
- 4
|
61
|
+
- 0
|
44
62
|
version: 2.4.0
|
45
63
|
type: :development
|
64
|
+
requirement: *id003
|
46
65
|
prerelease: false
|
47
|
-
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
|
50
|
-
requirement: &83707400 !ruby/object:Gem::Requirement
|
66
|
+
name: rspec
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
51
69
|
none: false
|
52
|
-
requirements:
|
70
|
+
requirements:
|
53
71
|
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 15
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
- 6
|
77
|
+
- 4
|
55
78
|
version: 0.6.4
|
56
79
|
type: :development
|
80
|
+
requirement: *id004
|
57
81
|
prerelease: false
|
58
|
-
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
|
61
|
-
requirement: &83706930 !ruby/object:Gem::Requirement
|
82
|
+
name: yard
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
62
85
|
none: false
|
63
|
-
requirements:
|
86
|
+
requirements:
|
64
87
|
- - ~>
|
65
|
-
- !ruby/object:Gem::Version
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 29
|
90
|
+
segments:
|
91
|
+
- 2
|
92
|
+
- 0
|
93
|
+
- 9
|
66
94
|
version: 2.0.9
|
67
95
|
type: :development
|
96
|
+
requirement: *id005
|
68
97
|
prerelease: false
|
69
|
-
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
|
72
|
-
requirement: &83706160 !ruby/object:Gem::Requirement
|
98
|
+
name: bluecloth
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
73
101
|
none: false
|
74
|
-
requirements:
|
102
|
+
requirements:
|
75
103
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
hash: 53
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
- 10
|
109
|
+
- 1
|
77
110
|
version: 0.10.1
|
78
111
|
type: :development
|
112
|
+
requirement: *id006
|
79
113
|
prerelease: false
|
80
|
-
|
81
|
-
description:
|
82
|
-
|
83
|
-
|
114
|
+
name: wlang
|
115
|
+
description: |-
|
116
|
+
Quickl helps you creating commandline ruby programs. From simple commands
|
117
|
+
with options to complex delegators with subcommands, global and local
|
118
|
+
options.
|
119
|
+
email:
|
84
120
|
- blambeau@gmail.com
|
85
|
-
executables:
|
121
|
+
executables:
|
86
122
|
- quickl
|
87
123
|
extensions: []
|
88
|
-
|
124
|
+
|
125
|
+
extra_rdoc_files:
|
89
126
|
- README.md
|
90
127
|
- CHANGELOG.md
|
91
128
|
- LICENCE.md
|
92
|
-
files:
|
129
|
+
files:
|
93
130
|
- quickl.gemspec
|
94
131
|
- quickl.noespec
|
95
132
|
- CHANGELOG.md
|
@@ -109,6 +146,7 @@ files:
|
|
109
146
|
- lib/quickl/ruby_tools.rb
|
110
147
|
- lib/quickl/command.rb
|
111
148
|
- lib/quickl/version.rb
|
149
|
+
- templates/single.erb
|
112
150
|
- LICENCE.md
|
113
151
|
- Manifest.txt
|
114
152
|
- Rakefile
|
@@ -137,42 +175,45 @@ files:
|
|
137
175
|
- spec/naming/command2module_spec.rb
|
138
176
|
- tasks/debug_mail.rake
|
139
177
|
- tasks/yard.rake
|
178
|
+
- tasks/clean.rake
|
140
179
|
- tasks/gem.rake
|
141
180
|
- tasks/spec_test.rake
|
142
181
|
- tasks/unit_test.rake
|
143
182
|
- tasks/debug_mail.txt
|
144
|
-
has_rdoc: true
|
145
183
|
homepage: http://github.com/blambeau/quickl
|
146
184
|
licenses: []
|
185
|
+
|
147
186
|
post_install_message:
|
148
187
|
rdoc_options: []
|
149
|
-
|
188
|
+
|
189
|
+
require_paths:
|
150
190
|
- lib
|
151
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
191
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
192
|
none: false
|
153
|
-
requirements:
|
154
|
-
- -
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
|
157
|
-
segments:
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
hash: 3
|
197
|
+
segments:
|
158
198
|
- 0
|
159
|
-
|
160
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
|
+
version: "0"
|
200
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
201
|
none: false
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
166
|
-
segments:
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
hash: 3
|
206
|
+
segments:
|
167
207
|
- 0
|
168
|
-
|
208
|
+
version: "0"
|
169
209
|
requirements: []
|
210
|
+
|
170
211
|
rubyforge_project:
|
171
|
-
rubygems_version: 1.
|
212
|
+
rubygems_version: 1.8.5
|
172
213
|
signing_key:
|
173
214
|
specification_version: 3
|
174
215
|
summary: Helper to create commandline ruby programs
|
175
|
-
test_files:
|
216
|
+
test_files:
|
176
217
|
- spec/spec_helper.rb
|
177
218
|
- spec/command/usage_spec.rb
|
178
219
|
- spec/command/command_name_spec.rb
|