Ruby脚本,存储API登录信息的最佳方法?

时间:2014-03-07 06:23:46

标签: ruby api

我目前正在编写一个脚本(命令行工具)来帮助我管理公开控制台。

起初我每次使用它登录控制台时都会向脚本传递三个参数,例如:

$ nexose-magic.rb -u user -p password -i 192.168.1.2 --display-scans

效率不高,所以我创建了一个config.yml文件,用于将控制台信息存储在哈希中。

$ nexpose-magic.rb -c console --display-scans

我相信该工具对管理员有用,所以我想在一个gem中分享它。我无法弄清楚如何让我的config.yml文件使用gem install ..它找不到config.yml文件!很容易将它指向我的开发目录中的相对路径,但是一旦我创建了一个gem,相对路径就不再那么相对了。如何在config.yml文件中指向nexpose-magic.rb?

有没有更好的方法来处理这样的事情?

1 个答案:

答案 0 :(得分:0)

您可以创建包含configure类的gem。该类有一个load方法,它将目录作为参数。然后,您可以传递当前工作的目录。

准备gem的一个好方法是在gem中创建一个Configuration单例类:

require 'singleton'
class Configuration
  include Singleton

  attr_accessor :config, :app_path
  def load(app_path)
    @app_path = app_path

    #load the config file and store the data
    @config = YAML.load_file( File.join(@app_path,'config','config.yml')) 
  end  

end

在你的主要课程中:

module MyFancyGem

  class << self
    #define a class method that configure the gem
    def configure(app_path)
      # Call load method with given path
      config.load(app_path)
    end

    # MyFancyGem.config will refer to the singleton Configuration class
    def config
      MyFancyGem::Configuration.instance
    end

  end

end

用法:

-Working directory
  - my_new_script
  - Gemfile
  - config/
    - config.yml

在my_new_script中:

require 'bundler'
Bundler.setup(:default)
require 'my_fancy_gem'
MyFancyGem.configure(File.join(File.dirname(__FILE__),"./")) #here, you define the path

MyFancyGem.hello_world

我希望这很清楚。我实际上是要撰写一篇博文来解释这一点(我希望在更完整的版本中)。如果你有兴趣,请告诉我!