なるようになるブログ

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

rails commit log流し読み(2015/01/26)

2015/01/26分のコミットです。

CHANGELOGへの追加はありませんでした。


Fix a typo "devleopment" => "development"

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

devleopment -> developmentにタイポを修正しています。


Fix typo 'another frameworks' => 'other frameworks'

railties/lib/rails/generators/migration.rbのdocの修正です

another frameworks -> other frameworksにタイポを修正しています。


Fix typo 'has' => 'have'

railties/lib/rails/generators/migration.rbのdocの修正です。

migrations has -> migrations haveにタイポを修正しています。


Don't rely as much on the structure of the values hash in associations

activerecord/lib/active_record/associations/preloader.rbactiverecord/lib/active_record/associations/preloader/association.rbの修正です。

associationのwhere valueの取得処理をvalues hashから取得しないよう修正しています。

values[:where]の構造を変更する予定で、values[:where]から直接値を取得しないよう修正中との事です。


Don't access the where values hash directly in through associations

activerecord/lib/active_record/associations/preloader/through_association.rbの修正です。

先のコミット同様、values hashから値を取得する処理を修正しています。


Introduce Relation::WhereClause

activerecord/lib/active_record/relation/query_methods.rbactiverecord/lib/active_record/relation/where_clause.rbの修正です。

現状、bind valuesに関する処理がちらかってしまっていて、それを整理する為のリファクタリングとして、手始めに whereメソッドのbind処理をまとめたRelation::WhereClauseクラスを作成しています。おって、`JoinClause``クラスも作成予定との事。

以降WhereClauseクラスを使用するリファクタリングのコミットが続きます。


Move where merging logic over to WhereClause

activerecord/lib/active_record/relation/merger.rbactiverecord/lib/active_record/relation/where_clause.rbの取得です。

MergerクラスにあったwhereのマージロジックをWhereClauseクラスに移動しています。


Remove references to :bind in except

activerecord/lib/active_record/associations/association_scope.rbactiverecord/lib/active_record/relation/spawn_methods.rbの修正です。

exceptメソッドから:bind引数を削除しています。


Remove all references to where_values in association code

ActiveRecordの修正です。

where_valuesを使用している箇所をwhere_clauseを使用する修正しています。


Move the construction of WhereClause objects out of Relation

activerecord/lib/active_record/relation/query_methods.rbactiverecord/lib/active_record/relation/where_clause_factory.rbの修正です。

WhereClauseFactoryクラスを新規に作成し、WhereClauseの作成処理をそちらのクラスに移動しています。


Move where.not logic into WhereClause

activerecord/lib/active_record/relation/query_methods.rbactiverecord/lib/active_record/relation/where_clause.rbの修正です。

where.notの実装をWhereClauseクラスに移動しています。


Rename WhereClause#parts to WhereClause#predicates

activerecord/lib/active_record/relation/where_clause.rbの修正です。

WhereClause#partsメソッドWhereClause#predicatesメソッドに名前を変更しています。


Relation#Merger can merge all clause methods https://github.com/rails/rails/commit/b6a9c620aa58ac0b60ec3b18c380d296c0ec408d

activerecord/lib/active_record/relation/merger.rbの修正です。

Relation::Merger#merge_clausesメソッドを追加し、where以外のclauseメソッドもマージ出来るよう修正しています。

実装はこんな感じです。

def merge_clauses
  CLAUSE_METHODS.each do |name|
    clause = relation.send("#{name}_clause")
    other_clause = other.send("#{name}_clause")
    relation.send("#{name}_clause=", clause.merge(other_clause))
  end
end

Remove most references to where_values in QueryMethods

activerecord/lib/active_record/relation/query_methods.rbの修正です。

where_valuesを使用している箇所をwhere_clauseを使用する修正しています。


Move where_unscoping logic over to WhereClause

activerecord/lib/active_record/relation/query_methods.rbactiverecord/lib/active_record/relation/where_clause.rbの修正です。

where_unscopingメソッドの実装をWhereClauseクラスに移動しています。


Remove all references to where_values in tests

ActiveRecordのテストの修正です。

where_valuesを使用している箇所をwhere_clauseを使用する修正しています。


Move where_values_hash over to WhereClause

activerecord/lib/active_record/relation.rbactiverecord/lib/active_record/relation/where_clause.rbの修正です。

where_values_hashの実装をWhereClauseクラスに移動しています。


Correct the implementation for unscope(:where)

activerecord/lib/active_record/relation/query_methods.rbの修正です。

unscope(:where)の実装で、single-value メソッドで無い場合にmulti-valueメソッドとして処理を扱う、という実装があったのを multi valueメソッドかどうかで、処理を行うよう修正しています。

    MULTI_VALUE_METHODS  = [:includes, :eager_load, :preload, :select, :group,
                            :order, :joins, :having, :references,
                            :extending, :unscope]
    SINGLE_VALUE_METHODS = [:limit, :offset, :lock, :readonly, :from, :reordering,
                            :reverse_order, :distinct, :create_with, :uniq]

こんな感じに、single-value/ multi-valueのメソッドの一覧が定数で管理されているようです。


Remove where_values and where_values=

activerecord/lib/active_record/relation/query_methods.rbの修正です。

where_clausewhere_values=メソッドを削除しています。


Move method to private section

activerecord/lib/active_record/attribute_assignment.rbの修正です。

_assign_attributesメソッドをprivateに移動しています。ActiveModelと合わせる為との事。