merb-core 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/CHANGELOG +67 -0
  2. data/CONTRIBUTORS +1 -0
  3. data/PUBLIC_CHANGELOG +34 -0
  4. data/Rakefile +7 -4
  5. data/bin/merb +1 -31
  6. data/lib/merb-core.rb +17 -6
  7. data/lib/merb-core/config.rb +0 -7
  8. data/lib/merb-core/controller/abstract_controller.rb +6 -3
  9. data/lib/merb-core/dispatch/cookies.rb +11 -10
  10. data/lib/merb-core/dispatch/dispatcher.rb +11 -5
  11. data/lib/merb-core/dispatch/request.rb +7 -2
  12. data/lib/merb-core/dispatch/session.rb +33 -17
  13. data/lib/merb-core/dispatch/session/container.rb +19 -9
  14. data/lib/merb-core/dispatch/session/cookie.rb +27 -12
  15. data/lib/merb-core/dispatch/session/memcached.rb +47 -27
  16. data/lib/merb-core/dispatch/session/memory.rb +10 -6
  17. data/lib/merb-core/dispatch/session/store_container.rb +25 -20
  18. data/lib/merb-core/test/helpers/request_helper.rb +6 -3
  19. data/lib/merb-core/test/helpers/route_helper.rb +1 -1
  20. data/lib/merb-core/test/matchers/view_matchers.rb +5 -1
  21. data/lib/merb-core/version.rb +1 -1
  22. data/spec/private/dispatch/fixture/log/merb_test.log +144 -0
  23. data/spec/private/router/fixture/log/merb_test.log +16 -0
  24. data/spec/public/controller/controllers/cookies.rb +14 -3
  25. data/spec/public/controller/cookies_spec.rb +53 -10
  26. data/spec/public/controller/url_spec.rb +6 -0
  27. data/spec/public/directory_structure/directory/log/merb_test.log +112 -0
  28. data/spec/public/reloading/directory/log/merb_test.log +16 -0
  29. data/spec/public/request/request_spec.rb +19 -10
  30. data/spec/public/router/fixture/log/merb_test.log +224 -0
  31. data/spec/public/session/controllers/sessions.rb +4 -0
  32. data/spec/public/session/memcached_session_spec.rb +2 -2
  33. data/spec/public/session/multiple_sessions_spec.rb +2 -2
  34. data/spec/public/session/session_spec.rb +15 -0
  35. data/spec/public/test/request_helper_spec.rb +21 -0
  36. data/spec/public/test/route_helper_spec.rb +7 -0
  37. metadata +6 -17
  38. data/lib/merb-core/script.rb +0 -112
@@ -19,6 +19,10 @@ module Merb::Test::Fixtures
19
19
 
20
20
  def retrieve
21
21
  end
22
+
23
+ def destroy
24
+ request.session.clear!
25
+ end
22
26
 
23
27
  end
24
28
 
@@ -4,8 +4,8 @@ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
4
4
  require File.join(File.dirname(__FILE__), "session_spec")
5
5
  require File.join(File.dirname(__FILE__), "controllers", "sessions")
6
6
 
7
- require 'memcached'
8
- Merb::MemcacheSession.store = Memcached.new('127.0.0.1:11211', { :namespace => 'my_app' })
7
+ require 'memcache'
8
+ Merb::MemcacheSession.store = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
9
9
 
10
10
  describe Merb::MemcacheSession do
11
11
 
@@ -4,8 +4,8 @@ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
4
4
  require File.join(File.dirname(__FILE__), "session_spec")
5
5
  require File.join(File.dirname(__FILE__), "controllers", "sessions")
6
6
 
7
- require 'memcached'
8
- Merb::MemcacheSession.store = Memcached.new('127.0.0.1:11211', { :namespace => 'my_app' })
7
+ require 'memcache'
8
+ Merb::MemcacheSession.store = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
9
9
 
10
10
  describe "An app with multiple session stores configured" do
11
11
 
@@ -70,6 +70,21 @@ describe "All session-stores mixed into Merb::Controller", :shared => true do
70
70
  end
71
71
  end
72
72
 
73
+ it "should allow the session to be destroyed" do
74
+ session_store_type = @session_class.session_store_type.to_s
75
+ with_cookies(@controller_klass) do
76
+ controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
77
+ controller = dispatch_to(@controller_klass, :retrieve)
78
+ controller.request.session[:foo].should == session_store_type
79
+
80
+ controller = dispatch_to(@controller_klass, :destroy)
81
+ controller.request.session.should be_empty
82
+ cookie_header = controller.headers["Set-Cookie"].first
83
+ cookie_header.should match(/_session_id=;/)
84
+ cookie_header.should match(/01-Jan-1970/)
85
+ end
86
+ end
87
+
73
88
  it "should not set the Set-Cookie header when the session(_id) didn't change" do
74
89
  session_store_type = @session_class.session_store_type.to_s
75
90
  with_cookies(@controller_klass) do
@@ -65,6 +65,11 @@ describe Merb::Test::RequestHelper do
65
65
 
66
66
  controller.params[:action].should == "show"
67
67
  end
68
+
69
+ it "should support setting request.raw_post" do
70
+ controller = dispatch_to(@controller_klass, :show, {}, {:post_body => 'some XML'})
71
+ controller.request.raw_post.should == 'some XML'
72
+ end
68
73
  end
69
74
 
70
75
  describe "#dispatch_with_basic_authentication_to" do
@@ -213,11 +218,27 @@ describe Merb::Test::RequestHelper do
213
218
  end
214
219
  end
215
220
 
221
+ it "should support setting request.raw_post" do
222
+ controller = request("/namespaced/spec_helper_controller", {}, {:post_body => 'some XML'})
223
+ controller.request.raw_post.should == 'some XML'
224
+ end
225
+
216
226
  it "should get namespaced index action" do
217
227
  Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
218
228
  controller = request("/namespaced/spec_helper_controller")
219
229
  controller.class.should == Namespaced::SpecHelperController
220
230
  end
231
+
232
+ it "should make the post body available in the request on deferred routing" do
233
+ Merb::Router.prepare do |r|
234
+ r.match('/xmlrpc').defer_to do |request, params|
235
+ request.raw_post.should == 'XMLRPC request body'
236
+ {:controller => 'spec_helper_controller', :action => :index}
237
+ end
238
+ end
239
+
240
+ request('/xmlrpc', {}, {:post_body => 'XMLRPC request body'})
241
+ end
221
242
  end
222
243
 
223
244
  end
@@ -8,6 +8,9 @@ end
8
8
  describe Merb::Test::RouteHelper do
9
9
  before(:each) do
10
10
  Merb::Router.prepare do |r|
11
+ r.match("/").defer_to do |request, params|
12
+ { :controller => 'test_controller', :action => request.raw_post } unless request.raw_post.blank?
13
+ end
11
14
  r.match("/", :method => :get).to(:controller => "test_controller", :action => "get").name(:getter)
12
15
  r.match("/", :method => :post).to(:controller => "test_controller", :action => "post")
13
16
  r.match("/:id").to(:controller => "test_controller", :action => "get").name(:with_id)
@@ -67,5 +70,9 @@ describe Merb::Test::RouteHelper do
67
70
  it "should contain any parameters in the result" do
68
71
  request_to("/123")[:id].should == "123"
69
72
  end
73
+
74
+ it "should play nice with raw_post in deferred routing" do
75
+ request_to("/", :post, {:post_body => 'deferred'})[:action].should == 'deferred'
76
+ end
70
77
  end
71
78
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-09 00:00:00 +03:00
12
+ date: 2008-09-14 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.5
23
+ version: 0.9.6
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: erubis
@@ -93,24 +93,14 @@ dependencies:
93
93
  version: "0"
94
94
  version:
95
95
  - !ruby/object:Gem::Dependency
96
- name: libxml-ruby
97
- type: :development
98
- version_requirement:
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: "0"
104
- version:
105
- - !ruby/object:Gem::Dependency
106
- name: memcache-client
107
- type: :development
96
+ name: thor
97
+ type: :runtime
108
98
  version_requirement:
109
99
  version_requirements: !ruby/object:Gem::Requirement
110
100
  requirements:
111
101
  - - ">="
112
102
  - !ruby/object:Gem::Version
113
- version: "0"
103
+ version: 0.9.6
114
104
  version:
115
105
  description: Merb. Pocket rocket web framework.
116
106
  email: ez@engineyard.com
@@ -540,7 +530,6 @@ files:
540
530
  - lib/merb-core/rack/middleware/tracer.rb
541
531
  - lib/merb-core/rack/middleware.rb
542
532
  - lib/merb-core/rack.rb
543
- - lib/merb-core/script.rb
544
533
  - lib/merb-core/server.rb
545
534
  - lib/merb-core/tasks
546
535
  - lib/merb-core/tasks/audit.rake
@@ -1,112 +0,0 @@
1
- module Merb
2
- module ScriptHelpers
3
-
4
- # Adapt rubygems - shortcut for setup_local_gems that figures out the
5
- # local gem path to use.
6
- def setup_local_gems!(rootdir = nil)
7
- if bundled? && local_gems = setup_local_gems(File.join(rootdir || merb_root, 'gems'))
8
- if local_gems.is_a?(Array)
9
- puts "Using local gems in addition to system gems..."
10
- if verbose?
11
- puts "Found #{local_gems.length} local gems:"
12
- local_gems.each { |name| puts "- #{name}" }
13
- end
14
- elsif local_gems
15
- puts "Using MiniGems to locate local/system gems..."
16
- end
17
- elsif use_minigems?
18
- puts "Using MiniGems to locate system gems..."
19
- else
20
- puts "Using system gems..."
21
- end
22
- end
23
-
24
- # Adapt rubygems - because the /usr/bin/merb script already setup merb-core loadpaths
25
- # from the system-wide rubygem paths. The code below will make sure local gems always
26
- # get precedence over system gems and resolves any conflicts that may arise.
27
- #
28
- # Only native Gem methods are used to handle the internal logic transparently.
29
- # These methods are proved either by minigems or standard rubygems.
30
- #
31
- # Note: currently the Kernel.load_dependency method will always load local gems.
32
- def setup_local_gems(gems_path)
33
- if File.directory?(gems_path)
34
- if use_minigems?
35
- # Reset all loaded system gems - replace with local gems
36
- Gem.clear_paths
37
- Gem.path.unshift(gems_path)
38
- return true
39
- else
40
- # Remember originally loaded system gems and create a lookup of gems to load paths
41
- system_gemspecs = Gem.cache.gems
42
- system_load_paths = extract_gem_load_paths(system_gemspecs)
43
-
44
- # Reset all loaded system gems - replace with local gems
45
- Gem.clear_paths
46
- Gem.path.unshift(gems_path)
47
- Gem.cache.load_gems_in(File.join(gems_path, "specifications"))
48
-
49
- # Collect any local gems we're going to use
50
- local_gems = Gem.cache.map { |name, spec| name }
51
-
52
- # Create a lookup of gems to load paths for all local gems
53
- local_load_paths = extract_gem_load_paths(Gem.cache.gems)
54
-
55
- # Filter out local gems from the originally loaded system gems to prevent conflicts
56
- active_system_gems = []
57
- system_gemspecs.each do |name, spec|
58
- active_system_gems << spec unless local_load_paths[spec.name]
59
- end
60
-
61
- # Re-add the system gems - conflicts with local gems have been avoided
62
- Gem.cache.add_specs(*active_system_gems)
63
-
64
- # Add local paths to LOAD_PATH - remove overlapping system gem paths
65
- local_load_paths.each do |name, paths|
66
- $LOAD_PATH.unshift(*paths)
67
- $LOAD_PATH.replace($LOAD_PATH - system_load_paths[name] || [])
68
- end
69
- return local_gems
70
- end
71
- end
72
- end
73
-
74
- # Figure out the merb root or default to current directory
75
- def merb_root
76
- root_key = %w[-m --merb-root].detect { |o| ARGV.index(o) }
77
- root = ARGV[ARGV.index(root_key) + 1] if root_key
78
- root.to_a.empty? ? Dir.getwd : root
79
- end
80
-
81
- # See if we're running merb locally - enabled by default
82
- # The ENV variables are considered for Rakefile usage.
83
- def bundled?
84
- enabled = ENV.key?("BUNDLE") || %w[-B --bundle].detect { |o| ARGV.index(o) }
85
- disabled = ENV.key?("NO_BUNDLE") || %w[--no-bundle].detect { |o| ARGV.index(o) }
86
- enabled || !disabled
87
- end
88
-
89
- # Add some extra feedback if verbose is enabled
90
- def verbose?
91
- %w[-V --verbose].detect { |o| ARGV.index(o) }
92
- end
93
-
94
- # Whether minigems has been loaded instead of the full rubygems
95
- def use_minigems?
96
- Gem.respond_to?(:minigems?) && Gem.minigems?
97
- end
98
-
99
- # Helper method to extract a Hash lookup of gem name to load paths
100
- def extract_gem_load_paths(source_index)
101
- source_index.inject({}) do |load_paths, (name, spec)|
102
- require_paths = spec.require_paths
103
- require_paths << spec.bindir unless spec.executables.empty?
104
- load_paths[spec.name] = require_paths.map do |path|
105
- File.join(spec.full_gem_path, path)
106
- end
107
- load_paths
108
- end
109
- end
110
-
111
- end
112
- end