问题
In my gem I'd like to have a an executable command with args like so:
foo generate project
foo generate config
foo say_hi
So I made
foo/bin/foo
#!/usr/bin/env ruby
require 'foo'
Foo::Foo.start
And the Foo file in foo/lib/thor/foo.rb
module Foo
class Foo < Thor
desc "generate [WHAT]"
def generate(*args)
end
desc "say_hi"
def say_hi(*args)
....
end
end
end
And foo/lib/thor/generators/project.rb And foo/lib/thor/generators/config.rb
Where I'd like to specify classes inherited from Thor::Group like katz examples ...
module Foo
module Generators
class Project < Thor::Group
include Thor::Actions
....
end
end
end
So my question is: How do I set things up so that I can call those generators from the executable like:
foo generate config
Am I on the right track even? Ideally, typing foo
on its own should give help for say_hi
and for all the generators.
回答1:
I had trouble getting this to work at first, too. Here's the pattern that I've started using:
$ cat cli.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'thor'
require 'thor/group'
module CLI
class Greeter < Thor::Group
def say_hi
say "Hi"
end
def say_goodbye
say "Goodbye"
end
end
end
module CLI
class Crud < Thor
desc 'create', 'Creates a sub-thing'
def create
say "Creating a sub-thing"
end
desc 'delete', 'Deletes a sub-thing'
def delete
say "Deleting a sub-thing"
end
end
end
module CLI
class Root < Thor
register CLI::Greeter, 'greet', 'greet', 'Executes a multi-step subtask'
register CLI::Crud, 'crud', 'crud [COMMAND]', 'Delegates to a sub-command'
end
end
CLI::Root.start
$ ./cli.rb
Tasks:
cli.rb crud [COMMAND] # Delegates to a sub-command
cli.rb greet # Executes a multi-step subtask
cli.rb help [TASK] # Describe available tasks or one specific task
$ ./cli.rb greet
Hi
Goodbye
$ ./cli.rb crud
Tasks:
cli.rb crud create # Creates a sub-thing
cli.rb crud delete # Deletes a sub-thing
cli.rb crud help [COMMAND] # Describe subcommands or one specific subcommand
$ ./cli.rb crud create
Creating a sub-thing
$ ./cli.rb crud delete
Deleting a sub-thing
来源:https://stackoverflow.com/questions/9339677/how-do-i-create-thorgroup-generators-as-args-of-my-command