Module: Redisize::ClassMethods

Defined in:
lib/redisize.rb

Instance Method Summary collapse

Instance Method Details

#polymorphic_base_nameObject



309
310
311
312
313
314
315
316
317
# File 'lib/redisize.rb', line 309

def polymorphic_base_name
   base_name = base_class.to_s

   if base_name == polymorphic_name
      polymorphic_name
   else
      (base_class.to_s.split("::")[0...-1] + [polymorphic_name]).join("::")
   end
end

#primary_key_with(key_name_in = nil) ⇒ Object



319
320
321
322
323
324
325
326
# File 'lib/redisize.rb', line 319

def primary_key_with key_name_in = nil
  key_name_in || self.respond_to?(:primary_key) && self.primary_key || case self
      when ActiveRecord
         self.map.first&.class&.primary_key
      when ActiveRecord::Scoping, ActiveRecord::Reflection, ActiveRecord::Associations
         self.values.map.first&.class&.primary_key
      end
end

#redisize_array(key_name_in = nil, &block) ⇒ Object

self -> model class



347
348
349
350
351
352
353
# File 'lib/redisize.rb', line 347

def redisize_array key_name_in = nil, &block
   key_name = primary_key_with(key_name_in)

   key = ["by_key", *self.map { |x| key_name ? x.send(key_name).to_s : x.to_s } ]

   redisize_by_key(key, &block)
end

#redisize_by_key(key, &block) ⇒ Object



355
356
357
358
359
360
361
362
363
364
# File 'lib/redisize.rb', line 355

def redisize_by_key key, &block
   # binding.pry
   redisize_cache_fetch(key, expires_in: 1.day) do
      value = block.call

      Redisize.enqueue(:redisize_array_metas, key, value)

      value
   end
end

#redisize_hash(key_name_in = nil, &block) ⇒ Object

self -> model class



336
337
338
339
340
341
342
343
344
# File 'lib/redisize.rb', line 336

def redisize_hash key_name_in = nil, &block
   key_name = primary_key_with(key_name_in)

   key = ["by_key", *self.values.map do |x|
      key_name && x.respond_to?(key_name) ? x.send(key_name).to_s : x.to_s
   end ]

   redisize_by_key(key, &block)
end

#redisize_model(value, options = {}, &block) ⇒ Object

self -> model class



367
368
369
370
371
372
373
374
375
376
377
378
379
380
# File 'lib/redisize.rb', line 367

def redisize_model value, options = {}, &block
   primary_key = options.fetch(:by_key, self.primary_key).to_s
   key = ["instance", name, primary_key, value]
   metakey = ["meta", self.polymorphic_base_name, primary_key, value]

   # binding.pry
   redisize_cache_fetch(key, expires_in: 1.week) do
      if result = block.call
         Redisize.enqueue(:redisize_model_metas, metakey, self.name, result.as_json, key)
      end

      result
   end
end

#redisize_sql(&block) ⇒ Object

self -> model class



329
330
331
332
333
# File 'lib/redisize.rb', line 329

def redisize_sql &block
   key = ["sql", self.name, self.primary_key, self.all.to_sql]

   redisize_by_key(key, &block)
end