Sha256: 79fa43d0731a57ef0f5184b58b3fd6f1c17889928b69778567cabf6d8386ed58

Contents?: true

Size: 1.54 KB

Versions: 14

Compression:

Stored size: 1.54 KB

Contents

class Card
  module Env
    # session history helpers: we keep a history stack so that in the case of
    # card removal we can crawl back up to the last un-removed location
    module LocationHistory
      def location_history
        session[:history] ||= [Env::Location.card_path("")]
        session[:history].shift if session[:history].size > 5
        session[:history]
      end

      def save_location card
        return unless save_location?(card)
        discard_locations_for card
        session[:previous_location] =
          Env::Location.card_path card.cardname.url_key
        location_history.push previous_location
      end

      def save_location? card
        !Env.ajax? && Env.html? && card.known? && (card.codename != "signin")
      end

      def previous_location
        return unless location_history
        session[:previous_location] ||= location_history.last
      end

      def discard_locations_for card
        # quoting necessary because cards have things like "+*" in the names..
        session[:history] = location_history.reject do |loc|
          if (url_key = url_key_for_location(loc))
            url_key.to_name.key == card.key
          end
        end.compact
        session[:previous_location] = nil
      end

      def save_interrupted_action uri
        session[:interrupted_action] = uri
      end

      def interrupted_action
        session.delete :interrupted_action
      end

      def url_key_for_location location
        (%r{/([^/]*$)} =~ location) ? Regexp.last_match[1] : nil
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
card-1.91 lib/card/env/location_history.rb
card-1.21.0 lib/card/env/location_history.rb
card-1.20.4 lib/card/env/location_history.rb
card-1.20.3 lib/card/env/location_history.rb
card-1.20.2 lib/card/env/location_history.rb
card-1.20.1 lib/card/env/location_history.rb
card-1.20.0 lib/card/env/location_history.rb
card-1.19.6 lib/card/env/location_history.rb
card-1.19.5 lib/card/env/location_history.rb
card-1.19.4 lib/card/env/location_history.rb
card-1.19.3 lib/card/env/location_history.rb
card-1.19.2 lib/card/env/location_history.rb
card-1.19.1 lib/card/env/location_history.rb
card-1.19.0 lib/card/env/location_history.rb