Class: Taskinator::Persistence::RedisSerializationVisitor
- Inherits:
-
Visitor::Base
- Object
- Visitor::Base
- Taskinator::Persistence::RedisSerializationVisitor
- Defined in:
- lib/taskinator/persistence.rb
Instance Method Summary collapse
-
#initialize(conn, instance, parent = nil) ⇒ RedisSerializationVisitor
constructor
the redis connection is passed in since it is in the multi statement mode in order to produce one roundtrip to the redis server.
-
#visit ⇒ Object
the starting point for serializing the instance.
- #visit_args(attribute) ⇒ Object
- #visit_attribute(attribute) ⇒ Object
- #visit_process(attribute) ⇒ Object
- #visit_process_reference(attribute) ⇒ Object
- #visit_task_reference(attribute) ⇒ Object
- #visit_tasks(tasks) ⇒ Object
- #visit_type(attribute) ⇒ Object
Constructor Details
#initialize(conn, instance, parent = nil) ⇒ RedisSerializationVisitor
the redis connection is passed in since it is in the multi statement mode in order to produce one roundtrip to the redis server
115 116 117 118 119 120 |
# File 'lib/taskinator/persistence.rb', line 115 def initialize(conn, instance, parent=nil) @conn = conn @instance = instance @key = instance.key # @parent = parent # not using this yet end |
Instance Method Details
#visit ⇒ Object
the starting point for serializing the instance
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/taskinator/persistence.rb', line 123 def visit @hmset = [] @hmset << @key @hmset += [:type, @instance.class.name] @instance.accept(self) # NB: splat args @conn.hmset(*@hmset) end |
#visit_args(attribute) ⇒ Object
170 171 172 173 |
# File 'lib/taskinator/persistence.rb', line 170 def visit_args(attribute) value = @instance.send(attribute) @hmset += [attribute, YAML.dump(value)] if value end |
#visit_attribute(attribute) ⇒ Object
150 151 152 153 |
# File 'lib/taskinator/persistence.rb', line 150 def visit_attribute(attribute) value = @instance.send(attribute) @hmset += [attribute, value] if value end |
#visit_process(attribute) ⇒ Object
134 135 136 137 138 139 140 |
# File 'lib/taskinator/persistence.rb', line 134 def visit_process(attribute) process = @instance.send(attribute) if process @hmset += [attribute, process.uuid] RedisSerializationVisitor.new(@conn, process, @instance).visit end end |
#visit_process_reference(attribute) ⇒ Object
155 156 157 158 |
# File 'lib/taskinator/persistence.rb', line 155 def visit_process_reference(attribute) process = @instance.send(attribute) @hmset += [attribute, process.uuid] if process end |
#visit_task_reference(attribute) ⇒ Object
160 161 162 163 |
# File 'lib/taskinator/persistence.rb', line 160 def visit_task_reference(attribute) task = @instance.send(attribute) @hmset += [attribute, task.uuid] if task end |
#visit_tasks(tasks) ⇒ Object
142 143 144 145 146 147 148 |
# File 'lib/taskinator/persistence.rb', line 142 def visit_tasks(tasks) @hmset += [:task_count, tasks.count] tasks.each do |task| RedisSerializationVisitor.new(@conn, task, @instance).visit @conn.rpush "#{@key}:tasks", task.uuid end end |
#visit_type(attribute) ⇒ Object
165 166 167 168 |
# File 'lib/taskinator/persistence.rb', line 165 def visit_type(attribute) type = @instance.send(attribute) @hmset += [attribute, type.name] if type end |