class TRecs::InMemorySource

Attributes

trecs_backend[R]

Public Instance Methods

add_entry(path) { |io| ... } click to toggle source
# File lib/trecs/sources/in_memory_source.rb, line 37
def add_entry(path)
  io = StringIO.new
  yield io
  io.rewind
  content = io.read.to_s

  path_array = path.split("/") << content
  result = path_array.reverse.inject do |entry, path|
    { path => entry }
  end
  deep_merge(trecs_backend, result)
end
clear() click to toggle source
# File lib/trecs/sources/in_memory_source.rb, line 33
def clear
  @trecs_backend.clear
end
create_recording() click to toggle source
# File lib/trecs/sources/in_memory_source.rb, line 28
def create_recording
  clear
  trecs_backend[:manifest] = manifest
end
read_entry(path) click to toggle source
# File lib/trecs/sources/in_memory_source.rb, line 50
def read_entry(path)
  path = path.split("/")

  path.inject(trecs_backend) do |current_tree, current_entry|
    break nil if current_tree.nil?
    current_tree[current_entry]
  end
end

Private Instance Methods

deep_merge(hash1, hash2, &block) click to toggle source
# File lib/trecs/sources/in_memory_source.rb, line 62
def deep_merge(hash1, hash2, &block)
  hash2.each_pair do |current_key, other_value|
    this_value = hash1[current_key]

    hash1[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
                           deep_merge(this_value, other_value, &block)
                         else
                           if block_given? && key?(current_key)
                             block.call(current_key, this_value, other_value)
                           else
                             other_value
                           end
                         end
  end
  hash1
end