# File lib/active_record/relation/spawn_methods.rb, line 103 103: def apply_finder_options(options) 104: relation = clone 105: return relation unless options 106: 107: options.assert_valid_keys(VALID_FIND_OPTIONS) 108: finders = options.dup 109: finders.delete_if { |key, value| value.nil? } 110: 111: ([:joins, :select, :group, :order, :having, :limit, :offset, :from, :lock, :readonly] & finders.keys).each do |finder| 112: relation = relation.send(finder, finders[finder]) 113: end 114: 115: relation = relation.where(finders[:conditions]) if options.has_key?(:conditions) 116: relation = relation.includes(finders[:include]) if options.has_key?(:include) 117: relation = relation.extending(finders[:extend]) if options.has_key?(:extend) 118: 119: relation 120: end
# File lib/active_record/relation/spawn_methods.rb, line 72 72: def except(*skips) 73: result = self.class.new(@klass, table) 74: 75: ((Relation::ASSOCIATION_METHODS + Relation::MULTI_VALUE_METHODS) - skips).each do |method| 76: result.send(:"#{method}_values=", send(:"#{method}_values")) 77: end 78: 79: (Relation::SINGLE_VALUE_METHODS - skips).each do |method| 80: result.send(:"#{method}_value=", send(:"#{method}_value")) 81: end 82: 83: result 84: end
# File lib/active_record/relation/spawn_methods.rb, line 5 5: def merge(r) 6: merged_relation = clone 7: return merged_relation unless r 8: return to_a & r if r.is_a?(Array) 9: 10: Relation::ASSOCIATION_METHODS.each do |method| 11: value = r.send(:"#{method}_values") 12: 13: unless value.empty? 14: if method == :includes 15: merged_relation = merged_relation.includes(value) 16: else 17: merged_relation.send(:"#{method}_values=", value) 18: end 19: end 20: end 21: 22: (Relation::MULTI_VALUE_METHODS - [:joins, :where, :order]).each do |method| 23: value = r.send(:"#{method}_values") 24: merged_relation.send(:"#{method}_values=", merged_relation.send(:"#{method}_values") + value) if value.present? 25: end 26: 27: order_value = r.order_values 28: if order_value.present? 29: if r.reorder_flag 30: merged_relation.order_values = order_value 31: else 32: merged_relation.order_values = merged_relation.order_values + order_value 33: end 34: end 35: 36: merged_relation = merged_relation.joins(r.joins_values) 37: 38: merged_wheres = @where_values + r.where_values 39: 40: unless @where_values.empty? 41: # Remove duplicates, last one wins. 42: seen = Hash.new { |h,table| h[table] = {} } 43: merged_wheres = merged_wheres.reverse.reject { |w| 44: nuke = false 45: if w.respond_to?(:operator) && w.operator == :== 46: name = w.left.name 47: table = w.left.relation.name 48: nuke = seen[table][name] 49: seen[table][name] = true 50: end 51: nuke 52: }.reverse 53: end 54: 55: merged_relation.where_values = merged_wheres 56: 57: Relation::SINGLE_VALUE_METHODS.reject {|m| m == :lock}.each do |method| 58: value = r.send(:"#{method}_value") 59: merged_relation.send(:"#{method}_value=", value) unless value.nil? 60: end 61: 62: merged_relation.lock_value = r.lock_value unless merged_relation.lock_value 63: 64: # Apply scope extension modules 65: merged_relation.send :apply_modules, r.extensions 66: 67: merged_relation 68: end
# File lib/active_record/relation/spawn_methods.rb, line 86 86: def only(*onlies) 87: result = self.class.new(@klass, table) 88: 89: ((Relation::ASSOCIATION_METHODS + Relation::MULTI_VALUE_METHODS) & onlies).each do |method| 90: result.send(:"#{method}_values=", send(:"#{method}_values")) 91: end 92: 93: (Relation::SINGLE_VALUE_METHODS & onlies).each do |method| 94: result.send(:"#{method}_value=", send(:"#{method}_value")) 95: end 96: 97: result 98: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.