Class: Findable::Query

Inherits:
Object
  • Object
show all
Includes:
Connection, Namespace
Defined in:
lib/findable/query.rb,
lib/findable/query/lock.rb,
lib/findable/query/namespace.rb,
lib/findable/query/connection.rb,
lib/findable/query/serializer.rb

Defined Under Namespace

Modules: Connection, Namespace Classes: Lock, Serializer

Constant Summary

Constants included from Namespace

Namespace::AUTO_INCREMENT_KEY, Namespace::KEY_NAMES, Namespace::PREFIX

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Namespace

#thread_key

Methods included from Connection

#redis

Constructor Details

#initialize(model, serializer = nil) ⇒ Query

Returns a new instance of Query.



13
14
15
16
# File 'lib/findable/query.rb', line 13

def initialize(model, serializer = nil)
  @model = model
  @serializer = serializer || Serializer.new
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



11
12
13
# File 'lib/findable/query.rb', line 11

def model
  @model
end

Instance Method Details

#allObject



18
19
20
# File 'lib/findable/query.rb', line 18

def all
  @serializer.deserialize(redis.hvals(data_key), model)
end

#countObject



26
27
28
# File 'lib/findable/query.rb', line 26

def count
  redis.hlen(data_key)
end

#delete(id) ⇒ Object



61
62
63
# File 'lib/findable/query.rb', line 61

def delete(id)
  redis.hdel(data_key, id)
end

#delete_allObject



65
66
67
68
69
# File 'lib/findable/query.rb', line 65

def delete_all
  redis.multi do
    [data_key, info_key].each {|key| redis.del(key) }
  end
end

#exists?(id) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/findable/query.rb', line 34

def exists?(id)
  redis.hexists(data_key, id)
end

#find_by_ids(ids) ⇒ Object



30
31
32
# File 'lib/findable/query.rb', line 30

def find_by_ids(ids)
  @serializer.deserialize(redis.hmget(data_key, *Array(ids)), model)
end

#idsObject



22
23
24
# File 'lib/findable/query.rb', line 22

def ids
  redis.hkeys(data_key).map(&:to_i)
end

#import(hashes) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/findable/query.rb', line 50

def import(hashes)
  lock do
    auto_incremented = hashes.each_with_object([]) do |hash, obj|
      hash["id"] = auto_incremented_id(hash["id"])
      obj << hash["id"]
      obj << @serializer.serialize(hash)
    end
    redis.hmset(data_key, *auto_incremented)
  end
end

#insert(object) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/findable/query.rb', line 38

def insert(object)
  lock do
    object.id = auto_incremented_id(object.id)
    redis.hset(
      data_key,
      object.id,
      @serializer.serialize(object.attributes)
    )
  end
  object
end

#lockObject

Raises:

  • (ArgumentError)


71
72
73
74
# File 'lib/findable/query.rb', line 71

def lock
  raise ArgumentError, "Require block" unless block_given?
  Lock.new(lock_key, thread_key).lock { yield }
end