dyoder-waves 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/app/Rakefile +14 -0
  2. data/app/bin/waves-console +3 -0
  3. data/app/bin/waves-server +3 -0
  4. data/app/configurations/development.rb.erb +31 -0
  5. data/app/configurations/mapping.rb.erb +14 -0
  6. data/app/configurations/production.rb.erb +30 -0
  7. data/app/lib/application.rb.erb +3 -0
  8. data/app/startup.rb +5 -0
  9. data/app/templates/errors/not_found_404.mab +2 -0
  10. data/app/templates/errors/server_error_500.mab +2 -0
  11. data/app/templates/layouts/default.mab +14 -0
  12. data/bin/waves +66 -0
  13. data/bin/waves-console +4 -0
  14. data/bin/waves-server +4 -0
  15. data/lib/commands/waves-console.rb +24 -0
  16. data/lib/commands/waves-server.rb +55 -0
  17. data/lib/controllers/mixin.rb +158 -0
  18. data/lib/dispatchers/base.rb +52 -0
  19. data/lib/dispatchers/default.rb +67 -0
  20. data/lib/foundations/default.rb +28 -0
  21. data/lib/foundations/simple.rb +17 -0
  22. data/lib/helpers/common.rb +62 -0
  23. data/lib/helpers/form.rb +39 -0
  24. data/lib/helpers/formatting.rb +30 -0
  25. data/lib/helpers/model.rb +33 -0
  26. data/lib/helpers/view.rb +24 -0
  27. data/lib/layers/default_errors.rb +24 -0
  28. data/lib/layers/simple_errors.rb +17 -0
  29. data/lib/mapping/mapping.rb +252 -0
  30. data/lib/mapping/pretty_urls.rb +94 -0
  31. data/lib/renderers/erubis.rb +61 -0
  32. data/lib/renderers/markaby.rb +33 -0
  33. data/lib/renderers/mixin.rb +53 -0
  34. data/lib/runtime/application.rb +65 -0
  35. data/lib/runtime/configuration.rb +180 -0
  36. data/lib/runtime/console.rb +20 -0
  37. data/lib/runtime/debugger.rb +9 -0
  38. data/lib/runtime/logger.rb +52 -0
  39. data/lib/runtime/mime_types.rb +22 -0
  40. data/lib/runtime/request.rb +77 -0
  41. data/lib/runtime/response.rb +40 -0
  42. data/lib/runtime/response_mixin.rb +35 -0
  43. data/lib/runtime/response_proxy.rb +27 -0
  44. data/lib/runtime/server.rb +94 -0
  45. data/lib/runtime/session.rb +56 -0
  46. data/lib/tasks/cluster.rb +25 -0
  47. data/lib/tasks/gem.rb +31 -0
  48. data/lib/tasks/generate.rb +15 -0
  49. data/lib/utilities/inflect.rb +194 -0
  50. data/lib/utilities/integer.rb +17 -0
  51. data/lib/utilities/kernel.rb +34 -0
  52. data/lib/utilities/module.rb +17 -0
  53. data/lib/utilities/object.rb +17 -0
  54. data/lib/utilities/proc.rb +9 -0
  55. data/lib/utilities/string.rb +47 -0
  56. data/lib/utilities/symbol.rb +7 -0
  57. data/lib/verify/mapping.rb +29 -0
  58. data/lib/verify/request.rb +40 -0
  59. data/lib/views/mixin.rb +108 -0
  60. data/lib/waves.rb +80 -0
  61. metadata +260 -0
@@ -0,0 +1,40 @@
1
+ module Waves
2
+ module Verify
3
+ module Helpers
4
+ module Request
5
+
6
+ ::Rack::MockRequest::DEFAULT_ENV.merge!(
7
+ 'REMOTE_ADDR' => '127.0.0.1',
8
+ 'REMOTE_HOST' => 'localhost',
9
+ 'SERVER_NAME' => 'localhost',
10
+ 'SERVER_PORT' => '3000',
11
+ 'SERVER_PORT_SECURE' => '0',
12
+ 'SERVER_PROTOCOL' => 'HTTP/1.1',
13
+ 'SERVER_SOFTWARE' => 'Waves 1.0',
14
+ 'HTTP_HOST' => 'localhost',
15
+ 'HTTP_VERSION' => 'HTTP/1.1',
16
+ 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14',
17
+ 'HTTP_CACHE_CONTROL' => 'max-age=0',
18
+ 'HTTP_ACCEPT' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
19
+ 'HTTP_ACCEPT_LANGUAGE' => 'en-us,en;q=0.5',
20
+ 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
21
+ 'HTTP_ACCEPT_ENCODING' => 'gzip,compress;q=0.5,*;q=0.0,',
22
+ 'HTTP_CONNECTION' => 'keep-alive',
23
+ 'HTTP_KEEP_ALIVE' => '300',
24
+ 'HTTP_REFERER' => 'http://localhost/',
25
+ 'GATEWAY_INTERFACE' => 'CGI/1.1'
26
+ )
27
+
28
+ def request
29
+ @request ||= ::Rack::MockRequest.new( ::Waves::Dispatchers::Default.new )
30
+ end
31
+
32
+ def get(uri, opts={}) request.get(uri, opts) end
33
+ def post(uri, opts={}) request.post(uri, opts) end
34
+ def put(uri, opts={}) request.put(uri, opts) end
35
+ def delete(uri, opts={}) request.delete(uri, opts) end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,108 @@
1
+ module Waves
2
+
3
+ # Views in Waves are ultimately responsible for generating the response body. Views mirror controllers - both have full access to the request and response, and both may modify the response and even short-circuit the request processing and return a result by calling redirect or calling Response#finish.
4
+ #
5
+ # Views, like controllers, are classes with methods that are invoked by a mapping block (see Waves::Mapping). View instance methods take an assigns hash that are typically converted into instance variables accesible from within a template.
6
+ #
7
+ # Like controllers, a default implementation is provided by the +waves+ command when you first create your application. This default can be overridden to change the behaviors for all views, or you can explicitly define a View class to provide specific behavior for one view.
8
+ #
9
+ # The default implementation simply determines which template to render and renders it, returning the result as a string. This machinery is provided by the View mixin, so it is easy to create your own View implementations.
10
+ #
11
+ # = Templates
12
+ #
13
+ # Although you won't typically need to modify or define View classes, you will often create and modify templates. Templates can be evaluated using any registered Renderer. Two are presently packaged with Waves: Markaby and Erubis. Templates have access to the assigns hash passed to the view method as instance variables. These can be explicitly defined by the mapping file or whomever is invoking the view.
14
+ #
15
+ # *Example*
16
+ #
17
+ # # Find the story named 'home' and pass it as @story into the "story/show" template
18
+ # use( :story ) | controller { find( 'home' ) } | view { |x| show( :story => x ) }
19
+ #
20
+ # = Helpers
21
+ #
22
+ # 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+.
23
+ #
24
+ # 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.
25
+ #
26
+ # = Layouts
27
+ #
28
+ # Layouts are defined using the +Layout+ view class, and layout templates are placed in the +layout+ directory of the +templates+ directory. Layouts are explicitly set within a template using the +layout+ method.
29
+ #
30
+ # *Example*
31
+ #
32
+ # layout :default, :title => @story.title do
33
+ # h1 @story.title
34
+ # textile @story.content
35
+ # end
36
+ #
37
+ #
38
+ # The layout method takes a name and an assigns hash that will be available within the layout template as instance variables. In this example, <tt>@title</tt> will be defined as <tt>@story.title</tt> within the layout template named 'default.'
39
+ #
40
+ # Any number of layouts may be included within a single view, and layouts may even be nested within layouts. This makes it possible to create large numbers of highly structured views that can be easily changed with minimal effort. For example, you might specify a layout associated with form elements. By incorporating this into your views as a +layout+ template, you can make changes across all your forms by changing this single template.
41
+ #
42
+ # = Nested Views
43
+ #
44
+ # It is easy to include one view inside another. A common use for this is to define one set of templates for reusable content 'fragments' (somewhat akin to partials in Rails) and another set that incorporate these fragments into specific layouts. Including a view from within another view is done, logically enough, using the +view+ method.
45
+ #
46
+ # *Example*
47
+ #
48
+ # # include the summary view for Story
49
+ # view :story, :summary, :story => @story
50
+ #
51
+ # = Request And Response Objects
52
+ #
53
+ # As always, the request and response objects, and a wide-variety of short-cut methods, are available within view templates via the Waves::ResponseMixin.
54
+ #
55
+
56
+ module Views
57
+
58
+ class NoTemplateError < Exception ; end
59
+
60
+ # A class method that returns the known Renderers, which is any module that is defined within Waves::Renderers and includes the Renderers::Mixin. You can define new Renderers simply be reopening Waves::Renderers and defining a module that mixes in Renderers::Mixin.
61
+ def Views.renderers
62
+ return [] if Renderers.constants.nil?
63
+ Renderers.constants.inject([]) do |rx,cname|
64
+ ( Module === (c=Renderers.const_get(cname)) &&
65
+ c < Renderers::Mixin ) ? ( rx << c ) : rx
66
+ end
67
+ end
68
+
69
+ # The View mixin simply sets up the machinery for invoking a template, along with methods for accessing the request context and the standard interface for invoking a view method.
70
+ module Mixin
71
+
72
+ attr_reader :request
73
+
74
+ include Waves::ResponseMixin
75
+
76
+ def self.included( c )
77
+ def c.process( request, *args, &block )
78
+ self.new( request ).instance_exec( *args, &block )
79
+ end
80
+ end
81
+
82
+ def initialize( request )
83
+ @request = request
84
+ @layout = :default
85
+ end
86
+
87
+ def renderer(path)
88
+ Views.renderers.find do |renderer|
89
+ File.exists?( renderer.filename( path ) )
90
+ end
91
+ end
92
+
93
+ def render( path, context = {} )
94
+ context.merge!( :request => request )
95
+ template = renderer( path ) || renderer( :generic / File.basename(path) )
96
+ raise NoTemplateError.new( path ) if template.nil?
97
+ template.render( path, context )
98
+ end
99
+
100
+ def method_missing(name,*args)
101
+ render( "/#{self.class.basename.snake_case}/#{name}", *args )
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ end
data/lib/waves.rb ADDED
@@ -0,0 +1,80 @@
1
+ # External Dependencies
2
+ require 'rubygems'
3
+
4
+ require 'rack'
5
+ require 'daemons'
6
+ require 'live_console'
7
+
8
+ gem 'dyoder-autocode'
9
+ require 'autocode'
10
+
11
+ # for mimetypes only or when using as default handler
12
+ require 'mongrel'
13
+
14
+ # a bunch of handy stuff
15
+ require 'extensions/all'
16
+ require 'fileutils'
17
+ require 'metaid'
18
+ require 'forwardable'
19
+ require 'date'
20
+ require 'benchmark'
21
+ # require 'memcache'
22
+ require 'base64'
23
+
24
+ # selected project-specific extensions
25
+ require 'utilities/module'
26
+ require 'utilities/string'
27
+ require 'utilities/symbol'
28
+ require 'utilities/kernel'
29
+ require 'utilities/object'
30
+ require 'utilities/integer'
31
+ require 'utilities/inflect'
32
+ require 'utilities/proc'
33
+ require 'utilities/hash'
34
+ # waves Runtime
35
+ require 'dispatchers/base'
36
+ require 'dispatchers/default'
37
+ require 'runtime/logger'
38
+ require 'runtime/mime_types'
39
+ require 'runtime/application'
40
+ require 'runtime/console'
41
+ require 'runtime/debugger'
42
+ require 'runtime/server'
43
+ require 'runtime/request'
44
+ require 'runtime/response'
45
+ require 'runtime/response_mixin'
46
+ require 'runtime/response_proxy'
47
+ require 'runtime/session'
48
+ require 'runtime/configuration'
49
+
50
+ # waves URI mapping
51
+ require 'mapping/mapping'
52
+ require 'mapping/pretty_urls'
53
+
54
+ # waves mvc support
55
+ require 'controllers/mixin'
56
+ require 'controllers/base'
57
+ require 'views/mixin'
58
+ require 'views/base'
59
+ require 'renderers/mixin'
60
+ require 'renderers/markaby'
61
+ require 'helpers/tag_helper'
62
+ require 'helpers/url_helper'
63
+ require 'renderers/erubis'
64
+ require 'helpers/common.rb'
65
+ require 'helpers/form.rb'
66
+ require 'helpers/formatting.rb'
67
+ require 'helpers/model.rb'
68
+ require 'helpers/view.rb'
69
+
70
+ # waves test support
71
+ require 'verify/mapping.rb'
72
+ require 'verify/request.rb'
73
+
74
+ # waves foundations / layers
75
+ require 'layers/simple'
76
+ require 'layers/simple_errors'
77
+ require 'foundations/simple'
78
+ require 'layers/mvc'
79
+ require 'layers/default_errors'
80
+ require 'foundations/default'
metadata ADDED
@@ -0,0 +1,260 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dyoder-waves
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.3
5
+ platform: ruby
6
+ authors:
7
+ - Dan Yoder
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-30 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mongrel
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: rack
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "0"
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: markaby
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ - !ruby/object:Gem::Dependency
43
+ name: erubis
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ - !ruby/object:Gem::Dependency
52
+ name: RedCloth
53
+ version_requirement:
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ - !ruby/object:Gem::Dependency
61
+ name: autocode
62
+ version_requirement:
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ - !ruby/object:Gem::Dependency
70
+ name: sequel
71
+ version_requirement:
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ version:
78
+ - !ruby/object:Gem::Dependency
79
+ name: sqlite3-ruby
80
+ version_requirement:
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: "0"
86
+ version:
87
+ - !ruby/object:Gem::Dependency
88
+ name: extensions
89
+ version_requirement:
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: "0"
95
+ version:
96
+ - !ruby/object:Gem::Dependency
97
+ name: live_console
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: choice
107
+ version_requirement:
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ version:
114
+ - !ruby/object:Gem::Dependency
115
+ name: daemons
116
+ version_requirement:
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ version:
123
+ - !ruby/object:Gem::Dependency
124
+ name: bacon
125
+ version_requirement:
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: "0"
131
+ version:
132
+ description:
133
+ email: dan@zeraweb.com
134
+ executables:
135
+ - waves
136
+ - waves-server
137
+ - waves-console
138
+ extensions: []
139
+
140
+ extra_rdoc_files: []
141
+
142
+ files:
143
+ - lib/commands/waves-console.rb
144
+ - lib/commands/waves-server.rb
145
+ - lib/controllers/mixin.rb
146
+ - lib/dispatchers/base.rb
147
+ - lib/dispatchers/default.rb
148
+ - lib/foundations/default.rb
149
+ - lib/foundations/simple.rb
150
+ - lib/helpers/common.rb
151
+ - lib/helpers/form.rb
152
+ - lib/helpers/formatting.rb
153
+ - lib/helpers/model.rb
154
+ - lib/helpers/view.rb
155
+ - lib/layers/default_errors.rb
156
+ - lib/layers/simple_errors.rb
157
+ - lib/mapping/mapping.rb
158
+ - lib/mapping/pretty_urls.rb
159
+ - lib/renderers/erubis.rb
160
+ - lib/renderers/markaby.rb
161
+ - lib/renderers/mixin.rb
162
+ - lib/runtime/application.rb
163
+ - lib/runtime/configuration.rb
164
+ - lib/runtime/console.rb
165
+ - lib/runtime/debugger.rb
166
+ - lib/runtime/logger.rb
167
+ - lib/runtime/mime_types.rb
168
+ - lib/runtime/request.rb
169
+ - lib/runtime/response.rb
170
+ - lib/runtime/response_mixin.rb
171
+ - lib/runtime/response_proxy.rb
172
+ - lib/runtime/server.rb
173
+ - lib/runtime/session.rb
174
+ - lib/tasks/cluster.rb
175
+ - lib/tasks/gem.rb
176
+ - lib/tasks/generate.rb
177
+ - lib/tasks/schema.rb
178
+ - lib/utilities/inflect.rb
179
+ - lib/utilities/integer.rb
180
+ - lib/utilities/kernel.rb
181
+ - lib/utilities/module.rb
182
+ - lib/utilities/object.rb
183
+ - lib/utilities/proc.rb
184
+ - lib/utilities/string.rb
185
+ - lib/utilities/symbol.rb
186
+ - lib/verify/mapping.rb
187
+ - lib/verify/request.rb
188
+ - lib/views/mixin.rb
189
+ - lib/waves.rb
190
+ - app/bin
191
+ - app/bin/waves-console
192
+ - app/bin/waves-server
193
+ - app/configurations
194
+ - app/configurations/default.rb.erb
195
+ - app/configurations/development.rb.erb
196
+ - app/configurations/mapping.rb.erb
197
+ - app/configurations/production.rb.erb
198
+ - app/controllers
199
+ - app/controllers/default.rb.erb
200
+ - app/doc
201
+ - app/helpers
202
+ - app/helpers/default.rb.erb
203
+ - app/lib
204
+ - app/lib/application.rb.erb
205
+ - app/lib/tasks
206
+ - app/log
207
+ - app/models
208
+ - app/models/default.rb.erb
209
+ - app/public
210
+ - app/public/css
211
+ - app/public/flash
212
+ - app/public/images
213
+ - app/public/javascript
214
+ - app/Rakefile
215
+ - app/schema
216
+ - app/schema/migrations
217
+ - app/schema/migrations/templates
218
+ - app/schema/migrations/templates/empty.rb.erb
219
+ - app/startup.rb
220
+ - app/templates
221
+ - app/templates/errors
222
+ - app/templates/errors/not_found_404.mab
223
+ - app/templates/errors/server_error_500.mab
224
+ - app/templates/layouts
225
+ - app/templates/layouts/default.mab
226
+ - app/tmp
227
+ - app/tmp/sessions
228
+ - app/views
229
+ - app/views/default.rb.erb
230
+ - bin/waves
231
+ - bin/waves-server
232
+ - bin/waves-console
233
+ has_rdoc: true
234
+ homepage: http://dev.zeraweb.com/waves
235
+ post_install_message:
236
+ rdoc_options: []
237
+
238
+ require_paths:
239
+ - lib
240
+ required_ruby_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: 1.8.6
245
+ version:
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: "0"
251
+ version:
252
+ requirements: []
253
+
254
+ rubyforge_project:
255
+ rubygems_version: 1.0.1
256
+ signing_key:
257
+ specification_version: 2
258
+ summary: Open-source framework for building Ruby-based Web applications.
259
+ test_files: []
260
+