ルビーの魔法を払いのけて宝石を理解する方法
Railsアプリを作成するときは、宝石の山を使用します。それらのいくつかは完全に魔法のようです!しかし、その魔法はどのように起こりますか?
ほとんどの宝石では、あなたができなかったことは何もしていません。 これは単なるRubyコードです。 時々それは複雑 Rubyコード。しかし、そのコードを調べると、その魔法がどこから来ているのかが理解できるようになります。
宝石がどのように機能するかを理解するには、そのコードを見つける必要があります。
詳細を知りたいメソッドがある場合は、ソースを見つける簡単な方法があります:method
およびsource_location
。 以前にこれらについて少し書きました 。次に例を示します:
irb(main):001:0> ActiveRecord::Base.method(:find).source_location
=> ["/usr/local/lib/ruby/gems/2.1.0/gems/
activerecord-4.2.0.beta4/lib/active_record/core.rb", 127]
しかし、複数の方法に興味がある場合はどうなりますか?
Railsアプリのディレクトリ内でコンソールを開いている場合は、gemのコードに直接アクセスできます:
~/Source/gem_example[master] jweiss$ bundle open rack
Gemfile
にある場合 、bundle open rack
rack
全体が開きます エディターの宝石。 その中のすべてのファイルを快適に閲覧できます。
どこから始めますか?
宝石のコードがどこにあるかがわかったので、どうやってそれを理解し始めますか?
activerecord
の方法を学習しようとする場合 lib/active_record.rb
を読み取ることで機能します 、どこにも行かないでしょう。 たくさんのautoload
を見つけるだけです sおよびrequire
s。
後の宝石を理解するのが最も簡単です あなたのアプリはそれを少し使用します。宝石があなたのために行っている仕事の種類についてもっと知ったら。そうすれば、どの興味深いクラスとメソッドから始めるべきかについてのアイデアがすでに得られます。
いくつかの興味深いメソッドの名前を取得したら、source_location
を使用できます。 、プロジェクトで検索 エディタで、またはコマンドラインでagを実行して、これらのメソッドが定義されている場所を確認します。そして、それが楽しみの始まりです。
宝石のコードはあなたのマシンにありますよね? つまり、好きなように変更できます! あなたもそれを壊すことができ、他の誰も知る必要はありません。
宝石がどのように機能するかを理解しようとしているとき、私はコードを読むだけではありません。 puts
を追加します ステートメントをgemに追加し、例外をスローしてアプリが特定の行に到達した方法を把握し、コードをいじって、作成者がそのように記述した理由を理解します。
トリックがどのように行われるかがわかれば、魔法ははるかに少なくなります。そして、推測する必要はありません 自分でコードを確認できるため、そのコードが奇妙な状況でどのように機能するか。
gemコードをいじった後、アプリの状態がかなり悪くなる可能性があります。 もう動かないかもしれません!そして、たとえそうだとしても、それらすべてのputs
をスパムすることになります コンソールに追加したステートメント。
しかし、RubyGemsには、物事を通常に戻すための簡単な方法があります:
~ jweiss$ gem pristine activerecord -v 4.2.0
Restoring gems to pristine condition...
Restored activerecord-4.2.0
または、どの宝石をいじったか覚えておらず、本当に辛抱強い場合:
~ jweiss$ gem pristine --all
その後、すべての宝石はインストールしたときの状態に戻ります。
何を探索しますか?
gem内のコードを見つけて読み、探索すると、依存しているコードをより深いレベルで理解できます。 そして、あなたはもう仮定や推測に頼る必要はありません。
この投稿は元々私のリストに独占的に送信されました。毎週金曜日に受信トレイにこのような投稿を追加するには、こちらから登録してください。
-
Rubyプログラムをデバッグおよび修正する方法
あなたのプログラムは、最初にあなたが望むことを正確に実行する頻度はどれくらいですか? 多くの場合、プログラムは期待どおりに機能しないため、ルビーのデバッグの技術を使用する必要があります。 理由を見つけるのに役立ちます。 次のエラーメッセージに精通している可能性があります。 undefined method some_method for nil:NilClass これは、nil値がコードへの道を見つけることができたことを意味します。 この記事で説明する手法を使用して、この問題や同様の問題に対処する方法を学びます。 エラーとスタックトレースを理解する Rubyインタープリターからエラー
-
iPad と iPhone で QR コードをスキャンする方法
2018 年の初めに、技術大手の Apple が展開した驚くべき機能は iOS 12 です。iPad と電話で QR コードをスキャンすることは、Apple のユーザー エクスペリエンスを次のレベルに引き上げるために追加された機能の 1 つです。この機能は、生活を楽にするだけでなく、チケット、クーポン、製品の成分などに関する情報を取得するのにも役立ちます。さらに、スマートフォンの助けを借りて QR コードをスキャンできる固有の QR コード認識が付属しています。無意味にカメラ。 QR コードをスキャンすることで、購入前に商品に関する情報を数秒以内に収集できます。 この投稿では、iPad