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
@@ -15,27 +15,23 @@ module Waves
15
15
  @adapter ||= ::DataMapper.setup(:main_repository, config.database[:database])
16
16
  end
17
17
 
18
- app.instance_eval do
19
-
20
- auto_eval :Models do
21
- auto_load true, :directories => [:models]
22
- end
18
+ app.auto_eval :Models do
19
+ auto_load true, :directories => [:models]
20
+ end
23
21
 
24
- auto_eval :Configurations do
25
- auto_eval :Mapping do
26
- before true do
27
- app.database #force adapter init if not already done
28
- ::DataMapper::Repository.context.push(::DataMapper::Repository.new(:main_repository))
29
- end
30
- always true do
31
- ::DataMapper::Repository.context.pop
32
- end
22
+ app.auto_eval :Configurations do
23
+ auto_eval :Mapping do
24
+ before true do
25
+ app.database #force adapter init if not already done
26
+ ::DataMapper::Repository.context.push(::DataMapper::Repository.new(:main_repository))
27
+ end
28
+ always true do
29
+ ::DataMapper::Repository.context.pop
33
30
  end
34
31
  end
35
-
36
32
  end
33
+
37
34
  end
38
-
39
35
  end
40
36
  end
41
37
  end
@@ -1,21 +1,30 @@
1
1
  module Waves
2
- module Orm # :nodoc:
3
- # Helper methods to establish an inter-ORM standard for migrations
4
- module Migration
5
-
6
- # stuff in this file largely lifted from Sequel. Thanks, bro.
2
+ module Layers
3
+
4
+ # Helper methods to establish inter-ORM standards
5
+ module ORM
7
6
 
8
7
  # Glob pattern
9
8
  MIGRATION_FILE_PATTERN = '[0-9][0-9][0-9]_*.rb'.freeze
10
9
 
10
+ def self.create_migration_for(orm)
11
+ source = migration_template(orm.to_s.snake_case, ENV['template'])
12
+ destination = migration_destination(ENV['name'])
13
+ migration_name = migration_name(ENV['name'])
14
+
15
+ context = {:class_name => migration_name.camel_case}
16
+
17
+ write_migration(context, source, destination)
18
+ end
19
+
11
20
  # Where Waves keeps its migration files
12
- def self.directory
21
+ def self.migration_directory
13
22
  :schema / :migrations
14
23
  end
15
24
 
16
25
  # Returns any found migration files in the supplied directory.
17
26
  def self.migration_files(range = nil)
18
- pattern = directory / MIGRATION_FILE_PATTERN
27
+ pattern = migration_directory / MIGRATION_FILE_PATTERN
19
28
  files = Dir[pattern].inject([]) do |m, path|
20
29
  m[File.basename(path).to_i] = path
21
30
  m
@@ -45,20 +54,20 @@ module Waves
45
54
 
46
55
  # Returns the path to the migration template file for the given ORM.
47
56
  # <em>orm</em> can be a symbol or string
48
- def self.template(orm, name=nil)
57
+ def self.migration_template(orm, name=nil)
49
58
  file = ( name || 'empty' ) + '.rb.erb'
50
59
  source = File.dirname(__FILE__) / orm / :migrations / file
51
60
  end
52
61
 
53
62
  # Given a migration name, returns the path of the file that would be created.
54
- def self.destination(name)
63
+ def self.migration_destination(name)
55
64
  version = next_migration_version
56
- directory / "#{'%03d' % version}_#{migration_name(name)}.rb"
65
+ migration_directory / "#{'%03d' % version}_#{migration_name(name)}.rb"
57
66
  end
58
67
 
59
68
  # Takes an assigns hash as the Erubis context. Keys in the hash become
60
69
  # instance variable names.
61
- def self.write_erb(context, source, destination)
70
+ def self.write_migration(context, source, destination)
62
71
  code = Erubis::Eruby.new( File.read( source ) ).evaluate( context )
63
72
  puts "Creating #{destination}"
64
73
  File.write( destination, code )
@@ -1,7 +1,3 @@
1
- gem 'sequel', '>= 2.0.0'
2
- require 'sequel'
3
- require File.dirname(__FILE__) / :sequel / :tasks / :schema if defined?(Rake)
4
-
5
1
  module Waves
6
2
  module Layers
7
3
  module ORM # :nodoc:
@@ -24,59 +20,67 @@ module Waves
24
20
  #
25
21
  def self.included(app)
26
22
 
23
+ gem 'sequel', '>= 2.0.0'
24
+ require 'sequel'
25
+ require "#{File.dirname(__FILE__)}/sequel/tasks/schema" if defined?(Rake)
26
+ require "#{File.dirname(__FILE__)}/sequel/tasks/generate" if defined?(Rake)
27
+
27
28
  def app.database ; @sequel ||= ::Sequel.open( config.database ) ; end
29
+
30
+ app.auto_create_module( :Models ) do
31
+ include AutoCode
32
+ auto_create_class :Default, ::Sequel::Model
33
+ auto_load :Default, :directories => [ :models ]
34
+ end
28
35
 
29
- app.instance_eval do
30
-
31
- auto_create_module( :Models ) do
32
- include AutoCode
33
- auto_create_class :Default, ::Sequel::Model
34
- auto_load :Default, :directories => [ :models ]
35
- end
36
-
37
- auto_eval :Models do
38
- auto_create_class true, app::Models::Default
39
- auto_load true, :directories => [ :models ]
40
- # set the Sequel dataset based on the model class name
41
- # note that this is not done for app::Models::Default, as it isn't
42
- # supposed to represent a table
43
- auto_eval true do
44
- default = superclass.basename.snake_case.pluralize.intern
45
- if @dataset && @dataset.opts[:from] != [ default ]
46
- # don't clobber dataset from autoloaded file
47
- else
48
- set_dataset Waves.application.database[ basename.snake_case.pluralize.intern ]
49
- end
36
+ app.auto_eval :Models do
37
+ auto_create_class true, app::Models::Default
38
+ auto_load true, :directories => [ :models ]
39
+ # set the Sequel dataset based on the model class name
40
+ # note that this is not done for app::Models::Default, as it isn't
41
+ # supposed to represent a table
42
+ auto_eval true do
43
+ default = superclass.basename.snake_case.pluralize.intern
44
+ if @dataset && @dataset.opts[:from] != [ default ]
45
+ # don't clobber dataset from autoloaded file
46
+ else
47
+ set_dataset Waves.application.database[ basename.snake_case.pluralize.intern ]
50
48
  end
51
49
  end
50
+ end
52
51
 
53
- Waves::Controllers::Base.module_eval do
54
- def all #:nodoc:
55
- model.all
56
- end
57
-
58
- def find( name ) #:nodoc:
59
- model[ :name => name ] or not_found
60
- end
61
-
62
- def create #:nodoc:
63
- model.create( attributes )
64
- end
65
-
66
- def delete( name ) #:nodoc:
67
- find( name ).destroy
68
- end
69
-
70
- def update( name ) #:nodoc:
71
- instance = find( name )
72
- instance.update_with_params( attributes )
73
- instance
74
- end
75
- end
52
+ Waves::Controllers::Base.instance_eval do
53
+ include Waves::Layers::ORM::Sequel::ControllerMethods
54
+ end
76
55
 
56
+ end
57
+
58
+ # Mixed into Waves::Controllers::Base. Provides ORM-specific helper methods for model access.
59
+ module ControllerMethods
60
+ def all
61
+ model.all
62
+ end
63
+
64
+ def find( name )
65
+ model[ :name => name ] or not_found
66
+ end
67
+
68
+ def create
69
+ model.create( attributes )
70
+ end
71
+
72
+ def delete( name )
73
+ find( name ).destroy
74
+ end
75
+
76
+ def update( name )
77
+ instance = find( name )
78
+ instance.update_with_params( attributes )
79
+ instance
77
80
  end
78
81
  end
79
- end
82
+
83
+ end
80
84
  end
81
85
  end
82
86
  end
@@ -0,0 +1,28 @@
1
+ namespace :generate do
2
+
3
+ desc 'Generate a Sequel 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,24 +1,16 @@
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 Sequel Migration using ENV['name']."
5
+ desc "Create a new Sequel Migration with name=<name>"
6
6
  task :migration do |task|
7
-
8
- source = Migration.template(:sequel, 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(Sequel)
16
8
  end
17
9
 
18
- desc 'Performs migration from version, to version.'
10
+ desc "Performs Sequel migrations to version=<version>"
19
11
  task :migrate do |task|
20
12
  version = ENV['version']; version = version.to_i unless version.nil?
21
- Sequel::Migrator.apply( Waves.application.database, Migration.directory , version )
13
+ Sequel::Migrator.apply( Waves.application.database, Waves::Layers::ORM.migration_directory , version )
22
14
  end
23
15
 
24
16
  end
data/lib/layers/simple.rb CHANGED
@@ -17,20 +17,13 @@ module Waves
17
17
  def app.config ; Waves.config ; end
18
18
  def app.configurations ; self::Configurations ; end
19
19
 
20
- app.instance_eval do
21
-
20
+ app.instance_eval { include AutoCode }
21
+
22
+ app.auto_create_module( :Configurations ) do
22
23
  include AutoCode
23
-
24
- auto_create_module( :Configurations ) do
25
- include AutoCode
26
- auto_create_class true, Waves::Configurations::Default
27
- auto_load :Mapping, :directories => [:configurations]
28
- auto_load true, :directories => [:configurations]
29
- auto_eval :Mapping do
30
- extend Waves::Mapping
31
- end
32
- end
33
-
24
+ auto_create_class true, Waves::Configurations::Default
25
+ auto_load :Mapping, :directories => [:configurations]
26
+ auto_load true, :directories => [:configurations]
34
27
  end
35
28
  end
36
29
  end
@@ -9,17 +9,14 @@ module Waves
9
9
 
10
10
  def self.included( app )
11
11
 
12
- app.instance_eval do
13
-
14
- auto_eval :Configurations do
15
- auto_eval :Mapping do
16
- handle(Waves::Dispatchers::NotFoundError) do
17
- response.status = 404; response.body = "404 Not Found"
18
- end
12
+ app.auto_eval :Configurations do
13
+ auto_eval :Mapping do
14
+ handle(Waves::Dispatchers::NotFoundError) do
15
+ response.status = 404; response.body = "404 Not Found"
19
16
  end
20
17
  end
21
-
22
18
  end
19
+
23
20
  end
24
21
  end
25
22
  end
@@ -0,0 +1,45 @@
1
+ require 'haml'
2
+
3
+ module Waves
4
+
5
+ module Renderers
6
+
7
+ class Scope
8
+ include Waves::Helpers::Common
9
+ include Waves::Helpers::Model
10
+ include Waves::Helpers::TagHelper
11
+ include Waves::Helpers::UrlHelper
12
+ include Waves::Helpers::View
13
+
14
+ def <<(s)
15
+ eval("@haml_buffer", @binding).push_text s # add to rendered output
16
+ end
17
+
18
+ def capture(&block)
19
+ capture_haml(nil, &block)
20
+ end
21
+
22
+ end
23
+
24
+ class Haml
25
+
26
+ include Renderers::Mixin
27
+
28
+ extension :haml
29
+
30
+ def self.render( path, assigns )
31
+ engine = ::Haml::Engine.new( template( path ) )
32
+ scope = Scope.new
33
+ helper = helper( path )
34
+ scope.meta_eval { include( helper ) }
35
+ scope.instance_eval do
36
+ assigns.each { |key,val| instance_variable_set("@#{key}",val) unless key == :request }
37
+ end
38
+ engine.render(scope, assigns)
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -7,10 +7,8 @@ module Waves
7
7
  attr_reader :application
8
8
 
9
9
  # Register a module as a Waves application.
10
- # Also, initialize the database connection if necessary.
11
10
  def << ( app )
12
11
  @application = app if Module === app
13
- # app.database if app.respond_to? 'database'
14
12
  end
15
13
 
16
14
  def instance ; Waves::Application.instance ; end
data/lib/tasks/cluster.rb CHANGED
@@ -2,7 +2,7 @@ namespace :cluster do
2
2
 
3
3
  desc 'Start a cluster of waves applications.'
4
4
  task :start do |task|
5
- using_waves_src = defined?(WAVES) || ENV['WAVES'] || File.exist( File.dirname(__FILE__) / :waves )
5
+ using_waves_src = defined?(WAVES) || ENV['WAVES'] || File.exist?( File.dirname(__FILE__) / :waves )
6
6
  script = using_waves_src ? :bin / 'waves-server' : 'waves-server'
7
7
  ( Waves::Console.config.ports || [ Waves::Console.config.port ] ).each do |port|
8
8
  cmd = "#{script} -p #{port} -c #{ENV['mode']||'development'} -d"
@@ -4,189 +4,107 @@
4
4
  # of rules for different languages
5
5
  # NOTE: this is NOT implemented yet.
6
6
  # plural and singular work directly with the English class
7
+ module Waves
8
+ module Inflect # :nodoc:
9
+ module InflectorMethods
10
+
11
+ # Define a general exception.
12
+ def word(singular, plural=nil)
13
+ plural = singular unless plural
14
+ singular_word(singular, plural)
15
+ plural_word(singular, plural)
16
+ end
7
17
 
8
- module Inflect # :nodoc:
9
- module InflectorMethods
10
-
11
- # Define a general exception.
12
- def word(singular, plural=nil)
13
- plural = singular unless plural
14
- singular_word(singular, plural)
15
- plural_word(singular, plural)
16
- end
17
-
18
- # Define a singularization exception.
19
- def singular_word(singular, plural)
20
- @singular_of[plural] = singular
21
- end
22
-
23
- # Define a pluralization exception.
24
- def plural_word(singular, plural)
25
- @plural_of[singular] = plural
26
- end
27
-
28
- # Define a general rule.
29
- def rule(singular, plural)
30
- singular_rule(singular, plural)
31
- plural_rule(singular, plural)
32
- end
33
-
34
- # Define a singularization rule.
35
- def singular_rule(singular, plural)
36
- @singular_rules << [singular, plural]
37
- end
38
-
39
- # Define a plurualization rule.
40
- def plural_rule(singular, plural)
41
- @plural_rules << [singular, plural]
42
- end
43
-
44
- # Read prepared singularization rules.
45
- def singularization_rules
46
- return @singularization_rules if @singularization_rules
47
- sorted = @singular_rules.sort_by{ |s, p| "#{p}".size }.reverse
48
- @singularization_rules = sorted.collect do |s, p|
49
- [ /#{p}$/, "#{s}" ]
18
+ # Define a singularization exception.
19
+ def singular_word(singular, plural)
20
+ @singular_of ||= {}
21
+ @singular_of[plural] = singular
50
22
  end
51
- end
52
23
 
53
- # Read prepared pluralization rules.
54
- def pluralization_rules
55
- return @pluralization_rules if @pluralization_rules
56
- sorted = @plural_rules.sort_by{ |s, p| "#{s}".size }.reverse
57
- @pluralization_rules = sorted.collect do |s, p|
58
- [ /#{s}$/, "#{p}" ]
24
+ # Define a pluralization exception.
25
+ def plural_word(singular, plural)
26
+ @plural_of ||= {}
27
+ @plural_of[singular] = plural
59
28
  end
60
- end
61
29
 
62
- #
63
- def plural_of
64
- @plural_of
65
- end
30
+ # Define a general rule.
31
+ def rule(singular, plural)
32
+ singular_rule(singular, plural)
33
+ plural_rule(singular, plural)
34
+ end
66
35
 
67
- #
68
- def singular_of
69
- @singular_of
70
- end
36
+ # Define a singularization rule.
37
+ def singular_rule(singular, plural)
38
+ (@singular_rules ||= []) << [singular, plural]
39
+ end
71
40
 
72
- # Convert an English word from plurel to singular.
73
- #
74
- # "boys".singular #=> boy
75
- # "tomatoes".singular #=> tomato
76
- #
77
- def singular(word)
78
- if result = singular_of[word]
79
- return result.dup
41
+ # Define a plurualization rule.
42
+ def plural_rule(singular, plural)
43
+ (@plural_rules ||= []) << [singular, plural]
80
44
  end
81
- result = word.dup
82
- singularization_rules.each do |(match, replacement)|
83
- break if result.gsub!(match, replacement)
45
+
46
+ # Read prepared singularization rules.
47
+ def singularization_rules
48
+ @singular_rules ||= []
49
+ return @singularization_rules if @singularization_rules
50
+ sorted = @singular_rules.sort_by{ |s, p| "#{p}".size }.reverse
51
+ @singularization_rules = sorted.collect do |s, p|
52
+ [ /#{p}$/, "#{s}" ]
53
+ end
84
54
  end
85
- return result
86
- end
87
55
 
88
- # Convert an English word from singular to plurel.
89
- #
90
- # "boy".plural #=> boys
91
- # "tomato".plural #=> tomatoes
92
- #
93
- def plural(word)
94
- if result = plural_of[word]
95
- return result.dup
56
+ # Read prepared pluralization rules.
57
+ def pluralization_rules
58
+ @plural_rules ||= []
59
+ return @pluralization_rules if @pluralization_rules
60
+ sorted = @plural_rules.sort_by{ |s, p| "#{s}".size }.reverse
61
+ @pluralization_rules = sorted.collect do |s, p|
62
+ [ /#{s}$/, "#{p}" ]
63
+ end
96
64
  end
97
- #return self.dup if /s$/ =~ self # ???
98
- result = word.dup
99
- pluralization_rules.each do |(match, replacement)|
100
- break if result.gsub!(match, replacement)
65
+
66
+ #
67
+ def plural_of
68
+ @plural_of ||= {}
101
69
  end
102
- return result
103
- end
104
- end
105
70
 
106
- class English # :nodoc:
107
- @singular_of = {}
108
- @plural_of = {}
71
+ #
72
+ def singular_of
73
+ @singular_of ||= {}
74
+ end
109
75
 
110
- @singular_rules = []
111
- @plural_rules = []
76
+ # Convert an English word from plural to singular.
77
+ #
78
+ # "boys".singular #=> boy
79
+ # "tomatoes".singular #=> tomato
80
+ #
81
+ def singular(word)
82
+ if result = singular_of[word]
83
+ return result.dup
84
+ end
85
+ result = word.dup
86
+ singularization_rules.each do |(match, replacement)|
87
+ break if result.gsub!(match, replacement)
88
+ end
89
+ return result
90
+ end
112
91
 
113
- class << self
114
- include InflectorMethods
92
+ # Convert an English word from singular to plurel.
93
+ #
94
+ # "boy".plural #=> boys
95
+ # "tomato".plural #=> tomatoes
96
+ #
97
+ def plural(word)
98
+ if result = plural_of[word]
99
+ return result.dup
100
+ end
101
+ #return self.dup if /s$/ =~ self # ???
102
+ result = word.dup
103
+ pluralization_rules.each do |(match, replacement)|
104
+ break if result.gsub!(match, replacement)
105
+ end
106
+ return result
107
+ end
115
108
  end
116
-
117
- # One argument means singular and plural are the same.
118
- word 'equipment'
119
- word 'information'
120
- word 'money'
121
- word 'species'
122
- word 'series'
123
- word 'fish'
124
- word 'sheep'
125
- word 'moose'
126
- word 'hovercraft'
127
-
128
- # Two arguments defines a singular and plural exception.
129
- word 'Swiss' , 'Swiss'
130
- word 'life' , 'lives'
131
- word 'wife' , 'wives'
132
- word 'cactus' , 'cacti'
133
- word 'goose' , 'geese'
134
- word 'criterion' , 'criteria'
135
- word 'alias' , 'aliases'
136
- word 'status' , 'statuses'
137
- word 'axis' , 'axes'
138
- word 'crisis' , 'crises'
139
- word 'testis' , 'testes'
140
- word 'child' , 'children'
141
- word 'person' , 'people'
142
- word 'potato' , 'potatoes'
143
- word 'tomato' , 'tomatoes'
144
- word 'buffalo' , 'buffaloes'
145
- word 'torpedo' , 'torpedoes'
146
- word 'quiz' , 'quizes'
147
- word 'matrix' , 'matrices'
148
- word 'vertex' , 'vetices'
149
- word 'index' , 'indices'
150
- word 'ox' , 'oxen'
151
- word 'mouse' , 'mice'
152
- word 'louse' , 'lice'
153
- word 'thesis' , 'theses'
154
- word 'thief' , 'thieves'
155
- word 'analysis' , 'analyses'
156
-
157
- # One-way singularization exception (convert plural to singular).
158
- singular_word 'cactus', 'cacti'
159
-
160
- # General rules.
161
- rule 'hive' , 'hives'
162
- rule 'rf' , 'rves'
163
- rule 'af' , 'aves'
164
- rule 'ero' , 'eroes'
165
- rule 'man' , 'men'
166
- rule 'ch' , 'ches'
167
- rule 'sh' , 'shes'
168
- rule 'ss' , 'sses'
169
- rule 'ta' , 'tum'
170
- rule 'ia' , 'ium'
171
- rule 'ra' , 'rum'
172
- rule 'ay' , 'ays'
173
- rule 'ey' , 'eys'
174
- rule 'oy' , 'oys'
175
- rule 'uy' , 'uys'
176
- rule 'y' , 'ies'
177
- rule 'x' , 'xes'
178
- rule 'lf' , 'lves'
179
- rule 'us' , 'uses'
180
- rule '' , 's'
181
-
182
- # One-way singular rules.
183
- singular_rule 'of' , 'ofs' # proof
184
- singular_rule 'o' , 'oes' # hero, heroes
185
- singular_rule 'f' , 'ves'
186
-
187
- # One-way plural rules.
188
- plural_rule 'fe' , 'ves' # safe, wife
189
- plural_rule 's' , 'ses'
190
109
  end
191
110
  end
192
-