47colborne/cloud-sesame

View on GitHub
lib/cloud_sesame/query/dsl/literal_methods.rb

Summary

Maintainability
A
0 mins
Test Coverage
module CloudSesame
  module Query
    module DSL
      module LiteralMethods
        extend ClassSpecific

        def self.__define_accessor__(name)
          define_method name do |*values, &block|
            literal name, *values, &block
          end
        end

        def literal(name, *values, &block)
          name = name.to_sym
          values << __literal_block_handler__(name, block) if block_given?
          _scope.children.field = name
          _scope.children._return = _return
          _scope.children.insert values
        end

        private

        def __literal_block_handler__(name, block)
          caller = block.binding.eval "self"
          options = _scope.context[:fields][name]
          Domain::Literal.new(name, options, caller)._eval(&block)
        end

      end
    end
  end
end