2016-07-30 2 views
1

「Parameters」というモデルを追加するRails4アプリケーションがあります。モデルの目的ですが、一般的なプログラミング用語でもあると心配しています。予約語がRuby、Rails 4、またはgemlistのgemと競合しないようにするにはどうすればいいですか?

ことを確保するためのベストプラクティス(各ステップ)とは何ですか:

Parameters 
parameter.thing 

...ルビー、Railsの、または私の特定の宝石リストで予約語と競合しないのだろうか?

答えて

1

Rubyにはオープンクラスの概念があります。それはどのようにRubyのであるから、

言っ
class MyClass 
    def another_method 
    # do something useful 
    end 
end 

は、このアクションには、「反射のような」メカニズムはありません:それはクラスMyClassがどこかで定義されている場合、それはあなたのコードに次の持つことは完全に有効だ、と述べました動作するように意図されています。

一つのこのような複雑なロジック構築することがあります

  • がロードされた新しいParametersクラスせずにアプリケーションを実行するには、
  • コール$defined = const_get('Parameters') || true rescue false;
  • $definedグローバルを使用します(例としてここではグローバルにしています)。

か:

  • だけあなたがロードされたかどうかを検出するためにParametersTracePoint#new(:class)を使用しています。

または

  • 他のクラスを検出するために、ObjectSpace#eachを使用しています。

あるいは

  • 解析源。

しかし、私は上記の解決法のいずれにも該当しません。クラスMyAppParametersに電話して、この名前で生きてください。

+0

ありがとうございます。これは私が探していた一種の洞察でした。私は、チェックが行われたときにどのクラスが読み込まれるかを検出するための良いアプローチです。問題のクラスが後でロードされないことを意味するわけではありません。親クラスが "スキャン"を意味するので、私は "ScanParameters"を使用しました。 –

+0

"後でいつかクラスが読み込まれないという意味ではありません" - TracePointを使ったアプローチが検出に使用されるかもしれませんアプリケーションの生存期間の任意の時点でのクラスのロード/再オープン。私はそれを使用します。たとえば、パッチを適用するためにクラスを読み込むのを明示的に待つ必要があるとき。しかし、ここでもそれは過度のように見えます。 – mudasobwa

+0

興味深い。再度、感謝します。私は、特定のクラスがロードされたときにこれが通知されることを理解していますが、それでも私はそのようなケースが可能であると予見したり予測できないようです。これはRubyのオープンクラスのアーキテクチャの「コスト」だと思いますか? –

1

RubyMineのようなIDEは、予約語を使用するたびにテキストに色付けして警告する必要がありますが、わかりやすい場合は、Rails related reserved wordsというこのリストを常に確認できます。

+0

これはRailsとRubyを処理しますが、宝石はどうですか? –

+0

@PerryHorwich RubyGemsは現在、7719個の宝石をリストしているので、あなたの宝石の必要条件は野心的で、残念なことに起こりそうもありません。 – MarsAtomic

+0

そして...私は、予約語と矛盾しないようにするために、リフレクションやその他のメカニズムを利用する一連のステップを実際に探しています。これは、オンラインリストが期限切れになる可能性があるため、私には好ましいと思われます。 –

関連する問題