diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2010-01-01 03:14:19 +0530 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2010-01-01 04:17:55 +0530 |
commit | 3c23b71a09c28a7be13090f83161963b56a5088e (patch) | |
tree | 20b1fed76c7a87f5c334edbd053b6d6d5f85a05d /activerecord/lib/active_record/relation/predicate_builder.rb | |
parent | ae7ada1fde1648a5c81b9e6adf74d515e0bbe0a5 (diff) | |
download | rails-3c23b71a09c28a7be13090f83161963b56a5088e.tar.gz rails-3c23b71a09c28a7be13090f83161963b56a5088e.tar.bz2 rails-3c23b71a09c28a7be13090f83161963b56a5088e.zip |
Move predicate building to a stand alone PredicateBuilder class
Diffstat (limited to 'activerecord/lib/active_record/relation/predicate_builder.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/predicate_builder.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb new file mode 100644 index 0000000000..c85a0510b4 --- /dev/null +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -0,0 +1,36 @@ +module ActiveRecord + class PredicateBuilder + + def initialize(engine) + @engine = engine + end + + def build_from_hash(attributes, default_table) + predicates = attributes.map do |column, value| + arel_table = default_table + + if value.is_a?(Hash) + arel_table = Arel::Table.new(column, @engine) + build_predicate_from_hash(value, arel_table) + else + column = column.to_s + + if column.include?('.') + table_name, column = column.split('.', 2) + arel_table = Arel::Table.new(table_name, @engine) + end + + case value + when Array, Range, ActiveRecord::Associations::AssociationCollection, ActiveRecord::NamedScope::Scope + arel_table[column].in(value) + else + arel_table[column].eq(value) + end + end + end + + predicates.flatten + end + + end +end |