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
128 129 130 131 132 133 |
# File 'lib/taskinator/persistence.rb', line 128 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
136 137 138 139 140 141 142 143 144 145 |
# File 'lib/taskinator/persistence.rb', line 136 def visit @hmset = [] @hmset << @key @hmset += [:type, @instance.class.name] @instance.accept(self) # NB: splat args @conn.hmset(*@hmset) end |
#visit_args(attribute) ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/taskinator/persistence.rb', line 183 def visit_args(attribute) values = @instance.send(attribute) # special case, convert models to global id's if values.is_a?(Array) values = values.collect {|value| value.respond_to?(:global_id) ? value.global_id : value } elsif values.is_a?(Hash) values.each {|key, value| values[key] = value.global_id if value.respond_to?(:global_id) } end @hmset += [attribute, YAML.dump(values)] end |
#visit_attribute(attribute) ⇒ Object
163 164 165 166 |
# File 'lib/taskinator/persistence.rb', line 163 def visit_attribute(attribute) value = @instance.send(attribute) @hmset += [attribute, value] if value end |
#visit_process(attribute) ⇒ Object
147 148 149 150 151 152 153 |
# File 'lib/taskinator/persistence.rb', line 147 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
168 169 170 171 |
# File 'lib/taskinator/persistence.rb', line 168 def visit_process_reference(attribute) process = @instance.send(attribute) @hmset += [attribute, process.uuid] if process end |
#visit_task_reference(attribute) ⇒ Object
173 174 175 176 |
# File 'lib/taskinator/persistence.rb', line 173 def visit_task_reference(attribute) task = @instance.send(attribute) @hmset += [attribute, task.uuid] if task end |
#visit_tasks(tasks) ⇒ Object
155 156 157 158 159 160 161 |
# File 'lib/taskinator/persistence.rb', line 155 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
178 179 180 181 |
# File 'lib/taskinator/persistence.rb', line 178 def visit_type(attribute) type = @instance.send(attribute) @hmset += [attribute, type.name] if type end |