Sha256: c6dbd8dc596f45e6cc536513437674b93376cf466cc33eb53d7bb9b54186cf7e

Contents?: true

Size: 1.05 KB

Versions: 3

Compression:

Stored size: 1.05 KB

Contents

module ROM
  module SQL
    # @api private
    class DSL < BasicObject
      # @api private
      attr_reader :schema

      # @api private
      def initialize(schema)
        @schema = schema
      end

      # @api private
      def call(&block)
        result = instance_exec(&block)

        if result.is_a?(::Array)
          result
        else
          [result]
        end
      end

      # Return a string literal that will be used directly in an ORDER clause
      #
      # @param [String] value
      #
      # @return [Sequel::LiteralString]
      #
      # @api public
      def `(value)
        ::Sequel.lit(value)
      end

      # @api private
      def respond_to_missing?(name, include_private = false)
        super || schema.key?(name)
      end

      private

      # @api private
      def type(identifier)
        type_name = ::Dry::Core::Inflector.classify(identifier)
        types.const_get(type_name) if types.const_defined?(type_name)
      end

      # @api private
      def types
        ::ROM::SQL::Types
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rom-sql-2.1.0 lib/rom/sql/dsl.rb
rom-sql-2.0.0 lib/rom/sql/dsl.rb
rom-sql-2.0.0.rc1 lib/rom/sql/dsl.rb