plezi 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/CHANGELOG.md +450 -0
  4. data/Gemfile +4 -0
  5. data/KNOWN_ISSUES.md +13 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +341 -0
  8. data/Rakefile +2 -0
  9. data/TODO.md +19 -0
  10. data/bin/plezi +301 -0
  11. data/lib/plezi.rb +125 -0
  12. data/lib/plezi/base/cache.rb +77 -0
  13. data/lib/plezi/base/connections.rb +33 -0
  14. data/lib/plezi/base/dsl.rb +177 -0
  15. data/lib/plezi/base/engine.rb +85 -0
  16. data/lib/plezi/base/events.rb +84 -0
  17. data/lib/plezi/base/io_reactor.rb +41 -0
  18. data/lib/plezi/base/logging.rb +62 -0
  19. data/lib/plezi/base/rack_app.rb +89 -0
  20. data/lib/plezi/base/services.rb +57 -0
  21. data/lib/plezi/base/timers.rb +71 -0
  22. data/lib/plezi/handlers/controller_magic.rb +383 -0
  23. data/lib/plezi/handlers/http_echo.rb +27 -0
  24. data/lib/plezi/handlers/http_host.rb +215 -0
  25. data/lib/plezi/handlers/http_router.rb +69 -0
  26. data/lib/plezi/handlers/magic_helpers.rb +43 -0
  27. data/lib/plezi/handlers/route.rb +272 -0
  28. data/lib/plezi/handlers/stubs.rb +143 -0
  29. data/lib/plezi/server/README.md +33 -0
  30. data/lib/plezi/server/helpers/http.rb +169 -0
  31. data/lib/plezi/server/helpers/mime_types.rb +999 -0
  32. data/lib/plezi/server/protocols/http_protocol.rb +318 -0
  33. data/lib/plezi/server/protocols/http_request.rb +133 -0
  34. data/lib/plezi/server/protocols/http_response.rb +294 -0
  35. data/lib/plezi/server/protocols/websocket.rb +208 -0
  36. data/lib/plezi/server/protocols/ws_response.rb +92 -0
  37. data/lib/plezi/server/services/basic_service.rb +224 -0
  38. data/lib/plezi/server/services/no_service.rb +196 -0
  39. data/lib/plezi/server/services/ssl_service.rb +193 -0
  40. data/lib/plezi/version.rb +3 -0
  41. data/plezi.gemspec +26 -0
  42. data/resources/404.erb +68 -0
  43. data/resources/404.haml +64 -0
  44. data/resources/404.html +67 -0
  45. data/resources/404.slim +63 -0
  46. data/resources/500.erb +68 -0
  47. data/resources/500.haml +63 -0
  48. data/resources/500.html +67 -0
  49. data/resources/500.slim +63 -0
  50. data/resources/Gemfile +85 -0
  51. data/resources/anorexic_gray.png +0 -0
  52. data/resources/anorexic_websockets.html +47 -0
  53. data/resources/code.rb +8 -0
  54. data/resources/config.ru +39 -0
  55. data/resources/controller.rb +139 -0
  56. data/resources/db_ac_config.rb +58 -0
  57. data/resources/db_dm_config.rb +51 -0
  58. data/resources/db_sequel_config.rb +42 -0
  59. data/resources/en.yml +204 -0
  60. data/resources/environment.rb +41 -0
  61. data/resources/haml_config.rb +6 -0
  62. data/resources/i18n_config.rb +14 -0
  63. data/resources/rakefile.rb +22 -0
  64. data/resources/redis_config.rb +35 -0
  65. data/resources/routes.rb +26 -0
  66. data/resources/welcome_page.html +72 -0
  67. data/websocket chatroom.md +639 -0
  68. metadata +141 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f2722d8cddc3a4c46884aac17375757aef6aff91
4
+ data.tar.gz: 51edecfe6675e790ac32607e4f357efd38caaf30
5
+ SHA512:
6
+ metadata.gz: c47157168522d25c5de8d34df2938e78a32309fae6040bb0587c60ab2684dfcf376b899a5b1439628e00091db5059485ca7bc983f59282c24c06d783f0d6f60e
7
+ data.tar.gz: ec219c08a2a377b9f0c8500ac3de790733356f0904ab4d0647aff65a5beb3a9a5b6a49c3b7990c8f4f1ff8e736f0354e71ddabd557e334fc3750abe292bab43a
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
@@ -0,0 +1,450 @@
1
+ #Change Log
2
+
3
+ ***
4
+
5
+ Change log v.0.7.0
6
+
7
+ Welcome our new name, Plezi.
8
+
9
+ Plezi means "Fun" in Heitian and we are very happy to have this new bright and shiny name.
10
+
11
+ We are growing up to into a happier and more mature framework.
12
+
13
+ ***
14
+
15
+ Change log v.0.6.23
16
+
17
+ **name change notice**: Due to some people being offended by the framework's name, the name will be deprecated in favor of a more generic name. I apologize if anyone felt offended by the name, that was never my intention. The new name we are considering is Plezi, meaning 'fun' in Heitian.
18
+
19
+ **major fix**: A serious bug was discovered where RESTful routes would not execute due to a security update which blocked the HTTP router from knowing these methods were available. This was fixed by giving the router access to more information about the controller.
20
+
21
+ ***
22
+
23
+ Change log v.0.6.22
24
+
25
+ **new feature**: HTTP streaming is here and easier then ever. Simply call `response.start_http_streaming` from your controler, set the asynchronous work using Plezi Events (or timers) and return `true` from your controller. This feature requires that the response will be manually closed using `response.finish` once the work is done.
26
+
27
+ **misc**: App generator (`plezi` command) now protects against invalid app names by auto-correcting the name, replacing any invalid characters with an underscore.
28
+
29
+ **misc**: updated the gemspec file and project tag-line for a better gem description.
30
+
31
+ **fix**: fixed an issue where chunked data wasn't encoded correctly. This issue only effected the use of HTTP streaming, which wasn't a formal nor documented feature before this release.
32
+
33
+ ***
34
+
35
+ Change log v.0.6.21
36
+
37
+ **fix**: fixed a bug in the broadcast/collect system, where closed connections would still react to broadcasts until garbage collected. fixed the issue by reinforcing the on_disconnect for the controllers child class (the one inheriting the controller and injecting the Plezi magic into it).
38
+
39
+ **fix**: fixed a bug where some websocket connections might fail without a Redis server. fixed issue by making sure a successful #pre_connect method will return `true`.
40
+
41
+ ***
42
+
43
+ Change log v.0.6.20
44
+
45
+ **feature**: Redis broadcasts (automated)! once a Redis server is defined for Plezi, #broadcast will automatically use Redis (limitations apply due to data-types, memory sharing, callback limitations etc')!
46
+
47
+ To change Plezi's #broadcast method to use Redis, set the Redix server url using the `ENV['PL_REDIS_URL']` - i.e. `ENV['PL_REDIS_URL'] = ENV['REDISCLOUD_URL']` or `ENV['PL_REDIS_URL'] = "redis://username:password@my.host:6379"`
48
+
49
+ **template**: a `redis_config.rb` file was added to the template. It has some demo code and explanations about automating Redis in Plezi... it's as easy as uncommenting one line and writing in the Redis server's URL :)
50
+
51
+ ***
52
+
53
+ Change log v.0.6.19
54
+
55
+ **performance/feature**: assets rendering was re-written and should work faster - except for Sass which now reviews all dependencies for updates (a new feature instead of performance boost).
56
+
57
+ **fix**: fixed an issue where the router would split a Regexp within a RESTful route (i.e. `'route :simple_math{[\d\+\-\*\/]}'`) even when the special '/' charecter was escaped.
58
+
59
+ **fix/change**: fixed an issue where dots ('.') would act as slashes ('/') in path naming recognition, deviding parameters names which contained dots into a number of path segments (instead of one).
60
+
61
+ ***
62
+
63
+ Change log v.0.6.18 (yanked)
64
+
65
+ **BROKEN**:
66
+
67
+ trying to fix the routing system broke the code. Apologies to anyone who updated. We have yanked this version and are working on a better fix.
68
+
69
+ ***
70
+
71
+ Change log v.0.6.17
72
+
73
+ **fix**: (Controller methods injection issue) fixed an issue where JRuby treats the `include` method as private. Now the `include` is wrapped within an instance_eval block which allows private method calls.
74
+
75
+ **fix**: connection timeout could have been continuously reset on some connections. this issue was fixed by ensuring connection timeout is reset only when data was actually read.
76
+
77
+ **fix**: log recognition of client ip through proxy (X-Forwarded-For header)
78
+
79
+ **change**: WARNING - Might effect code: empty files and data in multi-part forms are ignored (nil value and no key in the params hash, rather then an empty value).
80
+
81
+ **core code updates**: the core code for the sockets and protocol classes was restructured, allowing more control to the protocol classes (preparing for possible changes in the protocol parsing engine, especially for websockets which might be updated to use the 'websocket' gem in order to support more websocket protocols).
82
+
83
+ ***
84
+
85
+ Change log v.0.6.16
86
+
87
+ **feature**: Slim template rendering is now part of the native render helper method (including template caching). In my testing, it's speed was much better then the Haml (especially for multi-threaded repeated concurrent requests, which can be the norm).
88
+
89
+ **fix?**: trying to fix a mysterious bug in the cache system. It seems okay now (had to do with the mtime for files).
90
+
91
+ **template**: template updates, including changes in application file name, welcome page and database configuration files.
92
+
93
+ **performance**: minor framework engine tweeks (reducing the price of wrapping responses within controllers).
94
+
95
+ **readability**: changed code structure to help readability and cooperation.
96
+
97
+ **fix**: fixed some issues with socket timeouts.
98
+
99
+ **feature**: timed events - It is now possible to add timed events to run once or every x seconds. timed events run only when server runs an idle cycle (during which it also accepts new connections) and timing isn't exact.
100
+
101
+ ***
102
+
103
+ Change log v.0.6.15
104
+
105
+ **feature**: the new Websocket class `broadcast` and `collect` allows broadcasting and colletion of data between different connection types!
106
+
107
+ **fix**: error handling for missing methods was now excessive and informed of intentionally missing routes as well actual errors - fixed by correcting the if statement (hopefuly for the final time).
108
+
109
+ ***
110
+
111
+ Change log v.0.6.14
112
+
113
+ **performance**: the HTTPResponse engine has been tweeked a bit to improve the performance (~8% improvement for a simple 'Hello World').
114
+
115
+ **template**: template code is now updated to seperate the service logic (in the `environment.rb`) from the routing logic (in the new `routes.rb`).
116
+
117
+ **fix**: `render` with a String template name (unlike symbol template names) now correctly relates to the template folder path rather then the application's root folder path.
118
+
119
+ **fix**: fixed minor issue where errors would not be reported if caused by a no method error.
120
+
121
+ **update**: updated the redirect_to to allow easier redirection to index (using an empty string).
122
+
123
+ ***
124
+
125
+ Change log v.0.6.13
126
+
127
+ **minor**: added a `flush` method to the HTTPResponse and WSResponse - to make sure all the data is sent before the code continues (blocks the thread).
128
+
129
+ **minor**: documentation fixes and updates.
130
+
131
+ **fix?**: removed a possible risk for an issue with WebSocket Controllers.
132
+
133
+ ***
134
+
135
+ Change log v.0.6.12
136
+
137
+ Mainly small engine and performance tweeks here and there.
138
+
139
+ ***
140
+
141
+ Change log v.0.6.11
142
+
143
+ **fix**: the long awaited fix for ssl services is here. notice that most of the time, SSL should be handled by the proxy calling on Plezi and SSL services should be disabled.
144
+
145
+ **performance**: performance improvements and a better, greener Plezi (less CPU load while idling). performance improvements are even more noticable on JRuby... although, if you're looking for the fastest 'hello world', maybe this is not a perfect fit.
146
+
147
+ ***
148
+
149
+ Change log v.0.6.10
150
+
151
+ **features**: more websocket controller features for operating on websocket siblings. see the ControllerMagic documentation for more details.
152
+
153
+ **fix**: fixed the force exit. exception handling prevented forced exit from taking place. it was fixed by creating an allowance for the force exit exception to pass through.
154
+
155
+ **fix**: `broadcast` and `collect` are now limited to active websocket connections (closed connections and active HTTP connections will be ignored).
156
+
157
+ ***
158
+
159
+ Change log v.0.6.9
160
+
161
+ **fix**: redirect_to could would fail when a custom port (such as 3000) was in use. the issue was cause by a parsing error in the port recognition (the ':' was passed on to the port variable under some circumstances). This was fixed by correction the parser.
162
+
163
+ **update**: now routes can assign array and hash parameter - i.e. '/posts/(:id)/(:user[name])/(:user[email])/(:response)/(:args[])/(:args[])/(:args[])'
164
+
165
+ **update**: tweeks to the socket event engine, to allow for more concurrent connections.
166
+
167
+ **fix**: RESTful routing to `new` and `index` had issues.
168
+
169
+ **fix**: WebSockets - sending data through multiple connections could cause data corruption. this is now fixed by duplicating the data before framing it.
170
+
171
+
172
+ ***
173
+
174
+ Change log v.0.6.8
175
+
176
+ **fix**: fixed an issue where WebSocket connections would get disconnected after sending data (an update in v. 0.6.6 introduced a bug that caused connections to close once data was sent).
177
+
178
+ **updates**: quick web app template updates. now you get better code when you run `$ plezi new myapp`...
179
+
180
+ ***
181
+
182
+ Change log v.0.6.7
183
+
184
+ **fix**: fixed an issue where rendering (Haml/ERB) would fail if I18n was defined, but no locale was specified in render or in request parameters.
185
+
186
+ ***
187
+
188
+ Change log v.0.6.6
189
+
190
+ **feature**: Both rendering of ERB and Haml moved into the magic controller - now, both ERB and Haml rendering is as easy as can be. (Haml's performance is still slow for concurrent connections. ERB seems almost 4 times faster when under stress).
191
+
192
+ **change**: rendered assets are no longer saved to disk by defaulte. use `listen ... save_assets: true` to save rendered assets to the public folder.
193
+
194
+ **fix**: fixed an issue where the socket data wasn't read on systems that refues to report the unread buffer size (i.e. Heroku). Now, reading wil be attempted without any regards to the reported unread buffer.
195
+ ***
196
+
197
+ Change log v.0.6.5
198
+
199
+ **engine**: Plezi idling engine tweeks. As of yet, Plezi never really sleeps... (new events can be created by either existing events, existing connections or new connections, so IO.select cannot be used)... idle time costs CPU cycles which were as minimized as possible for now.
200
+
201
+ **feature**: very basic Rack support is back (brought back mainly for testing)... BUT:
202
+
203
+ Rack code and Plezi code are NOT fully compatible. for example: Rack's parameters aren't always fully decoded. Also, Rack's file upload contains tmporary files, where Plezi's request object contains the binary data in a binary String object.
204
+
205
+ Also, Rack does NOT support native WebSocket Controllers (you will need middle ware for that).
206
+
207
+ ***
208
+
209
+ Change log v.0.6.4
210
+
211
+ **fix/performance**: faster websocket parsing... finaly :-)
212
+
213
+ **fix**: Websocket close signal now correctly disconnects socket.
214
+
215
+ **fix**: Trap (^C signal) might fail if main thread was hanging. Fixed by putting main thread to sleep and waking it on signal.
216
+
217
+ ***
218
+
219
+ Change log v.0.6.3
220
+
221
+ **fix**: There was a bug transcoding utf-8 data (non ASCII) in the websocket response. WebSockets now sends unicode and UTF-8 text correctly.
222
+
223
+ **fix**: special routing fixed for POST requests. v.0.6.1 brought changes to the router, so that non restful routes were refused except for GET requets. now the expected behaviour of params[:id] => :method (if :method exists) is restored also for POST and DELETE.
224
+
225
+ ***
226
+
227
+ Change log v.0.6.2
228
+
229
+ **fix**: v.0.6.1 broke the WebSockets. WebSockets are back.
230
+
231
+ ***
232
+
233
+ Change log v.0.6.1
234
+
235
+ **performance** - Caching and other tweeks to help performance. noticable improvements for controller routes, Haml (404.haml, 500.haml and framework template code), assets (Sass, Scss, Coffee-Script).
236
+
237
+ **known-issues** - (rare - occures only when files are misplaced) non cachable files aren't served from the assets folder unless file system is writable (Heroku is an example where this issue of misplaced files might occure).
238
+
239
+ ***
240
+
241
+ Change log v.0.6.0 - **WebSockets are here!**
242
+
243
+ This version is a major re-write for the whole plezi framework.
244
+
245
+ **RACK SUPPORT DROPPED!**
246
+
247
+ Rack support is dropped in favor of a native server that allowa protocol switching mid-stream...
248
+
249
+ This re-write is a major step into the future. Plezi is no longer an alternative to Rails or Sinatra - rather, it aspires to be an alternative to Rack and Node.js, with native support for websocket, callbacks and asynchronous responses.
250
+
251
+ ***
252
+
253
+ Change log v.0.5.2
254
+
255
+ **deprecation-notice**: Rack will not be supported on Plezi v. 0.6.0 and above. Major code changes expected!
256
+
257
+ ***
258
+
259
+ Change log v.0.5.1
260
+
261
+ **pro-feature**: route's with Proc values are now unsafe (if value isn't `response` or `true`, the value will be passed on - might raise exceptions, but could be used for lazy content (careful - rack's lazy content might crash your service).
262
+
263
+ **pro-feature**: Controller return values are now unsafe (if value isn't a `String` or a `true`/`false`, the value will be passed on as is instead of the original response object - might raise exceptions, but could be used for lazy content (careful - rack's lazy content might crash your service).
264
+
265
+ ***
266
+
267
+ Change log v.0.5.0
268
+
269
+ **feature:** Multiple (virtual) hosts on the same port are now available `listen port, host: 'foo', file_root: 'public/'`, each host holds it's own route stack, file_root and special paramaters (i.e. `:debug` etc'). greate for different namespaces (admin.foo.com, www.foo.com, etc').
270
+
271
+ **fix**: Magic params have full featured Regex capabilities for the optional routes (`(:optional){(regex)|([7]{3})}`).
272
+
273
+ ***
274
+
275
+ Change log v.0.4.3
276
+
277
+ **notice!:** v.0.5.0 might break any code using the `listen :vhost => "foo.bar.com"` format. hosts and aliases will be restructured.
278
+
279
+ **fix**: an issue with the router was discovered, where non-RESTful Controller methods weren't called for POST, PUT or DELETE http requests. this issue is now fixed, so that non-RESTful methods will be attempted and will exclude ID's with the same value from being created...
280
+
281
+ ... in other words, it is now easier to create non-RESTful apps, should there be a need to do so.
282
+
283
+ ***
284
+
285
+ Change log v.0.4.2
286
+
287
+ **error-detection**: Plezi will check that the same port isn't used for to services and will return a warning. a `listen` call with `RackServer` will return an existing router object if a service is already assigned to the requested port.
288
+
289
+ **notice!:** v.0.5.0 will break any code using the `listen :vhost => "foo.bar.com"` format. hosts and aliases will be restructured.
290
+
291
+ **fix**: 404 error handler should now be immune to path rewrites (displays originally requested path).
292
+
293
+ **fix/template**: fixed for Heroku - Plezi will not write the pid file if under Heroku Dyno (Heroku apps crash when trying to write data to files).
294
+
295
+ ***
296
+
297
+ Change log v.0.4.1
298
+
299
+ **template feature**: the I18n path detection (for paths `"/:locale/..."`) is now totally automated and limited to available locales (only if I18n gem is included in the gem file).
300
+
301
+ **fix/template**: corrected javascripts folder name in app generator (was singular, now plural).
302
+
303
+ **template change**: changed mvc configuration file name to db_config.
304
+
305
+ **fix**: fixed template code for Sequel integration (still very basic).
306
+
307
+
308
+ ***
309
+
310
+ Change log v.0.4.0
311
+
312
+ This is a strong update that might break old code.
313
+
314
+ the following features are added
315
+
316
+ - magic routes:
317
+
318
+ it is now possible to set required paramaters inside the route:
319
+ ```ruby
320
+ route "/version/:number/", Controller
321
+ # => accepts only paths styled "/version/foo".
322
+ # => if no version paramater exists, path will not be called and paramaters will not be set.
323
+ # => (this: "/version" fails).
324
+ ```
325
+
326
+ it is now possible to set optional paramaters inside the route:
327
+ ```ruby
328
+ route "/user/(:id)/(:visitor_id)", Controller
329
+ # => accepts any of the following paths:
330
+ # => "/user"
331
+ # => "/user/foo"
332
+ # => "/user/foo/bar"
333
+ ```
334
+
335
+ it is now possible to disregard any excess path data:
336
+ ```ruby
337
+ route "/user/(:id)/*", Controller
338
+ # => accepts any of the following paths:
339
+ # => "/user"
340
+ # => "/user/foo"
341
+ # => "/user/foo/bar"
342
+ ```
343
+
344
+ - re-write routes:
345
+
346
+ re-write routes allow us to extract paramaters from the route without any controller, rewriting the request's path.
347
+
348
+ they can be extreamly powerful in fairly rare but interesting circumstances.
349
+
350
+ for example:
351
+ ```ruby
352
+ route "/(:foo)/*", false
353
+ # for the request "/bar/path":
354
+ # => params[:foo] = "bar"
355
+ # => request.path_info == "/path"
356
+ ```
357
+
358
+ in a more worldly sense...
359
+ ```ruby
360
+ route ":proc/(:version){v-[\\w\\d\\.]*}/:func/*", false
361
+ # look at http://www.rubydoc.info path for /gems/plezi/0.3.2/frames ...
362
+ ```
363
+
364
+ **feature**: magic routes.
365
+
366
+ **feature**: re-write routes.
367
+
368
+ **update**: new Web App templates save the process id (pid) to the tmp folder (architecture only).
369
+
370
+ **fix**: 404 and 505 errors set content type correctly.
371
+
372
+ ***
373
+
374
+ Change log v.0.3.2
375
+
376
+ **fix**: the SSL features fix depended on Thin being defined. this caused programs without Thin server to fail. this is now fixed.
377
+
378
+ **fix**: using a single webrick server didn't trap the ^C so that it was impossible to exit the service. this is now fixed.
379
+
380
+ **fix**: a comment in the code caused the documentation to be replaced with that comment (oops...). this is now fixed.
381
+
382
+ ***
383
+
384
+ Change log v.0.3.1
385
+
386
+ **feature removed**: (Code Breaker), removed the `Plezi.default_content_type` feature. it's prone to issues.
387
+
388
+ **patched**: utf-8 encoding enforcement now works. this might disrupt non-text web-apps (which should use `Plezi.default_encoding = 'binary'` or `Plezi.default_encoding = false`).
389
+
390
+ **feature**: Enabled path rewrites to effect router - see the advanced features in the wiki home for how to apply this powerful feature. Notice that re-writing is done using the `env["PATH_INFO"]` or the `request.path_info=` method - the `request.path` method is a read only method.
391
+
392
+ **fix**: a very rare issue was found in the 404.html and 500.html handlers which caused unformatted error messages (as if the 404.html or 500.html files didn't exist). this is now fixed.
393
+
394
+ **fix**: the send_data method now sets the content-type that was set by the caller (was sending 'application/pdf' for a historic testing reason).
395
+
396
+ **fix**: minor fixes to the app generator. `plezi new app` should now place the `en.yaml` file correctly (it was making a directory instead of writing the file... oops).
397
+
398
+ ***
399
+
400
+ Change log v.0.3.0
401
+
402
+ This release breaks old code!
403
+
404
+ Re-written the RackServer class and moved more logic to middleware (request re-encoding, static file serving, index file serving, 404 error handling and exception handling are now done through middleware).
405
+
406
+ Proc safety feature is discarded for now - if you use `return` within a dynamic Ruby Proc, you WILL get an exception - just like Ruby intended you to.
407
+
408
+ File services can now be set up only through the listen call and directory listing is off *(I'm thinking of writing my own middleware for that, as the Rack::Directory seems to break apart or maybe I don't understand how to use it).
409
+
410
+ so, code that looked like this:
411
+
412
+ ```
413
+ listen
414
+
415
+ # routes
416
+
417
+ route '*', file_root: File.expand_path(File.join(Dir.pwd, 'public'))
418
+ ```
419
+
420
+ should now look like this:
421
+
422
+ ```
423
+ listen root: file_root: File.expand_path(File.join(Dir.pwd, 'public'))
424
+
425
+ # routes
426
+ ```
427
+
428
+ fix: Static file services
429
+
430
+ fix, update: I18n support
431
+
432
+ fix: ActiveRecord Tasks
433
+
434
+ update: Haml support
435
+
436
+ ***
437
+
438
+ Change log v.0.2.1
439
+
440
+ Updated some SSL features so that Thin SSL is initialized.
441
+
442
+ Support for SSL features is still very basic, as there isn't much documentation and each server handles the initialization somewhat differently (at times extremely differently).
443
+
444
+ some minor bug fixes.
445
+
446
+ ***
447
+
448
+ Change log v.0.2.0
449
+
450
+ First release that actually works well enough to do something with.