Sha256: ab2fbc8e8b4d3b0743578b6cc960f03a98951b73241cfeb9b5bec316ebb1fdad

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module TimecopController
  
  def self.included(base)
    # base.class_eval do
    #   # Make sure we don't reset our own time!
    #   skip_filter :handle_timecop_offset
    # end
    base.send(:include, Actions)
  end

  module Actions
    def timecop_update
      year, month, day, hour, min, sec = params[:year], params[:month], params[:day], params[:hour], params[:min], params[:sec]
      session[:timecop_adjusted_time] = Time.local(year, month, day, hour, min, sec)
      render :status => 200, :nothing => true
    end
  
    def timecop_reset
      session[:timecop_adjusted_time] = nil
      render :status => 200, :nothing => true
    end
  end
  
  module ActionControllerExtensions
    # def self.included(base)
    #   base.class_eval do
    #     around_filter :handle_timecop_offset
    #   end
    # end

    # to be used as an around_filter
    def handle_timecop_offset
      # Establish now
      if !session[:timecop_adjusted_time].nil?
        #puts "***** Time traveling to #{session[:timecop_adjusted_time].to_s}"
        Timecop.travel(session[:timecop_adjusted_time])
      else
        Timecop.return
      end

      # Run the intended action
      yield

      # we want to continue to slide time forward, even if it's only 3 seconds at a time.
      # this ensures that subsequent calls during the same "time travel" actually pass time
      if !session[:timecop_adjusted_time].nil?
        #puts "====== Resetting session to: #{Time.now + 3}"
        session[:timecop_adjusted_time] = Time.now + 3 # slide it forward a couple of seconds
      end
    end

    private :handle_timecop_offset
    
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails-caddy-0.0.8 lib/rails-caddy/controllers/timecop_controller.rb