Sha256: af6df9a2be754500faf0ebf8580883678b09121ae408baf718a1ec8a1ebd5905

Contents?: true

Size: 1.88 KB

Versions: 35

Compression:

Stored size: 1.88 KB

Contents

module Seabright
	module Timestamps
		
		def update_timestamps
			# return unless self.class.time_matters?
			set(:created_at, Time.now) if !is_set?(:created_at)
			set(:updated_at, Time.now)
		end
		
		module ClassMethods
			
			def intercept_sets_for_timestamps!
				return if @intercepted_sets_for_timestamps
				self.class_eval do
					alias_method :untimestamped_set, :set unless method_defined?(:untimestamped_set)
					def set(k,v)
						ret = untimestamped_set(k,v)
						set(:updated_at, Time.now) unless k.to_sym == :updated_at
						ret
					end
					alias_method :untimestamped_mset, :mset unless method_defined?(:untimestamped_mset)
					def mset(dat)
						ret = untimestamped_mset(dat)
						set(:updated_at, Time.now)
						ret
					end
					alias_method :untimestamped_setnx, :setnx unless method_defined?(:untimestamped_setnx)
					def setnx(k,v)
						ret = untimestamped_setnx(k,v)
						set(:updated_at, Time.now) unless k.to_sym == :updated_at
						ret
					end
					alias_method :untimestamped_save, :save unless method_defined?(:untimestamped_save)
					def save
						ret = untimestamped_save()
						update_timestamps
						ret
					end
				end
				@intercepted_sets_for_timestamps = true
			end
			
			# def time_matters?
			# 	@time_irrelevant != true
			# end
			# 
			# def time_matters_not!
			# 	@time_irrelevant = true
			# 	sort_indices.delete(:created_at)
			# 	sort_indices.delete(:updated_at)
			# end
			# 
			def recently_created(num=5)
				self.indexed(:created_at,num,true)
			end
			
			def recently_updated(num=5)
				self.indexed(:updated_at,num,true)
			end
			
		end
		
		def self.included(base)
			# @time_irrelevant = false
			base.send(:sort_by,:created_at)
			base.send(:sort_by,:updated_at)
			base.send(:register_format,:created_at, :date)
			base.send(:register_format,:updated_at, :date)
			base.extend(ClassMethods)
			base.intercept_sets_for_timestamps!
		end
		
	end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
redis_object-1.5.1 lib/redis_object/timestamps.rb
redis_object-1.5.0 lib/redis_object/timestamps.rb
redis_object-1.4.9 lib/redis_object/timestamps.rb
redis_object-1.4.8 lib/redis_object/timestamps.rb
redis_object-1.4.7 lib/redis_object/timestamps.rb
redis_object-1.4.6 lib/redis_object/timestamps.rb
redis_object-1.4.5 lib/redis_object/timestamps.rb
redis_object-1.4.3 lib/redis_object/timestamps.rb
redis_object-1.4.2 lib/redis_object/timestamps.rb
redis_object-1.4.1 lib/redis_object/timestamps.rb
redis_object-1.4.0 lib/redis_object/timestamps.rb
redis_object-1.3.9 lib/redis_object/timestamps.rb
redis_object-1.3.8 lib/redis_object/timestamps.rb
redis_object-1.3.7 lib/redis_object/timestamps.rb
redis_object-1.3.6 lib/redis_object/timestamps.rb
redis_object-1.3.5 lib/redis_object/timestamps.rb
redis_object-1.3.4 lib/redis_object/timestamps.rb
redis_object-1.3.3 lib/redis_object/timestamps.rb
redis_object-1.3.2 lib/redis_object/timestamps.rb
redis_object-1.3.1b lib/redis_object/timestamps.rb