merb 0.3.4 → 0.3.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 (62) hide show
  1. data/README +206 -197
  2. data/Rakefile +12 -21
  3. data/bin/merb +1 -1
  4. data/examples/skeleton/Rakefile +6 -20
  5. data/examples/skeleton/dist/app/mailers/layout/application.erb +1 -0
  6. data/examples/skeleton/dist/conf/database.yml +23 -0
  7. data/examples/skeleton/dist/conf/environments/development.rb +1 -0
  8. data/examples/skeleton/dist/conf/environments/production.rb +1 -0
  9. data/examples/skeleton/dist/conf/environments/test.rb +1 -0
  10. data/examples/skeleton/dist/conf/merb.yml +32 -28
  11. data/examples/skeleton/dist/conf/merb_init.rb +16 -13
  12. data/examples/skeleton/dist/conf/router.rb +9 -9
  13. data/examples/skeleton/dist/schema/migrations/001_add_sessions_table.rb +2 -2
  14. data/lib/merb.rb +23 -18
  15. data/lib/merb/caching/fragment_cache.rb +3 -7
  16. data/lib/merb/caching/store/memcache.rb +20 -0
  17. data/lib/merb/core_ext/merb_array.rb +0 -0
  18. data/lib/merb/core_ext/merb_class.rb +44 -4
  19. data/lib/merb/core_ext/merb_enumerable.rb +43 -1
  20. data/lib/merb/core_ext/merb_hash.rb +200 -122
  21. data/lib/merb/core_ext/merb_kernel.rb +2 -0
  22. data/lib/merb/core_ext/merb_module.rb +41 -0
  23. data/lib/merb/core_ext/merb_numeric.rb +57 -5
  24. data/lib/merb/core_ext/merb_object.rb +172 -6
  25. data/lib/merb/generators/merb_app/merb_app.rb +15 -9
  26. data/lib/merb/merb_abstract_controller.rb +193 -0
  27. data/lib/merb/merb_constants.rb +26 -1
  28. data/lib/merb/merb_controller.rb +143 -234
  29. data/lib/merb/merb_dispatcher.rb +28 -20
  30. data/lib/merb/merb_drb_server.rb +2 -3
  31. data/lib/merb/merb_exceptions.rb +194 -49
  32. data/lib/merb/merb_handler.rb +34 -26
  33. data/lib/merb/merb_mail_controller.rb +200 -0
  34. data/lib/merb/merb_mailer.rb +33 -13
  35. data/lib/merb/merb_part_controller.rb +42 -0
  36. data/lib/merb/merb_plugins.rb +293 -0
  37. data/lib/merb/merb_request.rb +6 -4
  38. data/lib/merb/merb_router.rb +99 -65
  39. data/lib/merb/merb_server.rb +65 -21
  40. data/lib/merb/merb_upload_handler.rb +2 -1
  41. data/lib/merb/merb_view_context.rb +36 -15
  42. data/lib/merb/mixins/basic_authentication_mixin.rb +5 -5
  43. data/lib/merb/mixins/controller_mixin.rb +67 -28
  44. data/lib/merb/mixins/erubis_capture_mixin.rb +1 -8
  45. data/lib/merb/mixins/form_control_mixin.rb +280 -42
  46. data/lib/merb/mixins/render_mixin.rb +127 -45
  47. data/lib/merb/mixins/responder_mixin.rb +5 -7
  48. data/lib/merb/mixins/view_context_mixin.rb +260 -94
  49. data/lib/merb/session.rb +23 -0
  50. data/lib/merb/session/merb_ar_session.rb +28 -16
  51. data/lib/merb/session/merb_mem_cache_session.rb +108 -0
  52. data/lib/merb/session/merb_memory_session.rb +65 -20
  53. data/lib/merb/template/erubis.rb +22 -13
  54. data/lib/merb/template/haml.rb +5 -16
  55. data/lib/merb/template/markaby.rb +5 -3
  56. data/lib/merb/template/xml_builder.rb +17 -5
  57. data/lib/merb/test/merb_fake_request.rb +63 -0
  58. data/lib/merb/test/merb_multipart.rb +58 -0
  59. data/lib/tasks/db.rake +2 -0
  60. data/lib/tasks/merb.rake +20 -8
  61. metadata +24 -25
  62. data/examples/skeleton.tar +0 -0
@@ -1,17 +1,29 @@
1
+ begin
2
+ require 'builder'
3
+ rescue LoadError
4
+ puts "you must install the builder gem to use .rxml templates"
5
+ end
6
+
1
7
  module Merb
2
8
 
3
- module Template
4
-
9
+ module Template # :nodoc:
10
+ # A module to allow you to use Builder["http://builder.rubyforge.org/"] templates in your Merb applications.
11
+ # Your Builder templates must end in .rxml, .xerb, or .builder for Merb to use them.
5
12
  module XMLBuilder
6
13
 
7
- ::Merb::Controller.register_engine self, %w[ rxml xerb builder]
14
+ ::Merb::AbstractController.register_engine self, %w[ rxml xerb builder]
8
15
 
9
16
  class << self
10
17
 
11
- def exempt_from_layout?
18
+ def exempt_from_layout? # :nodoc:
12
19
  true
13
20
  end
14
-
21
+
22
+ # Main method to run the Builder template.
23
+ #
24
+ # In Builder's case, it sets the content type and encoding,
25
+ # executes the Builder template by feeding it to <tt>Builder::XmlMarkup.new</tt>,
26
+ # then calls <tt>target!</tt> on the<tt>Builder::XmlMarkup</tt> instance to get its XML output.
15
27
  def transform(options = {})
16
28
  opts, file, view_context = options.values_at(:opts, :file, :view_context)
17
29
  xml_body = IO.read(file)
@@ -0,0 +1,63 @@
1
+ module Merb
2
+ module Test
3
+ # FakeRequest sets up a default enviroment which can be overridden either
4
+ # by passing and env into initialize or using request['HTTP_VAR'] = 'foo'
5
+ class FakeRequest < Request
6
+ attr_reader :req
7
+ alias :body :req
8
+ alias :params :env
9
+ alias :to_hash :env
10
+
11
+ def initialize(env = {}, method = 'GET', req = StringIO.new)
12
+ env[:http_cookie] = env.delete(:cookies) if env[:cookies]
13
+ env.environmentize_keys!
14
+ super(DEFAULT_ENV.dup.merge(env), method, req)
15
+ self.post_body = ''
16
+ end
17
+
18
+ def self.with(path, options = {})
19
+ options.environmentize_keys!
20
+ new({'REQUEST_URI' => path,
21
+ 'PATH_INFO' => path.sub(/\?.*$/,'')}.merge(options))
22
+ end
23
+
24
+ def post_body=(post)
25
+ @req = StringIO.new(post)
26
+ end
27
+
28
+ def [](key)
29
+ @env[key]
30
+ end
31
+
32
+ def []=(key, value)
33
+ @env[key] = value
34
+ end
35
+
36
+
37
+ private
38
+ DEFAULT_ENV = {
39
+ 'SERVER_NAME' => 'localhost',
40
+ 'PATH_INFO' => '/',
41
+ 'HTTP_ACCEPT_ENCODING' => 'gzip,deflate',
42
+ 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.1) Gecko/20060214 Camino/1.0',
43
+ 'SCRIPT_NAME' => '/',
44
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
45
+ 'HTTP_CACHE_CONTROL' => 'max-age=0',
46
+ 'HTTP_ACCEPT_LANGUAGE' => 'en,ja;q=0.9,fr;q=0.9,de;q=0.8,es;q=0.7,it;q=0.7,nl;q=0.6,sv;q=0.5,nb;q=0.5,da;q=0.4,fi;q=0.3,pt;q=0.3,zh-Hans;q=0.2,zh-Hant;q=0.1,ko;q=0.1',
47
+ 'HTTP_HOST' => 'localhost',
48
+ 'REMOTE_ADDR' => '127.0.0.1',
49
+ 'SERVER_SOFTWARE' => 'Mongrel 1.1',
50
+ 'HTTP_KEEP_ALIVE' => '300',
51
+ 'HTTP_REFERER' => 'http://localhost/',
52
+ 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
53
+ 'HTTP_VERSION' => 'HTTP/1.1',
54
+ 'REQUEST_URI' => '/',
55
+ 'SERVER_PORT' => '80',
56
+ 'GATEWAY_INTERFACE' => 'CGI/1.2',
57
+ 'HTTP_ACCEPT' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
58
+ 'HTTP_CONNECTION' => 'keep-alive',
59
+ 'REQUEST_METHOD' => 'GET'
60
+ }
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,58 @@
1
+ module Merb
2
+ module Test
3
+ module Multipart
4
+ require 'rubygems'
5
+ require 'mime/types'
6
+
7
+ class Param
8
+ attr_accessor :key, :value
9
+ def initialize(key, value)
10
+ @key = key
11
+ @value = value
12
+ end
13
+
14
+ def to_multipart
15
+ return %(Content-Disposition: form-data; name="#{key}"\r\n\r\n#{value}\r\n)
16
+ end
17
+ end
18
+
19
+ class FileParam
20
+ attr_accessor :key, :filename, :content
21
+ def initialize(key, filename, content)
22
+ @key = key
23
+ @filename = filename
24
+ @content = content
25
+ end
26
+
27
+ def to_multipart
28
+ return %(Content-Disposition: form-data; name="#{key}"; filename="#{filename}"\r\n) + "Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" + content + "\r\n"
29
+ end
30
+ end
31
+
32
+ class Post
33
+ BOUNDARY = '----------0xKhTmLbOuNdArY'
34
+ CONTENT_TYPE = "multipart/form-data, boundary=" + BOUNDARY
35
+
36
+ def initialize(params = {})
37
+ @multipart_params = []
38
+ push_params(params)
39
+ end
40
+
41
+ def push_params(params)
42
+ params.each do |key, value|
43
+ if value.respond_to?(:read)
44
+ @multipart_params << FileParam.new(key, value.path, value.read)
45
+ else
46
+ @multipart_params << Param.new(key, value)
47
+ end
48
+ end
49
+ end
50
+
51
+ def to_multipart
52
+ query = @multipart_params.collect { |param| "--" + BOUNDARY + "\r\n" + param.to_multipart }.join("") + "--" + BOUNDARY + "--"
53
+ return query, CONTENT_TYPE
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -4,6 +4,8 @@ desc "Setup the Merb Environment by requiring merb and loading your merb_init.rb
4
4
  task :merb_env do
5
5
  require 'rubygems'
6
6
  require 'merb'
7
+ Merb::Server.config[:environment] = ENV['MERB_ENV'] if ENV['MERB_ENV']
8
+ MERB_ENV = Merb::Server.config[:environment].nil? ? 'development' : Merb::Server.config[:environment]
7
9
  load MERB_ROOT+'/dist/conf/merb_init.rb'
8
10
  end
9
11
 
@@ -1,13 +1,19 @@
1
+ def install_merb_script
2
+ script_filepath = MERB_ROOT / 'script/merb'
3
+ FileUtils.rm script_filepath if File.exist? script_filepath
4
+ tmpl = "#!/usr/bin/env ruby\nrequire File.expand_path(File.dirname(__FILE__)+'/../dist/framework/merb/merb_server')\nMerb::Server.run\n"
5
+ File.open(script_filepath, 'wb') {|f|
6
+ f.write tmpl
7
+ f.chmod(0744)
8
+ }
9
+ end
10
+
1
11
  namespace :merb do
2
12
  desc "freeze the merb framework into dist/merb for portability"
3
13
  task :freeze do
4
14
  FileUtils.rm_rf MERB_ROOT / 'dist/framework'
5
15
  FileUtils.cp_r MERB_FRAMEWORK_ROOT, (MERB_ROOT / 'dist/framework')
6
- tmpl = "#!/usr/local/bin/ruby\nrequire File.expand_path(File.dirname(__FILE__)+'/../dist/framework/merb/merb_server')\nMerb::Server.run\n"
7
- File.open(MERB_ROOT / 'script/merb', 'wb') {|f|
8
- f.write tmpl
9
- f.chmod(0744)
10
- }
16
+ install_merb_script
11
17
 
12
18
  puts " Freezing Merb Framework into dist/framework"
13
19
  puts " Use script/merb to start instead of plain merb"
@@ -24,9 +30,15 @@ namespace :merb do
24
30
 
25
31
  desc "freeze the merb framework from svn"
26
32
  task :freeze_from_svn do
27
- puts "Freezing Merb Framework from svn"
28
- FileUtils.rm_rf MERB_ROOT / 'dist/framework'
29
- system "svn co http://svn.devjavu.com/merb/trunk/lib #{MERB_ROOT / 'dist/framework'}"
33
+ install_path = MERB_ROOT / 'dist/framework'
34
+ puts " Removing old framework" if File.exist? install_path
35
+ FileUtils.rm_rf install_path
36
+
37
+ puts " Freezing Merb Framework from svn"
38
+ system "svn co http://svn.devjavu.com/merb/trunk/lib #{install_path}"
39
+ install_merb_script
40
+
41
+ puts " Use script/merb to start instead of plain merb"
30
42
  end
31
43
 
32
44
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: merb
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.4
7
- date: 2007-05-31 00:00:00 -07:00
6
+ version: 0.3.7
7
+ date: 2007-08-04 00:00:00 -07:00
8
8
  summary: Merb == Mongrel + Erb. Pocket rocket web framework.
9
9
  require_paths:
10
10
  - lib
@@ -40,9 +40,11 @@ files:
40
40
  - lib/merb/caching/fragment_cache.rb
41
41
  - lib/merb/caching/store
42
42
  - lib/merb/caching/store/file_cache.rb
43
+ - lib/merb/caching/store/memcache.rb
43
44
  - lib/merb/caching/store/memory_cache.rb
44
45
  - lib/merb/caching.rb
45
46
  - lib/merb/core_ext
47
+ - lib/merb/core_ext/merb_array.rb
46
48
  - lib/merb/core_ext/merb_class.rb
47
49
  - lib/merb/core_ext/merb_enumerable.rb
48
50
  - lib/merb/core_ext/merb_hash.rb
@@ -58,13 +60,17 @@ files:
58
60
  - lib/merb/generators
59
61
  - lib/merb/generators/merb_app
60
62
  - lib/merb/generators/merb_app/merb_app.rb
63
+ - lib/merb/merb_abstract_controller.rb
61
64
  - lib/merb/merb_constants.rb
62
65
  - lib/merb/merb_controller.rb
63
66
  - lib/merb/merb_dispatcher.rb
64
67
  - lib/merb/merb_drb_server.rb
65
68
  - lib/merb/merb_exceptions.rb
66
69
  - lib/merb/merb_handler.rb
70
+ - lib/merb/merb_mail_controller.rb
67
71
  - lib/merb/merb_mailer.rb
72
+ - lib/merb/merb_part_controller.rb
73
+ - lib/merb/merb_plugins.rb
68
74
  - lib/merb/merb_request.rb
69
75
  - lib/merb/merb_router.rb
70
76
  - lib/merb/merb_server.rb
@@ -82,13 +88,18 @@ files:
82
88
  - lib/merb/mixins/view_context_mixin.rb
83
89
  - lib/merb/session
84
90
  - lib/merb/session/merb_ar_session.rb
91
+ - lib/merb/session/merb_mem_cache_session.rb
85
92
  - lib/merb/session/merb_memory_session.rb
93
+ - lib/merb/session.rb
86
94
  - lib/merb/template
87
95
  - lib/merb/template/erubis.rb
88
96
  - lib/merb/template/haml.rb
89
97
  - lib/merb/template/markaby.rb
90
98
  - lib/merb/template/xml_builder.rb
91
99
  - lib/merb/template.rb
100
+ - lib/merb/test
101
+ - lib/merb/test/merb_fake_request.rb
102
+ - lib/merb/test/merb_multipart.rb
92
103
  - lib/merb/vendor
93
104
  - lib/merb/vendor/paginator
94
105
  - lib/merb/vendor/paginator/paginator.rb
@@ -106,16 +117,25 @@ files:
106
117
  - examples/skeleton/dist/app/controllers/application.rb
107
118
  - examples/skeleton/dist/app/helpers
108
119
  - examples/skeleton/dist/app/helpers/global_helper.rb
120
+ - examples/skeleton/dist/app/mailers
121
+ - examples/skeleton/dist/app/mailers/helpers
122
+ - examples/skeleton/dist/app/mailers/layout
123
+ - examples/skeleton/dist/app/mailers/layout/application.erb
124
+ - examples/skeleton/dist/app/mailers/views
109
125
  - examples/skeleton/dist/app/models
110
126
  - examples/skeleton/dist/app/views
111
127
  - examples/skeleton/dist/app/views/layout
112
128
  - examples/skeleton/dist/app/views/layout/application.herb
113
129
  - examples/skeleton/dist/conf
130
+ - examples/skeleton/dist/conf/database.yml
131
+ - examples/skeleton/dist/conf/environments
132
+ - examples/skeleton/dist/conf/environments/development.rb
133
+ - examples/skeleton/dist/conf/environments/production.rb
134
+ - examples/skeleton/dist/conf/environments/test.rb
114
135
  - examples/skeleton/dist/conf/merb.yml
115
136
  - examples/skeleton/dist/conf/merb_init.rb
116
137
  - examples/skeleton/dist/conf/router.rb
117
138
  - examples/skeleton/dist/conf/upload.conf
118
- - examples/skeleton/dist/lib
119
139
  - examples/skeleton/dist/plugins
120
140
  - examples/skeleton/dist/public
121
141
  - examples/skeleton/dist/public/images
@@ -124,15 +144,12 @@ files:
124
144
  - examples/skeleton/dist/schema
125
145
  - examples/skeleton/dist/schema/migrations
126
146
  - examples/skeleton/dist/schema/migrations/001_add_sessions_table.rb
127
- - examples/skeleton/log
147
+ - examples/skeleton/plugins
128
148
  - examples/skeleton/Rakefile
129
149
  - examples/skeleton/script
130
150
  - examples/skeleton/script/new_migration
131
151
  - examples/skeleton/script/stop_merb
132
152
  - examples/skeleton/test
133
- - examples/skeleton/test/specs
134
- - examples/skeleton/test/unit
135
- - examples/skeleton.tar
136
153
  test_files: []
137
154
 
138
155
  rdoc_options: []
@@ -184,21 +201,3 @@ dependencies:
184
201
  - !ruby/object:Gem::Version
185
202
  version: 0.0.0
186
203
  version:
187
- - !ruby/object:Gem::Dependency
188
- name: xml-simple
189
- version_requirement:
190
- version_requirements: !ruby/object:Gem::Version::Requirement
191
- requirements:
192
- - - ">"
193
- - !ruby/object:Gem::Version
194
- version: 0.0.0
195
- version:
196
- - !ruby/object:Gem::Dependency
197
- name: archive-tar-minitar
198
- version_requirement:
199
- version_requirements: !ruby/object:Gem::Version::Requirement
200
- requirements:
201
- - - ">"
202
- - !ruby/object:Gem::Version
203
- version: 0.0.0
204
- version:
Binary file