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
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rubygems'
3
- require 'startup'
4
- require 'commands/waves-console'
data/app/bin/waves-server DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rubygems'
3
- require 'startup'
4
- require 'commands/waves-server'
@@ -1,14 +0,0 @@
1
- module <%= @name %>
2
-
3
- module Configurations
4
-
5
- module Mapping
6
- extend Waves::Mapping
7
- # your custom rules go here
8
- include Waves::Mapping::PrettyUrls::RestRules
9
- include Waves::Mapping::PrettyUrls::GetRules
10
- end
11
-
12
- end
13
-
14
- end
@@ -1,5 +0,0 @@
1
- <%= @orm_require %>
2
- module <%= @name %>
3
- include Waves::Foundations::Default
4
- <%= @orm_include %>
5
- end
data/app/startup.rb DELETED
@@ -1,5 +0,0 @@
1
- lambda {
2
- waves = ( ( WAVES if defined? WAVES ) || ENV['WAVES'] || File.join(File.dirname(__FILE__), 'waves') )
3
- $:.unshift(File.join( waves, "lib" )) if File.exist? waves
4
- }.call
5
- require 'waves'
@@ -1,2 +0,0 @@
1
- h1 '404'
2
- p %q( That URL does not exist on this server. )
@@ -1,2 +0,0 @@
1
- h1 '500'
2
- p %q( Internal server error. Sorry, but your request could not be processed. )
data/app/views/.gitignore DELETED
File without changes
data/bin/waves-console DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rubygems'
3
- require 'startup'
4
- require 'commands/waves-console'
data/bin/waves-server DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rubygems'
3
- require 'startup'
4
- require 'commands/waves-server'
@@ -1,21 +0,0 @@
1
- require 'choice'
2
-
3
- Choice.options do
4
- header 'Run waves in console mode.'
5
- header ''
6
- option :mode do
7
- short '-c'
8
- long '--config=CONFIG'
9
- desc 'Configuration to use.'
10
- desc 'Defaults to development.'
11
- cast Symbol
12
- end
13
- separator ''
14
- end
15
-
16
- console = Waves::Console.load( Choice.choices )
17
- Object.send(:define_method, :waves) { console }
18
- require 'irb'
19
- require 'irb/completion'
20
- ARGV.clear
21
- IRB.start
@@ -1,11 +0,0 @@
1
- module Waves
2
- module Controllers
3
- class Base
4
-
5
- include Waves::Controllers::Mixin
6
-
7
- def attributes; params[model_name.singular.intern]; end
8
-
9
- end
10
- end
11
- end
@@ -1,165 +0,0 @@
1
- module Waves
2
-
3
- #
4
- # Controllers in Waves are simply classes that provide a request / response
5
- # context for operating on a model. While models are essentially just a way
6
- # to manage data in an application, controllers manage data in response to
7
- # a request. For example, a controller updates a model instance using
8
- # parameters from the request.
9
- #
10
- # Public controller methods simply return data (a resource), if necessary, that
11
- # can be then used by views to determine how to render that data.
12
- # Controllers do not determine which view will be invoked. They are
13
- # independent of the view; one controller method might be suitable for
14
- # several different views. In some cases, controllers can choose to
15
- # directly modify the response and possibly even short-circuit the view
16
- # entirely. A good example of this is a redirect.
17
- #
18
- # Controllers, like Views and Mappings, use the Waves::ResponseMixin to
19
- # provide a rich context for working with the request and response objects.
20
- # They can even call other controllers or views using the controllers method.
21
- # In addition, they provide some basic reflection (access to the model and
22
- # model_name that corresponds to the class name for the given model) and
23
- # automatic parameter destructuring. This allows controller methods to access
24
- # the request parameters as a hash, so that a POST variable named
25
- # <tt>entry.title</tt> is accessed as <tt>params[:entry][:title]</tt>.
26
- #
27
- # Controllers often do not have to be explicitly defined. Instead, one or more
28
- # default controllers can be defined that are used as exemplars for a given
29
- # model. By default, the +waves+ command generates a single default, placed in
30
- # the application's <tt>controllers/default.rb</tt> file. This can be modified
31
- # to change the default behavior for all controllers. Alternatively, the
32
- # <tt>rake generate:controller</tt> command can be used to explicitly define a
33
- # controller.
34
- #
35
- # As an example, the code for the default controller is below for the Blog application.
36
- #
37
- # module Blog
38
- # module Controllers
39
- # class Default
40
- #
41
- # # Pick up the default controller methods, like param, url, etc.
42
- # include Waves::Controllers::Mixin
43
- #
44
- # # This gets me the parameters associated with this model
45
- # def attributes; params[model_name.singular.intern]; end
46
- #
47
- # # A simple generic delegator to the model
48
- # def all; model.all; end
49
- #
50
- # # Find a specific instance based on a name or raise a 404
51
- # def find( name ); model[ :name => name ] or not_found; end
52
- #
53
- # # Create a new instance based on the request params
54
- # def create; model.create( attributes ); end
55
- #
56
- # # Update an existing record. find will raise a 404 if not found.
57
- # def update( name )
58
- # instance = find( name )
59
- # instance.set( attributes )
60
- # instance.save_changes
61
- # end
62
- #
63
- # # Find and delete - or will raise a 404 if it doesn't exist
64
- # def delete( name ); find( name ).destroy; end
65
- #
66
- # end
67
- # end
68
- # end
69
- #
70
- # Since the mapping file handles "glueing" controllers to views, controllers
71
- # don't have to be at all concerned with views. They don't have to set
72
- # instance variables, layouts, or contain logic to select the appropriate
73
- # view based on the request. All they do is worry about updating the model
74
- # when necessary based on the request.
75
-
76
- module Controllers
77
-
78
- #
79
- # Waves::Controllers::Mixin adapts a controller class for use in mappings and provides utility methods.
80
- # It is included in controllers autocreated by the Default foundation, so you do not need to include
81
- # it in subclasses of the same.
82
- #
83
- # The utility methods include simple reflection to allow controller methods
84
- # to be written generically (i.e., without reference to a specific model) and
85
- # parameter destructuring for the request parameters.
86
- #
87
-
88
- module Mixin
89
-
90
- attr_reader :request
91
-
92
- include Waves::ResponseMixin
93
-
94
- # When this mixin is included it adds a class method named +process+,
95
- # which accepts a request object and a block. The +process+ method initializes the
96
- # controller with the request, then evaluates the block using +instance_eval+. This allows the
97
- # controller to be used from within a mapping lambda (i.e. a ResponseProxy).
98
-
99
- def self.included( mod )
100
- def mod.process( request, &block )
101
- self.new( request ).instance_eval( &block )
102
- end
103
- end
104
-
105
- def initialize( request )
106
- @request = request
107
- end
108
-
109
- # The params variable is taken from the request object and "destructured", so that
110
- # a parameter named 'blog.title' becomes:
111
- #
112
- # params['blog']['title']
113
- #
114
- # If you want to access the original parameters object, you can still do so using
115
- # +request.params+ instead of simply +params+.
116
- def params; @params ||= destructure(request.params); end
117
-
118
- # Returns the name of the model corresponding to this controller by taking the basename
119
- # of the module and converting it to snake case. If the model plurality is different than
120
- # the controller, this will not, in fact, be the model name.
121
- def model_name; self.class.basename.snake_case; end
122
-
123
- # Returns the model corresponding to this controller by naively assuming that
124
- # +model_name+ must be correct. This allows you to write generic controller methods such as:
125
- #
126
- # model.find( name )
127
- #
128
- # to find an instance of a given model. Again, the plurality of the controller and
129
- # model must be the same for this to work.
130
- def model; Waves.application.models[ model_name.intern ]; end
131
-
132
- private
133
-
134
- def destructure( hash )
135
- destructured = {}
136
- hash.keys.map { |key| key.split('.') }.each do |keys|
137
- destructure_with_array_keys(hash, '', keys, destructured)
138
- end
139
- destructured
140
- end
141
-
142
- def destructure_with_array_keys( hash, prefix, keys, destructured )
143
- if keys.length == 1
144
- key = "#{prefix}#{keys.first}"
145
- val = hash[key]
146
- destructured[keys.first.intern] = case val
147
- when String
148
- val.strip
149
- when Hash
150
- val
151
- when nil
152
- raise key.inspect
153
- end
154
- else
155
- destructured = ( destructured[keys.first.intern] ||= {} )
156
- new_prefix = "#{prefix}#{keys.shift}."
157
- destructure_with_array_keys( hash, new_prefix, keys, destructured )
158
- end
159
- end
160
-
161
- end
162
-
163
- end
164
-
165
- end
@@ -1,27 +0,0 @@
1
- module Waves
2
- module Foundations
3
- # The Default foundation supports the common MVC development pattern, a la Rails and Merb. Models, controllers, views, templates, and helpers live in the corresponding directories. When your code calls for a specific M, V, C, or H, Waves tries to load it from a file matching the snake-case of the constant name. If the file does not exist, Waves creates the constant from a sensible (and customizable) default.
4
- #
5
- # This foundation does not include any ORM configuration. You can include Waves::Layers::ORM::Sequel or custom configure your model.
6
-
7
-
8
- module Default
9
-
10
- def self.included( app )
11
-
12
- app.instance_eval do
13
-
14
- include Waves::Layers::Inflect::English
15
- include Waves::Layers::Simple
16
- include Waves::Layers::MVC
17
- include Waves::Layers::DefaultErrors
18
-
19
- end
20
-
21
- Waves << app
22
-
23
- end
24
- end
25
- end
26
- end
27
-
@@ -1,30 +0,0 @@
1
- module Waves
2
-
3
- # A Waves Foundation provides enough functionality to allow a Waves application
4
- # to run. At the bare minimum, this means creating configuration classes in the Configurations
5
- # namespace, as is done in the Simple foundation
6
- #
7
- # Typically, a Foundation will include several Layers, perform any necessary
8
- # configuration, and register the application with the Waves module
9
- module Foundations
10
-
11
- # The Simple foundation provides the bare minimum needed to run a Waves application.
12
- # It is intended for use as the basis of more fully-featured foundations, but you can
13
- # use it as a standalone where all the request processing is done directly in a
14
- # mapping lambda.
15
- module Simple
16
-
17
- # On inclusion in a module, the Simple foundation includes Waves::Layers::Simple and
18
- # registers the module as a Waves application.
19
- def self.included( app )
20
-
21
- app.instance_eval do
22
- include Waves::Layers::Simple
23
- end
24
-
25
- Waves << app
26
- end
27
- end
28
- end
29
- end
30
-
@@ -1,67 +0,0 @@
1
- module Waves
2
- module Helpers
3
- module AssetHelper
4
- # Returns an html image tag for the +source+. The +source+ can be a full
5
- # path or a file that exists in your public images directory. Note that
6
- # specifying a filename without the extension is now deprecated in Rails.
7
- # You can add html attributes using the +options+. The +options+ supports
8
- # two additional keys for convienence and conformance:
9
- #
10
- # * <tt>:alt</tt> - If no alt text is given, the file name part of the
11
- # +source+ is used (capitalized and without the extension)
12
- # * <tt>:size</tt> - Supplied as "{Width}x{Height}", so "30x45" becomes
13
- # width="30" and height="45". <tt>:size</tt> will be ignored if the
14
- # value is not in the correct format.
15
- #
16
- # image_tag("icon.png") # =>
17
- # <img src="/images/icon.png" alt="Icon" />
18
- # image_tag("icon.png", :size => "16x10", :alt => "Edit Entry") # =>
19
- # <img src="/images/icon.png" width="16" height="10" alt="Edit Entry" />
20
- # image_tag("/icons/icon.gif", :size => "16x16") # =>
21
- # <img src="/icons/icon.gif" width="16" height="16" alt="Icon" />
22
- def image_tag(source, options = {})
23
- options.symbolize_keys!
24
-
25
- options[:src] = image_path(source)
26
- options[:alt] ||= File.basename(options[:src], '.*').split('.').first.capitalize
27
-
28
- if options[:size]
29
- options[:width], options[:height] = options[:size].split("x") if options[:size] =~ %r{^\d+x\d+$}
30
- options.delete(:size)
31
- end
32
-
33
- tag("img", options)
34
- end
35
-
36
- # Computes the path to an image asset in the public images directory.
37
- # Full paths from the document root will be passed through.
38
- # Used internally by image_tag to build the image path. Passing
39
- # a filename without an extension is deprecated.
40
- #
41
- # image_path("edit.png") # => /images/edit.png
42
- # image_path("icons/edit.png") # => /images/icons/edit.png
43
- # image_path("/icons/edit.png") # => /icons/edit.png
44
- def image_path(source)
45
- compute_public_path(source, 'images', 'png')
46
- end
47
-
48
- private
49
- def compute_public_path(source, dir, ext)
50
- source = source.dup
51
- source << ".#{ext}" if File.extname(source).blank?
52
- unless source =~ %r{^[-a-z]+://}
53
- source = "/#{dir}/#{source}" unless source[0] == ?/
54
- asset_id = rails_asset_id(source)
55
- source << '?' + asset_id if defined?(RAILS_ROOT) && !asset_id.blank?
56
- # source = "#{ActionController::Base.asset_host}#{@controller.request.relative_url_root}#{source}"
57
- end
58
- source
59
- end
60
-
61
- def rails_asset_id(source)
62
- ENV["WAVES_ASSET_ID"] || File.mtime("public/#{source}").to_i.to_s rescue ""
63
- end
64
-
65
- end
66
- end
67
- end
@@ -1,66 +0,0 @@
1
- module Waves
2
-
3
- # Helper methods can be defined for any view template by simply defining them within the default Helper module in <tt>helpers/default.rb</tt> of the generated application. Helpers specific to a particular View class can be explicitly defined by creating a helper module that corresponds to the View class. For examples, for the +User+ View class, you would define a helper module in <tt>user.rb</tt> named +User+.
4
- #
5
- # The default helper class initially includes a wide-variety of helpers, including helpers for layouts, Textile formatting, rendering forms, and nested views, as well as helpers for accessing the request and response objects. More helpers will be added in future releases, but in many cases, there is no need to include all of them in your application.
6
- module Helpers
7
-
8
- # Common helpers are helpers that are needed for just about any Web page. For example,
9
- # each page will likely have a layout and a doctype.
10
-
11
- module Common
12
-
13
- DOCTYPES = {
14
- :html3 => "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n",
15
- :html4_transitional =>
16
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" " <<
17
- "\"http://www.w3.org/TR/html4/loose.dtd\">\n",
18
- :html4_strict =>
19
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" " <<
20
- "\"http://www.w3.org/TR/html4/strict.dtd\">\n",
21
- :html4_frameset =>
22
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" " <<
23
- "\"http://www.w3.org/TR/html4/frameset.dtd\">\n",
24
- :xhtml1_transitional =>
25
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " <<
26
- "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n",
27
- :xhtml1_strict =>
28
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " <<
29
- "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n",
30
- :xhtml1_frameset =>
31
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" " <<
32
- "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n",
33
- :xhtml2 => "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
34
- }
35
-
36
- # Invokes a layout view (i.e., a view from the layouts template directory), using
37
- # the assigns parameter to define instance variables for the view. The block is
38
- # evaluated and also passed into the view as the +layout_content+ instance variable.
39
- #
40
- # You can define a layout just by creating a template and then calling the
41
- # +layout_content+ accessor when you want to embed the caller's content.
42
- #
43
- # == Example
44
- #
45
- # doctype :html4_transitional
46
- # html do
47
- # title @title # passed as an assigns parameter
48
- # end
49
- # body do
50
- # layout_content
51
- # end
52
- #
53
- def layout( name, assigns = {}, &block )
54
- assigns[ :layout_content ] = capture(&block)
55
- self << Waves.application.views[:layouts].process( request ) do
56
- send( name, assigns )
57
- end
58
- end
59
-
60
- # The doctype method simply generates a valid DOCTYPE declaration for your page.
61
- # Valid options are defined in the +DOCTYPES+ constant.
62
- def doctype(type) ; self << DOCTYPES[type||:html4_strict] ; end
63
-
64
- end
65
- end
66
- end