Class: Gexp::Handler::Producer

Inherits:
Object
  • Object
show all
Defined in:
lib/gexp/handler/producer.rb

Overview

Инкапсулирцует логику по созданию объектов-обработчиков команд на основании выражения-генератора полученного Builder’ом из конфигурационного файл объекта

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params, type = nil, objects = {}) ⇒ Producer

Returns a new instance of Producer.



25
26
27
28
29
30
31
32
33
# File 'lib/gexp/handler/producer.rb', line 25

def initialize(params, type = nil, objects = {})
  @params  = params
  @type    = type
  @objects = objects

  if !for_klass? && !for_caller?
    raise 'Can\'t define handler class'
  end
end

Class Method Details

.namespacesHash

Returns - хеш классов обработчиков.

Returns:

  • (Hash)
    • хеш классов обработчиков



13
14
15
16
17
18
# File 'lib/gexp/handler/producer.rb', line 13

def namespaces
  {
    chekers:   Gexp::Handler::Check,
    modifiers: Gexp::Handler::Modify,
  }
end

Instance Method Details

#emitGexp::Handler

Создает и возвращает класс обработчика

Returns:



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/gexp/handler/producer.rb', line 38

def emit
  args = @params.clone

  if for_klass?
    superclass = self.class.namespaces[@type]
    subclass   = args.shift.to_s.humanize

    # TODO: Сделать проверку существования класса
    klass      = superclass.const_get(subclass)
  else
    klass  = Gexp::Handler::Caller
  end

  obj_key = args.shift
  object  = @objects[obj_key]
  params  = args
  handler = klass.new(object, params, @objects, @params)
end