class Taskinator::Persistence::XmlSerializationVisitor
Attributes
builder[R]
the redis connection is passed in since it is in the multi statement mode in order to produce one roundtrip to the redis server
instance[R]
Public Class Methods
new(builder, instance, base_visitor=self)
click to toggle source
# File lib/taskinator/persistence.rb, line 349 def initialize(builder, instance, base_visitor=self) @builder = builder @instance = instance @key = instance.key @root = base_visitor.instance @base_visitor = base_visitor @task_count = 0 end
Public Instance Methods
incr_task_count()
click to toggle source
# File lib/taskinator/persistence.rb, line 445 def incr_task_count @task_count += 1 end
task_count()
click to toggle source
# File lib/taskinator/persistence.rb, line 441 def task_count @task_count end
visit()
click to toggle source
the starting point for serializing the instance
# File lib/taskinator/persistence.rb, line 359 def visit @attributes = [] @attributes << [:type, @instance.class.name] @attributes << [:process_uuid, @root.uuid] @attributes << [:state, :initial] @instance.accept(self) @attributes << [:task_count, @task_count] @attributes.each do |(name, value)| builder.tag!('attribute', name => value) end self end
visit_args(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 429 def visit_args(attribute) values = @instance.send(attribute) yaml = Taskinator::Persistence.serialize(values) # greater than 2 MB? if (yaml.bytesize / (1024.0**2)) > 2 Taskinator.logger.warn("Large argument data detected for '#{self.to_s}'. Consider using intrinsic types instead, or try to reduce the amount of data provided.") end @attributes << [attribute, yaml] end
visit_attribute(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 401 def visit_attribute(attribute) value = @instance.send(attribute) @attributes << [attribute, value] if value end
visit_attribute_enum(attribute, type)
click to toggle source
# File lib/taskinator/persistence.rb, line 410 def visit_attribute_enum(attribute, type) visit_attribute(attribute) end
visit_attribute_time(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 406 def visit_attribute_time(attribute) visit_attribute(attribute) end
visit_process(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 376 def visit_process(attribute) process = @instance.send(attribute) if process @attributes << [attribute, process.uuid] builder.tag!('process', :key => process.key) do |xml| XmlSerializationVisitor.new(xml, process, @base_visitor).visit end end end
visit_process_reference(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 414 def visit_process_reference(attribute) process = @instance.send(attribute) @attributes << [attribute, process.uuid] if process end
visit_task_reference(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 419 def visit_task_reference(attribute) task = @instance.send(attribute) @attributes << [attribute, task.uuid] if task end
visit_tasks(tasks)
click to toggle source
# File lib/taskinator/persistence.rb, line 387 def visit_tasks(tasks) builder.tag!('tasks', :count => tasks.count) do |xml| tasks.each do |task| xml.tag!('task', :key => task.key) do |xml2| XmlSerializationVisitor.new(xml2, task, @base_visitor).visit unless task.is_a?(Task::SubProcess) incr_task_count unless self == @base_visitor @base_visitor.incr_task_count end end end end end
visit_type(attribute)
click to toggle source
# File lib/taskinator/persistence.rb, line 424 def visit_type(attribute) type = @instance.send(attribute) @attributes << [attribute, type.name] if type end