waves 0.7.6 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. data/app/Rakefile +64 -6
  2. data/app/configurations/development.rb.erb +2 -1
  3. data/app/configurations/mapping.rb.erb +1 -0
  4. data/app/configurations/production.rb.erb +1 -0
  5. data/app/lib/application.rb.erb +2 -2
  6. data/bin/waves +36 -1
  7. data/doc/HISTORY +44 -0
  8. data/doc/LICENSE +22 -0
  9. data/doc/rdoc/classes/Erubis/Context.html +218 -0
  10. data/doc/rdoc/classes/Kernel.html +145 -0
  11. data/doc/rdoc/classes/Symbol.html +154 -0
  12. data/doc/rdoc/classes/Tempfile.html +161 -0
  13. data/doc/rdoc/classes/Waves.html +455 -0
  14. data/doc/rdoc/classes/Waves/Application.html +371 -0
  15. data/doc/rdoc/classes/Waves/Blackboard.html +296 -0
  16. data/doc/rdoc/classes/Waves/Configurations.html +283 -0
  17. data/doc/rdoc/classes/Waves/Configurations/Base.html +209 -0
  18. data/doc/rdoc/classes/Waves/Configurations/Default.html +237 -0
  19. data/doc/rdoc/classes/Waves/Console.html +187 -0
  20. data/doc/rdoc/classes/Waves/Controllers.html +203 -0
  21. data/doc/rdoc/classes/Waves/Controllers/Base.html +151 -0
  22. data/doc/rdoc/classes/Waves/Controllers/Mixin.html +312 -0
  23. data/doc/rdoc/classes/Waves/Dispatchers.html +118 -0
  24. data/doc/rdoc/classes/Waves/Dispatchers/Base.html +198 -0
  25. data/doc/rdoc/classes/Waves/Dispatchers/Default.html +224 -0
  26. data/doc/rdoc/classes/Waves/Dispatchers/NotFoundError.html +122 -0
  27. data/doc/rdoc/classes/Waves/Dispatchers/Redirect.html +173 -0
  28. data/doc/rdoc/classes/Waves/Foundations.html +131 -0
  29. data/doc/rdoc/classes/Waves/Foundations/Default.html +179 -0
  30. data/doc/rdoc/classes/Waves/Foundations/Simple.html +167 -0
  31. data/doc/rdoc/classes/Waves/Helpers.html +176 -0
  32. data/doc/rdoc/classes/Waves/Helpers/AssetHelper.html +212 -0
  33. data/doc/rdoc/classes/Waves/Helpers/Common.html +213 -0
  34. data/doc/rdoc/classes/Waves/Helpers/Default.html +135 -0
  35. data/doc/rdoc/classes/Waves/Helpers/Form.html +201 -0
  36. data/doc/rdoc/classes/Waves/Helpers/Formatting.html +232 -0
  37. data/doc/rdoc/classes/Waves/Helpers/Model.html +194 -0
  38. data/doc/rdoc/classes/Waves/Helpers/NumberHelper.html +165 -0
  39. data/doc/rdoc/classes/Waves/Helpers/TagHelper.html +226 -0
  40. data/doc/rdoc/classes/Waves/Helpers/UrlHelper.html +242 -0
  41. data/doc/rdoc/classes/Waves/Helpers/View.html +163 -0
  42. data/doc/rdoc/classes/Waves/Inflect/InflectorMethods.html +475 -0
  43. data/doc/rdoc/classes/Waves/Layers.html +175 -0
  44. data/doc/rdoc/classes/Waves/Layers/DefaultErrors.html +161 -0
  45. data/doc/rdoc/classes/Waves/Layers/Inflect.html +119 -0
  46. data/doc/rdoc/classes/Waves/Layers/Inflect/English.html +168 -0
  47. data/doc/rdoc/classes/Waves/Layers/Inflect/English/Rules.html +112 -0
  48. data/doc/rdoc/classes/Waves/Layers/Inflect/English/StringMethods.html +194 -0
  49. data/doc/rdoc/classes/Waves/Layers/MVC.html +204 -0
  50. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord.html +239 -0
  51. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/ControllerMethods.html +246 -0
  52. data/doc/rdoc/classes/Waves/Layers/ORM/ActiveRecord/Symbol.html +132 -0
  53. data/doc/rdoc/classes/Waves/Layers/ORM/DataMapper.html +166 -0
  54. data/doc/rdoc/classes/Waves/Layers/ORM/Filebase.html +157 -0
  55. data/doc/rdoc/classes/Waves/Layers/ORM/Sequel.html +232 -0
  56. data/doc/rdoc/classes/Waves/Layers/ORM/Sequel/ControllerMethods.html +246 -0
  57. data/doc/rdoc/classes/Waves/Layers/Simple.html +169 -0
  58. data/doc/rdoc/classes/Waves/Layers/SimpleErrors.html +159 -0
  59. data/doc/rdoc/classes/Waves/Logger.html +288 -0
  60. data/doc/rdoc/classes/Waves/Mapping.html +760 -0
  61. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls.html +129 -0
  62. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/GetRules.html +174 -0
  63. data/doc/rdoc/classes/Waves/Mapping/PrettyUrls/RestRules.html +180 -0
  64. data/doc/rdoc/classes/Waves/MimeTypes.html +200 -0
  65. data/doc/rdoc/classes/Waves/Renderers/Erubis.html +162 -0
  66. data/doc/rdoc/classes/Waves/Renderers/Haml.html +160 -0
  67. data/doc/rdoc/classes/Waves/Renderers/Markaby.html +167 -0
  68. data/doc/rdoc/classes/Waves/Renderers/Mixin.html +191 -0
  69. data/doc/rdoc/classes/Waves/Renderers/Scope.html +181 -0
  70. data/doc/rdoc/classes/Waves/Request.html +441 -0
  71. data/doc/rdoc/classes/Waves/Request/ParseError.html +111 -0
  72. data/doc/rdoc/classes/Waves/Response.html +283 -0
  73. data/doc/rdoc/classes/Waves/ResponseMixin.html +460 -0
  74. data/doc/rdoc/classes/Waves/ResponseProxy.html +269 -0
  75. data/doc/rdoc/classes/Waves/Server.html +488 -0
  76. data/doc/rdoc/classes/Waves/Session.html +330 -0
  77. data/doc/rdoc/classes/Waves/Utilities/Hash.html +185 -0
  78. data/doc/rdoc/classes/Waves/Utilities/Integer.html +424 -0
  79. data/doc/rdoc/classes/Waves/Utilities/Module.html +174 -0
  80. data/doc/rdoc/classes/Waves/Utilities/Object.html +155 -0
  81. data/doc/rdoc/classes/Waves/Utilities/Proc.html +145 -0
  82. data/doc/rdoc/classes/Waves/Utilities/String.html +290 -0
  83. data/doc/rdoc/classes/Waves/Views.html +278 -0
  84. data/doc/rdoc/classes/Waves/Views/Base.html +118 -0
  85. data/doc/rdoc/classes/Waves/Views/Mixin.html +279 -0
  86. data/doc/rdoc/classes/Waves/Views/NoTemplateError.html +111 -0
  87. data/doc/rdoc/created.rid +1 -0
  88. data/doc/rdoc/files/README_rdoc.html +415 -0
  89. data/doc/rdoc/files/bin/waves.html +135 -0
  90. data/doc/rdoc/files/doc/HISTORY.html +265 -0
  91. data/doc/rdoc/files/lib/commands/waves-console_rb.html +110 -0
  92. data/doc/rdoc/files/lib/commands/waves-server_rb.html +108 -0
  93. data/doc/rdoc/files/lib/controllers/base_rb.html +101 -0
  94. data/doc/rdoc/files/lib/controllers/mixin_rb.html +101 -0
  95. data/doc/rdoc/files/lib/dispatchers/base_rb.html +101 -0
  96. data/doc/rdoc/files/lib/dispatchers/default_rb.html +101 -0
  97. data/doc/rdoc/files/lib/foundations/default_rb.html +101 -0
  98. data/doc/rdoc/files/lib/foundations/simple_rb.html +101 -0
  99. data/doc/rdoc/files/lib/helpers/asset_helper_rb.html +101 -0
  100. data/doc/rdoc/files/lib/helpers/common_rb.html +101 -0
  101. data/doc/rdoc/files/lib/helpers/default_rb.html +101 -0
  102. data/doc/rdoc/files/lib/helpers/form_rb.html +101 -0
  103. data/doc/rdoc/files/lib/helpers/formatting_rb.html +108 -0
  104. data/doc/rdoc/files/lib/helpers/model_rb.html +101 -0
  105. data/doc/rdoc/files/lib/helpers/number_helper_rb.html +101 -0
  106. data/doc/rdoc/files/lib/helpers/tag_helper_rb.html +101 -0
  107. data/doc/rdoc/files/lib/helpers/url_helper_rb.html +101 -0
  108. data/doc/rdoc/files/lib/helpers/view_rb.html +101 -0
  109. data/doc/rdoc/files/lib/layers/default_errors_rb.html +101 -0
  110. data/doc/rdoc/files/lib/layers/inflect/english/rules_rb.html +101 -0
  111. data/doc/rdoc/files/lib/layers/inflect/english/string_rb.html +101 -0
  112. data/doc/rdoc/files/lib/layers/inflect/english_rb.html +109 -0
  113. data/doc/rdoc/files/lib/layers/mvc_rb.html +101 -0
  114. data/doc/rdoc/files/lib/layers/orm/active_record/tasks/generate_rb.html +101 -0
  115. data/doc/rdoc/files/lib/layers/orm/active_record/tasks/schema_rb.html +101 -0
  116. data/doc/rdoc/files/lib/layers/orm/active_record_rb.html +108 -0
  117. data/doc/rdoc/files/lib/layers/orm/data_mapper_rb.html +108 -0
  118. data/doc/rdoc/files/lib/layers/orm/filebase_rb.html +101 -0
  119. data/doc/rdoc/files/lib/layers/orm/migration_rb.html +101 -0
  120. data/doc/rdoc/files/lib/layers/orm/sequel/tasks/generate_rb.html +101 -0
  121. data/doc/rdoc/files/lib/layers/orm/sequel/tasks/schema_rb.html +101 -0
  122. data/doc/rdoc/files/lib/layers/orm/sequel_rb.html +108 -0
  123. data/doc/rdoc/files/lib/layers/simple_errors_rb.html +101 -0
  124. data/doc/rdoc/files/lib/layers/simple_rb.html +101 -0
  125. data/doc/rdoc/files/lib/mapping/mapping_rb.html +101 -0
  126. data/doc/rdoc/files/lib/mapping/pretty_urls_rb.html +101 -0
  127. data/doc/rdoc/files/lib/renderers/erubis_rb.html +108 -0
  128. data/doc/rdoc/files/lib/renderers/haml_rb.html +108 -0
  129. data/doc/rdoc/files/lib/renderers/markaby_rb.html +108 -0
  130. data/doc/rdoc/files/lib/renderers/mixin_rb.html +101 -0
  131. data/doc/rdoc/files/lib/runtime/application_rb.html +107 -0
  132. data/doc/rdoc/files/lib/runtime/blackboard_rb.html +101 -0
  133. data/doc/rdoc/files/lib/runtime/configuration_rb.html +101 -0
  134. data/doc/rdoc/files/lib/runtime/console_rb.html +101 -0
  135. data/doc/rdoc/files/lib/runtime/debugger_rb.html +101 -0
  136. data/doc/rdoc/files/lib/runtime/logger_rb.html +108 -0
  137. data/doc/rdoc/files/lib/runtime/mime_types_rb.html +101 -0
  138. data/doc/rdoc/files/lib/runtime/request_rb.html +101 -0
  139. data/doc/rdoc/files/lib/runtime/response_mixin_rb.html +101 -0
  140. data/doc/rdoc/files/lib/runtime/response_proxy_rb.html +101 -0
  141. data/doc/rdoc/files/lib/runtime/response_rb.html +101 -0
  142. data/doc/rdoc/files/lib/runtime/server_rb.html +108 -0
  143. data/doc/rdoc/files/lib/runtime/session_rb.html +101 -0
  144. data/doc/rdoc/files/lib/tasks/cluster_rb.html +101 -0
  145. data/doc/rdoc/files/lib/tasks/gem_rb.html +108 -0
  146. data/doc/rdoc/files/lib/tasks/generate_rb.html +101 -0
  147. data/doc/rdoc/files/lib/utilities/hash_rb.html +101 -0
  148. data/doc/rdoc/files/lib/utilities/inflect_rb.html +111 -0
  149. data/doc/rdoc/files/lib/utilities/integer_rb.html +101 -0
  150. data/doc/rdoc/files/lib/utilities/module_rb.html +101 -0
  151. data/doc/rdoc/files/lib/utilities/object_rb.html +101 -0
  152. data/doc/rdoc/files/lib/utilities/proc_rb.html +101 -0
  153. data/doc/rdoc/files/lib/utilities/string_rb.html +101 -0
  154. data/doc/rdoc/files/lib/utilities/symbol_rb.html +101 -0
  155. data/doc/rdoc/files/lib/utilities/tempfile_rb.html +115 -0
  156. data/doc/rdoc/files/lib/views/base_rb.html +101 -0
  157. data/doc/rdoc/files/lib/views/mixin_rb.html +101 -0
  158. data/doc/rdoc/files/lib/waves_rb.html +195 -0
  159. data/doc/rdoc/fr_class_index.html +104 -0
  160. data/doc/rdoc/fr_file_index.html +97 -0
  161. data/doc/rdoc/fr_method_index.html +233 -0
  162. data/doc/rdoc/index.html +24 -0
  163. data/doc/rdoc/rdoc-style.css +208 -0
  164. data/lib/foundations/default.rb +1 -0
  165. data/lib/layers/default_errors.rb +10 -13
  166. data/lib/layers/inflect/english.rb +24 -0
  167. data/lib/layers/inflect/english/rules.rb +88 -0
  168. data/lib/layers/inflect/english/string.rb +24 -0
  169. data/lib/layers/mvc.rb +31 -35
  170. data/lib/layers/orm/active_record.rb +83 -32
  171. data/lib/layers/orm/active_record/tasks/generate.rb +28 -0
  172. data/lib/layers/orm/active_record/tasks/schema.rb +7 -15
  173. data/lib/layers/orm/data_mapper.rb +12 -16
  174. data/lib/layers/orm/migration.rb +20 -11
  175. data/lib/layers/orm/sequel.rb +53 -49
  176. data/lib/layers/orm/sequel/tasks/generate.rb +28 -0
  177. data/lib/layers/orm/sequel/tasks/schema.rb +6 -14
  178. data/lib/layers/simple.rb +6 -13
  179. data/lib/layers/simple_errors.rb +5 -8
  180. data/lib/renderers/haml.rb +45 -0
  181. data/lib/runtime/application.rb +0 -2
  182. data/lib/tasks/cluster.rb +1 -1
  183. data/lib/utilities/inflect.rb +86 -168
  184. data/lib/utilities/integer.rb +23 -16
  185. data/lib/utilities/module.rb +19 -15
  186. data/lib/utilities/object.rb +22 -14
  187. data/lib/utilities/proc.rb +13 -7
  188. data/lib/utilities/string.rb +0 -12
  189. data/lib/utilities/symbol.rb +4 -1
  190. data/lib/utilities/tempfile.rb +9 -0
  191. data/lib/waves.rb +3 -1
  192. data/samples/blog/Rakefile +14 -0
  193. data/samples/blog/bin/waves-console +3 -0
  194. data/samples/blog/bin/waves-server +3 -0
  195. data/samples/blog/blog.db +0 -0
  196. data/samples/blog/configurations/development.rb +31 -0
  197. data/samples/blog/configurations/mapping.rb +23 -0
  198. data/samples/blog/configurations/production.rb +30 -0
  199. data/samples/blog/doc/EMTPY +0 -0
  200. data/samples/blog/lib/application.rb +5 -0
  201. data/samples/blog/models/comment.rb +14 -0
  202. data/samples/blog/models/entry.rb +14 -0
  203. data/samples/blog/public/css/site.css +2 -0
  204. data/samples/blog/public/javascript/site.js +13 -0
  205. data/samples/blog/schema/migrations/001_initial_schema.rb +17 -0
  206. data/samples/blog/schema/migrations/002_add_comments.rb +18 -0
  207. data/samples/blog/schema/migrations/templates/empty.rb.erb +9 -0
  208. data/samples/blog/startup.rb +6 -0
  209. data/samples/blog/templates/comment/add.mab +10 -0
  210. data/samples/blog/templates/comment/list.mab +6 -0
  211. data/samples/blog/templates/entry/editor.mab +13 -0
  212. data/samples/blog/templates/entry/list.mab +11 -0
  213. data/samples/blog/templates/entry/show.mab +9 -0
  214. data/samples/blog/templates/entry/summary.mab +5 -0
  215. data/samples/blog/templates/errors/not_found_404.mab +2 -0
  216. data/samples/blog/templates/errors/server_error_500.mab +2 -0
  217. data/samples/blog/templates/layouts/default.mab +17 -0
  218. data/samples/jub/Rakefile +72 -0
  219. data/samples/jub/bin/waves-console +4 -0
  220. data/samples/jub/bin/waves-server +4 -0
  221. data/samples/jub/configurations/development.rb +31 -0
  222. data/samples/jub/configurations/mapping.rb +18 -0
  223. data/samples/jub/configurations/production.rb +31 -0
  224. data/samples/jub/lib/application.rb +5 -0
  225. data/samples/jub/startup.rb +6 -0
  226. data/samples/jub/templates/errors/not_found_404.mab +2 -0
  227. data/samples/jub/templates/errors/server_error_500.mab +2 -0
  228. data/samples/jub/templates/layouts/default.mab +14 -0
  229. data/verify/app_generation/helpers.rb +24 -0
  230. data/verify/app_generation/startup.rb +39 -0
  231. data/verify/blackboard/blackboard_verify.rb +92 -0
  232. data/verify/blackboard/helpers.rb +5 -0
  233. data/verify/configurations/attributes.rb +37 -0
  234. data/verify/configurations/helpers.rb +1 -0
  235. data/verify/configurations/rack_integration.rb +29 -0
  236. data/verify/controllers/base.rb +37 -0
  237. data/verify/controllers/helpers.rb +13 -0
  238. data/verify/controllers/interface.rb +51 -0
  239. data/verify/core/helpers.rb +3 -0
  240. data/verify/core/utilities.rb +177 -0
  241. data/verify/foundations/default.rb +86 -0
  242. data/verify/foundations/default_application/Rakefile +14 -0
  243. data/verify/foundations/default_application/bin/waves-console +3 -0
  244. data/verify/foundations/default_application/bin/waves-server +3 -0
  245. data/verify/foundations/default_application/configurations/development.rb +26 -0
  246. data/verify/foundations/default_application/configurations/mapping.rb +14 -0
  247. data/verify/foundations/default_application/configurations/production.rb +30 -0
  248. data/verify/foundations/default_application/controllers/default.rb +15 -0
  249. data/verify/foundations/default_application/controllers/loaded.rb +15 -0
  250. data/verify/foundations/default_application/defaultapplication.db +0 -0
  251. data/verify/foundations/default_application/helpers/loaded.rb +10 -0
  252. data/verify/foundations/default_application/lib/application.rb +5 -0
  253. data/verify/foundations/default_application/models/default.rb +13 -0
  254. data/verify/foundations/default_application/models/loaded.rb +13 -0
  255. data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +9 -0
  256. data/verify/foundations/default_application/startup.rb +7 -0
  257. data/verify/foundations/default_application/templates/errors/not_found_404.mab +2 -0
  258. data/verify/foundations/default_application/templates/errors/server_error_500.mab +2 -0
  259. data/verify/foundations/default_application/templates/layouts/default.mab +14 -0
  260. data/verify/foundations/default_application/views/default.rb +7 -0
  261. data/verify/foundations/default_application/views/loaded.rb +15 -0
  262. data/verify/foundations/helpers.rb +1 -0
  263. data/verify/foundations/simple.rb +25 -0
  264. data/verify/helpers.rb +76 -0
  265. data/verify/layers/data_mapper/association_verify.rb +87 -0
  266. data/verify/layers/default_errors.rb +29 -0
  267. data/verify/layers/helpers.rb +1 -0
  268. data/verify/layers/migration.rb +33 -0
  269. data/verify/layers/sequel/model.rb +41 -0
  270. data/verify/layers/sequeltest.db +0 -0
  271. data/verify/mapping/always.rb +19 -0
  272. data/verify/mapping/filters.rb +65 -0
  273. data/verify/mapping/handle.rb +24 -0
  274. data/verify/mapping/helpers.rb +7 -0
  275. data/verify/mapping/matches.rb +27 -0
  276. data/verify/mapping/named.rb +29 -0
  277. data/verify/mapping/options.rb +17 -0
  278. data/verify/mapping/path.rb +40 -0
  279. data/verify/mapping/response_proxy.rb +50 -0
  280. data/verify/mapping/threaded.rb +25 -0
  281. data/verify/requests/helpers.rb +16 -0
  282. data/verify/requests/request.rb +73 -0
  283. data/verify/requests/response.rb +59 -0
  284. data/verify/requests/session.rb +54 -0
  285. data/verify/views/helpers.rb +1 -0
  286. data/verify/views/rendering.rb +34 -0
  287. data/verify/views/templates/foo.erb +0 -0
  288. data/verify/views/templates/moo.erb +0 -0
  289. data/verify/views/templates/moo.mab +0 -0
  290. metadata +597 -224
  291. data/lib/utilities/kernel.rb +0 -34
@@ -11,6 +11,7 @@ module Waves
11
11
 
12
12
  app.instance_eval do
13
13
 
14
+ include Waves::Layers::Inflect::English
14
15
  include Waves::Layers::Simple
15
16
  include Waves::Layers::MVC
16
17
  include Waves::Layers::DefaultErrors
@@ -6,23 +6,20 @@ module Waves
6
6
 
7
7
  def self.included( app )
8
8
 
9
- app.instance_eval do
10
-
11
- auto_eval :Configurations do
12
- auto_eval :Mapping do
13
- extend Waves::Mapping
14
- handle(Waves::Dispatchers::NotFoundError) do
15
- html = Waves.application.views[:errors].process( request ) do
16
- not_found_404( :error => Waves::Dispatchers::NotFoundError )
17
- end
18
- response.status = '404'
19
- response.content_type = 'text/html'
20
- response.body = html
9
+ app.auto_eval :Configurations do
10
+ auto_eval :Mapping do
11
+ extend Waves::Mapping
12
+ handle(Waves::Dispatchers::NotFoundError) do
13
+ html = Waves.application.views[:errors].process( request ) do
14
+ not_found_404( :error => Waves::Dispatchers::NotFoundError )
21
15
  end
16
+ response.status = '404'
17
+ response.content_type = 'text/html'
18
+ response.body = html
22
19
  end
23
20
  end
24
-
25
21
  end
22
+
26
23
  end
27
24
  end
28
25
  end
@@ -0,0 +1,24 @@
1
+ require 'layers/inflect/english/rules'
2
+ require 'layers/inflect/english/string'
3
+ module Waves
4
+ module Layers
5
+ module Inflect
6
+ module English
7
+
8
+ def self.included(app)
9
+
10
+
11
+
12
+ String.class_eval do
13
+ include Waves::Layers::Inflect::English::StringMethods
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+
24
+
@@ -0,0 +1,88 @@
1
+ module Waves
2
+ module Layers
3
+ module Inflect
4
+ module English
5
+ # Extends Waves::Inflect::InflectorMethods
6
+ module Rules
7
+
8
+ extend Waves::Inflect::InflectorMethods
9
+
10
+ # One argument means singular and plural are the same.
11
+ word 'equipment'
12
+ word 'information'
13
+ word 'money'
14
+ word 'species'
15
+ word 'series'
16
+ word 'fish'
17
+ word 'sheep'
18
+ word 'moose'
19
+ word 'hovercraft'
20
+
21
+ # Two arguments defines a singular and plural exception.
22
+ word 'Swiss' , 'Swiss'
23
+ word 'life' , 'lives'
24
+ word 'wife' , 'wives'
25
+ word 'cactus' , 'cacti'
26
+ word 'goose' , 'geese'
27
+ word 'criterion' , 'criteria'
28
+ word 'alias' , 'aliases'
29
+ word 'status' , 'statuses'
30
+ word 'axis' , 'axes'
31
+ word 'crisis' , 'crises'
32
+ word 'testis' , 'testes'
33
+ word 'child' , 'children'
34
+ word 'person' , 'people'
35
+ word 'potato' , 'potatoes'
36
+ word 'tomato' , 'tomatoes'
37
+ word 'buffalo' , 'buffaloes'
38
+ word 'torpedo' , 'torpedoes'
39
+ word 'quiz' , 'quizes'
40
+ word 'matrix' , 'matrices'
41
+ word 'vertex' , 'vetices'
42
+ word 'index' , 'indices'
43
+ word 'ox' , 'oxen'
44
+ word 'mouse' , 'mice'
45
+ word 'louse' , 'lice'
46
+ word 'thesis' , 'theses'
47
+ word 'thief' , 'thieves'
48
+ word 'analysis' , 'analyses'
49
+
50
+ # One-way singularization exception (convert plural to singular).
51
+ singular_word 'cactus', 'cacti'
52
+
53
+ # General rules.
54
+ rule 'hive' , 'hives'
55
+ rule 'rf' , 'rves'
56
+ rule 'af' , 'aves'
57
+ rule 'ero' , 'eroes'
58
+ rule 'man' , 'men'
59
+ rule 'ch' , 'ches'
60
+ rule 'sh' , 'shes'
61
+ rule 'ss' , 'sses'
62
+ rule 'ta' , 'tum'
63
+ rule 'ia' , 'ium'
64
+ rule 'ra' , 'rum'
65
+ rule 'ay' , 'ays'
66
+ rule 'ey' , 'eys'
67
+ rule 'oy' , 'oys'
68
+ rule 'uy' , 'uys'
69
+ rule 'y' , 'ies'
70
+ rule 'x' , 'xes'
71
+ rule 'lf' , 'lves'
72
+ rule 'us' , 'uses'
73
+ rule '' , 's'
74
+
75
+ # One-way singular rules.
76
+ singular_rule 'of' , 'ofs' # proof
77
+ singular_rule 'o' , 'oes' # hero, heroes
78
+ singular_rule 'f' , 'ves'
79
+
80
+ # One-way plural rules.
81
+ plural_rule 'fe' , 'ves' # safe, wife
82
+ plural_rule 's' , 'ses'
83
+
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,24 @@
1
+ module Waves
2
+ module Layers
3
+ module Inflect
4
+ module English
5
+ module StringMethods
6
+
7
+ def singular
8
+ English::Rules.singular(self)
9
+ end
10
+
11
+ alias_method(:singularize, :singular)
12
+
13
+ def plural
14
+ English::Rules.plural(self)
15
+ end
16
+
17
+ alias_method(:pluralize, :plural)
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+
data/lib/layers/mvc.rb CHANGED
@@ -13,45 +13,41 @@ module Waves
13
13
  def app.controllers ; self::Controllers ; end
14
14
  def app.helpers ; self::Helpers ; end
15
15
 
16
+ app.auto_create_module( :Models ) do
17
+ include AutoCode
18
+ auto_create_class :Default
19
+ auto_load :Default, :directories => [:models]
20
+ end
21
+
22
+ app.auto_eval( :Models ) do
23
+ auto_create_class true, app::Models::Default
24
+ auto_load true, :directories => [ :models ]
25
+ end
16
26
 
17
- app.instance_eval do
18
-
19
- auto_create_module( :Models ) do
20
- include AutoCode
21
- auto_create_class :Default
22
- auto_load :Default, :directories => [:models]
23
- end
24
-
25
- auto_eval( :Models ) do
26
- auto_create_class true, app::Models::Default
27
- auto_load true, :directories => [ :models ]
28
- end
29
-
30
- auto_create_module( :Views ) { include AutoCode }
31
-
32
- auto_eval( :Views ) do
33
- auto_create_class :Default, Waves::Views::Base
34
- auto_load :Default, :directories => [:views]
35
- auto_create_class true, app::Views::Default
36
- auto_load true, :directories => [ :views ]
37
- end
27
+ app.auto_create_module( :Views ) { include AutoCode }
28
+
29
+ app.auto_eval( :Views ) do
30
+ auto_create_class :Default, Waves::Views::Base
31
+ auto_load :Default, :directories => [:views]
32
+ auto_create_class true, app::Views::Default
33
+ auto_load true, :directories => [ :views ]
34
+ end
38
35
 
39
- auto_create_module( :Controllers ) { include AutoCode }
40
-
41
- auto_eval( :Controllers ) do
42
- auto_create_class :Default, Waves::Controllers::Base
43
- auto_load :Default, :directories => [:controllers]
44
- auto_create_class true, app::Controllers::Default
45
- auto_load true, :directories => [ :controllers ]
46
- end
36
+ app.auto_create_module( :Controllers ) { include AutoCode }
37
+
38
+ app.auto_eval( :Controllers ) do
39
+ auto_create_class :Default, Waves::Controllers::Base
40
+ auto_load :Default, :directories => [:controllers]
41
+ auto_create_class true, app::Controllers::Default
42
+ auto_load true, :directories => [ :controllers ]
43
+ end
47
44
 
48
- auto_create_module( :Helpers ) do
49
- include AutoCode
50
- auto_create_module { include Waves::Helpers::Default }
51
- auto_load true, :directories => [ :helpers ]
52
- end
45
+ app.auto_create_module( :Helpers ) do
46
+ include AutoCode
47
+ auto_create_module { include Waves::Helpers::Default }
48
+ auto_load true, :directories => [ :helpers ]
49
+ end
53
50
 
54
- end
55
51
  end
56
52
  end
57
53
  end
@@ -1,41 +1,92 @@
1
- class Symbol
2
- # Protect ActiveRecord from itself by undefining the to_proc method.
3
- # Don't worry, AR will redefine it.
4
- alias :extensions_to_proc :to_proc
5
- remove_method :to_proc
6
- end
7
- require 'active_record'
8
-
9
- if defined?(Rake)
10
- require File.dirname(__FILE__) / :active_record / :tasks / :schema
11
- end
12
-
13
1
  module Waves
14
- module Orm
15
-
16
- Model = ::ActiveRecord::Base
2
+ module Layers
3
+ module ORM
17
4
 
18
- module ActiveRecord
5
+ # Sets up the ActiveRecord connection and configures AutoCode on Models, so that constants in that
6
+ # namespace get loaded from file or created as subclasses of Models::Default
7
+ module ActiveRecord
8
+
9
+ # On inclusion, this module:
10
+ # - creates on the application module a database method that establishes and returns the ActiveRecord connection
11
+ # - arranges for autoloading/autocreation of missing constants in the Models namespace
12
+ # - defines ActiveRecord-specific helper methods on Waves::Controllers::Base
13
+ #
14
+ # The controller helper methdods are:
15
+ # - all
16
+ # - find(name)
17
+ # - create
18
+ # - delete(name)
19
+ # - update(name)
20
+
21
+ def self.included(app)
22
+
23
+ class Symbol
24
+ # Protect ActiveRecord from itself by undefining the to_proc method.
25
+ # Don't worry, AR will redefine it.
26
+ alias :extensions_to_proc :to_proc
27
+ remove_method :to_proc
28
+ end
29
+ require 'active_record'
30
+ require "#{File.dirname(__FILE__)}/active_record/tasks/schema" if defined?(Rake)
31
+ require "#{File.dirname(__FILE__)}/active_record/tasks/generate" if defined?(Rake)
32
+
33
+ def app.database
34
+ unless @database
35
+ ::ActiveRecord::Base.establish_connection(config.database)
36
+ @database = ::ActiveRecord::Base.connection
37
+ end
38
+ @database
39
+ end
40
+
41
+ app.auto_create_module( :Models ) do
42
+ include AutoCode
43
+ auto_create_class :Default, ::ActiveRecord::Base
44
+ auto_load :Default, :directories => [ :models ]
45
+ end
46
+
47
+ app.auto_eval :Models do
48
+ auto_create_class true, app::Models::Default
49
+ auto_load true, :directories => [ :models ]
19
50
 
20
- def active_record
21
- unless @active_record
22
- ::ActiveRecord::Base.establish_connection(config.database)
23
- @active_record = ::ActiveRecord::Base.connection
51
+ auto_eval true do
52
+ app.database
53
+ set_table_name basename.snake_case.pluralize.intern
54
+ end
55
+ end
56
+
57
+ Waves::Controllers::Base.instance_eval do
58
+ include Waves::Layers::ORM::ActiveRecord::ControllerMethods
59
+ end
60
+
24
61
  end
25
- @active_record
26
- end
27
-
28
- def database
29
- @database ||= active_record
30
- end
31
-
32
- def model_config(context, name)
33
- active_record
34
- context.set_table_name(name)
62
+
63
+ # Mixed into Waves::Controllers::Base. Provides ORM-specific helper methods for model access.
64
+ module ControllerMethods
65
+ def all
66
+ model.find(:all)
67
+ end
68
+
69
+ def find( id )
70
+ model.find(id) or not_found
71
+ end
72
+
73
+ def create
74
+ model.create( attributes )
75
+ end
76
+
77
+ def delete( id )
78
+ find( id ).destroy
79
+ end
80
+
81
+ def update( id )
82
+ instance = find( id )
83
+ instance.update_attributes( attributes )
84
+ instance
85
+ end
86
+ end
87
+
35
88
  end
36
-
37
89
  end
38
90
  end
39
91
  end
40
92
 
41
- ::Application.extend(Waves::Orm::ActiveRecord)
@@ -0,0 +1,28 @@
1
+ namespace :generate do
2
+
3
+ desc 'Generate an ActiveRecord model, with name=<name>'
4
+ task :model do |task|
5
+ name = ENV['name']
6
+ model_name = name.camel_case
7
+ raise "Cannot generate Default yet" if model_name == 'Default'
8
+
9
+ filename = File.expand_path "models/#{name}.rb"
10
+ if File.exist?(filename)
11
+ $stderr.puts "#{filename} already exists"
12
+ exit
13
+ end
14
+
15
+ model = <<TEXT
16
+ module #{Waves.application.name}
17
+ module Models
18
+ class #{model_name} < Default
19
+
20
+ end
21
+ end
22
+ end
23
+ TEXT
24
+
25
+ File.write( filename, model )
26
+ end
27
+
28
+ end
@@ -1,28 +1,20 @@
1
- require File.dirname(__FILE__) / ".." / ".." / :migration
2
- include Waves::Orm
1
+ require "#{File.dirname(__FILE__)}/../../migration"
2
+
3
3
  namespace :schema do
4
4
 
5
- desc "Create a new ActiveRecord Migration using ENV['name']."
5
+ desc "Create ActiveRecord migration with name=<name>"
6
6
  task :migration do |task|
7
-
8
- source = Migration.template(:active_record, ENV['template'])
9
- destination = Migration.destination(ENV['name'])
10
- migration_name = Migration.migration_name(ENV['name'])
11
-
12
- context = {:class_name => migration_name.camel_case}
13
-
14
- Migration.write_erb(context, source, destination)
15
-
7
+ Waves::Layers::ORM.create_migration_for(ActiveRecord)
16
8
  end
17
9
 
18
- desc 'Performs migration from version, to version.'
10
+ desc "Performs ActiveRecord migrations to version=<version>"
19
11
  task :migrate => :connect do |task|
20
12
  version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
21
- ActiveRecord::Migrator.migrate(Migration.directory, version)
13
+ ActiveRecord::Migrator.migrate(Waves::Layers::ORM.migration_directory, version)
22
14
  end
23
15
 
24
16
  task :connect do
25
- Application.database
17
+ Waves.application.database
26
18
  ActiveRecord::Base.logger = Logger.new($stdout)
27
19
  end
28
20