Method: Ambition::Processors::Base.translator

Defined in:
lib/ambition/processors/base.rb

.translator(context, name = nil) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/ambition/processors/base.rb', line 97

def self.translator(context, name = nil)
  # Grok the adapter name
  name   ||= self.name.split('::').last

  # Get the module for it
  klass    = context.owner.ambition_adapter.const_get(name)
  instance = klass.new

  # Make sure that the instance has everything it will need:
  #
  # * context
  # * owner
  # * clauses
  # * stash
  # * negated?
  unless instance.respond_to? :context
    klass.class_eval do
      attr_accessor :context, :negated
      def owner;    @context.owner   end
      def clauses;  @context.clauses end
      def stash;    @context.stash   end
      def negated?; @negated         end
    end
  end

  instance.context = context
  instance
end