rack_session_access 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,9 +2,9 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rspec'
6
- gem 'capybara'
5
+ gem 'rspec', '2.12.0'
6
+ gem 'capybara', '1.1.4'
7
7
 
8
8
  gem 'rack'
9
- gem 'sinatra'
9
+ gem 'sinatra', '1.3.4'
10
10
  gem 'rails'
data/README.md CHANGED
@@ -24,23 +24,19 @@ Add to `Gemfile`:
24
24
 
25
25
  gem 'rack_session_access'
26
26
 
27
- Add to `config/application.rb`
27
+ Add RackSessionAccess middleware to rails middleware stack.
28
+ Add the following in`config/environments/test.rb`:
28
29
 
29
- module MyRailsApplication
30
- class Application < Rails::Application
31
- config.middleware.use RackSessionAccess::Middleware if Rails.env.test?
32
- end
30
+ [MyRailsApp]::Application.configure do
31
+ ...
32
+ # Access to rack session
33
+ config.middleware.use RackSessionAccess::Middleware
34
+ ...
33
35
  end
34
36
 
35
- *Note* Ensure you include rack_session_access middleware only for test environment
37
+ *Note* Ensure you include rack_session_access middleware only for *test* environment
36
38
  otherwise you will have security issue.
37
39
 
38
- If you use rspec you may prefer to inject middleware only for rspec tests:
39
- Put into `spec/spec_helper`:
40
-
41
- Rails.application.configure do
42
- config.middleware.use RackSessionAccess::Middleware
43
- end
44
40
 
45
41
  ## Using with Sinatra
46
42
 
@@ -74,7 +70,11 @@ Add to `spec/spec_helper.rb`
74
70
 
75
71
  require "rack_session_access/capybara"
76
72
 
77
- And use `page.set_rack_session` to set your desired session data!
73
+ Use:
74
+
75
+ * `page.set_rack_session` to set your desired session data
76
+ * `page.get_rack_session` to obtain your application session data
77
+ * `page.get_rack_session_key` to obtain certain key if your application session data
78
78
 
79
79
  Example:
80
80
 
@@ -90,8 +90,20 @@ Example:
90
90
  page.visit "/profile"
91
91
  page.should have_content("Hi, jack@daniels.com")
92
92
  end
93
+
94
+ scenario "visit landing page" do
95
+ page.visit "/landing?ref=123"
96
+ page.get_rack_session_key('ref').should == "123"
97
+ end
93
98
  end
94
99
 
100
+ ## Authlogic integration
101
+
102
+ page.set_rack_session("user_credentials" => @user.persistence_token)
103
+
104
+ ## Devise integration
105
+
106
+ page.set_rack_session("warden.user.user.key" => User.serialize_into_session(@user).unshift("User"))
95
107
 
96
108
  ## Notes
97
109
 
@@ -1,4 +1,3 @@
1
- require 'rails'
2
1
  require 'action_controller/railtie'
3
2
 
4
3
  module TestRailsApp
@@ -33,3 +32,5 @@ module TestRailsApp
33
32
  end
34
33
  end
35
34
  end
35
+
36
+ Rails.logger = Logger.new('/dev/null')
@@ -9,6 +9,17 @@ module RackSessionAccess
9
9
  click_button "Update"
10
10
  has_content?("Rack session data")
11
11
  end
12
+
13
+ def get_rack_session
14
+ visit ::RackSessionAccess.path + '.raw'
15
+ has_content?("Raw rack session data")
16
+ raw_data = find(:xpath, '//body/pre').text
17
+ ::RackSessionAccess.decode(raw_data)
18
+ end
19
+
20
+ def get_rack_session_key(key)
21
+ get_rack_session.fetch(key)
22
+ end
12
23
  end
13
24
  end
14
25
 
@@ -38,18 +38,26 @@ module RackSessionAccess
38
38
 
39
39
  # List session data
40
40
  def show(request)
41
- # call inspect because session can be lazy loaded
42
- request.env[@key].inspect
43
-
44
- render do |xml|
45
- xml.h2 "Rack session data"
46
- xml.ul do |xml|
47
- request.env[@key].each do |k,v|
48
- xml.li("#{k.inspect} : #{v.inspect}")
49
- end
41
+ # force load session because it can be lazy loaded
42
+ request.env[@key].delete(:rack_session_access_force_load_session)
43
+
44
+ case File.extname(request.path)
45
+ when ".raw"
46
+ render do |xml|
47
+ xml.h2 "Raw rack session data"
48
+ xml.pre RackSessionAccess.encode(request.env[@key].to_hash)
50
49
  end
51
- xml.p do |xml|
52
- xml.a("Edit", :href => action_path(:edit))
50
+ else
51
+ render do |xml|
52
+ xml.h2 "Rack session data"
53
+ xml.ul do |xml|
54
+ request.env[@key].each do |k,v|
55
+ xml.li("#{k.inspect} : #{v.inspect}")
56
+ end
57
+ end
58
+ xml.p do |xml|
59
+ xml.a("Edit", :href => action_path(:edit))
60
+ end
53
61
  end
54
62
  end
55
63
  end
@@ -93,7 +101,7 @@ module RackSessionAccess
93
101
  # Dispatch action from request
94
102
  def dispatch_action(request)
95
103
  method = request_method(request)
96
- path = request.path
104
+ path = request.path.sub(/\.\w+$/, '')
97
105
  route = @routing.detect { |r| r[0] == method && r[1] == path }
98
106
  route[2] if route
99
107
  end
@@ -1,3 +1,3 @@
1
1
  module RackSessionAccess
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,6 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  shared_examples "common scenarios" do
4
+ let(:data) do
5
+ {
6
+ 'user_email' => 'jack@daniels.com',
7
+ 'user_profile' => { :age => 12 },
8
+ 'role_ids' => [1, 20, 30]
9
+ }
10
+ end
11
+
4
12
  scenario "changing session data" do
5
13
  page.visit RackSessionAccess.edit_path
6
14
  page.should have_content("Update rack session")
@@ -32,16 +40,43 @@ shared_examples "common scenarios" do
32
40
  end
33
41
 
34
42
  scenario "modify session data with set_rack_session helper" do
35
- page.set_rack_session({
36
- 'user_email' => 'jack@daniels.com',
37
- 'user_profile' => { :age => 12 },
38
- 'role_ids' => [1, 20, 30]
39
- })
43
+ page.set_rack_session(data)
44
+
40
45
  page.visit(RackSessionAccess.path)
41
46
  page.should have_content('"user_email" : "jack@daniels.com"')
42
47
  page.should have_content('"user_profile" : {:age=>12}')
43
48
  page.should have_content('"role_ids" : [1, 20, 30]')
44
49
  end
50
+
51
+ scenario "accessing raw session data" do
52
+ page.set_rack_session(data)
53
+
54
+ page.visit(RackSessionAccess.path + '.raw')
55
+ raw_data = page.find(:xpath, "//body/pre").text
56
+ raw_data.should be_present
57
+ actual_data = RackSessionAccess.decode(raw_data)
58
+ actual_data.should be_kind_of(Hash)
59
+ data.each do |key, value|
60
+ actual_data[key].should == value
61
+ end
62
+ end
63
+
64
+ scenario "accessing raw session data using get_rack_session helper" do
65
+ page.set_rack_session(data)
66
+
67
+ actual_data = page.get_rack_session
68
+
69
+ actual_data.should be_kind_of(Hash)
70
+ data.each do |key, value|
71
+ actual_data[key].should == value
72
+ end
73
+ end
74
+
75
+ scenario "accessing raw session data using get_rack_session_key helper" do
76
+ page.set_rack_session(data)
77
+
78
+ page.get_rack_session_key('role_ids').should == [1, 20, 30]
79
+ end
45
80
  end
46
81
 
47
82
  shared_examples "rack scenarios" do
@@ -97,33 +132,46 @@ feature "manage rack session", %q(
97
132
  So I can write faster tests
98
133
  ) do
99
134
 
135
+ context ":rack_test driver", :driver => :rack_test do
136
+ context "rack application" do
137
+ background { Capybara.app = TestRackApp }
138
+ include_examples "common scenarios"
139
+ include_examples "rack scenarios"
140
+ end
141
+
142
+ context "sinatra application" do
143
+ background { Capybara.app = TestSinatraApp }
144
+ include_examples "common scenarios"
145
+ include_examples "sinatra scenarios"
146
+ end
147
+
148
+ context "rails application" do
149
+ background { Capybara.app = TestRailsApp::Application }
150
+ include_examples "common scenarios"
151
+ include_examples "rails scenarios"
152
+ end
153
+ end
154
+
100
155
 
101
- [:rack_test, :selenium].each do |driver_name|
102
- context "with rack application and #{driver_name.inspect} driver", :driver => driver_name do
103
- background do
104
- Capybara.current_driver.should == driver_name
105
- Capybara.app = TestRackApp
106
- end
156
+
157
+ context ":selenium driver", :driver => :selenium do
158
+ context "rack application" do
159
+ background { Capybara.app = TestRackApp }
107
160
  include_examples "common scenarios"
108
161
  include_examples "rack scenarios"
109
162
  end
110
163
 
111
- context "with sinatra application and #{driver_name.inspect} driver", :driver => driver_name do
112
- background do
113
- Capybara.current_driver.should == driver_name
114
- Capybara.app = TestSinatraApp
115
- end
164
+ context "sinatra application" do
165
+ background { Capybara.app = TestSinatraApp }
116
166
  include_examples "common scenarios"
117
167
  include_examples "sinatra scenarios"
118
168
  end
119
169
 
120
- context "with rails application and #{driver_name.inspect} driver", :driver => driver_name do
121
- background do
122
- Capybara.current_driver.should == driver_name
123
- Capybara.app = TestRailsApp::Application
124
- end
170
+ context "rails application" do
171
+ background { Capybara.app = TestRailsApp::Application }
125
172
  include_examples "common scenarios"
126
173
  include_examples "rails scenarios"
127
174
  end
128
175
  end
176
+
129
177
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack_session_access
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-24 00:00:00.000000000 Z
12
+ date: 2013-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &17635400 !ruby/object:Gem::Requirement
16
+ requirement: &17313460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *17635400
24
+ version_requirements: *17313460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: builder
27
- requirement: &17633680 !ruby/object:Gem::Requirement
27
+ requirement: &17328860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 2.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *17633680
35
+ version_requirements: *17328860
36
36
  description:
37
37
  email:
38
38
  - andriy.yanko@gmail.com