tylerhunt-comeback 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown ADDED
@@ -0,0 +1,61 @@
1
+ Comeback
2
+ ========
3
+
4
+ Provides a mechanism for storing URLs to return to at a later time. Allows the
5
+ current URL, a custom URL, or the referer to be stored.
6
+
7
+ When a referer is stored, it is checked against the current page URL, and if
8
+ they're the same, then the referer won't be set and the default path will be
9
+ used instead.
10
+
11
+ By default, the session key :comeback_to is used to store the URL. The class
12
+ inheritable accessor comeback_session_key can be set to override this.
13
+
14
+
15
+ Example
16
+ =======
17
+
18
+ In your controller, you first call #store_referer to save the referer to the
19
+ current page, and then to access it again, call #return_or_redirect_to and pass
20
+ it the same arguments you would pass to #redirect_to as the default in case a
21
+ referer has not been set:
22
+
23
+ class MyController < ApplicationController
24
+ def first_action
25
+ store_referer
26
+ end
27
+
28
+ def second_action
29
+ return_or_redirect_to root_path
30
+ end
31
+ end
32
+
33
+ You can also store the referer using a before filter:
34
+
35
+ class MyController < ApplicationController
36
+ before_filter :store_referer, :only => :first_action
37
+
38
+ def first_action
39
+ end
40
+ end
41
+
42
+ The current page URL can also be stored instead of the referer:
43
+
44
+ class MyController < ApplicationController
45
+ def first_action
46
+ store_location
47
+ redirect_to login_path
48
+ end
49
+ end
50
+
51
+ Explicit URLs may also be stored:
52
+
53
+ class MyController < ApplicationController
54
+ def first_action
55
+ store_location dashbaord_path
56
+ redirect_to login_path
57
+ end
58
+ end
59
+
60
+
61
+ Copyright (c) 2008 Tyler Hunt, released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ require 'rake'
2
+ require 'spec/rake/spectask'
3
+
4
+ begin
5
+ require 'jeweler'
6
+
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = 'comeback'
9
+ gem.summary = 'Provides a mechanism for storing and accessing return URLs.'
10
+ gem.email = 'tyler@tylerhunt.com'
11
+ gem.homepage = 'http://github.com/tylerhunt/comeback'
12
+ gem.authors = ['Tyler Hunt']
13
+
14
+ gem.add_dependency('actionpack')
15
+
16
+ gem.add_development_dependency('jeweler', '~> 0.11.0')
17
+ gem.add_development_dependency('rspec', '~> 1.2.2')
18
+ end
19
+ rescue LoadError
20
+ puts 'Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com'
21
+ end
22
+
23
+ task :default => :spec
24
+
25
+ Spec::Rake::SpecTask.new(:spec) do |t|
26
+ t.libs << 'rails'
27
+ t.spec_opts = ['--colour --format progress --loadby mtime --reverse']
28
+ t.spec_files = FileList['spec/**/*_spec.rb']
29
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 0
3
+ :patch: 2
4
+ :major: 0
data/lib/comeback.rb ADDED
@@ -0,0 +1,28 @@
1
+ module Comeback
2
+ def self.included(base)
3
+ base.class_inheritable_accessor :comeback_session_key
4
+ base.comeback_session_key = :comeback_to
5
+ end
6
+
7
+ def store_location(url=nil)
8
+ session[comeback_session_key] ||= url ? url : request.url
9
+ end
10
+
11
+ def store_referer
12
+ referer = request.env['HTTP_REFERER']
13
+ store_location(referer) unless referer == request.url
14
+ end
15
+
16
+ def clear_location
17
+ session[comeback_session_key] = nil
18
+ end
19
+
20
+ def return_or_redirect_to(*args)
21
+ if session[comeback_session_key]
22
+ redirect_to(session[comeback_session_key])
23
+ clear_location
24
+ else
25
+ redirect_to(*args)
26
+ end
27
+ end
28
+ end
data/rails/init.rb ADDED
@@ -0,0 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'comeback')
2
+
3
+ ActionController::Base.class_eval do
4
+ include Comeback
5
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "Comeback" do
4
+ before(:each) do
5
+ @comeback_controller = Class.new(ActionController::Base).class_eval do
6
+ include ActionController::TestProcess
7
+ end
8
+
9
+ @request = mock("request")
10
+ @request.stub!(:env).and_return({ "HTTP_REFERER" => "/referer" })
11
+ @request.stub!(:url).and_return("/private")
12
+
13
+ @controller = @comeback_controller.new
14
+ @controller.stub!(:request).and_return(@request)
15
+ @controller.stub!(:session).and_return({})
16
+ end
17
+
18
+ describe "session key" do
19
+ it "should default to :comeback_to" do
20
+ @comeback_controller.comeback_session_key.should == :comeback_to
21
+ end
22
+
23
+ it "should be allowed to be overridden" do
24
+ @comeback_controller.comeback_session_key = :return_to
25
+ @comeback_controller.comeback_session_key.should == :return_to
26
+ end
27
+ end
28
+
29
+ describe "#store_location" do
30
+ it "should store the current location" do
31
+ @controller.store_location
32
+ @controller.session[:comeback_to].should == "/private"
33
+ end
34
+
35
+ it "should store the specified location" do
36
+ @controller.store_location("/other")
37
+ @controller.session[:comeback_to].should == "/other"
38
+ end
39
+ end
40
+
41
+ describe "#store_referer" do
42
+ it "should store the referer" do
43
+ @controller.store_referer
44
+ @controller.session[:comeback_to].should == "/referer"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+
3
+ gem 'activerecord'
4
+ require 'active_record'
5
+
6
+ gem 'actionpack'
7
+ require 'action_controller'
8
+ require 'action_controller/test_process'
9
+
10
+ require 'init'
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tylerhunt-comeback
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Tyler Hunt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-03 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: actionpack
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: jeweler
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.11.0
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.2.2
44
+ version:
45
+ description:
46
+ email: tyler@tylerhunt.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.markdown
53
+ files:
54
+ - README.markdown
55
+ - Rakefile
56
+ - VERSION.yml
57
+ - lib/comeback.rb
58
+ - rails/init.rb
59
+ - spec/comeback_spec.rb
60
+ - spec/spec_helper.rb
61
+ has_rdoc: false
62
+ homepage: http://github.com/tylerhunt/comeback
63
+ post_install_message:
64
+ rdoc_options:
65
+ - --charset=UTF-8
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ requirements: []
81
+
82
+ rubyforge_project:
83
+ rubygems_version: 1.2.0
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Provides a mechanism for storing and accessing return URLs.
87
+ test_files:
88
+ - spec/comeback_spec.rb
89
+ - spec/spec_helper.rb