Skip to content

Instantly share code, notes, and snippets.

@sunaot
sunaot / designing_class.md
Last active August 16, 2018 04:40
役割を閉じ込めてそれを名前で表現する (レビューコメントから)
  • 入力フォーマット
  • 登録処理の中でのデータモデル
  • 出力フォーマット

が分離していて、それがコード上の構造で表現されているのがよいと思います。 分離すると、どこかで結合しないといけないのでマッピングが発生します。 そこは互いのインターフェイスをどう解釈するかという表現なので明示的になっているほうがよいと思います。


@sunaot
sunaot / comment.md
Created January 13, 2015 07:30
shared_example ぇぇぇ

たとえば、subject でこのように書けて、

subject { model.errors }
it { is_expected.to be > 0 }

これを DRY にしたくて

class Injectee
def hello
puts :hello
end
end
module DI
class Injector
def initialize(module_object)
@module = module_object
@sunaot
sunaot / keyword.rb
Last active August 29, 2015 14:10
キーワード引数で引数の委譲や再定義ってどうやるの?って質問したら答えを教えてもらったよ
##
# 知りたかったこと
def foo(a: 1, b: 2, c: 3, d: 4)
p a, b, c, d
end
# 1. bar の引数定義を a~d のキーワード引数として foo へすべて委譲したい
# 2. bar の引数定義を a~d のキーワード引数とさらに e: 5 を追加したい
def bar( ??? )
@sunaot
sunaot / spec_file.rb
Last active April 26, 2022 05:23
Ruby で Groovy の Spock ぽい spec を書きたいという遊び。assert を書かないと power_assert できないのがかっこ悪い。
class Foo
extend Ruby::Spock
spec 'maximum of two numbers', ->(*) {
expect {
assert { [a, b].max == c }
}
where [
[ :a, :b, :c ],
[ 1, 3, 3 ], #=> .
@sunaot
sunaot / swap_closure_local_variable.rb
Created October 14, 2014 17:50
Ruby でクロージャのローカル変数を差し替え (たかのように錯覚させる) トリック
def e &blk
s = Struct.new(:a,:b,:c).new(1,2,3)
s.instance_eval(&blk)
end
def foo
e { a + b + c }
end
puts foo #=> 6
@sunaot
sunaot / spock-like-spec.rb
Created October 14, 2014 16:05
Spock のようななにかを Ruby で。の仮実装。これは spec 側。実装は https://gist.github.com/sunaot/9efce49897e3dbf98fca にあります。
class Foo
extend Ruby::Spock
spec 'maximum of two numbers', ->(*) {
expect ->(a, b, c) { [a, b].max == c }
where [
# a | b | c
[ 1 , 3 , 3 ],
[ 7 , 4 , 4 ],
[ 0 , 0 , 0 ],
@sunaot
sunaot / spock-like.rb
Last active August 29, 2015 14:07
spock ぽい何かの Ruby での習作
module Ruby
module Spock
def spec(description, definition = nil, &proc_definition)
raise ArgumentError if [ definition, proc_definition ].all? {|d| d.nil? }
if definition.nil?
spec_runner(description, proc_definition)
else
spec_runner(description, definition)
end
end
@sunaot
sunaot / hello_ruby.md
Last active April 4, 2017 11:04
さらっと読んで Ruby がわかった気になれるプログラミング言語 Ruby のかんたんな紹介

制約フレームワークを書かないと連載させてもらえない Web 雑誌があるようなので、昨日こんなの書いてた。 静的解析もできないし、ドキュメンテーションにも活きないので各方面の識者から怒られそうだが {} で書けるという見た目の点で許してほしい。

あとはつっこまれるとしたら、継承したときに事前条件、事後条件が強化される/緩和されるのあたり。全部やると大変なんすよ。invariant もないですね (method_added でイベントフックしてすべてのメソッドコールへ prepend かぶせるとかすればできるかな)。

class BeerLover
  extend Contracts
  attr_accessor :age