BrowserBlockerの変更
こんにちは、tanaken on Rails第40回です。
今週は3つのプレリクエストを紹介します。
1つ目、MakeActionController://AllowBrowser://BrowserBlockerPrivateということで、アクションパックに関する変更です。
アクションコントローラーのAllowBrowserのブラウザーブロッカークラスというのがあります。
このクラスの説明がドキュメントに記載されないようにしましたというのが今回の変更ですね。
このクラスは既にプライベートなクラス、定数なんですけども、
ノードック、ドキュメントに記載しませんというコメントが記載されていなかったと。
コード内にこのノードックが記載されていると、ドキュメントに出てこないんですけど、
ノードックというコメントが記載されていないので、
ドキュメントにクラス名が露出している、見えている状態だったよと。
プライベートなクラスなので、見せなくていいよねというので、ノードックコメントが付いていますという対応ですね。
こういうのもあるんだなという素朴なというか、プライベートなのに見えちゃってるみたいなね、
ドキュメントに記載されちゃってるみたいなやつに気づいて修正するというちょっとした修正ですけど、
こういうのもあるんだなという気づきでしたね。
ストリングファイキーズとPostgreSQLの変更
続いて2つ目。
アクティブサポートに関する変更です。
アクティブサポートハッシュウィズインデファレントアクセスクラスの
ストリングファイキーズメソッドにあった不具合を修正しています。
ストリングファイキーズメソッドというのは、
ハッシュクラスに実装されているメソッドで、キーの文字列化を行います。
具体的には、例えばハッシュでキーが数字のインテジャーの1で、
バリューが2というハッシュがあったとしましょう。
これをストリングファイキーズやると、キーが1という文字列になって、
バリューは変わらずという動きになります。
同名のメソッドが、アクティブサポートハッシュウィズインデファレントアクセスクラスにも
実装されていたんですけども、
キーが数字のとき、先ほどの例、1がキーで2がバリューみたいなときに、
キーが文字列化されないという不具合がありました。
何かというと、そのままになっちゃうんですよね。
キーが1で値が2という場合に、ストリングファイキーズをやっても、
キーは数字の1のままになっちゃうと。
実装を見てみると、ストリングファイキーズは、
デプリケートメソッドを呼び出しているだけ。
コピーしているだけだったんですよね。
なのでキーが変わらないのは当然だなと。
これ今思ったんですけど、
ハッシュウィズインデファレントアクセスは、
ハッシュのキーがシンボルの場合に、
シンボルでも文字列でもアクセスできるようにする、
というためのクラスなんですけども。
大抵、ハッシュのキーってシンボルを使っていることが多いですよね。
そいつがシンボルでもストリングでもアクセスできるようになるクラスなので、
なのでこのストリングファイキーズをやったときに、
ダップメソッドを呼び出すだけで十分だったと。
なぜならキーがすでに文字列でもアクセスできるようになっているので、
なのでそんなに大きな問題はなかったんだけど、
キーが数字のときだけ、
ストリングファイメソッドを呼んでも、
数字のままになっちゃってたよというところで、
これはよろしくないねということだったという感じですね。
今回のプレリクエストでは、
アクティブサポートハッシュウィズインディファレントアクセスクラスの中の、
ストリングファイキーズメソッド、
あるいはそれのビックリマークがついているメソッドとかがあるんですけど、
その辺のメソッドをざっと削除しています。
削除することによって、このハッシュウィズインディファレントアクセスクラスは、
ハッシュクラスを継承して作られているクラスなので、
このメソッドがなくなったことで、
ハッシュクラス、親のクラスのストリングファイキーズメソッドを見に行くようになるので、
結果的にハッシュクラスと同じ動きになるねということですね。
という修正が行われました。
続いて3つ目。
Make float distinguish between float4 and float8 in PostgreSQLということで、
アクティブレコードに関する変更です。
PostgreSQLアダプターで、
float4型とfloat8型を区別できるようになりました。
float4のカラムを含むPostgreのスキーマダンプ、スキーマをダンプすると、
生成されたスキーマダンプでカラムがフロートとして表示される。
スキーマダンプってマイグレーションとかやって、
スキーマ.rbとしてバーッと出てくるやつ。
あいつがフロートとして表記されていて、
このスキーマをロードすると、
float4のカラムがfloat8になっちゃうという問題があって、
なんでというのがあったと。
それを修正するために、
float4とfloat8を分けて定義できるようにしています。
この変更前は、float4もfloat8も64ビット不動小数点の
float型として処理されていました。
float4型もfloat8型も区別せずに、
64ビットのもので処理されていたということですね。
これはアクティブモデルコロンコロンタイプ、コロンコロンフロート、
タイプフロートクラスで、
Rubyのフロートにキャストしていて、
Rubyのフロート型はC言語のダブルに基づいているので、
これが64ビットなので、
どっちも64ビットのフロートとして処理されているという、
内部の仕組みになっていました。
変更後は、float4型は24ビットというのを明示的に指定して、
float8型はこれまで通りの64ビットのフロートとして扱うようになっていて、
区別ができるようになりましたよということですね。
このプルリクエスト驚いたんですけど、
僕が前職で知り合いだった方が出したプルリクエストで、
すごいなと思ってSNSで言及したらお返事をくれて、
会社の取り組みでみんなでOSSコントリビュートしようという取り組みの一環として、
このプルリクエストを作ったんだという話をされて、
いい話だなということで、
こういう知り合いの活動も見れてすごい嬉しかったなという、
今週のThis Week in Railsでございました。
そんなところで今回はここまでとします。
ではまた来週。バイバイ。