quickl 0.2.0 → 0.2.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.
- data/CHANGELOG.md +23 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +34 -0
- data/LICENCE.md +22 -0
- data/Manifest.txt +15 -0
- data/README.md +0 -25
- data/Rakefile +18 -32
- data/lib/quickl/command/builder.rb +18 -1
- data/lib/quickl/command/delegator.rb +8 -5
- data/lib/quickl/command/robustness.rb +4 -5
- data/lib/quickl/command/single.rb +1 -0
- data/lib/quickl/command.rb +12 -0
- data/lib/quickl/loader.rb +0 -0
- data/lib/quickl/version.rb +14 -0
- data/lib/quickl.rb +3 -4
- data/quickl.gemspec +178 -27
- data/quickl.noespec +58 -0
- data/spec/command/command_building_spec.rb +16 -0
- data/spec/command/command_name_spec.rb +16 -0
- data/spec/command/documentation_spec.rb +23 -0
- data/spec/command/overview_spec.rb +14 -0
- data/spec/command/requester_spec.rb +16 -0
- data/spec/command/robustness/valid_read_file_spec.rb +62 -0
- data/spec/command/run_spec.rb +22 -0
- data/spec/command/subcommand_by_name_spec.rb +15 -0
- data/spec/command/subcommands_spec.rb +24 -0
- data/spec/command/usage_spec.rb +16 -0
- data/spec/mini_client.rb +96 -0
- data/spec/naming/command2module_spec.rb +17 -0
- data/spec/naming/module2command_spec.rb +21 -0
- data/spec/quickl_spec.rb +8 -0
- data/spec/ruby_tools/class_unqualified_name_spec.rb +28 -0
- data/spec/ruby_tools/extract_file_rdoc_spec.rb +28 -0
- data/spec/ruby_tools/fixtures/RubyTools.rdoc +12 -0
- data/spec/ruby_tools/fixtures/Utils.rdoc +3 -0
- data/spec/ruby_tools/fixtures.rb +27 -0
- data/spec/ruby_tools/optional_args_block_call_spec.rb +37 -0
- data/spec/ruby_tools/parent_module_spec.rb +23 -0
- data/spec/spec_helper.rb +4 -0
- data/tasks/debug_mail.rake +78 -0
- data/tasks/debug_mail.txt +13 -0
- data/tasks/gem.rake +68 -0
- data/tasks/spec_test.rake +79 -0
- data/tasks/unit_test.rake +77 -0
- data/tasks/yard.rake +51 -0
- metadata +150 -105
- data/examples/delegator/README.md +0 -86
- data/examples/delegator/bin/delegator +0 -9
- data/examples/delegator/lib/delegator.rb +0 -41
- data/examples/delegator/lib/hello_world.rb +0 -39
- data/examples/delegator/lib/help.rb +0 -24
- data/examples/delegator/test/delegator_test.rb +0 -68
- data/examples/hello/README.md +0 -74
- data/examples/hello/hello +0 -57
- data/examples/hello/hello_test.rb +0 -65
- data/examples/helper.rb +0 -6
- data/templates/single.erb +0 -40
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
# 0.2.1 / 2011.06.19
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
|
5
|
+
* Delegator delegates the command execution to an execute(argv) methods,
|
6
|
+
therefore mimicing Single command
|
7
|
+
* Command provides subcommand_by_name (a class method) allowing to resolve
|
8
|
+
':' qualified command names easily. Robustness::has_command! has been
|
9
|
+
rewritten to use the latter method, so that it now striclty respects command
|
10
|
+
hierarchy
|
11
|
+
* Delegator.summarized_subcommands takes an optional argument, allowing
|
12
|
+
to specify the list of commands for which documentation must be summarized.
|
13
|
+
* The factory methods Quickl::Command and Quickl::Delegator accept an optional
|
14
|
+
block which is yield with the command builder.
|
15
|
+
* Command::Builder has a command_parent= accessor allowing to bypass the default
|
16
|
+
(infered) command strategy feature (advanced usage).
|
17
|
+
* Command::Builder accepts callback blocks that are called when a command is
|
18
|
+
installed (advanced usage).
|
19
|
+
|
20
|
+
* On the devel side
|
21
|
+
|
22
|
+
* The project structure is handled by ruby.noe 1.3.0
|
23
|
+
|
1
24
|
# 0.2.0 / 2011-01-10
|
2
25
|
|
3
26
|
* Enhancements
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
quickl (0.2.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
bluecloth (2.0.9)
|
10
|
+
diff-lcs (1.1.2)
|
11
|
+
rake (0.8.7)
|
12
|
+
rspec (2.4.0)
|
13
|
+
rspec-core (~> 2.4.0)
|
14
|
+
rspec-expectations (~> 2.4.0)
|
15
|
+
rspec-mocks (~> 2.4.0)
|
16
|
+
rspec-core (2.4.0)
|
17
|
+
rspec-expectations (2.4.0)
|
18
|
+
diff-lcs (~> 1.1.2)
|
19
|
+
rspec-mocks (2.4.0)
|
20
|
+
wlang (0.10.1)
|
21
|
+
yard (0.6.4)
|
22
|
+
|
23
|
+
PLATFORMS
|
24
|
+
java
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
bluecloth (~> 2.0.9)
|
29
|
+
bundler (~> 1.0)
|
30
|
+
quickl!
|
31
|
+
rake (~> 0.8.7)
|
32
|
+
rspec (~> 2.4.0)
|
33
|
+
wlang (~> 0.10.1)
|
34
|
+
yard (~> 0.6.4)
|
data/LICENCE.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# The MIT Licence
|
2
|
+
|
3
|
+
Copyright (c) 2011 - Bernard Lambeau
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
ADDED
data/README.md
CHANGED
@@ -91,28 +91,3 @@ Until version 1.0.0, to preserve your application from hurting changes you shoul
|
|
91
91
|
|
92
92
|
gem 'quickl', '< 0.2.0' # Assuming current version is 0.1.xx
|
93
93
|
require 'quickl'
|
94
|
-
|
95
|
-
## Licence
|
96
|
-
|
97
|
-
(The MIT License)
|
98
|
-
|
99
|
-
Copyright (c) 2010 Bernard Lambeau <blambeau@gmail.com>
|
100
|
-
|
101
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
102
|
-
a copy of this software and associated documentation files (the
|
103
|
-
'Software'), to deal in the Software without restriction, including
|
104
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
105
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
106
|
-
permit persons to whom the Software is furnished to do so, subject to
|
107
|
-
the following conditions:
|
108
|
-
|
109
|
-
The above copyright notice and this permission notice shall be
|
110
|
-
included in all copies or substantial portions of the Software.
|
111
|
-
|
112
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
113
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
114
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
115
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
116
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
117
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
118
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
CHANGED
@@ -1,37 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
task :default => :test
|
9
|
-
task :test => [:spec, :examples]
|
10
|
-
|
11
|
-
# About yard documentation
|
12
|
-
YARD::Rake::YardocTask.new do |t|
|
13
|
-
t.files = ['lib/**/*.rb', 'examples/**/*.rb']
|
14
|
-
t.options = ['--output-dir', 'doc/api', '-', "README.md", "CHANGELOG.md"]
|
1
|
+
begin
|
2
|
+
gem "bundler", "~> 1.0"
|
3
|
+
require "bundler/setup"
|
4
|
+
rescue LoadError => ex
|
5
|
+
puts ex.message
|
6
|
+
abort "Bundler failed to load, (did you run 'gem install bundler' ?)"
|
15
7
|
end
|
16
8
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
test.test_files = Dir["examples/**/*_test.rb"]
|
21
|
-
test.verbose = true
|
22
|
-
end
|
9
|
+
# Dynamically load the gem spec
|
10
|
+
$gemspec_file = File.expand_path('../quickl.gemspec', __FILE__)
|
11
|
+
$gemspec = Kernel.eval(File.read($gemspec_file))
|
23
12
|
|
24
|
-
|
25
|
-
|
26
|
-
t.rspec_opts = %w[--color]
|
27
|
-
t.verbose = false
|
28
|
-
end
|
13
|
+
# We run tests by default
|
14
|
+
task :default => :test
|
29
15
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
16
|
+
#
|
17
|
+
# Install all tasks found in tasks folder
|
18
|
+
#
|
19
|
+
# See .rake files there for complete documentation.
|
20
|
+
#
|
21
|
+
Dir["tasks/*.rake"].each do |taskfile|
|
22
|
+
instance_eval File.read(taskfile), taskfile
|
34
23
|
end
|
35
|
-
|
36
|
-
|
37
|
-
# vim: syntax=ruby
|
@@ -28,6 +28,18 @@ module Quickl
|
|
28
28
|
end
|
29
29
|
alias :instance_module instance_modules
|
30
30
|
|
31
|
+
# Sets the parent of the command currently built
|
32
|
+
def command_parent=(p)
|
33
|
+
@parent = p
|
34
|
+
end
|
35
|
+
|
36
|
+
# Installs a callback block to execute at
|
37
|
+
# install time
|
38
|
+
def callback(&block)
|
39
|
+
@callbacks ||= []
|
40
|
+
@callbacks << block
|
41
|
+
end
|
42
|
+
|
31
43
|
# Installs on a command subclass
|
32
44
|
def run(command)
|
33
45
|
# install class and instance methods
|
@@ -44,11 +56,16 @@ module Quickl
|
|
44
56
|
end
|
45
57
|
|
46
58
|
# install hierarchy
|
47
|
-
parent = RubyTools::parent_module(command)
|
59
|
+
parent = @parent || RubyTools::parent_module(command)
|
48
60
|
if parent && parent.ancestors.include?(Command)
|
49
61
|
command.super_command = parent
|
50
62
|
parent.subcommands << command
|
51
63
|
end
|
64
|
+
|
65
|
+
# execute callbacks
|
66
|
+
@callbacks.each do |blk|
|
67
|
+
blk.call(command)
|
68
|
+
end if @callbacks
|
52
69
|
|
53
70
|
command
|
54
71
|
end
|
@@ -10,8 +10,10 @@ module Quickl
|
|
10
10
|
my_argv << argv.shift
|
11
11
|
end
|
12
12
|
parse_options(my_argv)
|
13
|
+
execute(argv)
|
14
|
+
end
|
13
15
|
|
14
|
-
|
16
|
+
def execute(argv)
|
15
17
|
if cmd = argv.shift
|
16
18
|
cmd = has_command!(cmd).run(argv, self)
|
17
19
|
else
|
@@ -22,8 +24,8 @@ module Quickl
|
|
22
24
|
end
|
23
25
|
module ClassMethods
|
24
26
|
|
25
|
-
def summarized_subcommands
|
26
|
-
doc =
|
27
|
+
def summarized_subcommands(subs = subcommands)
|
28
|
+
doc = subs.collect{|cmd|
|
27
29
|
[cmd.command_name, cmd.overview]
|
28
30
|
}
|
29
31
|
max = doc.inject(0){|memo,pair|
|
@@ -46,13 +48,14 @@ module Quickl
|
|
46
48
|
b.document *args
|
47
49
|
b.class_module Command::Delegator::ClassMethods
|
48
50
|
b.instance_module Command::Delegator::InstanceMethods
|
51
|
+
yield(b) if block_given?
|
49
52
|
end
|
50
53
|
Command
|
51
54
|
end
|
52
55
|
|
53
56
|
# @see Delegator
|
54
|
-
def self.Delegate(*args)
|
55
|
-
self.Delegator(*args)
|
57
|
+
def self.Delegate(*args, &block)
|
58
|
+
self.Delegator(*args, &block)
|
56
59
|
end
|
57
60
|
|
58
61
|
end # module Quickl
|
@@ -6,11 +6,10 @@ module Quickl
|
|
6
6
|
# Checks that a command whose name is given exists
|
7
7
|
# or raises a NoSuchCommand.
|
8
8
|
def has_command!(name, referer = self.class)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
raise NoSuchCommand, "No such command #{name}", ex.backtrace
|
9
|
+
unless cmd = referer.subcommand_by_name(name)
|
10
|
+
raise NoSuchCommand, "No such command #{name}"
|
11
|
+
end
|
12
|
+
cmd
|
14
13
|
end
|
15
14
|
|
16
15
|
# Checks that _file_ is a readable file or raises an error.
|
data/lib/quickl/command.rb
CHANGED
@@ -17,6 +17,18 @@ module Quickl
|
|
17
17
|
@subcommands ||= []
|
18
18
|
end
|
19
19
|
|
20
|
+
# Returns a subcommand by its name, or nil
|
21
|
+
def subcommand_by_name(name)
|
22
|
+
return nil unless has_sub_commands?
|
23
|
+
look = name.split(':')
|
24
|
+
found = subcommands.find{|cmd| cmd.command_name == look.first}
|
25
|
+
if found.nil? or (look.size == 1)
|
26
|
+
return found
|
27
|
+
else
|
28
|
+
found.subcommand_by_name(look[1..-1].join(':'))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
20
32
|
# Returns true if this command has at least one
|
21
33
|
# subcommand
|
22
34
|
def has_sub_commands?
|
File without changes
|
data/lib/quickl.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'quickl/loader'
|
2
|
+
require 'quickl/version'
|
1
3
|
require 'quickl/ext/object'
|
2
4
|
require 'quickl/errors'
|
3
5
|
require 'quickl/ruby_tools'
|
@@ -5,9 +7,6 @@ require 'quickl/naming'
|
|
5
7
|
require 'quickl/command'
|
6
8
|
module Quickl
|
7
9
|
|
8
|
-
# Quickl's VERSION
|
9
|
-
VERSION = '0.2.0'.freeze
|
10
|
-
|
11
10
|
# Quickl's COPYRIGHT info
|
12
11
|
COPYRIGHT = "(c) 2010, Bernard Lambeau"
|
13
12
|
|
@@ -44,4 +43,4 @@ module Quickl
|
|
44
43
|
end
|
45
44
|
end
|
46
45
|
|
47
|
-
end # module Quickl
|
46
|
+
end # module Quickl
|
data/quickl.gemspec
CHANGED
@@ -1,39 +1,190 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# We require your library, mainly to have access to the VERSION number.
|
2
|
+
# Feel free to set $version manually.
|
3
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
require "quickl/version"
|
5
|
+
$version = Quickl::Version.to_s
|
4
6
|
|
7
|
+
#
|
8
|
+
# This is your Gem specification. Default values are provided so that your library
|
9
|
+
# should be correctly packaged given what you have described in the .noespec file.
|
10
|
+
#
|
5
11
|
Gem::Specification.new do |s|
|
6
|
-
|
7
|
-
|
8
|
-
|
12
|
+
|
13
|
+
################################################################### ABOUT YOUR GEM
|
14
|
+
|
15
|
+
# Gem name (required)
|
16
|
+
s.name = "quickl"
|
17
|
+
|
18
|
+
# Gem version (required)
|
19
|
+
s.version = $version
|
20
|
+
|
21
|
+
# A short summary of this gem
|
22
|
+
#
|
23
|
+
# This is displayed in `gem list -d`.
|
24
|
+
s.summary = "Helper to create commandline ruby programs"
|
9
25
|
|
10
|
-
|
11
|
-
|
26
|
+
# A long description of this gem (required)
|
27
|
+
#
|
28
|
+
# The description should be more detailed than the summary. For example,
|
29
|
+
# you might wish to copy the entire README into the description.
|
30
|
+
s.description = "Quickl helps you creating commandline ruby programs. From simple commands \nwith options to complex delegators with subcommands, global and local \noptions."
|
31
|
+
|
32
|
+
# The URL of this gem home page (optional)
|
33
|
+
s.homepage = "http://github.com/blambeau/quickl"
|
12
34
|
|
13
|
-
|
14
|
-
|
35
|
+
# Gem publication date (required but auto)
|
36
|
+
#
|
37
|
+
# Today is automatically used by default, uncomment only if
|
38
|
+
# you know what you do!
|
39
|
+
#
|
40
|
+
# s.date = Time.now.strftime('%Y-%m-%d')
|
41
|
+
|
42
|
+
# The license(s) for the library. Each license must be a short name, no
|
43
|
+
# more than 64 characters.
|
44
|
+
#
|
45
|
+
# s.licences = %w{}
|
15
46
|
|
16
|
-
|
47
|
+
# The rubyforge project this gem lives under (optional)
|
48
|
+
#
|
49
|
+
# s.rubyforge_project = nil
|
17
50
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
51
|
+
################################################################### ABOUT THE AUTHORS
|
52
|
+
|
53
|
+
# The list of author names who wrote this gem.
|
54
|
+
#
|
55
|
+
# If you are providing multiple authors and multiple emails they should be
|
56
|
+
# in the same order.
|
57
|
+
#
|
58
|
+
s.authors = ["Bernard Lambeau"]
|
59
|
+
|
60
|
+
# Contact emails for this gem
|
61
|
+
#
|
62
|
+
# If you are providing multiple authors and multiple emails they should be
|
63
|
+
# in the same order.
|
64
|
+
#
|
65
|
+
# NOTE: Somewhat strangly this attribute is always singular!
|
66
|
+
# Don't replace by s.emails = ...
|
67
|
+
s.email = ["blambeau@gmail.com"]
|
25
68
|
|
69
|
+
################################################################### PATHS, FILES, BINARIES
|
70
|
+
|
71
|
+
# Paths in the gem to add to $LOAD_PATH when this gem is
|
72
|
+
# activated (required).
|
73
|
+
#
|
74
|
+
# The default 'lib' is typically sufficient.
|
75
|
+
s.require_paths = ["lib"]
|
76
|
+
|
77
|
+
# Files included in this gem.
|
78
|
+
#
|
79
|
+
# By default, we take all files included in the Manifest.txt file on root
|
80
|
+
# of the project. Entries of the manifest are interpreted as Dir[...]
|
81
|
+
# patterns so that lazy people may use wilcards like lib/**/*
|
82
|
+
#
|
83
|
+
here = File.expand_path(File.dirname(__FILE__))
|
84
|
+
s.files = File.readlines(File.join(here, 'Manifest.txt')).
|
85
|
+
inject([]){|files, pattern| files + Dir[File.join(here, pattern.strip)]}.
|
86
|
+
collect{|x| x[(1+here.size)..-1]}
|
87
|
+
|
88
|
+
# Test files included in this gem.
|
89
|
+
#
|
90
|
+
s.test_files = Dir["test/**/*"] + Dir["spec/**/*"]
|
91
|
+
|
92
|
+
# The path in the gem for executable scripts (optional)
|
93
|
+
#
|
26
94
|
s.bindir = "bin"
|
27
|
-
s.executables = ["quickl"]
|
28
95
|
|
29
|
-
|
30
|
-
|
31
|
-
s.
|
32
|
-
|
96
|
+
# Executables included in the gem.
|
97
|
+
#
|
98
|
+
s.executables = (Dir["bin/*"]).collect{|f| File.basename(f)}
|
99
|
+
|
100
|
+
################################################################### REQUIREMENTS & INSTALL
|
101
|
+
# Remember the gem version requirements operators and schemes:
|
102
|
+
# = Equals version
|
103
|
+
# != Not equal to version
|
104
|
+
# > Greater than version
|
105
|
+
# < Less than version
|
106
|
+
# >= Greater than or equal to
|
107
|
+
# <= Less than or equal to
|
108
|
+
# ~> Approximately greater than
|
109
|
+
#
|
110
|
+
# Don't forget to have a look at http://lmgtfy.com/?q=Ruby+Versioning+Policies
|
111
|
+
# for setting your gem version.
|
112
|
+
#
|
113
|
+
# For your requirements to other gems, remember that
|
114
|
+
# ">= 2.2.0" (optimistic: specify minimal version)
|
115
|
+
# ">= 2.2.0", "< 3.0" (pessimistic: not greater than the next major)
|
116
|
+
# "~> 2.2" (shortcut for ">= 2.2.0", "< 3.0")
|
117
|
+
# "~> 2.2.0" (shortcut for ">= 2.2.0", "< 2.3.0")
|
118
|
+
#
|
119
|
+
|
120
|
+
#
|
121
|
+
# One call to add_dependency('gem_name', 'gem version requirement') for each
|
122
|
+
# runtime dependency. These gems will be installed with your gem.
|
123
|
+
# One call to add_development_dependency('gem_name', 'gem version requirement')
|
124
|
+
# for each development dependency. These gems are required for developers
|
125
|
+
#
|
126
|
+
s.add_development_dependency("rake", "~> 0.8.7")
|
127
|
+
s.add_development_dependency("bundler", "~> 1.0")
|
128
|
+
s.add_development_dependency("rspec", "~> 2.4.0")
|
129
|
+
s.add_development_dependency("yard", "~> 0.6.4")
|
130
|
+
s.add_development_dependency("bluecloth", "~> 2.0.9")
|
131
|
+
s.add_development_dependency("wlang", "~> 0.10.1")
|
132
|
+
|
133
|
+
|
134
|
+
# The version of ruby required by this gem
|
135
|
+
#
|
136
|
+
# Uncomment and set this if your gem requires specific ruby versions.
|
137
|
+
#
|
138
|
+
# s.required_ruby_version = ">= 0"
|
139
|
+
|
140
|
+
# The RubyGems version required by this gem
|
141
|
+
#
|
142
|
+
# s.required_rubygems_version = ">= 0"
|
143
|
+
|
144
|
+
# The platform this gem runs on. See Gem::Platform for details.
|
145
|
+
#
|
146
|
+
# s.platform = nil
|
147
|
+
|
148
|
+
# Extensions to build when installing the gem.
|
149
|
+
#
|
150
|
+
# Valid types of extensions are extconf.rb files, configure scripts
|
151
|
+
# and rakefiles or mkrf_conf files.
|
152
|
+
#
|
153
|
+
s.extensions = []
|
154
|
+
|
155
|
+
# External (to RubyGems) requirements that must be met for this gem to work.
|
156
|
+
# It’s simply information for the user.
|
157
|
+
#
|
158
|
+
s.requirements = nil
|
159
|
+
|
160
|
+
# A message that gets displayed after the gem is installed
|
161
|
+
#
|
162
|
+
# Uncomment and set this if you want to say something to the user
|
163
|
+
# after gem installation
|
164
|
+
#
|
165
|
+
s.post_install_message = nil
|
166
|
+
|
167
|
+
################################################################### SECURITY
|
168
|
+
|
169
|
+
# The key used to sign this gem. See Gem::Security for details.
|
170
|
+
#
|
171
|
+
# s.signing_key = nil
|
172
|
+
|
173
|
+
# The certificate chain used to sign this gem. See Gem::Security for
|
174
|
+
# details.
|
175
|
+
#
|
176
|
+
# s.cert_chain = []
|
177
|
+
|
178
|
+
################################################################### RDOC
|
179
|
+
|
180
|
+
# An ARGV style array of options to RDoc
|
181
|
+
#
|
182
|
+
# See 'rdoc --help' about this
|
183
|
+
#
|
184
|
+
s.rdoc_options = []
|
33
185
|
|
34
|
-
|
35
|
-
|
36
|
-
s.extra_rdoc_files =
|
186
|
+
# Extra files to add to RDoc such as README
|
187
|
+
#
|
188
|
+
s.extra_rdoc_files = Dir["README.md"] + Dir["CHANGELOG.md"] + Dir["LICENCE.md"]
|
37
189
|
|
38
|
-
s.homepage = 'http://github.com/blambeau/quickl'
|
39
190
|
end
|
data/quickl.noespec
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Noe template for ruby gem libraries (https://github.com/blambeau/noe) - short version
|
2
|
+
# Run 'noe show-spec' and 'noe help show-spec' for additional details.
|
3
|
+
|
4
|
+
# Don't remove this entry!
|
5
|
+
template-info:
|
6
|
+
name: "ruby"
|
7
|
+
version: 1.3.0
|
8
|
+
|
9
|
+
# Update to match your own configuration.
|
10
|
+
variables:
|
11
|
+
# A ruby lower case project name.
|
12
|
+
lower:
|
13
|
+
quickl
|
14
|
+
|
15
|
+
# A ruby upper case project name.
|
16
|
+
upper:
|
17
|
+
Quickl
|
18
|
+
|
19
|
+
# Version of your library
|
20
|
+
version:
|
21
|
+
0.2.1
|
22
|
+
|
23
|
+
# Project summary (~ 1 line).
|
24
|
+
summary: |-
|
25
|
+
Helper to create commandline ruby programs
|
26
|
+
|
27
|
+
# Project description (~ 5 lines). Project description should be more complete
|
28
|
+
# than the summary and will be used to describe your gem on rubygems.org
|
29
|
+
description: |-
|
30
|
+
Quickl helps you creating commandline ruby programs. From simple commands
|
31
|
+
with options to complex delegators with subcommands, global and local
|
32
|
+
options.
|
33
|
+
|
34
|
+
# Authors of the project (- {name: Bob, email: bob@gmail.com}, ...)
|
35
|
+
authors:
|
36
|
+
- { name: "Bernard Lambeau", email: blambeau@gmail.com }
|
37
|
+
|
38
|
+
# Web links for the project (- http://..., - http://...).
|
39
|
+
links:
|
40
|
+
- http://github.com/blambeau/quickl
|
41
|
+
|
42
|
+
# Gem dependencies. (- {name: ..., version: ..., groups: [...]}, ...)
|
43
|
+
dependencies:
|
44
|
+
# Rake is required for developers, as usual
|
45
|
+
- {name: rake, version: "~> 0.8.7", groups: [development]}
|
46
|
+
# Bundler is required for developers and is used by the Rakefile
|
47
|
+
- {name: bundler, version: "~> 1.0", groups: [development]}
|
48
|
+
# RSpec is required to run 'rake spec'. See tasks/spec.rake
|
49
|
+
- {name: rspec, version: "~> 2.4.0", groups: [development]}
|
50
|
+
# YARD and BlueCloth are required to run 'rake yard'. See tasks/yard.rake
|
51
|
+
- {name: yard, version: "~> 0.6.4", groups: [development]}
|
52
|
+
- {name: bluecloth, version: "~> 2.0.9", groups: [development]}
|
53
|
+
# wlang is required to run 'rake debug_mail'. See tasks/debug_mail.rake
|
54
|
+
- {name: wlang, version: "~> 0.10.1", groups: [development]}
|
55
|
+
|
56
|
+
rake_tasks:
|
57
|
+
unit_test:
|
58
|
+
pattern: examples/**/*_test.rb
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
module Quickl
|
3
|
+
describe "Command building /" do
|
4
|
+
|
5
|
+
it "should execute callback methods" do
|
6
|
+
MiniClient::Factored.run.should == :hello
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should install hierarchy correctly when command_parent= is used" do
|
10
|
+
MiniClient::Factored.super_command.should == MiniClient::Requester
|
11
|
+
MiniClient::Requester.subcommands.should include(MiniClient::Factored)
|
12
|
+
lambda{ MiniClient::Requester.new.has_command!("factored") }.should_not raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
end # Command::command_name
|
16
|
+
end # module Quickl
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
module Quickl
|
3
|
+
describe "Command::command_name /" do
|
4
|
+
|
5
|
+
it "should be installed from inline rdoc" do
|
6
|
+
MiniClient::Say::Hello.command_name.should == "hello"
|
7
|
+
MiniClient::Say::Goodbye.command_name.should == "goodbye"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be accessible on instance" do
|
11
|
+
MiniClient::Say::Hello.new.command_name.should == "hello"
|
12
|
+
MiniClient::Say::Goodbye.new.command_name.should == "goodbye"
|
13
|
+
end
|
14
|
+
|
15
|
+
end # Command::command_name
|
16
|
+
end # module Quickl
|