diff options
Diffstat (limited to 'lib/arel/algebra/relations/row.rb')
-rw-r--r-- | lib/arel/algebra/relations/row.rb | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/arel/algebra/relations/row.rb b/lib/arel/algebra/relations/row.rb new file mode 100644 index 0000000000..3158557448 --- /dev/null +++ b/lib/arel/algebra/relations/row.rb @@ -0,0 +1,26 @@ +module Arel + class Row + attributes :relation, :tuple + deriving :==, :initialize + + def [](attribute) + attribute.type_cast(tuple[relation.position_of(attribute)]) + end + + def slice(*attributes) + Row.new(relation, attributes.inject([]) do |cheese, attribute| + # FIXME TESTME method chaining + cheese << tuple[relation.relation.position_of(attribute)] + cheese + end) + end + + def bind(relation) + Row.new(relation, tuple) + end + + def combine(other, relation) + Row.new(relation, tuple + other.tuple) + end + end +end |