merb 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/README +66 -31
  2. data/Rakefile +3 -1
  3. data/bin/merb +47 -13
  4. data/examples/app_skeleton/Rakefile +4 -3
  5. data/examples/app_skeleton/dist/app/helpers/global_helper.rb +6 -0
  6. data/examples/app_skeleton/dist/conf/merb.yml +11 -0
  7. data/examples/app_skeleton/dist/conf/mup.conf +5 -0
  8. data/examples/app_skeleton/dist/conf/router.rb +1 -3
  9. data/examples/app_skeleton/scripts/merb_stop +10 -2
  10. data/examples/sample_app/Rakefile +3 -3
  11. data/examples/sample_app/dist/app/controllers/files.rb +3 -3
  12. data/examples/sample_app/dist/app/controllers/posts.rb +25 -23
  13. data/examples/sample_app/dist/app/controllers/test.rb +7 -3
  14. data/examples/sample_app/dist/app/helpers/global_helper.rb +7 -0
  15. data/examples/sample_app/dist/app/helpers/posts_helper.rb +4 -0
  16. data/examples/sample_app/dist/app/views/layout/application.herb +5 -4
  17. data/examples/sample_app/dist/app/views/layout/foo.herb +1 -1
  18. data/examples/sample_app/dist/app/views/posts/new.herb +9 -2
  19. data/examples/sample_app/dist/app/views/shared/_test.herb +1 -0
  20. data/examples/sample_app/dist/conf/merb.yml +7 -7
  21. data/examples/sample_app/dist/conf/merb_init.rb +8 -1
  22. data/examples/sample_app/dist/conf/mup.conf +5 -11
  23. data/examples/sample_app/dist/conf/router.rb +1 -1
  24. data/examples/sample_app/dist/public/test.html +5 -0
  25. data/examples/sample_app/dist/schema/migrations/002_add_sessions_table.rb +1 -1
  26. data/examples/sample_app/dist/schema/schema.rb +1 -1
  27. data/examples/sample_app/log/merb.4000.pid +1 -0
  28. data/lib/merb.rb +35 -17
  29. data/lib/merb/core_ext.rb +2 -0
  30. data/lib/merb/{merb_class_extensions.rb → core_ext/merb_class.rb} +42 -0
  31. data/lib/merb/core_ext/merb_enumerable.rb +7 -0
  32. data/lib/merb/{merb_utils.rb → core_ext/merb_hash.rb} +1 -78
  33. data/lib/merb/core_ext/merb_kernel.rb +16 -0
  34. data/lib/merb/core_ext/merb_module.rb +10 -0
  35. data/lib/merb/core_ext/merb_numeric.rb +20 -0
  36. data/lib/merb/core_ext/merb_object.rb +6 -0
  37. data/lib/merb/core_ext/merb_string.rb +40 -0
  38. data/lib/merb/core_ext/merb_symbol.rb +12 -0
  39. data/lib/merb/merb_constants.rb +18 -0
  40. data/lib/merb/merb_controller.rb +150 -76
  41. data/lib/merb/{session/merb_drb_server.rb → merb_drb_server.rb} +13 -46
  42. data/lib/merb/merb_exceptions.rb +4 -0
  43. data/lib/merb/merb_handler.rb +29 -17
  44. data/lib/merb/merb_request.rb +95 -0
  45. data/lib/merb/merb_upload_handler.rb +46 -0
  46. data/lib/merb/merb_upload_progress.rb +48 -0
  47. data/lib/merb/merb_view_context.rb +46 -0
  48. data/lib/merb/merb_yaml_store.rb +31 -0
  49. data/lib/merb/mixins/basic_authentication_mixin.rb +2 -2
  50. data/lib/merb/mixins/controller_mixin.rb +24 -75
  51. data/lib/merb/mixins/erubis_capture_mixin.rb +84 -0
  52. data/lib/merb/mixins/javascript_mixin.rb +103 -19
  53. data/lib/merb/mixins/merb_status_codes.rb +59 -0
  54. data/lib/merb/mixins/render_mixin.rb +114 -40
  55. data/lib/merb/mixins/responder_mixin.rb +2 -1
  56. data/lib/merb/session/merb_ar_session.rb +120 -0
  57. data/lib/merb/session/merb_drb_session.rb +0 -6
  58. data/lib/merb/vendor/paginator/paginator.rb +102 -99
  59. metadata +44 -8
  60. data/examples/sample_app/script/startdrb +0 -8
  61. data/lib/merb/session/merb_session.rb +0 -64
  62. data/lib/mutex_hotfix.rb +0 -34
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'merb/session/merb_drb_server'
5
- DRb.start_service("druby://localhost:2222", Merb::DRbSession.setup)
6
- puts "DRb URI: #{DRb.uri}"
7
- puts "Pid: #{Process.pid}"
8
- DRb.thread.join
@@ -1,64 +0,0 @@
1
- require 'active_record'
2
- module Merb
3
- module SessionMixin
4
-
5
- def setup_session
6
- MERB_LOGGER.info("Setting up session")
7
- @session = Merb::Session.persist(cookies)
8
- @fingerprint_before = Marshal.dump(@session).hash
9
- end
10
-
11
- def finalize_session
12
- MERB_LOGGER.info("Finalize session")
13
- unless Marshal.dump(@session).hash == @fingerprint_before
14
- @session.save
15
- end
16
- @headers['Set-Cookie'] = @cookies.map { |k,v| "#{k}=#{escape(v)}; path=/" if v != @k[k] } - [nil]
17
- end
18
-
19
- # accessor for @session. Please use session and
20
- # never @session directly.
21
- def session
22
- @session
23
- end
24
-
25
- end
26
-
27
-
28
- class Session < ::ActiveRecord::Base
29
- serialize :data
30
-
31
- def []=(k, v) # :nodoc:
32
- self.data[k] = v
33
- end
34
- def [](k) # :nodoc:
35
- self.data[k] rescue nil
36
- end
37
-
38
- RAND_CHARS = [*'A'..'Z'] + [*'0'..'9'] + [*'a'..'z']
39
-
40
- # Generates a new session ID and creates a row for the new session in the database.
41
- def self.generate cookies
42
- rand_max = RAND_CHARS.size
43
- sid = (0...32).inject("") { |ret,_| ret << RAND_CHARS[rand(rand_max)] }
44
- sess = Merb::Session.create(:sess_id => sid, :data => MerbHash[])
45
- cookies[:sess_id] = sess.sess_id
46
- sess
47
- end
48
-
49
- # Gets the existing session based on the <tt>camping_sid</tt> available in cookies.
50
- # If none is found, generates a new session.
51
- def self.persist cookies
52
- if cookies[:sess_id]
53
- session = Merb::Session.find_by_sess_id cookies[:sess_id]
54
- end
55
- unless session
56
- session = Merb::Session.generate cookies
57
- end
58
- session
59
- end
60
- end
61
-
62
- end
63
-
64
-
@@ -1,34 +0,0 @@
1
- require 'thread'
2
-
3
- # monkey patch Mutex so it does not leak memory.
4
- class Mutex
5
-
6
- def lock
7
- while (Thread.critical = true; @locked)
8
- @waiting.unshift Thread.current
9
- Thread.stop
10
- end
11
- @locked = true
12
- Thread.critical = false
13
- self
14
- end
15
-
16
- def unlock
17
- return unless @locked
18
- Thread.critical = true
19
- @locked = false
20
- begin
21
- t = @waiting.pop
22
- t.wakeup if t
23
- rescue ThreadError
24
- retry
25
- end
26
- Thread.critical = false
27
- begin
28
- t.run if t
29
- rescue ThreadError
30
- end
31
- self
32
- end
33
-
34
- end