public
Description: Minimal models for Redis
Homepage:
Clone URL: git://github.com/voloko/redis-model.git
name age message
file .gitignore Wed Oct 14 00:39:18 -0700 2009 ignore pkg [voloko]
file README.rdoc Sat Oct 24 20:06:42 -0700 2009 Change README from markdown to rdoc format. [mbleigh]
file Rakefile Sun Oct 18 14:05:32 -0700 2009 fixed dependencies [voloko]
file VERSION Wed Oct 21 01:11:46 -0700 2009 Version bump to 0.1.3 [voloko]
file bench.rb Wed Oct 14 00:21:22 -0700 2009 Initial commit [voloko]
directory examples/ Wed Oct 14 00:21:22 -0700 2009 Initial commit [voloko]
directory lib/ Mon Oct 26 06:03:42 -0700 2009 revert c4871e53ba7f24c9cae97893b0299c4984abd9db [voloko]
file redis-model.gemspec Wed Oct 21 01:44:48 -0700 2009 version bump [voloko]
directory spec/ Sat Oct 24 20:02:18 -0700 2009 Adds increment! and decrement! methods. [mbleigh]
README.rdoc

redis-model

Minimal model support for [redis-rb](github.com/ezmobius/redis-rb). Directly maps ruby properties to model_name:id:field_name keys in redis. Scalar, list and set properties are supported.

Values can be marshaled to/from Integer, Float, DateTime, JSON. See Redis::Model::Marshal for more info.

Define

    require 'redis/model'

    class User < Redis::Model
      field :name,      :string
      field :created,   :datetime
      field :profile,   :json

      list  :posts,     :json

      set   :followers, :int
    end

Write

    u = User.with_key(1)
    u.name = 'Joe'                      # set user:1:name Joe
    u.created = DateTime.now            # set user:1:created 2009-10-05T12:09:56+0400
    u.profile = {                       # set user:1:profile {"sex":"M","about":"Lorem","age":23}
      :age => 23,
      :sex => 'M',
      :about => 'Lorem'
    }
    u.posts << {                        # rpush user:1:posts {"title":"Hello world!","text":"lorem"}
        :title => "Hello world!",
        :text  => "lorem"
    }
    u.followers << 2                    # sadd user:1:followers 2

Read

    u = User.with_key(1)
    p u.name                            # get user:1:name
    p u.created.strftime('%m/%d/%Y')    # get user:1:created
    p u.posts[0,20]                     # lrange user:1:posts 0 20
    p u.posts[0]                        # lindex user:1:posts 0
    p u.followers.has_key?(2)           # sismember user:1:followers 2