Class: Taskinator::Visitor::XmlVisitor
- Inherits:
-
Object
- Object
- Taskinator::Visitor::XmlVisitor
- Defined in:
- lib/taskinator/xml_visitor.rb
Instance Attribute Summary collapse
-
#builder ⇒ Object
readonly
Returns the value of attribute builder.
-
#instance ⇒ Object
readonly
Returns the value of attribute instance.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(builder, instance) ⇒ XmlVisitor
constructor
A new instance of XmlVisitor.
- #task_count ⇒ Object
- #visit ⇒ Object
- #visit_args(attribute) ⇒ Object
- #visit_attribute(attribute) ⇒ Object
- #visit_attribute_enum(attribute, type) ⇒ Object
- #visit_attribute_time(attribute) ⇒ Object
- #visit_process(attribute) ⇒ Object
- #visit_process_reference(attribute) ⇒ Object
- #visit_task_reference(attribute) ⇒ Object
- #visit_tasks(tasks) ⇒ Object
- #visit_type(attribute) ⇒ Object
- #write_error(error) ⇒ Object
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
#builder ⇒ Object (readonly)
Returns the value of attribute builder.
16 17 18 |
# File 'lib/taskinator/xml_visitor.rb', line 16 def builder @builder end |
#instance ⇒ Object (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_count ⇒ Object
105 106 |
# File 'lib/taskinator/xml_visitor.rb', line 105 def task_count end |
#visit ⇒ Object
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.(error[1]) builder.cdata!(error[2].join("\n")) end end |