gnapse/redis-attrs

View on GitHub
lib/redis-attrs/scalar.rb

Summary

Maintainability
A
25 mins
Test Coverage
require "time"

class Redis
  module Attrs
    class Scalar < Base

      def initialize(klass, name, type, options)
        super
        attr = self

        # Define the getter
        klass.send(:define_method, name) do
          value = redis.get attr.redis_key(id)
          value.nil? ? nil : attr.deserialize(value)
        end

        # Define the setter
        klass.send(:define_method, "#{name}=") do |value|
          if value.nil?
            redis.del attr.redis_key(id)
          else
            value = attr.serialize(value)
            redis.set attr.redis_key(id), value
          end
        end
      end

      def serialize(value)
        value.to_s
      end

      def deserialize(value)
        value
      end

    end
  end
end