merb-core 0.9.6 → 0.9.7

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.
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