lib/db_mod/statements/configuration/as.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_relative 'as/csv'
require_relative 'as/json'

module DbMod
  module Statements
    module Configuration
      # Contains coercers and other functions that allow
      # module instance methods returning an SQL result set
      # to be extended with additional result coercion and
      # formatting. The normal way to access this functionality
      # is via {MethodConfiguration#as},
      # which is available when defining a statement method
      # or prepared method:
      #
      #  def_statement(:a, 'SELECT a, b, c FROM foo').as(:csv)
      #  def_prepared(:b, 'SELECT d, e, f FROM bar').as(:csv)
      module As
        # List of available result coercion methods.
        # Only keys defined here are allowed as arguments
        # to {DbMod::Statements::Configuration::ConfigurableMethod#as}.
        COERCERS = {
          csv: As::Csv,
          json: As::Json
        }

        # Extend the given method definition with additional
        # result coercion, if specified using {MethodConfiguration#as}.
        #
        # @param definition [Proc] base method definition
        # @param config [MethodConfiguration] method configuration
        # @return [Proc] wrapped method definition, or the original
        #   definition if no coercion has been specified
        def self.extend(definition, config)
          type = config[:as]
          return definition if type.nil?

          Configuration.attach_result_processor definition, COERCERS[type]
        end
      end
    end
  end
end