Module: QueryDam
- Defined in:
- lib/query_dam.rb,
lib/query_dam/version.rb,
lib/query_dam/concerns/trackable.rb
Defined Under Namespace
Modules: Trackable
Constant Summary collapse
- QUERY_EXPIRE =
5.minutes
- VERSION =
'0.1.0'
Class Method Summary collapse
- .exclusions_set(key) ⇒ Object
- .get_updates(key) ⇒ Object
- .updates_set(key) ⇒ Object
- .watch_relation(relation) ⇒ Object
Class Method Details
.exclusions_set(key) ⇒ Object
44 45 46 |
# File 'lib/query_dam.rb', line 44 def exclusions_set(key) Redis::Set.new("#{key}-exclusions") end |
.get_updates(key) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/query_dam.rb', line 23 def get_updates(key) query_hash = Redis::HashKey.new(key) return nil unless query_hash.exists? model = query_hash[:model].constantize result = { model: model, updates: model.where(id: updates_set(key).to_a), exclusions: exclusions_set(key).to_a.map(&:to_i) } updates_set(key).clear exclusions_set(key).clear result end |
.updates_set(key) ⇒ Object
40 41 42 |
# File 'lib/query_dam.rb', line 40 def updates_set(key) Redis::Set.new("#{key}-updates") end |
.watch_relation(relation) ⇒ Object
13 14 15 16 17 18 19 20 21 |
# File 'lib/query_dam.rb', line 13 def watch_relation(relation) key = SecureRandom.uuid query = relation.where("`#{relation.model.table_name}`.`id` = #{key}").to_sql query_hash = Redis::HashKey.new(key) query_hash.bulk_set(model: relation.model.name, query: query) query_hash.expire(QUERY_EXPIRE) Redis::Set.new(relation.model.name) << key key end |