私は初めてのレールプラグインを書いています。非常に単純化された方法で、開発者がレーキタスクを通じることができる値を指定できるようにしたいと思います。私はこのような何かを考えています... RailsのActiveRecordプラグインを書く
class User < ActiveRecord::Base
monitor "Users", count
monitor "Active Users", count("activated_at != NULL")
end
- 私はモニターがActiveRecordの::基本のクラスメソッドであることが必要と思いますが、どのように/どこで私のプラグインでそれを指定するのですか?
monitor
関数の引数は値ではなく、実行するコードのブロックである必要があります。私はこれを指定して構文を単純にする最良の方法についてはあまりよく分かりません。おそらくそれはmonitor "Active Users", {count "activated_at != NULL"}
でなければならないでしょうか?- 開発者が
User.count
、つまりcount
を指定する必要がない、つまりクラスを自動的に選択する(そして、ブロックはインスタンスではなくクラスで呼び出される)場合は、これが不可能な場合は、モニタのステートメントをモデルに入れる理由はないと思います(#5を参照)。 - これらの値の実際のカウント(ブロックの実行)は、オフラインのレーキタスクによって行われます。
monitor
関数は、これらのブロックをレーキタスクで使用できるようにするために何を行う必要がありますか?それらをクラス変数に格納しますか? - おそらく、モニタステートメントをモデルでまったく指定する必要はありません。多分それはそれを混乱させるので、私はそれらを置くために任意の代替場所を歓迎するでしょう。
私は現時点で自分のアイデアをスケッチして、Rubyで/できないことを理解しようとしています。どんな助けもありがたい。
更新:私はプラグインの目的をより明確にしようとします。私は開発者がレーキタスクによって監視されるべきメトリクスを定義できるようにしたい。レーキタスクは、これらのメトリックを繰り返し、ファイルに値を書き込みます(これを少し簡略化しました)。 rakeタスクは、rake monitors:update
(必須すなわち、なしのparams)のようなものは非常にシンプルになります
ありがとうございます、あなたはSQLについて正しいです - それは単なる例でした。私はnamed_scopesが非常に便利だと思うが、それは私の問題をかなり解決していない。私は、プラグインが達成しようとしていることに関するより多くの情報で質問を更新しました。 – ideasasylum