Sha256: 4842c3a88f7f25f7c78464ad03778306c1b623d5ddace3f97fed8e99c8147edd

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

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 rename(newkey)
      redis.rename @key, sanitize_key(newkey)

      @key = newkey
    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

1 entries across 1 versions & 1 rubygems

Version Path
blendris-0.5 lib/blendris/node.rb