top_level = self using Module.new { refine(top_level.singleton_class) do def hi puts :hi end end } desc 'はい' task :hi do hi end
Refinements のスコープについて勉強した内容を紹介します RubyHiroba 2014 にて、このネタの LT をやりましたが、いまひとつまとまっていなかったので、まとめ直しました 朴訥なモンキーパッチ まず、Fixnum クラスにこういう変更を適用したいという事にします gem 'test-unit', '3.0.9' require 'test-unit' class Fixnum def to_hoge :hoge end remove_method :succ def succ :overridden end end class MonkeyTest < Test::Unit::TestCase sub_test_case '通常のメソッド呼び出しをすると' do test '上書きされた succ を呼び出せる' do assert { [:overridden, :
Refinementを実用的に使うために、色々と調査してみて分かったことがいくつかあるのでまとめておく。 できる事 Module#using まず、Ruby2.1からModule#usingが使えるようになっている。 これはとても素晴らしい。この調子でもうちょっと自由度が上がっていってくれると最高。 Refinementでクラスメソッドを定義する方法 これは駄目な例 module BadClassMethodRefine refine String do def self.hoge p "hoge" end end end using BadClassMethodRefine String.hoge # NoMethodError
RefinementsをRSpecで活用してパラメータライズドテスト用のシンタックスを実現する話。
Interceptor injection pattern with ruby 2.1 refinements I’ll introduce a new pattern for testing, against external APIs (like HTTP#get) with ruby 2.1 refinements instead of Dependency Injection. “Interceptor Injection pattern” is a word coined by me. Better idea for this pattern is always welcome. codeOur application or libraries call many external APIs, which is not under control by us. These may
Please do not edit this page. File a new ticket instead. Refinements Specification¶ Abstract¶ This documentation describes the specification of Refinements, which provide local class extensions. Rationale¶ Monkey patching is a powerful feature of Ruby.However, it affects globally in a program. Therefore, a monkey patch might break code which doesn't expect the extended behavior, and multiple monke
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く