【问题标题】:How do I create thor::group generators as args of my_command如何创建 thor::group 生成器作为 my_command 的参数
【发布时间】:2012-02-18 08:08:33
【问题描述】:

在我的 gem 中,我想要一个带有 args 的可执行命令,如下所示:

foo generate project
foo generate config
foo say_hi

所以我做了

foo/bin/foo

#!/usr/bin/env ruby
require 'foo'
Foo::Foo.start

还有foo/lib/thor/foo.rb中的Foo文件

module Foo 
  class Foo < Thor

    desc "generate [WHAT]"
    def generate(*args)

    end

    desc "say_hi"
    def say_hi(*args)
       ....
    end

  end
end

还有 foo/lib/thor/generators/project.rb 还有 foo/lib/thor/generators/config.rb

我想指定从 Thor::Group 继承的类,例如 katz 示例...

module Foo
  module Generators
    class Project < Thor::Group
      include Thor::Actions
      ....
    end
  end
end

所以我的问题是:如何设置以便我可以从可执行文件中调用这些生成器,例如:

foo generate config

我在正确的轨道上吗?理想情况下,单独输入 foo 应该可以为 say_hi 和所有生成器提供帮助。

【问题讨论】:

  • 看起来 Thor#register 可能会有所帮助。我会坚持的。

标签: ruby gem generator thor


【解决方案1】:

一开始我也遇到了麻烦。这是我开始使用的模式:

$ 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 问候

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 删除

Deleting a sub-thing

【讨论】:

  • 这看起来不错,谢谢!似乎您可以毫无问题地获得正确格式化的帮助。我设法让事情正常进行,但必须解析帮助字符串以删除冒号。我以后会使用你的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多