Module: Seabright::ObjectBase

Included in:
RedisObject
Defined in:
lib/redis_object/base.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object (private)



178
179
180
181
182
183
184
185
186
187
# File 'lib/redis_object/base.rb', line 178

def method_missing(sym, *args, &block)
  super if sym == :class
  if sym.to_s =~ SetPattern
    return super if args.size > 1
    send(:set,sym.to_s.gsub(SetPattern,'').to_sym,*args)
  else
    return super if !args.empty?
    send(:get,sym)
  end
end

Instance Method Details

#[](k) ⇒ Object



87
88
89
# File 'lib/redis_object/base.rb', line 87

def [](k)
  get(k)
end

#[]=(k, v) ⇒ Object



162
163
164
# File 'lib/redis_object/base.rb', line 162

def []=(k,v)
  set(k,v)
end

#_get(k) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/redis_object/base.rb', line 78

def _get(k)
  if is_ref_key?(k) && (v = get_reference(store.hget(hkey, k.to_s)))
    define_setter_getter(k)
  elsif v = store.hget(hkey, k.to_s)
    define_setter_getter(k)
  end
  v
end

#define_setter_getter(key) ⇒ Object



104
105
106
107
108
109
110
111
# File 'lib/redis_object/base.rb', line 104

def define_setter_getter(key)
  define_access(key) do
    get(key)
  end
  define_access("#{key.to_s}=") do |val|
    set(key,val)
  end
end

#delete!Object



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/redis_object/base.rb', line 50

def delete!
  store.del key
  store.del hkey
  store.del reserve_key
  store.srem(self.class.plname, key)
  # store.smembers(ref_key).each do |k|
  #  if self.class.find_by_key(k)
  #    
  #  end
  # end
  dereference_all!
  nil
end

#dereference_all!Object



64
65
66
# File 'lib/redis_object/base.rb', line 64

def dereference_all!
  
end

#generate_idObject



20
21
22
# File 'lib/redis_object/base.rb', line 20

def generate_id
  self.class.generate_id
end

#get(k) ⇒ Object



74
75
76
# File 'lib/redis_object/base.rb', line 74

def get(k)
  cached_hash_values[k.to_s] ||= _get(k)
end

#get_reference(hkey) ⇒ Object



147
148
149
150
151
152
# File 'lib/redis_object/base.rb', line 147

def get_reference(hkey)
  if o = RedisObject.find_by_key(hkey)
    return o
  end
  nil
end

#idObject

oved this to the dumper module in experimental - remove when it gets to base def to_json Yajl::Encoder.encode(actual) end



33
34
35
# File 'lib/redis_object/base.rb', line 33

def id
  @id || get(id_sym) || set(id_sym, generate_id)
end

#initialize(ident = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/redis_object/base.rb', line 4

def initialize(ident={})
  if ident && (ident.class == String || (ident.class == Symbol && (ident = ident.to_s)))# && ident.gsub!(/.*:/,'') && ident.length > 0
    load(ident.dup)
  elsif ident && ident.class == Hash
    ident[id_sym] ||= generate_id
    if load(ident[id_sym])
      mset(ident.dup)
    end
  end
  self
end

#is_ref_key?(k) ⇒ Boolean

Returns:

  • (Boolean)


140
141
142
143
144
145
# File 'lib/redis_object/base.rb', line 140

def is_ref_key?(k)
  if store.sismember(ref_field_key,k.to_s)
    return true
  end
  false
end

#is_set?(k) ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/redis_object/base.rb', line 91

def is_set?(k)
  store.hexists(hkey, k.to_s)
end

#load(o_id) ⇒ Object



37
38
39
40
# File 'lib/redis_object/base.rb', line 37

def load(o_id)
  @id = o_id
  true
end

#mset(dat) ⇒ Object



95
96
97
98
99
100
101
102
# File 'lib/redis_object/base.rb', line 95

def mset(dat)
  store.hmset(hkey, *(dat.inject([]){|acc,(k,v)| acc << [k,v] }.flatten))
  cached_hash_values.merge!(dat)
  dat.each do |k,v|
    define_setter_getter(k)
  end
  dat
end

#new_id(complexity = 8) ⇒ Object



16
17
18
# File 'lib/redis_object/base.rb', line 16

def new_id(complexity = 8)
  self.class.new_id(complexity)
end

#rawObject Also known as: inspect, actual



68
69
70
# File 'lib/redis_object/base.rb', line 68

def raw
  store.hgetall(hkey).inject({}) {|acc,(k,v)| acc[k.to_sym] = enforce_format(k,v); acc }
end

#reserve(k) ⇒ Object



24
25
26
# File 'lib/redis_object/base.rb', line 24

def reserve(k)
  self.class.reserve(k)
end

#saveObject



42
43
44
45
46
47
48
# File 'lib/redis_object/base.rb', line 42

def save
  set(:class, self.class.name)
  set(id_sym,id.gsub(/.*:/,''))
  set(:key, key)
  store.sadd(self.class.plname, key)
  store.del(reserve_key)
end

#set(k, v) ⇒ Object



118
119
120
121
122
123
124
125
# File 'lib/redis_object/base.rb', line 118

def set(k,v)
  return nil if k.nil?
  return set_ref(k,v) if v.is_a?(RedisObject)
  store.hset(hkey, k.to_s, v.to_s)
  cached_hash_values[k.to_s] = v
  define_setter_getter(k)
  v
end

#set_ref(k, v) ⇒ Object



127
128
129
130
131
132
133
134
# File 'lib/redis_object/base.rb', line 127

def set_ref(k,v)
  return unless v.is_a?(RedisObject)
  track_ref_key(k)
  store.hset(hkey, k.to_s, v.hkey)
  cached_hash_values[k.to_s] = v
  define_setter_getter(k)
  v
end

#setnx(k, v) ⇒ Object



154
155
156
157
158
159
160
# File 'lib/redis_object/base.rb', line 154

def setnx(k,v)
  if success = store.hsetnx(hkey, k.to_s, v.to_s)
    cached_hash_values[k.to_s] = v
    define_setter_getter(k)
  end
  success
end

#track_ref_key(k) ⇒ Object



136
137
138
# File 'lib/redis_object/base.rb', line 136

def track_ref_key(k)
  store.sadd(ref_field_key, k.to_s)
end

#undefine_setter_getter(key) ⇒ Object



113
114
115
116
# File 'lib/redis_object/base.rb', line 113

def undefine_setter_getter(key)
  undefine_access(key)
  undefine_access("#{key.to_s}=")
end

#unset(*k) ⇒ Object



166
167
168
169
170
171
172
# File 'lib/redis_object/base.rb', line 166

def unset(*k)
  store.hdel(hkey, k.map(&:to_s))
  k.each do |ky|
    cached_hash_values.delete ky.to_s
    undefine_setter_getter(ky)
  end
end