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
129 130 131 132 133 134 |
# File 'lib/taskinator/persistence.rb', line 129 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
137 138 139 140 141 142 143 144 145 146 |
# File 'lib/taskinator/persistence.rb', line 137 def visit @hmset = [] @hmset << @key @hmset += [:type, @instance.class.name] @instance.accept(self) # NB: splat args @conn.hmset(*@hmset) end |
#visit_args(attribute) ⇒ Object
184 185 186 187 188 |
# File 'lib/taskinator/persistence.rb', line 184 def visit_args(attribute) values = @instance.send(attribute) yaml = Taskinator::Persistence.serialize(values) @hmset += [attribute, yaml] end |
#visit_attribute(attribute) ⇒ Object
164 165 166 167 |
# File 'lib/taskinator/persistence.rb', line 164 def visit_attribute(attribute) value = @instance.send(attribute) @hmset += [attribute, value] if value end |
#visit_process(attribute) ⇒ Object
148 149 150 151 152 153 154 |
# File 'lib/taskinator/persistence.rb', line 148 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
169 170 171 172 |
# File 'lib/taskinator/persistence.rb', line 169 def visit_process_reference(attribute) process = @instance.send(attribute) @hmset += [attribute, process.uuid] if process end |
#visit_task_reference(attribute) ⇒ Object
174 175 176 177 |
# File 'lib/taskinator/persistence.rb', line 174 def visit_task_reference(attribute) task = @instance.send(attribute) @hmset += [attribute, task.uuid] if task end |
#visit_tasks(tasks) ⇒ Object
156 157 158 159 160 161 162 |
# File 'lib/taskinator/persistence.rb', line 156 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
179 180 181 182 |
# File 'lib/taskinator/persistence.rb', line 179 def visit_type(attribute) type = @instance.send(attribute) @hmset += [attribute, type.name] if type end |