Sha256: 33d06b100f752d8772bf7a60373080607109a643b306b108be2921c66b80fba4
Contents?: true
Size: 1.76 KB
Versions: 1
Compression:
Stored size: 1.76 KB
Contents
class ::ActiveRecord::Associations::Builder::HasMany if self.instance_methods.include?(:valid_options=) self.valid_options += [:shadow] else def valid_options_with_shadow_option valid_options_without_shadow_option + [:shadow] end alias_method_chain :valid_options, :shadow_option end def build_with_shadow_option reflection = build_without_shadow_option if options[:shadow] model_name = model.table_name.singularize model.class_eval <<-RUBY def #{name}_shadow_cache_key "#{model_name}_\#{self[self.class.primary_key]}_#{name}_shadow_cache" end def #{name}_by_shadow Redis.current.hvals(#{name}_shadow_cache_key).map do |val| shadow_data = Marshal.load(val) #{reflection.klass.name}.instantiate_shadow_model(shadow_data) end end def clear_#{name}_shadow_cache Redis.current.del(#{name}_shadow_cache_key) end RUBY reflection.klass.class_eval <<-RUBY after_save :update_shadow_cach_of_#{model_name} after_destroy :delete_shadow_cach_of_#{model_name} def belongs_to_#{model_name}_shadow_cache_key "#{model_name}_\#{self[:#{reflection.foreign_key}]}_#{name}_shadow_cache" end def update_shadow_cach_of_#{model_name} cache_key = belongs_to_#{model_name}_shadow_cache_key Redis.current.hset(cache_key, self[self.class.primary_key], self.build_shadow_data) update_expiration(cache_key) end def delete_shadow_cach_of_#{model_name} Redis.current.hdel(belongs_to_#{model_name}_shadow_cache_key, self[self.class.primary_key]) end RUBY end reflection end alias_method_chain :build, :shadow_option end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
shadow_model-0.2.3 | lib/shadow_model/associations/has_many.rb |