quickl 0.1.1 → 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.
Files changed (37) hide show
  1. data/CHANGELOG.md +10 -0
  2. data/README.md +5 -5
  3. data/Rakefile +12 -39
  4. data/bin/quickl +1 -1
  5. data/examples/{delegate → delegator}/README.md +12 -12
  6. data/examples/{delegate/bin/delegate → delegator/bin/delegator} +2 -2
  7. data/examples/{delegate/lib/delegate.rb → delegator/lib/delegator.rb} +3 -3
  8. data/examples/{delegate → delegator}/lib/hello_world.rb +2 -2
  9. data/examples/{delegate → delegator}/lib/help.rb +2 -2
  10. data/examples/{delegate/test/delegate_test.rb → delegator/test/delegator_test.rb} +4 -4
  11. data/examples/hello/hello +1 -1
  12. data/lib/quickl.rb +1 -1
  13. data/lib/quickl/command.rb +9 -5
  14. data/lib/quickl/command/{delegate.rb → delegator.rb} +13 -8
  15. data/lib/quickl/command/robustness.rb +12 -0
  16. data/lib/quickl/command/single.rb +2 -2
  17. data/lib/quickl/errors.rb +23 -1
  18. data/quickl.gemspec +3 -2
  19. metadata +56 -33
  20. data/test/command/command_name.spec +0 -16
  21. data/test/command/documentation.spec +0 -23
  22. data/test/command/overview.spec +0 -14
  23. data/test/command/run.spec +0 -22
  24. data/test/command/subcommands.spec +0 -20
  25. data/test/command/usage.spec +0 -16
  26. data/test/mini_client.rb +0 -59
  27. data/test/naming/command2module.spec +0 -17
  28. data/test/naming/module2command.spec +0 -21
  29. data/test/ruby_tools/class_unqualified_name.spec +0 -28
  30. data/test/ruby_tools/extract_file_rdoc.spec +0 -28
  31. data/test/ruby_tools/fixtures.rb +0 -27
  32. data/test/ruby_tools/fixtures/RubyTools.rdoc +0 -12
  33. data/test/ruby_tools/fixtures/Utils.rdoc +0 -3
  34. data/test/ruby_tools/optional_args_block_call.spec +0 -37
  35. data/test/ruby_tools/parent_module.spec +0 -23
  36. data/test/spec_helper.rb +0 -13
  37. data/test/wrapping.rb +0 -39
@@ -1,3 +1,13 @@
1
+ # 0.2.0 / 2011-01-10
2
+
3
+ * Enhancements
4
+
5
+ * Command#run now takes a (optional) second argument (get it at command runtime via :requester reader)
6
+ * Renamed Delegate -> Delegator (Quickl::Delegate is kept but should not be used anymore)
7
+ * Added IOAccessError with default reaction to Exit
8
+ * Added valid_read_file! robustness utility
9
+ * Moved to rspec 2.4.0, modified Rakefile and tests accordingly
10
+
1
11
  # 0.1.1 / 2010-12-24
2
12
 
3
13
  * Fixed gemspec and binaries problems
data/README.md CHANGED
@@ -36,10 +36,10 @@ Running them as simply as:
36
36
 
37
37
  SimpleCommand.run(ARGV)
38
38
 
39
- From simple command to complex delegate (_ala_ 'git [--version] [--help] COMMAND [cmd options] ARGS...'), Quickl provides (or aims at providing) the following features:
39
+ From simple command to complex delegator (_ala_ 'git [--version] [--help] COMMAND [cmd options] ARGS...'), Quickl provides (or aims at providing) the following features:
40
40
 
41
41
  * Simple command creations via simple classes
42
- * Delegate commands and categories via ruby namespaces and naming conventions
42
+ * Delegator commands and categories via ruby namespaces and naming conventions
43
43
  * Command help and documentation provided through _rdoc_
44
44
  * Command options via standard OptionParser
45
45
  * Error handling trought special blocks, assertions methods and dedicated Error classes
@@ -70,7 +70,7 @@ Try this:
70
70
  Additional examples (see examples folder):
71
71
 
72
72
  * [hello world example](https://github.com/blambeau/quickl/blob/master/examples/hello_world)
73
- * [delegate example](https://github.com/blambeau/quickl/blob/master/examples/delegate)
73
+ * [delegator example](https://github.com/blambeau/quickl/blob/master/examples/delegator)
74
74
 
75
75
  ## Version policy
76
76
 
@@ -81,8 +81,8 @@ Until version 1.0.0, moditications of public interfaces increase the minor versi
81
81
 
82
82
  Public interfaces are:
83
83
 
84
- * Quickl::Command and Quickl::Delegate calls
85
- * DSL methods used in "subclasses" built by Quickl::Command and Quickl::Delegate
84
+ * Quickl::Command and Quickl::Delegator calls
85
+ * DSL methods used in "subclasses" built by Quickl::Command and Quickl::Delegator
86
86
  * RDoc -> command line documentation recognizers (synopsis, overview, documentation, ...)
87
87
  * Naming conventions (module <-> command conversions)
88
88
  * Default reactions to errors (Quickl::Help, Quickl::Exit, ...)
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- ruby -*-
2
- $here = File.dirname(__FILE__)
3
2
  require 'rubygems'
4
3
  require "rake/testtask"
5
- require 'spec/rake/spectask'
4
+ require "rspec/core/rake_task"
6
5
  require "yard"
6
+ require "rake/gempackagetask"
7
7
 
8
8
  task :default => :test
9
9
  task :test => [:spec, :examples]
@@ -11,7 +11,7 @@ task :test => [:spec, :examples]
11
11
  # About yard documentation
12
12
  YARD::Rake::YardocTask.new do |t|
13
13
  t.files = ['lib/**/*.rb', 'examples/**/*.rb']
14
- t.options = ['--output-dir', 'doc/api', '-', "README.md", "HISTORY.md"]
14
+ t.options = ['--output-dir', 'doc/api', '-', "README.md", "CHANGELOG.md"]
15
15
  end
16
16
 
17
17
  desc "Lauches unit tests on examples"
@@ -21,44 +21,17 @@ Rake::TestTask.new(:examples) do |test|
21
21
  test.verbose = true
22
22
  end
23
23
 
24
- desc "Run all rspec test"
25
- Spec::Rake::SpecTask.new(:spec) do |t|
26
- t.ruby_opts = ['-I.', '-Ilib', '-Itest']
27
- t.spec_files = Dir["#{$here}/test/**/*.spec"]
24
+ desc "Run all examples"
25
+ RSpec::Core::RakeTask.new(:spec) do |t|
26
+ t.rspec_opts = %w[--color]
27
+ t.verbose = false
28
28
  end
29
29
 
30
- # PACKAGING & INSTALLATION ####################################################
31
- # Largely inspired from the Citrus project
32
-
33
- if defined?(Gem)
34
- $spec = eval("#{File.read('quickl.gemspec')}")
35
-
36
- directory 'dist'
37
-
38
- def package(ext='')
39
- "dist/#{$spec.name}-#{$spec.version}" + ext
40
- end
41
-
42
- file package('.gem') => %w< dist > + $spec.files do |f|
43
- sh "gem build quickl.gemspec"
44
- mv File.basename(f.name), f.name
45
- end
46
-
47
- file package('.tar.gz') => %w< dist > + $spec.files do |f|
48
- sh "git archive --format=tar HEAD | gzip > #{f.name}"
49
- end
50
-
51
- desc "Build packages"
52
- task :package => %w< .gem .tar.gz >.map {|e| package(e) }
30
+ desc "Create the .gem package"
31
+ $spec = Kernel.eval(File.read(File.expand_path('../quickl.gemspec', __FILE__)))
32
+ Rake::GemPackageTask.new($spec) do |pkg|
33
+ pkg.need_tar = true
34
+ end
53
35
 
54
- desc "Build and install as local gem"
55
- task :install => package('.gem') do |t|
56
- sh "gem install #{package('.gem')}"
57
- end
58
36
 
59
- desc "Upload gem to rubygems.org"
60
- task :release => package('.gem') do |t|
61
- sh "gem push #{package('.gem')}"
62
- end
63
- end
64
37
  # vim: syntax=ruby
data/bin/quickl CHANGED
@@ -113,4 +113,4 @@ class Quickl::Main < Quickl::Command(__FILE__, __LINE__)
113
113
  end
114
114
 
115
115
  end # class Quickl::Command::Main
116
- Quickl::Main.run(ARGV)
116
+ Quickl::Main.run(ARGV, __FILE__)
@@ -1,14 +1,14 @@
1
- # Quickl example: delegate
1
+ # Quickl example: delegator
2
2
 
3
- This example shows how to delegate commands. Delegate commands are command
3
+ This example shows how to create delegator commands. Delegators are commands
4
4
  that delegate the actual execution to sub commands (well known example is
5
- 'git'). A delegate command typically has a signature like:
5
+ 'git'). A delegator command typically has a signature like:
6
6
 
7
- delegate [main options] COMMAND [cmd options] ARGS...
7
+ delegator [main options] COMMAND [cmd options] ARGS...
8
8
 
9
9
  ## Structure
10
10
 
11
- The structure for delegate commands is as follows:
11
+ The structure for delegator commands is as follows:
12
12
 
13
13
  #
14
14
  # Main command overview
@@ -27,7 +27,7 @@ The structure for delegate commands is as follows:
27
27
  #
28
28
  # See '#{command_name} help COMMAND' for more information on a specific command.
29
29
  #
30
- class DelegateCommand < Quickl::Delegate(__FILE__, __LINE__)
30
+ class DelegatorCommand < Quickl::Delegator(__FILE__, __LINE__)
31
31
 
32
32
  # install options below
33
33
  options do |opt|
@@ -60,26 +60,26 @@ The structure for delegate commands is as follows:
60
60
 
61
61
  # To run the command, typically in a bin/simple_command
62
62
  # shell file
63
- DelegateCommand.run(ARGV)
63
+ DelegatorCommand.run(ARGV)
64
64
 
65
65
 
66
66
  ## Example
67
67
 
68
68
  Try the following:
69
69
 
70
- ./delegate
70
+ ./delegator
71
71
  # => [ ... complete help with subcommands summary ... ]
72
72
 
73
- ./delegate --help
73
+ ./delegator --help
74
74
  # => [ ... complete help with subcommands summary ... ]
75
75
 
76
- ./delegate help
76
+ ./delegator help
77
77
  # => [ ... complete help with subcommands summary ... ]
78
78
 
79
- ./delegate help hello-world
79
+ ./delegator help hello-world
80
80
  # => [ ... help of hello-world's subcommand ... ]
81
81
 
82
- ./delegate hello-world bob
82
+ ./delegator hello-world bob
83
83
  # => Hello bob!
84
84
 
85
85
  ./hello_world --capitalize bob
@@ -3,7 +3,7 @@ require File.expand_path('../../../helper', __FILE__)
3
3
 
4
4
  # Load the delegate tool
5
5
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
6
- require "delegate"
6
+ require "delegator"
7
7
 
8
8
  # Run the command
9
- Delegate.run(ARGV)
9
+ Delegator.run(ARGV, __FILE__)
@@ -11,12 +11,12 @@
11
11
  # #{summarized_subcommands}
12
12
  #
13
13
  # DESCRIPTION
14
- # This example shows how to write a delegate command, that is, a
14
+ # This example shows how to write a delegator command, that is, a
15
15
  # command which delegates to a subcommand
16
16
  #
17
17
  # See '#{program_name} help COMMAND' for more information on a specific command.
18
18
  #
19
- class Delegate < Quickl::Delegate(__FILE__, __LINE__)
19
+ class Delegator < Quickl::Delegator(__FILE__, __LINE__)
20
20
 
21
21
  # Single command version
22
22
  VERSION = "0.1.0"
@@ -36,6 +36,6 @@ class Delegate < Quickl::Delegate(__FILE__, __LINE__)
36
36
 
37
37
  end
38
38
 
39
- end # class Delegate
39
+ end # class Delegator
40
40
  require "help"
41
41
  require "hello_world"
@@ -1,4 +1,4 @@
1
- class Delegate
1
+ class Delegator
2
2
  #
3
3
  # Say hello
4
4
  #
@@ -36,4 +36,4 @@ class Delegate
36
36
  end
37
37
 
38
38
  end # class HelloWorld
39
- end # class Delegate
39
+ end # class Delegator
@@ -1,4 +1,4 @@
1
- class Delegate
1
+ class Delegator
2
2
  #
3
3
  # Show help about a specific command
4
4
  #
@@ -21,4 +21,4 @@ class Delegate
21
21
  end
22
22
 
23
23
  end # class Help
24
- end # class Delegate
24
+ end # class Delegator
@@ -7,9 +7,9 @@ rescue LoadError
7
7
  require 'quickl'
8
8
  end
9
9
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
10
- require 'delegate'
10
+ require 'Delegator'
11
11
 
12
- class DelegateTest < Test::Unit::TestCase
12
+ class DelegatorTest < Test::Unit::TestCase
13
13
 
14
14
  def assert_exits(match, exit_code)
15
15
  yield
@@ -21,8 +21,8 @@ class DelegateTest < Test::Unit::TestCase
21
21
 
22
22
  def run_command(*args)
23
23
  $stdout = StringIO.new
24
- Delegate.no_react_to(Quickl::Exit)
25
- Delegate.run args
24
+ Delegator.no_react_to(Quickl::Exit)
25
+ Delegator.run args
26
26
  $stdout.string
27
27
  ensure
28
28
  $stdout = STDOUT
@@ -53,5 +53,5 @@ class Hello < Quickl::Command(__FILE__, __LINE__)
53
53
  end # class Hello
54
54
 
55
55
  if __FILE__ == $0
56
- Hello.run(ARGV)
56
+ Hello.run(ARGV, __FILE__)
57
57
  end
@@ -6,7 +6,7 @@ require 'quickl/command'
6
6
  module Quickl
7
7
 
8
8
  # Quickl's VERSION
9
- VERSION = '0.1.1'.freeze
9
+ VERSION = '0.2.0'.freeze
10
10
 
11
11
  # Quickl's COPYRIGHT info
12
12
  COPYRIGHT = "(c) 2010, Bernard Lambeau"
@@ -72,8 +72,8 @@ module Quickl
72
72
  end
73
73
 
74
74
  # Runs the command
75
- def run(*args)
76
- self.new.run(*args)
75
+ def run(argv = [], requester = nil)
76
+ self.new.run(argv, requester)
77
77
  end
78
78
 
79
79
  ############################################### Error handling
@@ -100,7 +100,10 @@ module Quickl
100
100
 
101
101
  # Methods installed on all command instances
102
102
  module InstanceMethods
103
-
103
+
104
+ # Who is requesting command execution?
105
+ attr_reader :requester
106
+
104
107
  # Delegate unrecognized calls to the command class
105
108
  # (gives access to options, help, usage, ...)
106
109
  def method_missing(name, *args, &block)
@@ -132,7 +135,8 @@ module Quickl
132
135
  # This method is intended to be overriden and does nothing
133
136
  # by default.
134
137
  #
135
- def run(argv)
138
+ def run(argv, requester = nil)
139
+ @requester = requester
136
140
  _run(argv)
137
141
  rescue Quickl::Error => ex
138
142
  handle_error(ex)
@@ -151,4 +155,4 @@ require 'quickl/command/builder'
151
155
  require 'quickl/command/robustness'
152
156
  require 'quickl/command/options'
153
157
  require 'quickl/command/single'
154
- require 'quickl/command/delegate'
158
+ require 'quickl/command/delegator'
@@ -1,7 +1,7 @@
1
1
  module Quickl
2
- module Command::Delegate
2
+ module Command::Delegator
3
3
  module InstanceMethods
4
-
4
+
5
5
  # Run the command by delegation
6
6
  def _run(argv = [])
7
7
  # My own options
@@ -13,7 +13,7 @@ module Quickl
13
13
 
14
14
  # Run the subcommand now
15
15
  if cmd = argv.shift
16
- has_command!(cmd).run(argv)
16
+ cmd = has_command!(cmd).run(argv, self)
17
17
  else
18
18
  raise Quickl::Help.new(cmd.nil? ? 0 : -1)
19
19
  end
@@ -36,18 +36,23 @@ module Quickl
36
36
  end
37
37
 
38
38
  end
39
- end # module Command::Delegate
39
+ end # module Command::Delegator
40
40
 
41
41
  #
42
- # Create a delegate command
42
+ # Create a delegator command
43
43
  #
44
- def self.Delegate(*args)
44
+ def self.Delegator(*args)
45
45
  command_builder do |b|
46
46
  b.document *args
47
- b.class_module Command::Delegate::ClassMethods
48
- b.instance_module Command::Delegate::InstanceMethods
47
+ b.class_module Command::Delegator::ClassMethods
48
+ b.instance_module Command::Delegator::InstanceMethods
49
49
  end
50
50
  Command
51
51
  end
52
52
 
53
+ # @see Delegator
54
+ def self.Delegate(*args)
55
+ self.Delegator(*args)
56
+ end
57
+
53
58
  end # module Quickl
@@ -13,6 +13,18 @@ module Quickl
13
13
  raise NoSuchCommand, "No such command #{name}", ex.backtrace
14
14
  end
15
15
 
16
+ # Checks that _file_ is a readable file or raises an error.
17
+ # Returns _file_ on success.
18
+ def valid_read_file!(file, error_class = nil, msg = nil)
19
+ if File.file?(file) and File.readable?(file)
20
+ file
21
+ else
22
+ error_class ||= Quickl::IOAccessError
23
+ msg ||= "Not a file or not readable: #{file}"
24
+ raise error_class, msg, caller
25
+ end
26
+ end
27
+
16
28
  end # module Robustness
17
29
  end # class Command
18
30
  end # module Quickl
@@ -11,10 +11,10 @@ module Quickl
11
11
  execute(parse_options(argv))
12
12
  end
13
13
 
14
- end # module Command::Delegate
14
+ end # module Command::Single
15
15
 
16
16
  #
17
- # Create a delegate command
17
+ # Create a single command
18
18
  #
19
19
  def self.Command(*args)
20
20
  command_builder do |b|
@@ -173,7 +173,7 @@ module Quickl
173
173
 
174
174
  #
175
175
  # This error can be raised to indicate that a command has not been
176
- # found (typically by delegates).
176
+ # found (typically by delegators).
177
177
  #
178
178
  # Default exit code:
179
179
  # -1
@@ -193,4 +193,26 @@ module Quickl
193
193
 
194
194
  end # class NoSuchCommand
195
195
 
196
+ #
197
+ # This error can be raised to indicate that some file/dir
198
+ # access has failed.
199
+ #
200
+ # Default exit code:
201
+ # -1
202
+ #
203
+ # Default reaction:
204
+ # raise Exit.new(code), message, backtrace
205
+ #
206
+ class IOAccessError < Error
207
+
208
+ def initialize(*args)
209
+ super(*(args + [ -1 ]))
210
+ end
211
+
212
+ def react!
213
+ raise Exit.new(self.exit_code), self.message, backtrace
214
+ end
215
+
216
+ end # class IOAccessError
217
+
196
218
  end # module Quickl
@@ -23,12 +23,13 @@ Gem::Specification.new do |s|
23
23
  Dir['test/**/*'] +
24
24
  %w{ quickl.gemspec Rakefile README.md CHANGELOG.md }
25
25
 
26
- s.test_files = s.files.select {|path| path =~ /^test\/.*_test.rb/ }
27
-
28
26
  s.bindir = "bin"
29
27
  s.executables = ["quickl"]
30
28
 
31
29
  s.add_development_dependency('rake')
30
+ s.add_development_dependency('rspec', ">= 2.4.0")
31
+ s.add_development_dependency('yard', ">= 0.6.4")
32
+ s.add_development_dependency('bluecloth', ">= 0.6.4")
32
33
 
33
34
  s.has_rdoc = true
34
35
  s.rdoc_options = %w< --line-numbers --inline-source --title Quickl --main Quickl >
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quickl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Bernard Lambeau
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-12-24 00:00:00 +01:00
17
+ date: 2011-01-10 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,12 +25,56 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 3
30
28
  segments:
31
29
  - 0
32
30
  version: "0"
33
31
  type: :development
34
32
  version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 2
43
+ - 4
44
+ - 0
45
+ version: 2.4.0
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: yard
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ - 6
59
+ - 4
60
+ version: 0.6.4
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: bluecloth
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ segments:
72
+ - 0
73
+ - 6
74
+ - 4
75
+ version: 0.6.4
76
+ type: :development
77
+ version_requirements: *id004
35
78
  description: Generate Ruby command line apps quickly
36
79
  email: blambeau@gmail.com
37
80
  executables:
@@ -42,7 +85,7 @@ extra_rdoc_files:
42
85
  - README.md
43
86
  files:
44
87
  - lib/quickl/command/builder.rb
45
- - lib/quickl/command/delegate.rb
88
+ - lib/quickl/command/delegator.rb
46
89
  - lib/quickl/command/options.rb
47
90
  - lib/quickl/command/robustness.rb
48
91
  - lib/quickl/command/single.rb
@@ -52,36 +95,18 @@ files:
52
95
  - lib/quickl/naming.rb
53
96
  - lib/quickl/ruby_tools.rb
54
97
  - lib/quickl.rb
55
- - examples/delegate/bin/delegate
56
- - examples/delegate/lib/delegate.rb
57
- - examples/delegate/lib/hello_world.rb
58
- - examples/delegate/lib/help.rb
59
- - examples/delegate/README.md
60
- - examples/delegate/test/delegate_test.rb
98
+ - examples/delegator/bin/delegator
99
+ - examples/delegator/lib/delegator.rb
100
+ - examples/delegator/lib/hello_world.rb
101
+ - examples/delegator/lib/help.rb
102
+ - examples/delegator/README.md
103
+ - examples/delegator/test/delegator_test.rb
61
104
  - examples/hello/hello
62
105
  - examples/hello/hello_test.rb
63
106
  - examples/hello/README.md
64
107
  - examples/helper.rb
65
108
  - templates/single.erb
66
109
  - bin/quickl
67
- - test/command/command_name.spec
68
- - test/command/documentation.spec
69
- - test/command/overview.spec
70
- - test/command/run.spec
71
- - test/command/subcommands.spec
72
- - test/command/usage.spec
73
- - test/mini_client.rb
74
- - test/naming/command2module.spec
75
- - test/naming/module2command.spec
76
- - test/ruby_tools/class_unqualified_name.spec
77
- - test/ruby_tools/extract_file_rdoc.spec
78
- - test/ruby_tools/fixtures/RubyTools.rdoc
79
- - test/ruby_tools/fixtures/Utils.rdoc
80
- - test/ruby_tools/fixtures.rb
81
- - test/ruby_tools/optional_args_block_call.spec
82
- - test/ruby_tools/parent_module.spec
83
- - test/spec_helper.rb
84
- - test/wrapping.rb
85
110
  - quickl.gemspec
86
111
  - Rakefile
87
112
  - README.md
@@ -105,7 +130,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
130
  requirements:
106
131
  - - ">="
107
132
  - !ruby/object:Gem::Version
108
- hash: 3
109
133
  segments:
110
134
  - 0
111
135
  version: "0"
@@ -114,7 +138,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
138
  requirements:
115
139
  - - ">="
116
140
  - !ruby/object:Gem::Version
117
- hash: 3
118
141
  segments:
119
142
  - 0
120
143
  version: "0"
@@ -1,16 +0,0 @@
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
@@ -1,23 +0,0 @@
1
- $hello_doc = <<EOF
2
-
3
- Say hello to the user whose name is requested on the standard input
4
-
5
- SYNOPSIS
6
- mini-client say:hello
7
-
8
- DESCRIPTION
9
- And an explanation here
10
- on multiple lines with replacement: hello
11
-
12
- EOF
13
-
14
- require File.expand_path('../../spec_helper', __FILE__)
15
- module Quickl
16
- describe "Command::documentation /" do
17
-
18
- it "should be correctly installed" do
19
- MiniClient::Say::Hello.documentation.should == $hello_doc[0..-1]
20
- end
21
-
22
- end # Command::command
23
- end # module Quickl
@@ -1,14 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- describe "Command::overview /" do
4
-
5
- it "should be installed from inline rdoc" do
6
- MiniClient::Help.overview.should == "Print help"
7
- end
8
-
9
- it "should be installed accessible on instance" do
10
- MiniClient::Help.new.overview.should == "Print help"
11
- end
12
-
13
- end # Command::overview
14
- end # module Quickl
@@ -1,22 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- describe "Command::run /" do
4
-
5
- it "when invoked on a terminal command" do
6
- MiniClient::Say::Hello.run.should == :hello
7
- MiniClient::Say::Goodbye.run.should == :goodbye
8
- end
9
-
10
- it "when invoked on a delegate command" do
11
- MiniClient.run(["help"]).should == :help
12
- MiniClient::Say.run(["hello"]).should == :hello
13
- MiniClient::Say.run(["goodbye"]).should == :goodbye
14
- end
15
-
16
- it "when invoked on qualified command names" do
17
- MiniClient.run(["say:hello"]).should == :hello
18
- MiniClient.run(["say:goodbye"]).should == :goodbye
19
- end
20
-
21
- end # Command::command
22
- end # module Quickl
@@ -1,20 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- describe "Command::subcommands /" do
4
-
5
- it "should return installed commands in an array" do
6
- MiniClient.subcommands.should == [
7
- MiniClient::Help,
8
- MiniClient::Say
9
- ]
10
- end
11
-
12
- it "should return installed commands in an array" do
13
- MiniClient::Say.subcommands.should == [
14
- MiniClient::Say::Hello,
15
- MiniClient::Say::Goodbye
16
- ]
17
- end
18
-
19
- end # Command::subcommand
20
- end # module Quickl
@@ -1,16 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- describe "Command::usage /" do
4
-
5
- it "should be installed from inline rdoc" do
6
- MiniClient::Say::Hello.usage.should == "mini-client say:hello"
7
- MiniClient::Say::Goodbye.usage.should == "mini-client say:goodbye"
8
- end
9
-
10
- it "should be accessible on instance" do
11
- MiniClient::Say::Hello.new.usage.should == "mini-client say:hello"
12
- MiniClient::Say::Goodbye.new.usage.should == "mini-client say:goodbye"
13
- end
14
-
15
- end # Command::usage
16
- end # module Quickl
@@ -1,59 +0,0 @@
1
- #
2
- # MiniClient main command
3
- #
4
- class MiniClient < Quickl::Delegate(__FILE__, __LINE__)
5
-
6
- #
7
- # Print help
8
- #
9
- # SYNOPSIS
10
- # #{MiniClient.command_name} help
11
- #
12
- # DESCRIPTION
13
- # #{command_name} prints help
14
- #
15
- class Help < Quickl::Command(__FILE__, __LINE__)
16
-
17
- def run(*args)
18
- :help
19
- end
20
-
21
- end # class Help
22
-
23
- class Say < Quickl::Delegate(__FILE__, __LINE__)
24
-
25
- #
26
- # Say hello to the user whose name is requested on the standard input
27
- #
28
- # SYNOPSIS
29
- # #{MiniClient.command_name} say:hello
30
- #
31
- # DESCRIPTION
32
- # And an explanation here
33
- # on multiple lines with replacement: #{command_name}
34
- #
35
- class Hello < Quickl::Command(__FILE__, __LINE__)
36
-
37
- def run(*args)
38
- :hello
39
- end
40
-
41
- end # class Hello
42
-
43
- #
44
- # Say goodbye to the currently connected user
45
- #
46
- # SYNOPSIS
47
- # #{MiniClient.command_name} say:goodbye
48
- #
49
- class Goodbye < Quickl::Command(__FILE__, __LINE__)
50
-
51
- def run(*args)
52
- :goodbye
53
- end
54
-
55
- end # class Goodbye
56
-
57
- end # class Say
58
-
59
- end # module MiniClient
@@ -1,17 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- describe "Naming::command2module /" do
4
- include Naming
5
-
6
- it "should capitalize first char" do
7
- command2module("say").should == "Say"
8
- command2module(:say).should == :Say
9
- end
10
-
11
- it "should capitalize support dashes" do
12
- command2module("say-hello").should == "SayHello"
13
- command2module(:"say-hello").should == :SayHello
14
- end
15
-
16
- end # module Quickl
17
- end # module Quickl
@@ -1,21 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- describe "Naming::module2command /" do
4
- include Naming
5
-
6
- it "should uncapitalize first char" do
7
- module2command("Say").should == "say"
8
- module2command(:Say).should == :say
9
- end
10
-
11
- it "should uncapitalize and introduce dashes" do
12
- module2command("SayHello").should == "say-hello"
13
- module2command(:"SayHello").should == :"say-hello"
14
- end
15
-
16
- it "should support taking modules as argument" do
17
- module2command(Quickl::Command).should == "command"
18
- end
19
-
20
- end # module Quickl
21
- end # module Quickl
@@ -1,28 +0,0 @@
1
- require File.expand_path('../fixtures', __FILE__)
2
- module Quickl
3
- describe "RubyTools#class_unqualified_name /" do
4
-
5
- subject{ RubyTools::class_unqualified_name(clazz) }
6
-
7
- describe "when called on unqualified class" do
8
- let(:clazz){ ::String }
9
- it{ should == "String" }
10
- end
11
-
12
- describe "when called on qualified class" do
13
- let(:clazz){ RubyTools }
14
- it{ should == "RubyTools" }
15
- end
16
-
17
- describe "when called on long qualified class" do
18
- let(:clazz){ Quickl::Fixtures::Utils }
19
- it{ should == "Utils" }
20
- end
21
-
22
- describe "when piped with parent_module" do
23
- let(:clazz){ RubyTools::parent_module(Quickl::Fixtures::Utils) }
24
- it{ should == "Fixtures" }
25
- end
26
-
27
- end
28
- end
@@ -1,28 +0,0 @@
1
- require File.expand_path('../fixtures', __FILE__)
2
- module Quickl
3
- describe "RubyTools#extract_file_rdoc /" do
4
-
5
- let(:file){ File.expand_path('../fixtures.rb', __FILE__) }
6
-
7
- describe "when used without line and reverse options" do
8
-
9
- subject{ RubyTools::extract_file_rdoc(file) }
10
-
11
- it "should be as expected" do
12
- subject.should == File.read(File.expand_path('../fixtures/RubyTools.rdoc', __FILE__))
13
- end
14
-
15
- end
16
-
17
- describe "when used with line and reverse options" do
18
-
19
- subject{ RubyTools::extract_file_rdoc(file, 23, true) }
20
-
21
- it "should be as expected" do
22
- subject.should == File.read(File.expand_path('../fixtures/Utils.rdoc', __FILE__))
23
- end
24
-
25
- end
26
-
27
- end # RubyTools#extract_file_rdoc
28
- end # module Quickl
@@ -1,27 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- module Quickl
3
- module Fixtures
4
-
5
- #
6
- # This is a fixtures helper that matches documentation conventions.
7
- #
8
- # This is a second paragraph
9
- # That append on two lines
10
- #
11
- #
12
- # WARNING:
13
- # This kind of indentation should not be interpreted as code
14
- #
15
- # But this one yes
16
- #
17
- module RubyTools
18
- end # module RubyTools
19
-
20
- #
21
- # This is the documentation of the Utils module
22
- #
23
- module Utils
24
- end # module Utils
25
-
26
- end # module Fixtures
27
- end # module Quickl
@@ -1,12 +0,0 @@
1
-
2
- This is a fixtures helper that matches documentation conventions.
3
-
4
- This is a second paragraph
5
- That append on two lines
6
-
7
-
8
- WARNING:
9
- This kind of indentation should not be interpreted as code
10
-
11
- But this one yes
12
-
@@ -1,3 +0,0 @@
1
-
2
- This is the documentation of the Utils module
3
-
@@ -1,37 +0,0 @@
1
- require File.expand_path('../fixtures', __FILE__)
2
- module Quickl
3
- describe "RubyTools#optional_args_block_call /" do
4
-
5
- subject{ RubyTools::optional_args_block_call(block, args) }
6
-
7
- describe "when block has no arguments /" do
8
- let(:block){ lambda {
9
- "ok"
10
- } }
11
-
12
- describe "when no args are given" do
13
- let(:args){ [ ] }
14
- it { should == "ok" }
15
- end
16
-
17
- describe "when no args are given" do
18
- let(:args){ [ "hello" ] }
19
- it { should == "ok" }
20
- end
21
-
22
- end
23
-
24
- describe "when block has one arguments /" do
25
- let(:block){ lambda {|name|
26
- name
27
- } }
28
-
29
- describe "when args are given" do
30
- let(:args){ [ "hello" ] }
31
- it { should == "hello" }
32
- end
33
-
34
- end
35
-
36
- end
37
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path('../fixtures', __FILE__)
2
- module Quickl
3
- describe "RubyTools#parent_module /" do
4
-
5
- subject{ RubyTools::parent_module(clazz) }
6
-
7
- describe "when called on unqualified class" do
8
- let(:clazz){ ::String }
9
- it{ should be_nil }
10
- end
11
-
12
- describe "when called on qualified class" do
13
- let(:clazz){ RubyTools }
14
- it{ should == Quickl }
15
- end
16
-
17
- describe "when called on long qualified class" do
18
- let(:clazz){ Quickl::Fixtures::Utils }
19
- it{ should == Quickl::Fixtures }
20
- end
21
-
22
- end
23
- end
@@ -1,13 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- $LOAD_PATH.unshift "#{dir}/../lib"
3
-
4
- require 'rubygems'
5
- require 'spec'
6
- require 'spec/autorun'
7
- require 'pp'
8
- require 'fileutils'
9
- require 'quickl'
10
- require 'mini_client'
11
-
12
- Spec::Runner.configure do |config|
13
- end
@@ -1,39 +0,0 @@
1
- $LOAD_PATH.unshift('../../lib', __FILE__)
2
- require "quickl"
3
- $wrappers = []
4
-
5
- def wrap(filter, &block)
6
- $wrappers << [ filter, block ]
7
- end
8
-
9
- def build_wrapper(command, filter, continuation)
10
- lambda{|cont|
11
- if !filter || command.instance_eval(&filter)
12
- command.instance_exec(continuation, &b)
13
- else
14
- continuation.call
15
- end
16
- }
17
- end
18
-
19
- def execute(command, &block)
20
- first = build_wrapper(command, *$wrappers.first)
21
- c = $wrappers[1..-1].inject(first){|cont,wrapper|
22
- build_wrapper(command, *wrapper)
23
- }
24
- c.call(block)
25
- end
26
-
27
- wrap(lambda{ true }){|cont|
28
- puts "wrap 1"
29
- cont.call
30
- puts "end wrap 1"
31
- }
32
- wrap(lambda{ true }){|cont|
33
- puts "wrap 2"
34
- cont.call
35
- puts "end wrap 2"
36
- }
37
- execute(self){
38
- puts "hello"
39
- }