2012-02-18 5 views
5

यह प्रश्न here से शुरू हुआ। लेकिन मैंने काफी बदल दिया क्योंकि मैंने थोर के बारे में और कुछ सीखा।मैं थोर :: समूह को उपसमूह के रूप में पंजीकरण कैसे कर सकता हूं

मैं थोर :: समूह उपसमूह बनाने की कोशिश कर रहा हूं जो तर्क लेता है। विचित्र रूप से, अगर कोई तर्क नहीं है तो यह काम करता है।

क्या मैं थोर :: समूह को सब-कमांड के रूप में उपयोग कर सकता हूं?

यह काम करता है जब मैं टाइप करें: foo counter 5

module Foo 
    class CLI < Thor 
    register(Counter, 'counter', 'counter <number>', 'Count up from the input.') 
    end 

    class Counter < Thor::Group 
    argument :number, :type => :numeric, :desc => "The number to start counting" 
    desc "Prints 2 numbers based on input" 

    def one 
     puts number + 0 
    end 

    def two 
     puts number + 1 
    end 

    end 


end 

Foo::CLI.start 

यह उत्तर: foo counter

foo/bin/foo

module Foo 
    class CLI < Thor 
    register(Counter, 'counter', 'counter', 'Count up from the 1.') 
    end 

    class Counter < Thor::Group 
    desc "Prints 1 2" 

    def one 
     puts 1 
    end 

    def two 
     puts 2 
    end 

    end 

end 

Foo::CLI.start 

लेकिन यह जब मैं टाइप काम नहीं करता है: counter was called incorrectly. Call as foo counter number

उत्तर

3

मेरे पास एक समाधान है। इसके बजाय थोर :: समूह का उपयोग कर के मैं आमंत्रण उपयोग कर रहा हूँ

bin/foo इस तरह दिखता है:

#!/usr/bin/env ruby 

require 'foo' 

Foo::CLI.start 

lib/cli.rb - रजिस्टरों आधार आदेश, foo की की एक उपकार्य 'के रूप में उत्पन्न' :

module Foo 
    class CLI < Thor 
    register(Generate, 'generate', 'generate [something]', 'Type foo generate for more help.') 
    end 
end 

lib/generate.rb इस तरह दिखता है:

module Foo 

    class Generate < Thor 

    desc "project [name]", "Prints the project making step" 
    def project(name) 
     puts "making first project file #{name}" 
     invoke :config 
     invoke :project_sub 
    end 

    desc "config [name]", "Prints the config making step" 
    def config(name) 
     puts "making first config file #{name}" 
     invoke :project_sub 
    end 

    desc "project_sub [name]", "Prints the project_sub making step" 
    def project_sub(name) 
     puts "making subsystem file #{name}" 
    end 

    def self.banner(task, namespace = false, subcommand = true) 
     task.formatted_usage(self, true, subcommand).split(':').join(' ') 
    end 

    end 

end 

अब मैं लिख सकते हैं: foo generate project fred

और यह होगा उत्पादन:

> making first project file fred 
> making first config file fred 
> making subsystem file fred 

सूचना बैनर ओवरराइड। इसका मतलब है कि टाइप:

"project" was called incorrectly. Call as "foo generate project [name]". 

रूप

"project" was called incorrectly. Call as "foo project [name]". 
करने का विरोध किया: foo generate project अमान्य या गुम आर्ग के साथ सही सहायता संदेश दे देंगे
संबंधित मुद्दे