renee-session 0.4.0.pre1

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.
@@ -0,0 +1,50 @@
1
+ require 'renee/util'
2
+ require 'renee/version'
3
+
4
+ module Renee
5
+ module Session
6
+ module ClassMethods
7
+ attr_reader :store_type
8
+
9
+ def add_session_type(type, cls)
10
+ session_stores[type] = cls
11
+ end
12
+
13
+ def session(type, *args, &blk)
14
+ if session_stores.key?(type)
15
+ @store_type = [session_stores[type], args, blk]
16
+ else
17
+ raise "Store type #{type} is unknown, choose from #{session_stores.keys.map(&:inspect).join(', ')}"
18
+ end
19
+ end
20
+
21
+ def disable_session
22
+ @store_type = nil
23
+ end
24
+
25
+ def session_enabled?
26
+ !@store_type.nil?
27
+ end
28
+
29
+ def session_stores
30
+ @session_stores ||= {}
31
+ end
32
+ end
33
+
34
+ def self.included(o)
35
+ o.extend(ClassMethods)
36
+ o.add_session_type :cookie, 'Rack::Session::Cookie'
37
+ o.add_session_type :pool, 'Rack::Session::Pool'
38
+ o.add_session_type :memcache, 'Rack::Session::Memcache'
39
+ o.on_init do
40
+ session_constant = Renee::Util.lookup_constant(store_type[0])
41
+ use session_constant, *store_type[1], &store_type[2]
42
+ define_method(:session) { env[Rack::Session::Abstract::ENV_SESSION_KEY] }
43
+ end
44
+ end
45
+
46
+ def session
47
+ raise "Session not enabled"
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ describe Renee::Session do
4
+ before do
5
+ @app = Class.new(Renee::Core) do
6
+ include Renee::Session
7
+ session :cookie
8
+ end
9
+ end
10
+
11
+ it "should create a session" do
12
+ @app.app do
13
+ session[:test] = 'hello'
14
+ path('test').get.halt "why #{session[:test]}"
15
+ end
16
+ get '/test'
17
+ assert_equal "why hello", response.body
18
+ end
19
+
20
+ it "should persist values across multiple calls" do
21
+ @app.app do
22
+ out = session[:test] || "first"
23
+ session[:test] = 'hello'
24
+ path('test').get.halt out
25
+ end
26
+ get '/test'
27
+ assert_equal "first", response.body
28
+ get '/test'
29
+ assert_equal "hello", response.body
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ $: << File.expand_path('../../../renee/core/lib', __FILE__)
2
+ $: << File.expand_path('../../lib', __FILE__)
3
+ require 'renee/core'
4
+ require 'renee/session'
5
+
6
+ Renee::Core.send(:include, Renee::Session)
7
+
8
+ # Load shared test helpers
9
+ require File.expand_path('../../test_helper', __FILE__)
@@ -0,0 +1,70 @@
1
+ require 'rubygems'
2
+ gem 'minitest'
3
+ require 'minitest/autorun'
4
+ gem 'rack-test'
5
+ require 'rack/test'
6
+
7
+ class ColoredIO
8
+ ESC = "\e["
9
+ NND = "#{ESC}0m"
10
+
11
+ def initialize(io)
12
+ @io = io
13
+ end
14
+
15
+ def print(o)
16
+ case o
17
+ when "."
18
+ @io.send(:print, "#{ESC}32m#{o}#{NND}")
19
+ when "E"
20
+ @io.send(:print, "#{ESC}33m#{o}#{NND}")
21
+ when "F"
22
+ @io.send(:print, "#{ESC}31m#{o}#{NND}")
23
+ else
24
+ @io.send(:print, o)
25
+ end
26
+ end
27
+
28
+ def puts(*o)
29
+ super
30
+ end
31
+ end
32
+
33
+ MiniTest::Unit.output = ColoredIO.new(MiniTest::Unit.output)
34
+
35
+ ## TEST HELPERS
36
+ class MiniTest::Spec
37
+ include Rack::Test::Methods
38
+
39
+ # Sets up a Sinatra::Base subclass defined with the block
40
+ # given. Used in setup or individual spec methods to establish
41
+ # the application.
42
+ def mock_app(&block)
43
+ path = default_views_path
44
+ @app = Renee.core(&block).setup {
45
+ views_path(path) if respond_to?(:views_path)
46
+ }
47
+ end
48
+
49
+ def default_views_path
50
+ File.dirname(__FILE__) + "/views"
51
+ end
52
+
53
+ def app
54
+ Rack::Lint.new(@app)
55
+ end
56
+
57
+ alias :response :last_response
58
+
59
+ # create_view :index, "test", :haml
60
+ def create_view(name, content, engine=:erb)
61
+ FileUtils.mkdir_p(default_views_path)
62
+ file = File.join(default_views_path, name.to_s + ".#{engine}")
63
+ File.open(file, 'w') { |io| io.write content }
64
+ end
65
+
66
+ # Removes the view folder after the test
67
+ def remove_views
68
+ FileUtils.rm_rf(File.dirname(__FILE__) + "/views")
69
+ end
70
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: renee-session
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0.pre1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Josh Hull
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-23 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: &70177309384880 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70177309384880
25
+ - !ruby/object:Gem::Dependency
26
+ name: renee-core
27
+ requirement: &70177309384320 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - =
31
+ - !ruby/object:Gem::Version
32
+ version: 0.4.0.pre1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70177309384320
36
+ - !ruby/object:Gem::Dependency
37
+ name: minitest
38
+ requirement: &70177309383760 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 2.6.1
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70177309383760
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &70177309379120 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70177309379120
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &70177309378660 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70177309378660
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: &70177309378160 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 0.5.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70177309378160
80
+ - !ruby/object:Gem::Dependency
81
+ name: haml
82
+ requirement: &70177309377660 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: 2.2.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70177309377660
91
+ description: The super-friendly web framework session component.
92
+ email:
93
+ - joshbuddy@gmail.com
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files: []
97
+ files:
98
+ - lib/renee/session.rb
99
+ - test/renee-session/session_test.rb
100
+ - test/renee-session/test_helper.rb
101
+ - test/test_helper.rb
102
+ homepage: http://reneerb.com
103
+ licenses: []
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ segments:
115
+ - 0
116
+ hash: -2598345540863933147
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>'
121
+ - !ruby/object:Gem::Version
122
+ version: 1.3.1
123
+ requirements: []
124
+ rubyforge_project: renee-session
125
+ rubygems_version: 1.8.15
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: The super-friendly web framework session component
129
+ test_files:
130
+ - test/renee-session/session_test.rb
131
+ - test/renee-session/test_helper.rb
132
+ - test/test_helper.rb
133
+ has_rdoc: