Class: Taskinator::Persistence::RedisSerializationVisitor

Inherits:
Visitor::Base
  • Object
show all
Defined in:
lib/taskinator/persistence.rb

Instance Method Summary collapse

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

#visitObject

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