Class: Taskinator::Visitor::XmlVisitor

Inherits:
Object
  • Object
show all
Defined in:
lib/taskinator/xml_visitor.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder, instance) ⇒ XmlVisitor

Returns a new instance of XmlVisitor.



19
20
21
22
# File 'lib/taskinator/xml_visitor.rb', line 19

def initialize(builder, instance)
  @builder = builder
  @instance = instance
end

Instance Attribute Details

#builderObject (readonly)

Returns the value of attribute builder.



16
17
18
# File 'lib/taskinator/xml_visitor.rb', line 16

def builder
  @builder
end

#instanceObject (readonly)

Returns the value of attribute instance.



17
18
19
# File 'lib/taskinator/xml_visitor.rb', line 17

def instance
  @instance
end

Class Method Details

.to_xml(process) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/taskinator/xml_visitor.rb', line 7

def to_xml(process)
  builder = ::Builder::XmlMarkup.new(:indent => 2)
  builder.instruct!
  builder.tag!('process') do
    XmlVisitor.new(builder, process).visit
  end
end

Instance Method Details

#task_countObject



105
106
# File 'lib/taskinator/xml_visitor.rb', line 105

def task_count
end

#visitObject



24
25
26
# File 'lib/taskinator/xml_visitor.rb', line 24

def visit
  @instance.accept(self)
end

#visit_args(attribute) ⇒ Object



97
98
99
100
101
102
103
# File 'lib/taskinator/xml_visitor.rb', line 97

def visit_args(attribute)
  values = @instance.send(attribute)

  builder.tag!('attribute', :name => attribute) do
    builder.cdata!(values.to_json)
  end if values && !values.empty?
end

#visit_attribute(attribute) ⇒ Object



69
70
71
72
# File 'lib/taskinator/xml_visitor.rb', line 69

def visit_attribute(attribute)
  value = @instance.send(attribute)
  builder.tag!('attribute', :name => attribute, :value => value) if value
end

#visit_attribute_enum(attribute, type) ⇒ Object



78
79
80
# File 'lib/taskinator/xml_visitor.rb', line 78

def visit_attribute_enum(attribute, type)
  visit_attribute(attribute)
end

#visit_attribute_time(attribute) ⇒ Object



74
75
76
# File 'lib/taskinator/xml_visitor.rb', line 74

def visit_attribute_time(attribute)
  visit_attribute(attribute)
end

#visit_process(attribute) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/taskinator/xml_visitor.rb', line 36

def visit_process(attribute)
  process = @instance.send(attribute)
  if process
    p = process.__getobj__

    attribs = {
      :type => p.class.name,
      :current_state => p.current_state
    }

    builder.tag!('process', attribs) do
      XmlVisitor.new(builder, p).visit
      write_error(p.error)
    end
  end
end

#visit_process_reference(attribute) ⇒ Object



82
83
84
85
# File 'lib/taskinator/xml_visitor.rb', line 82

def visit_process_reference(attribute)
  process = @instance.send(attribute)
  builder.tag!('attribute_ref', { :name => attribute, :type => process.__getobj__.class.name, :value => process.uuid }) if process
end

#visit_task_reference(attribute) ⇒ Object



87
88
89
90
# File 'lib/taskinator/xml_visitor.rb', line 87

def visit_task_reference(attribute)
  task = @instance.send(attribute)
  builder.tag!('attribute_ref', { :name => attribute, :type => task.__getobj__.class.name, :value => task.uuid }) if task
end

#visit_tasks(tasks) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/taskinator/xml_visitor.rb', line 53

def visit_tasks(tasks)
  tasks.each do |task|
    t = task.__getobj__

    attribs = {
      :type => t.class.name,
      :current_state => t.current_state
    }

    builder.tag!('task', attribs) do
      XmlVisitor.new(builder, t).visit
      write_error(t.error)
    end
  end
end

#visit_type(attribute) ⇒ Object



92
93
94
95
# File 'lib/taskinator/xml_visitor.rb', line 92

def visit_type(attribute)
  type = @instance.send(attribute)
  builder.tag!('attribute', { :name => attribute, :value => type.name })
end

#write_error(error) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/taskinator/xml_visitor.rb', line 28

def write_error(error)
  return unless error[0]
  builder.tag!('error', :type => error[0]) do
    builder.message(error[1])
    builder.cdata!(error[2].join("\n"))
  end
end