简体   繁体   中英

How to use thor in rails?

Thor is a toolkit for building powerful command-line interfaces.

It always been used for single command line. If I want to use it in a rails project, for example:

lib/tasks/my_cli.rb

require "thor"

class MyCLI < Thor
  desc "hello NAME", "say hello to NAME"
  def hello(name)
    puts "Hello #{name}"
  end
end

Where to put the MyCLI.start(ARGV) ?

If I put it under that file( lib/tasks/my_cli.rb ), when I run my rspec test, it will show me the command message:

Commands:
  rspec help [COMMAND]   # Describe available commands or one specific command
  rspec hello NAME       # say hello to NAME

I don't want to see it in my bundle exec rspec , so I moved the MyCLI.start(ARGV) to bin/rails . It looks well. But after I do this:

$ ./bin/rails s -b 0.0.0.0
$ [CTRL+C]

I saw this message:

=> Booting Thin
=> Rails 4.2.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Thin web server (v1.6.3 codename Protein Powder)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop
^CStopping ...
Exiting
Could not find command "_b".

What does it mean:

Could not find command "_b".

So, I don't know a best practice about how to use thor in a rails project.

You have to use method_option: https://github.com/erikhuda/thor/wiki/Method-Options

And don't pass arguments like if it would be a normal method

require "thor"

class MyCLI < Thor
  desc "hello NAME", "say hello to NAME"

  method_option :name, aliases: '-b', type: :string, desc: 'It`s the named passed'

  def hello
    puts "Hello #{options[:name]}"
  end
end

Then use it with thor command: thor mycli:hello -b Robert

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM