Sha256: 1cd1b214fad6a6fcde0a0b78d8f45e9402528a94cc6e8232c028735b3335a5ea

Contents?: true

Size: 966 Bytes

Versions: 2

Compression:

Stored size: 966 Bytes

Contents

module Blendris

  # RedisNode is used to compose all Redis value wrapper classes.

  module RedisNode

    include RedisAccessor

    attr_reader :key

    def initialize(key, options = {})
      @key = sanitize_key(key)
      @default = options[:default]
      @options = options
      @on_change = options[:on_change]

      if @default && !redis.exists(self.key)
        redis.set key, self.class.cast_to_redis(@default, @options)
      end
    end

    def set(value)
      if value
        redis.set key, self.class.cast_to_redis(value, @options)
      else
        redis.del key
      end
    ensure
      notify_changed
    end

    def get
      self.class.cast_from_redis redis.get(self.key), @options
    end

    def clear
      redis.del key
    ensure
      notify_changed
    end

    def type
      redis.type key
    end

    def exists?
      redis.exists key
    end

    def notify_changed
      @on_change.call if @on_change
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
blendris-0.0.4 lib/blendris/node.rb
blendris-0.0.3 lib/blendris/node.rb