2012-03-16 3 views
0

現在、いくつかの異なるタスクをサポートするThor実行可能ファイルを構築中です。いくつかのタスクは他のタスクを休止します。例えば複数のThorタスクでグローバルデータを共有するベストプラクティス

  • 認証
    • は、ローカルユーザー
    • 起動認証
    • 何か
    • 起動設定
  • をいの作成認証します
  • 設定:
    • 起動認証
    • はトールのいいところは、私は今、別途3つのタスクのすべてを呼び出しますが、例えば認証があることを確認することができますということです

何かをします呼び出しによって一度だけ呼び出されます。

しかし、これらのタスク間でデータを共有するための最良の方法は何ですか。たとえば、認証中の場合、現在のユーザーのユーザーIDを設定したいとします。したがって、私が私たちのウェブサービスからデータを要求したいときは、私のコードのどこからでも同じ方法でユーザーIDを取得できます。

今はモジュールで実装していますが、これが最善の方法であるかどうかはわかりません。

シングルトンを使用することは別の方法ですが、何とかしてこれは少しのように思えます。

おそらく、あなたはこれを行うためのより良い方法で経験したことがあります。あるいは、モジュールを使用することは、とにかく情報を格納する最良の方法です。私はこのような何かをやっているだろう

答えて

1

module PRJ 

    class << self 
    attr_accessor :api_key, :account_name, :api_version, :api_url, ...... 

    def configure 
    yield self 
    end 
    end 

end 

require "#{directory_of_all_other_classes}" 

require 'thor' 

class CLI < Thor 
include Thor::Actions 

def login 
    ... 
    PRJ.api_key = response[:api_key] 
end 

あなたはすべてのケースで認証を起動したいので、私はそれがメインのCLIファイルにされるべきだと思うのよう。

データの保存と使用に関しては、定数の代わりに属性を使用する方がよいでしょう。私はこれについて正しくはないかもしれませんが、私はクラスの属性を使用する方が好きです。

今、あなたはどこからでもPRJ.api_keyにアクセスして変更することができます(すべてのファイルにPRJモジュールが必要です)

P.S.コードスニペットの構造が正確でないかもしれない、私はちょうどいくつかの基本的なスケルトンを共有したいと思った。残りのクラスについて上記のようなことをしてください。あなただけの単純なデータ構造を格納する必要がある場合

0

私は、共通のクラス変数

class Test < Thor 
    @@my_shared_var = nil 

    desc 'my_first_task','sdfasdf' 
    def my_first_task 
    @@my_shared_var = 'foo' 
    end 

    desc 'my_second_task','sdfasdf' 
    def my_second_task 
    invoke :my_first_task 
    puts @@my_shared_var 
    end 

end 
のために行くだろう
関連する問題