なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2015/04/12)

2015/04/12分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

railties/CHANGELOG.md


Rename railties/bin to railties/exe

railties/binディレクトリをrailties/exeにリネームしています。

bundlerが、実行形式ファイルの置き場所をbinからexeを推奨するになり、それに伴いrailtiesexe`配下に実行形式ファイルを置く用修正したとの事です。bundlerについての詳細はBundler Blog Postご参照。


Missing note on validates_presence_of validation [ci skip]

activerecord/lib/active_record/validations/presence.rbのdocの修正です。

presence validatorは指定されたassociationがvalidかどうかのチェックまでは行ってくれないので、associationがvalidかどうかのチェックも行いたいなら、validates_associatedメソッドも使用するよう説明を追加しています。


Remove mention of super old defined_javascript_functions method [ci skip]

rails guideのAction View Overviewの修正です。

既に存在しないdefined_javascript_functionsメソッドの説明を削除しています。


Merge pull request #19566 from aditya-kapoor/remove-dup-doc

actionview/lib/action_view/helpers/url_helper.rbのdocの修正です。

current_page?メソッドのdocのexampleに重複している内容があったのを削除しています。


Speed up Levenshtein by 50% and reduce 97% of memory usage

guides/rails_guides/levenshtein.rbrailties/lib/rails/generators.rbの修正です。

レーベンシュタイン距離の計算をしている処理でeach_charメソッドの代わりにeach_codepointメソッドを使用するよう修正しています。

-      str1.each_char.each_with_index do |char1,i|
+      # avoid duplicating an enumerable object in the loop
+      str2_codepoint_enumerable = str2.each_codepoint
+
+      str1.each_codepoint.with_index do |char1, i|
         e = i+1

-        str2.each_char.each_with_index do |char2,j|
+        str2_codepoint_enumerable.with_index do |char2, j|

each_charメソッドは文字毎にStringのオブジェクトを生成するのに対して、each_codepointの方はStringのオブジェクトを生成しないらしく、性能向上及びメモリ使用量の削減になるとの事です。コミットログに記載されていた性能測定結果は以下の通りです。

  Calculating -------------------------------------
             each_char   924.000  i/100ms
        each_codepoint     1.381k i/100ms
  -------------------------------------------------
             each_char      9.320k (¡Þ 5.1%) i/s -     47.124k
        each_codepoint     13.857k (¡Þ 3.6%) i/s -     70.431k

  Comparison:
        each_codepoint:    13857.4 i/s
             each_char:     9319.5 i/s - 1.49x slower

String#each_codepointメソッドの存在を始めて知りました。文字のコードポイントを取り出す為のメソッドなんですねえ。


remove reference to register_javascript_expansion and register_stylesheet_expansion from guide [ci skip]

rails guideのAction View Overviewの修正です。

既に存在しないregister_javascript_expansionregister_stylesheet_expansionメソッドの説明を削除しています。


Fix a few typos and wrap some lines [ci skip]

activejob/lib/active_job/queue_adapters.rbguides/source/association_basics.mdのdocの修正です。

一行80文字に収まるよう適切な位置に改行を追加、及びタイポの修正を行っています。


[ci skip] Update contributing guide

rails guideのContributing to Ruby on Railsの修正です。

CHANGELOGに新規エントリーを追加する場合、CHANGELOGの先頭に追加するようコントリビュートガイドに記載してあったのですが、 先頭に追加されない事が割とあった為、Updating the CHANGELOGの項の先頭に説明を移動、及び該当箇所を強調するよう修正しています。