waves-stable 0.7.7 → 2009.3.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/bin/waves +20 -74
  2. data/doc/HISTORY +1 -44
  3. data/doc/README +1 -0
  4. data/doc/VERSION +1 -0
  5. data/lib/caches/file.rb +48 -0
  6. data/lib/caches/memcached.rb +40 -0
  7. data/lib/caches/simple.rb +25 -0
  8. data/lib/caches/synchronized.rb +25 -0
  9. data/lib/commands/console.rb +35 -0
  10. data/lib/commands/generate.rb +52 -0
  11. data/lib/commands/help.rb +5 -0
  12. data/lib/commands/{waves-server.rb → server.rb} +16 -3
  13. data/lib/dispatchers/base.rb +22 -21
  14. data/lib/dispatchers/default.rb +10 -66
  15. data/lib/ext/float.rb +13 -0
  16. data/lib/{utilities → ext}/hash.rb +2 -2
  17. data/lib/{utilities → ext}/integer.rb +5 -2
  18. data/lib/ext/kernel.rb +20 -0
  19. data/lib/ext/module.rb +20 -0
  20. data/lib/{utilities → ext}/object.rb +3 -5
  21. data/lib/ext/string.rb +20 -0
  22. data/lib/ext/symbol.rb +11 -0
  23. data/lib/ext/tempfile.rb +5 -0
  24. data/lib/foundations/classic.rb +66 -0
  25. data/lib/foundations/compact.rb +50 -0
  26. data/lib/helpers/basic.rb +11 -0
  27. data/lib/helpers/doc_type.rb +34 -0
  28. data/lib/helpers/extended.rb +21 -0
  29. data/lib/helpers/form.rb +3 -1
  30. data/lib/helpers/formatting.rb +3 -3
  31. data/lib/helpers/layouts.rb +37 -0
  32. data/lib/helpers/model.rb +8 -4
  33. data/lib/helpers/view.rb +2 -4
  34. data/lib/layers/inflect/english.rb +48 -5
  35. data/lib/layers/mvc.rb +18 -18
  36. data/lib/layers/mvc/controllers.rb +41 -0
  37. data/lib/layers/mvc/extensions.rb +52 -0
  38. data/lib/layers/orm/migration.rb +1 -1
  39. data/lib/layers/orm/{active_record.rb → providers/active_record.rb} +9 -14
  40. data/lib/layers/orm/{active_record → providers/active_record}/migrations/empty.rb.erb +0 -0
  41. data/lib/layers/orm/{active_record → providers/active_record}/tasks/generate.rb +1 -1
  42. data/lib/layers/orm/{active_record → providers/active_record}/tasks/schema.rb +1 -1
  43. data/lib/layers/orm/{data_mapper.rb → providers/data_mapper.rb} +3 -4
  44. data/lib/layers/orm/providers/filebase.rb +25 -0
  45. data/lib/layers/orm/{sequel.rb → providers/sequel.rb} +11 -7
  46. data/lib/layers/orm/{sequel → providers/sequel}/migrations/empty.rb.erb +0 -0
  47. data/lib/layers/orm/{sequel → providers/sequel}/tasks/generate.rb +5 -3
  48. data/lib/layers/orm/{sequel → providers/sequel}/tasks/schema.rb +2 -2
  49. data/lib/{renderers → layers/renderers}/erubis.rb +13 -16
  50. data/lib/{renderers → layers/renderers}/haml.rb +27 -25
  51. data/lib/layers/renderers/markaby.rb +29 -0
  52. data/lib/matchers/accept.rb +21 -0
  53. data/lib/matchers/base.rb +30 -0
  54. data/lib/matchers/content_type.rb +17 -0
  55. data/lib/matchers/path.rb +67 -0
  56. data/lib/matchers/query.rb +21 -0
  57. data/lib/matchers/request.rb +27 -0
  58. data/lib/matchers/resource.rb +19 -0
  59. data/lib/matchers/traits.rb +19 -0
  60. data/lib/matchers/uri.rb +20 -0
  61. data/lib/renderers/mixin.rb +15 -29
  62. data/lib/resources/mixin.rb +134 -0
  63. data/lib/resources/paths.rb +34 -0
  64. data/lib/runtime/configuration.rb +51 -136
  65. data/lib/runtime/console.rb +4 -1
  66. data/lib/runtime/logger.rb +24 -48
  67. data/lib/runtime/mime_types.rb +516 -2
  68. data/lib/runtime/mocks.rb +14 -0
  69. data/lib/runtime/monitor.rb +32 -0
  70. data/lib/runtime/request.rb +107 -39
  71. data/lib/runtime/response.rb +5 -2
  72. data/lib/runtime/response_mixin.rb +41 -22
  73. data/lib/runtime/runtime.rb +67 -0
  74. data/lib/runtime/server.rb +14 -101
  75. data/lib/runtime/session.rb +4 -43
  76. data/lib/runtime/worker.rb +86 -0
  77. data/lib/servers/base.rb +42 -0
  78. data/lib/servers/mongrel.rb +13 -0
  79. data/lib/servers/webrick.rb +13 -0
  80. data/lib/tasks/gem.rb +1 -0
  81. data/lib/tasks/generate.rb +67 -62
  82. data/lib/views/errors.rb +49 -0
  83. data/lib/views/mixin.rb +34 -82
  84. data/lib/waves.rb +36 -57
  85. data/samples/blog/Rakefile +16 -5
  86. data/samples/blog/configurations/default.rb +11 -0
  87. data/samples/blog/configurations/development.rb +9 -11
  88. data/samples/blog/configurations/production.rb +11 -15
  89. data/samples/blog/models/comment.rb +9 -0
  90. data/samples/blog/models/entry.rb +17 -0
  91. data/samples/blog/public/css/site.css +13 -2
  92. data/samples/blog/public/javascript/jquery-1.2.6.min.js +32 -0
  93. data/samples/blog/resources/entry.rb +39 -0
  94. data/samples/blog/resources/map.rb +9 -0
  95. data/samples/blog/schema/migrations/001_initial_schema.rb +3 -3
  96. data/samples/blog/schema/migrations/002_add_comments.rb +2 -2
  97. data/samples/blog/startup.rb +8 -6
  98. data/samples/blog/templates/comment/add.mab +6 -4
  99. data/samples/blog/templates/comment/list.mab +4 -4
  100. data/samples/blog/templates/entry/{editor.mab → edit.mab} +7 -6
  101. data/samples/blog/templates/entry/list.mab +10 -5
  102. data/samples/blog/templates/entry/show.mab +16 -7
  103. data/samples/blog/templates/entry/summary.mab +8 -4
  104. data/samples/blog/templates/errors/not_found_404.mab +6 -1
  105. data/samples/blog/templates/layouts/default.mab +5 -3
  106. data/samples/blog/templates/waves/status.mab +85 -0
  107. data/{app → templates/classic}/Rakefile +21 -3
  108. data/templates/classic/configurations/default.rb.erb +9 -0
  109. data/{app → templates/classic}/configurations/development.rb.erb +3 -8
  110. data/{app → templates/classic}/configurations/production.rb.erb +3 -5
  111. data/{app → templates/classic}/controllers/.gitignore +0 -0
  112. data/{app/doc → templates/classic/helpers}/.gitignore +0 -0
  113. data/{app/helpers → templates/classic/lib/tasks}/.gitignore +0 -0
  114. data/{app/lib/tasks → templates/classic/models}/.gitignore +0 -0
  115. data/{app/log → templates/classic/public/css}/.gitignore +0 -0
  116. data/{app/models → templates/classic/public/flash}/.gitignore +0 -0
  117. data/{app/public/css → templates/classic/public/images}/.gitignore +0 -0
  118. data/{app/public/flash → templates/classic/public/javascript}/.gitignore +0 -0
  119. data/{app/public/images → templates/classic/resources}/.gitignore +0 -0
  120. data/templates/classic/resources/map.rb.erb +8 -0
  121. data/{app/public/javascript → templates/classic/schema/migrations}/.gitignore +0 -0
  122. data/templates/classic/startup.rb.erb +11 -0
  123. data/templates/classic/templates/errors/not_found_404.mab +7 -0
  124. data/templates/classic/templates/errors/server_error_500.mab +7 -0
  125. data/{app → templates/classic}/templates/layouts/default.mab +0 -0
  126. data/{app/schema/migrations → templates/classic/tmp/sessions}/.gitignore +0 -0
  127. data/{app/tmp/sessions → templates/classic/views}/.gitignore +0 -0
  128. data/templates/compact/startup.rb.erb +11 -0
  129. metadata +152 -258
  130. data/app/bin/waves-console +0 -4
  131. data/app/bin/waves-server +0 -4
  132. data/app/configurations/mapping.rb.erb +0 -14
  133. data/app/lib/application.rb.erb +0 -5
  134. data/app/startup.rb +0 -5
  135. data/app/templates/errors/not_found_404.mab +0 -2
  136. data/app/templates/errors/server_error_500.mab +0 -2
  137. data/app/views/.gitignore +0 -0
  138. data/bin/waves-console +0 -4
  139. data/bin/waves-server +0 -4
  140. data/lib/commands/waves-console.rb +0 -21
  141. data/lib/controllers/base.rb +0 -11
  142. data/lib/controllers/mixin.rb +0 -165
  143. data/lib/foundations/default.rb +0 -27
  144. data/lib/foundations/simple.rb +0 -30
  145. data/lib/helpers/asset_helper.rb +0 -67
  146. data/lib/helpers/common.rb +0 -66
  147. data/lib/helpers/default.rb +0 -13
  148. data/lib/helpers/number_helper.rb +0 -25
  149. data/lib/helpers/tag_helper.rb +0 -58
  150. data/lib/helpers/url_helper.rb +0 -77
  151. data/lib/layers/default_errors.rb +0 -26
  152. data/lib/layers/inflect/english/rules.rb +0 -88
  153. data/lib/layers/inflect/english/string.rb +0 -24
  154. data/lib/layers/orm/filebase.rb +0 -22
  155. data/lib/layers/simple.rb +0 -32
  156. data/lib/layers/simple_errors.rb +0 -23
  157. data/lib/mapping/mapping.rb +0 -289
  158. data/lib/mapping/pretty_urls.rb +0 -96
  159. data/lib/renderers/markaby.rb +0 -33
  160. data/lib/runtime/application.rb +0 -69
  161. data/lib/runtime/blackboard.rb +0 -57
  162. data/lib/runtime/debugger.rb +0 -9
  163. data/lib/runtime/response_proxy.rb +0 -30
  164. data/lib/tasks/cluster.rb +0 -26
  165. data/lib/utilities/inflect.rb +0 -110
  166. data/lib/utilities/module.rb +0 -21
  167. data/lib/utilities/proc.rb +0 -16
  168. data/lib/utilities/string.rb +0 -49
  169. data/lib/utilities/symbol.rb +0 -10
  170. data/lib/utilities/tempfile.rb +0 -9
  171. data/lib/views/base.rb +0 -9
  172. data/samples/blog/bin/waves-console +0 -3
  173. data/samples/blog/bin/waves-server +0 -3
  174. data/samples/blog/configurations/mapping.rb +0 -23
  175. data/samples/blog/doc/EMTPY +0 -0
  176. data/samples/blog/lib/application.rb +0 -5
  177. data/verify/app_generation/helpers.rb +0 -24
  178. data/verify/app_generation/startup.rb +0 -39
  179. data/verify/blackboard/blackboard_verify.rb +0 -92
  180. data/verify/blackboard/helpers.rb +0 -5
  181. data/verify/configurations/attributes.rb +0 -37
  182. data/verify/configurations/helpers.rb +0 -1
  183. data/verify/configurations/rack_integration.rb +0 -29
  184. data/verify/controllers/base.rb +0 -37
  185. data/verify/controllers/helpers.rb +0 -13
  186. data/verify/controllers/interface.rb +0 -51
  187. data/verify/core/helpers.rb +0 -3
  188. data/verify/core/utilities.rb +0 -177
  189. data/verify/foundations/default.rb +0 -86
  190. data/verify/foundations/default_application/Rakefile +0 -14
  191. data/verify/foundations/default_application/bin/waves-console +0 -3
  192. data/verify/foundations/default_application/bin/waves-server +0 -3
  193. data/verify/foundations/default_application/configurations/development.rb +0 -26
  194. data/verify/foundations/default_application/configurations/mapping.rb +0 -14
  195. data/verify/foundations/default_application/configurations/production.rb +0 -30
  196. data/verify/foundations/default_application/controllers/default.rb +0 -15
  197. data/verify/foundations/default_application/controllers/loaded.rb +0 -15
  198. data/verify/foundations/default_application/defaultapplication.db +0 -0
  199. data/verify/foundations/default_application/helpers/loaded.rb +0 -10
  200. data/verify/foundations/default_application/lib/application.rb +0 -5
  201. data/verify/foundations/default_application/models/default.rb +0 -13
  202. data/verify/foundations/default_application/models/loaded.rb +0 -13
  203. data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +0 -9
  204. data/verify/foundations/default_application/startup.rb +0 -7
  205. data/verify/foundations/default_application/templates/errors/not_found_404.mab +0 -2
  206. data/verify/foundations/default_application/templates/errors/server_error_500.mab +0 -2
  207. data/verify/foundations/default_application/templates/layouts/default.mab +0 -14
  208. data/verify/foundations/default_application/views/default.rb +0 -7
  209. data/verify/foundations/default_application/views/loaded.rb +0 -15
  210. data/verify/foundations/helpers.rb +0 -1
  211. data/verify/foundations/simple.rb +0 -25
  212. data/verify/helpers.rb +0 -76
  213. data/verify/layers/data_mapper/association_verify.rb +0 -87
  214. data/verify/layers/default_errors.rb +0 -29
  215. data/verify/layers/helpers.rb +0 -1
  216. data/verify/layers/migration.rb +0 -33
  217. data/verify/layers/sequel/model.rb +0 -41
  218. data/verify/mapping/always.rb +0 -19
  219. data/verify/mapping/filters.rb +0 -65
  220. data/verify/mapping/handle.rb +0 -24
  221. data/verify/mapping/helpers.rb +0 -7
  222. data/verify/mapping/matches.rb +0 -27
  223. data/verify/mapping/named.rb +0 -29
  224. data/verify/mapping/options.rb +0 -17
  225. data/verify/mapping/path.rb +0 -40
  226. data/verify/mapping/response_proxy.rb +0 -50
  227. data/verify/mapping/threaded.rb +0 -25
  228. data/verify/requests/helpers.rb +0 -16
  229. data/verify/requests/request.rb +0 -73
  230. data/verify/requests/response.rb +0 -59
  231. data/verify/requests/session.rb +0 -54
  232. data/verify/views/helpers.rb +0 -1
  233. data/verify/views/rendering.rb +0 -34
  234. data/verify/views/templates/foo.erb +0 -0
  235. data/verify/views/templates/moo.erb +0 -0
  236. data/verify/views/templates/moo.mab +0 -0
@@ -2,76 +2,20 @@ module Waves
2
2
 
3
3
  module Dispatchers
4
4
 
5
- #
6
- # Waves::Dispatchers::Default matches requests against an application's mappings to
7
- # determine what main action to take, as well as what before, after, always, and exception-handling
8
- # blocks must run.
9
- #
10
- # The default dispatcher also attempts to set the content type based on the
11
- # file extension used in the request URL. It does this using the class defined in
12
- # the current configuration's +mime_types+ attribute, which defaults to Mongrel's
13
- # MIME type handler.
14
- #
15
- # You can write your own dispatcher and use it in your application's configuration
16
- # file. By default, they use the default dispatcher, like this:
17
- #
18
- # application do
19
- # use Rack::ShowExceptions
20
- # run Waves::Dispatchers::Default.new
21
- # end
22
- #
23
-
24
5
  class Default < Base
25
6
 
26
- # All dispatchers using the Dispatchers::Base to provide thread-safety, logging, etc.
27
- # must provide a +safe+ method to handle creating a response from a request.
28
- # Takes a Waves::Request and returns a Waves::Reponse
7
+ # Takes a Waves::Request and returns a Waves::Response
29
8
  def safe( request )
30
-
31
- response = request.response
32
-
33
- Waves::Application.instance.reload if Waves::Application.instance.debug?
34
- response.content_type = Waves::Application.instance.config.mime_types[ request.path ] || 'text/html'
35
-
36
- mapping = Waves::Application.instance.mapping[ request ]
37
-
38
- begin
39
-
40
- mapping[:before].each do | block, args |
41
- ResponseProxy.new(request).instance_exec(*args,&block)
42
- end
43
-
44
- request.not_found unless mapping[:action]
45
-
46
- block, args = mapping[:action]
47
- response.write( ResponseProxy.new(request).instance_exec(*args, &block) )
48
-
49
- mapping[:after].each do | block, args |
50
- ResponseProxy.new(request).instance_exec(*args,&block)
51
- end
52
-
53
- rescue Exception => e
54
-
55
- handler = mapping[:handlers].detect do | exception, block, args |
56
- e.is_a? exception
57
- end
58
- if handler
59
- ResponseProxy.new(request).instance_exec(*handler[2], &handler[1])
60
- else
61
- raise e
62
- end
63
-
64
- ensure
65
- mapping[:always].each do | block, args |
66
- begin
67
- ResponseProxy.new(request).instance_exec(*args,&block)
68
- rescue Exception => e
69
- Waves::Logger.info e.to_s
70
- end
71
- end
72
-
9
+ # set a default content type -- this can be overridden by the resource
10
+ request.response.content_type = request.accept.default
11
+ resource = Waves.config.resource.new( request )
12
+ if request.response.body.empty?
13
+ request.response.body << resource.process.to_s
14
+ else
15
+ resource.process
73
16
  end
74
-
17
+ # okay, we've handled the request, now write the response unless it was already done
18
+ request.response.finish
75
19
  end
76
20
 
77
21
  end
data/lib/ext/float.rb ADDED
@@ -0,0 +1,13 @@
1
+ module Waves
2
+ module Ext
3
+ module Float
4
+ def to_delimited(delim=',')
5
+ self.to_s.gsub(/(\d)(?=(\d\d\d)+\.)/, "\\1#{delim}")
6
+ end
7
+ end
8
+ end
9
+ end
10
+
11
+ class Float # :nodoc:
12
+ include Waves::Ext::Float
13
+ end
@@ -1,5 +1,5 @@
1
1
  module Waves
2
- module Utilities # :nodoc:
2
+ module Ext # :nodoc:
3
3
 
4
4
  # Utility methods mixed into Hash.
5
5
  module Hash
@@ -27,5 +27,5 @@ module Waves
27
27
  end
28
28
 
29
29
  class Hash # :nodoc:
30
- include Waves::Utilities::Hash
30
+ include Waves::Ext::Hash
31
31
  end
@@ -1,5 +1,5 @@
1
1
  module Waves
2
- module Utilities
2
+ module Ext
3
3
  module Integer
4
4
  def seconds ; self ; end
5
5
  def minutes ; self * 60 ; end
@@ -15,10 +15,13 @@ module Waves
15
15
  def exabytes ; self * 1024.petabytes ; end
16
16
  def zettabytes ; self * 1024.exabytes ; end
17
17
  def yottabytes ; self * 1024.zettabytes ; end
18
+ def to_delimited(delim=',')
19
+ self.to_s.gsub(/(\d)(?=(\d\d\d)+$)/, "\\1#{delim}")
20
+ end
18
21
  end
19
22
  end
20
23
  end
21
24
 
22
25
  class Integer # :nodoc:
23
- include Waves::Utilities::Integer
26
+ include Waves::Ext::Integer
24
27
  end
data/lib/ext/kernel.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Kernel
2
+ unless respond_to?(:debugger)
3
+ # Starts a debugging session if ruby-debug has been loaded (call waves-server --debugger to do load it).
4
+ def debugger
5
+ Waves::Logger.info "Debugger invoked but not loaded. Start server with --debugger to enable."
6
+ end
7
+ end
8
+
9
+ unless respond_to?(:engine)
10
+ # 'engine' exists to provide a quick and easy (and MRI-compatible!) interface to the RUBY_ENGINE constant
11
+ def engine; defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'; end
12
+ end
13
+
14
+ def safe_trap(*signals)
15
+ signals.each { |s| trap(s) { yield } }
16
+ Thread.new { loop { sleep 1 } } if RUBY_PLATFORM =~ /mswin32/
17
+ end
18
+
19
+
20
+ end
data/lib/ext/module.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Waves
2
+ module Ext
3
+ module Module
4
+
5
+ def basename ; self.name.split('::').last || '' ; end
6
+ def rootname ; self.name.split('::').first ; end
7
+ def root ; eval( "::#{self.rootname}" ) ; end
8
+
9
+ # Just a convenience method for dynamically referencing submodules. Note that
10
+ # you cannot do const_get, because that will also attempt to deref the cname
11
+ # at global scope. So it is more efficient to just use eval.
12
+ def []( cname ) ; eval( "self::#{cname.to_s.camel_case}" ) ; end
13
+
14
+ end
15
+ end
16
+ end
17
+
18
+ class Module # :nodoc:
19
+ include Waves::Ext::Module
20
+ end
@@ -1,11 +1,9 @@
1
1
  module Waves
2
- module Utilities
2
+ module Ext
3
3
  module Object
4
4
  # This is an extremely powerful little function that will be built-in to Ruby 1.9.
5
5
  # This version is from Mauricio Fernandez via ruby-talk. Works like instance_eval
6
- # except that you can pass parameters to the block. This means you can define a block
7
- # intended for use with instance_eval, pass it to another method, which can then
8
- # invoke with parameters. This is used quite a bit by the Waves::Mapping code.
6
+ # except that you can pass parameters to the block.
9
7
  def instance_exec(*args, &block)
10
8
  mname = "__instance_exec_#{Thread.current.object_id.abs}"
11
9
  class << self; self end.class_eval{ define_method(mname, &block) }
@@ -21,5 +19,5 @@ module Waves
21
19
  end
22
20
 
23
21
  class Object # :nodoc:
24
- include Waves::Utilities::Object
22
+ include Waves::Ext::Object
25
23
  end
data/lib/ext/string.rb ADDED
@@ -0,0 +1,20 @@
1
+ # Utility methods mixed into String.
2
+
3
+ class String
4
+
5
+ # Syntactic sugar for using File.join to concatenate the argument to the receiver.
6
+ #
7
+ # require "lib" / "utilities" / "string"
8
+ #
9
+ # The idea is not original, but we can't remember where we first saw it.
10
+ # Waves::Ext::Symbol defines the same method, allowing for :files / 'afilename.txt'
11
+ #
12
+
13
+ def / ( s ) ; File.join( self, s.to_s ); end
14
+
15
+ alias_method :lower_camel_case, :subcamelcase
16
+ alias_method :camel_case, :camelcase
17
+ alias_method :snake_case, :snakecase
18
+ alias_method :title_case, :titlecase
19
+
20
+ end
data/lib/ext/symbol.rb ADDED
@@ -0,0 +1,11 @@
1
+ class Symbol
2
+
3
+ # Syntactic sugar for using File.join to concatenate the argument to the receiver.
4
+ #
5
+ # require :lib / :utilities / :string
6
+ #
7
+ # The idea is not original, but we can't remember where we first saw it.
8
+ # Waves::Ext::Symbol defines the same method, allowing for :files / 'afilename.txt'
9
+
10
+ def / ( s ) ; File.join( self.to_s, s.to_s ) ; end
11
+ end
@@ -0,0 +1,5 @@
1
+ require 'tempfile'
2
+ class Tempfile
3
+ # override method to prevent problem uploading files with Rack
4
+ def ==(other) ; eql?(other) || super ; end
5
+ end
@@ -0,0 +1,66 @@
1
+ module Waves
2
+ module Foundations
3
+
4
+ # Provides Sun MVC features for your application.
5
+ # Includes ERb-style templates. You can also include others via Renderer Layers.
6
+ # It does NOT include a default ORM. Use an ORM Layer for that.
7
+
8
+ module Classic
9
+
10
+ def self.included( app )
11
+
12
+ require 'autocode'
13
+ require 'layers/mvc'
14
+ require 'layers/inflect/english'
15
+ require 'helpers/extended'
16
+ require 'layers/renderers/erubis'
17
+ require 'layers/renderers/markaby'
18
+
19
+ app.module_eval do
20
+
21
+ include AutoCode
22
+
23
+ app.auto_create_module( :Configurations ) do
24
+ include AutoCode
25
+ auto_create_class :Default, Waves::Configurations::Default
26
+ auto_load :Default, :directories => [ :configurations ]
27
+ end
28
+
29
+ app.auto_eval( :Configurations ) do
30
+ auto_create_class true, app::Configurations::Default
31
+ auto_load true, :directories => [ :configurations ]
32
+ end
33
+
34
+ app.auto_create_module( :Resources ) do
35
+ include AutoCode
36
+ auto_create_class :Default, Waves::Resources::Base
37
+ auto_load :Default, :directories => [ :resources ]
38
+ end
39
+
40
+ app.auto_eval( :Resources ) do
41
+ auto_create_class true, app::Resources::Default
42
+ auto_load true, :directories => [ :resources ]
43
+ auto_eval :Map do
44
+
45
+ handler( Waves::Dispatchers::NotFoundError ) do
46
+ app::Views::Errors.new( request ).not_found_404
47
+ end
48
+
49
+ end
50
+ end
51
+
52
+ include Waves::Layers::Inflect::English
53
+ include Waves::Layers::MVC
54
+ include Waves::Renderers::Erubis
55
+ include Waves::Renderers::Markaby
56
+
57
+ end
58
+
59
+ Waves << app
60
+
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+
@@ -0,0 +1,50 @@
1
+ module Waves
2
+ module Foundations
3
+ module Compact
4
+ def self.included( app )
5
+ app.module_eval {
6
+ const_set( :Resources, Module.new {
7
+ const_set( :Map, Class.new {
8
+ include Waves::Resources::Mixin
9
+ handler( Exception ) {
10
+ Waves::Views::Errors.new( request ).server_error_500
11
+ }
12
+
13
+ handler( Waves::Dispatchers::NotFoundError ) {
14
+ Waves::Views::Errors.new( request ).not_found_404
15
+ }
16
+ })
17
+ })
18
+ const_set( :Configurations, Module.new {
19
+ const_set( :Development, Class.new( Waves::Configurations::Default ) {
20
+ log :level => :debug
21
+ host '127.0.0.1'
22
+ port 3000
23
+ server Waves::Servers::Mongrel
24
+ resource app::Resources::Map
25
+ })
26
+ const_set( :Production, Class.new( self::Development ) {
27
+ log :level => :error, :output => ( "log.#{$$}" ), :rotation => :weekly
28
+ port 80
29
+ host '0.0.0.0'
30
+ server Waves::Servers::Mongrel
31
+ application {
32
+ use Rack::Session::Cookie, :key => 'rack.session',
33
+ # :domain => 'foo.com',
34
+ :path => '/',
35
+ :expire_after => 2592000,
36
+ :secret => 'Change it'
37
+
38
+ run ::Waves::Dispatchers::Default.new
39
+ }
40
+
41
+ })
42
+ })
43
+ }
44
+ Waves << app
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,11 @@
1
+ module Waves
2
+ module Helpers
3
+ module Basic
4
+ attr_reader :request
5
+ include Waves::ResponseMixin
6
+
7
+ def app ; Waves.main ; end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,34 @@
1
+ module Waves
2
+
3
+ module Helpers
4
+
5
+ module DocType
6
+
7
+ DOCTYPES = {
8
+ :html3 => "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n",
9
+ :html4_transitional =>
10
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" " <<
11
+ "\"http://www.w3.org/TR/html4/loose.dtd\">\n",
12
+ :html4_strict =>
13
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" " <<
14
+ "\"http://www.w3.org/TR/html4/strict.dtd\">\n",
15
+ :html4_frameset =>
16
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" " <<
17
+ "\"http://www.w3.org/TR/html4/frameset.dtd\">\n",
18
+ :xhtml1_transitional =>
19
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " <<
20
+ "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n",
21
+ :xhtml1_strict =>
22
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " <<
23
+ "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n",
24
+ :xhtml1_frameset =>
25
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" " <<
26
+ "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n",
27
+ :xhtml2 => "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
28
+ }
29
+
30
+ def doctype(type) ; self << DOCTYPES[type||:html4_strict] ; end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require 'helpers/basic'
2
+ require 'helpers/doc_type'
3
+ require 'helpers/layouts'
4
+ require 'helpers/formatting'
5
+ require 'helpers/model'
6
+ require 'helpers/view'
7
+ require 'helpers/form'
8
+
9
+ module Waves
10
+ module Helpers
11
+ module Extended
12
+ include Waves::Helpers::Basic
13
+ include Waves::Helpers::DocType
14
+ include Waves::Helpers::Layouts
15
+ include Waves::Helpers::Formatting
16
+ include Waves::Helpers::Model
17
+ include Waves::Helpers::View
18
+ include Waves::Helpers::Form
19
+ end
20
+ end
21
+ end
data/lib/helpers/form.rb CHANGED
@@ -15,7 +15,9 @@ module Waves
15
15
  # will invoke the +text+ form view (the template in +templates/form/text.mab+),
16
16
  # passing in the name ('blog.title') and the value (@blog.title) as instance variables.
17
17
  #
18
- # These helpers are Markaby only.
18
+ # These helpers work best with Markaby, but may work for other Renderers.
19
+ #
20
+
19
21
  module Form
20
22
 
21
23
  # This method really is a place-holder for common wrappers around groups of