Sha256: 521dca017814211974aca782453774a027dfc7bb4a234cbdb4bd43e58fcbcf88

Contents?: true

Size: 1.91 KB

Versions: 5

Compression:

Stored size: 1.91 KB

Contents

module Torque
  module PostgreSQL
    class AuxiliaryStatement
      class Settings < Collector.new(:attributes, :join, :join_type, :query, :requires,
                                     :polymorphic)

        attr_reader :source
        alias cte source

        delegate :base, :base_name, :base_table, :table, :table_name, to: :@source
        delegate :relation_query?, to: Torque::PostgreSQL::AuxiliaryStatement

        def initialize(source)
          @source = source
        end

        # Get the arel version of the table set on the query
        def query_table
          raise StandardError, 'The query is not defined yet' if query.nil?
          return query.arel_table if relation_query?(query)
          @query_table
        end

        # Grant an easy access to arel table columns
        def col(name)
          query_table[name.to_s]
        end

        alias column col

        # Grant an easy access to arel sql literal
        def sql(string)
          ::Arel::Nodes::SqlLiteral.new(string)
        end

        # There are two ways of setting the query:
        # - A simple relation based on a Model
        # - A string or a proc that requires the table name as first argument
        def query(value = nil, command = nil)
          return @query if value.nil?
          return @query = value if relation_query?(value)

          valid_type = command.respond_to?(:call) || command.is_a?(String)
          raise ArgumentError, <<-MSG.strip.gsub(/\n +/, ' ') if command.nil?
            To use proc or string as query, you need to provide the table name
            as the first argument
          MSG
          raise ArgumentError, <<-MSG.strip.gsub(/\n +/, ' ') unless valid_type
            Only relation, string and proc are valid object types for query,
            #{command.inspect} given.
          MSG

          @query = command
          @query_table = ::Arel::Table.new(value)
        end

      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
torque-postgresql-0.1.7 lib/torque/postgresql/auxiliary_statement/settings.rb
torque-postgresql-0.1.6 lib/torque/postgresql/auxiliary_statement/settings.rb
torque-postgresql-0.1.5 lib/torque/postgresql/auxiliary_statement/settings.rb
torque-postgresql-0.1.4 lib/torque/postgresql/auxiliary_statement/settings.rb
torque-postgresql-0.1.3 lib/torque/postgresql/auxiliary_statement/settings.rb