class Fragmenter::Redis

Attributes

fragmenter[R]

Public Class Methods

new(fragmenter) click to toggle source
# File lib/fragmenter/redis.rb, line 13
def initialize(fragmenter)
  @fragmenter = fragmenter
end

Public Instance Methods

clean!() click to toggle source
# File lib/fragmenter/redis.rb, line 57
def clean!
  redis.del store_key, meta_key
end
complete?() click to toggle source
# File lib/fragmenter/redis.rb, line 43
def complete?
  redis.hlen(store_key).to_s == redis.hget(meta_key, :total)
end
fragments() click to toggle source
# File lib/fragmenter/redis.rb, line 39
def fragments
  redis.hkeys(store_key).sort
end
meta() click to toggle source
# File lib/fragmenter/redis.rb, line 35
def meta
  redis.hgetall meta_key
end
meta_key() click to toggle source
# File lib/fragmenter/redis.rb, line 21
def meta_key
  [store_key, 'options'].join('-')
end
rebuild() click to toggle source
# File lib/fragmenter/redis.rb, line 47
def rebuild
  benchmark_rebuilding do
    redis.hmget(store_key, *fragments).join('')
  end
rescue ::Redis::CommandError
  log 'Failure rebuilding, most likely there are no fragments to rebuild'

  ''
end
store(blob, options) click to toggle source
# File lib/fragmenter/redis.rb, line 25
def store(blob, options)
  fragment = Fragmenter::Fragment.new(blob, options)

  if fragment.valid?
    persist_fragment(fragment)
  else
    false
  end
end
store_key() click to toggle source
# File lib/fragmenter/redis.rb, line 17
def store_key
  fragmenter.key
end

Private Instance Methods

benchmark_persistence(fragment) { || ... } click to toggle source
# File lib/fragmenter/redis.rb, line 80
def benchmark_persistence(fragment, &block)
  log %(Storing #{fragment.number}/#{fragment.total}...)
  start_time = Time.now

  yield

  end_time = Time.now
  log %(Stored (#{end_time - start_time}) #{fragment.number}/#{fragment.total} #{fragment.blob.size} bytes)
end
benchmark_rebuilding() { || ... } click to toggle source
# File lib/fragmenter/redis.rb, line 90
def benchmark_rebuilding(&block)
  log %(Rebuilding #{fragments.length} fragments...)
  start_time = Time.now

  rebuilt = yield

  end_time = Time.now
  log %(Rebuilt (#{end_time - start_time}) #{fragments.length} fragments #{rebuilt.size} bytes)

  rebuilt
end
log(message) click to toggle source
# File lib/fragmenter/redis.rb, line 63
def log(message)
  logger.info "Fragmenter: #{message}"
end
persist_fragment(fragment) click to toggle source
# File lib/fragmenter/redis.rb, line 67
def persist_fragment(fragment)
  benchmark_persistence(fragment) do
    redis.multi do
      redis.hset store_key, fragment.padded_number, fragment.blob
      redis.hset meta_key, :content_type, fragment.content_type
      redis.hset meta_key, :total, fragment.total

      redis.expire store_key, expiration
      redis.expire meta_key, expiration
    end
  end
end