aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/engines/memory/relations/array.rb
blob: 028f5c026952bf0611153991d894926dffa6100d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module Arel
  class Array
    include Relation

    attr_reader :array, :attribute_names_and_types
    include Recursion::BaseCase

    def initialize(array, attribute_names_and_types)
      @array                     = array
      @attribute_names_and_types = attribute_names_and_types
      @engine                    = nil
      @attributes                = nil
    end

    def engine
      @engine ||= Memory::Engine.new
    end

    def attributes
      @attributes ||= begin
        attrs = @attribute_names_and_types.collect do |attribute, type|
          attribute = type.new(self, attribute) if Symbol === attribute
          attribute
        end
        Header.new(attrs)
      end
    end

    def format(attribute, value)
      value
    end

    def eval
      @array.collect { |r| Row.new(self, r) }
    end
  end
end