Class: Output::WriterMacro

Inherits:
Object
  • Object
show all
Includes:
Initializer
Defined in:
lib/output/writer_macro.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_writer(output_class, name, level, device_options, message_transformer) ⇒ Object



7
8
9
10
# File 'lib/output/writer_macro.rb', line 7

def self.define_writer(output_class, name, level, device_options, message_transformer)
  macro = new output_class, name, level, device_options, message_transformer
  macro.define_writer
end

Instance Method Details

#define_getterObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/output/writer_macro.rb', line 18

def define_getter
  name = self.name
  level = self.level
  transformer = self.message_transformer
  device_options = self.device_options

  writer_attribute = Writer::Attribute.build name
  attribute_name = writer_attribute.name
  var_name = writer_attribute.variable_name

  output_class.send :define_method, attribute_name do
    writer = instance_variable_get var_name

    unless writer
      writer = build_writer(name, level, device_options, transformer) unless writer
      instance_variable_set var_name, writer
    end

    writer
  end
end

#define_setterObject



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/output/writer_macro.rb', line 40

def define_setter
  writer_attribute = Writer::Attribute.build name
  attribute_name = writer_attribute.name
  var_name = writer_attribute.variable_name

  output_class.send :define_method, "#{attribute_name}=" do |writer|
    writer.logger_level = level
    instance_variable_set var_name, writer
    writer
  end
end

#define_write_methodObject



52
53
54
55
56
57
58
59
# File 'lib/output/writer_macro.rb', line 52

def define_write_method
  name = self.name
  output_class.send :define_method, name do |message|
    writer(name).write message
    self.last_method = name
    message
  end
end

#define_writerObject



12
13
14
15
16
# File 'lib/output/writer_macro.rb', line 12

def define_writer
  define_getter
  define_setter
  define_write_method
end