rango 0.2.3 → 0.2.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) hide show
  1. data/.gitignore +2 -2
  2. data/CHANGELOG +9 -0
  3. data/CONTRIBUTORS +0 -1
  4. data/Gemfile +2 -6
  5. data/lib/rango.rb +10 -7
  6. data/lib/rango/cli.rb +1 -1
  7. data/lib/rango/contrib/pagination/adapters/sequel.rb +6 -2
  8. data/lib/rango/controller.rb +24 -20
  9. data/lib/rango/core_ext.rb +54 -59
  10. data/lib/rango/exceptions.rb +2 -2
  11. data/lib/rango/gv/router.rb +1 -1
  12. data/lib/rango/gv/scaffolding.rb +0 -1
  13. data/lib/rango/mailer.rb +20 -40
  14. data/lib/rango/mixins/action_args.rb +8 -7
  15. data/lib/rango/mixins/filters.rb +1 -0
  16. data/lib/rango/mixins/message.rb +37 -33
  17. data/lib/rango/mixins/rack-flash.rb +44 -0
  18. data/{benchmarks/stubs/merb-app/spec/spec.opts → lib/rango/orm/tasks/ripple.nake} +0 -0
  19. data/lib/rango/rack/request.rb +12 -15
  20. data/lib/rango/router.rb +7 -3
  21. data/lib/rango/router/adapters/crudtree.rb +8 -1
  22. data/lib/rango/router/adapters/rack_mount.rb +5 -1
  23. data/lib/rango/router/adapters/usher.rb +5 -2
  24. data/lib/rango/stacks/controller.rb +0 -1
  25. data/lib/rango/templates/exts/haml.rb +14 -15
  26. data/lib/rango/templates/exts/tilt.rb +16 -23
  27. data/lib/rango/templates/helpers.rb +10 -1
  28. data/lib/rango/templates/template.rb +4 -4
  29. data/lib/rango/utils.rb +4 -2
  30. data/lib/rango/version.rb +5 -0
  31. data/rango.gemspec +3 -2
  32. data/{benchmarks/stubs/merb-core/spec/spec.opts → spec/rango/cli_spec.rb} +0 -0
  33. data/{benchmarks/stubs/rails/log/development.log → spec/rango/contrib/pagination/adapters/sequel_spec.rb} +0 -0
  34. data/spec/rango/controller_spec.rb +12 -0
  35. data/spec/rango/core_ext_spec.rb +61 -0
  36. data/spec/rango/environments_spec.rb +1 -0
  37. data/spec/rango/exceptions_spec.rb +1 -28
  38. data/{benchmarks/stubs/rails/log/production.log → spec/rango/mailer_spec.rb} +0 -0
  39. data/spec/rango/mixins/action_args_spec.rb +0 -4
  40. data/spec/rango/mixins/message_spec.rb +20 -10
  41. data/{benchmarks/stubs/rails/log/server.log → spec/rango/mixins/rack-flash_spec.rb} +0 -0
  42. data/spec/rango/rack/request_spec.rb +11 -0
  43. data/{benchmarks/stubs/rails/log/test.log → spec/rango/router/adapters/crudtree_spec.rb} +0 -0
  44. data/spec/rango/templates/helpers_spec.rb +19 -5
  45. data/spec/rango/templates/template_spec.rb +1 -20
  46. data/{benchmarks/stubs/rails/public/favicon.ico → spec/rango/version_spec.rb} +0 -0
  47. data/spec/spec_helper.rb +18 -4
  48. data/stubs/stack/content/%name%.gemspec.rbt +0 -0
  49. data/stubs/stack/content/%name%.pre.gemspec.rbt +1 -2
  50. data/stubs/stack/content/.gitignore +2 -5
  51. data/stubs/stack/content/Gemfile.rbt +23 -46
  52. data/stubs/stack/content/config.ru.rbt +9 -21
  53. data/stubs/stack/content/init.rb.rbt +10 -10
  54. data/stubs/stack/content/lib/%name%.rb.rbt +37 -4
  55. data/stubs/stack/content/lib/%name%/initializers/01_database.rb.rbt +16 -0
  56. data/stubs/stack/content/lib/%name%/initializers/05_templates.rb.rbt +13 -0
  57. data/stubs/stack/content/lib/%name%/initializers/10_pagination.rb.rbt +8 -0
  58. data/stubs/stack/content/lib/%name%/initializers/15_warden.rb.rbt +26 -0
  59. data/stubs/stack/content/lib/%name%/initializers/45_middlewares.rb.rbt +17 -0
  60. data/stubs/stack/content/lib/%name%/initializers/50_router.rb.rbt +7 -0
  61. data/stubs/stack/content/lib/%name%/{initializers/urls.rb.rbt → urls.rb.rbt} +3 -0
  62. data/stubs/stack/content/lib/%name%/views.rb.rbt +4 -1
  63. data/stubs/stack/content/templates/index.html.haml +1 -1
  64. data/{gems → vendor}/cache/abstract-1.0.0.gem +0 -0
  65. data/vendor/cache/code-cleaner-0.8.2.gem +0 -0
  66. data/{gems → vendor}/cache/erubis-2.6.5.gem +0 -0
  67. data/vendor/cache/haml-2.2.21.gem +0 -0
  68. data/{gems → vendor}/cache/nake-0.0.8.gem +0 -0
  69. data/vendor/cache/rack-1.1.0.gem +0 -0
  70. data/{gems → vendor}/cache/rspec-1.3.0.gem +0 -0
  71. data/vendor/cache/term-ansicolor-1.0.5.gem +0 -0
  72. data/vendor/cache/tilt-0.8.gem +0 -0
  73. metadata +63 -239
  74. data/benchmarks/stubs/merb-app/.gitignore +0 -21
  75. data/benchmarks/stubs/merb-app/Rakefile +0 -35
  76. data/benchmarks/stubs/merb-app/app/controllers/application.rb +0 -4
  77. data/benchmarks/stubs/merb-app/app/controllers/exceptions.rb +0 -15
  78. data/benchmarks/stubs/merb-app/app/helpers/global_helpers.rb +0 -7
  79. data/benchmarks/stubs/merb-app/app/models/user.rb +0 -19
  80. data/benchmarks/stubs/merb-app/app/views/exceptions/not_acceptable.html.erb +0 -63
  81. data/benchmarks/stubs/merb-app/app/views/exceptions/not_found.html.erb +0 -47
  82. data/benchmarks/stubs/merb-app/app/views/layout/application.html.erb +0 -12
  83. data/benchmarks/stubs/merb-app/autotest/discover.rb +0 -4
  84. data/benchmarks/stubs/merb-app/autotest/merb.rb +0 -154
  85. data/benchmarks/stubs/merb-app/autotest/merb_rspec.rb +0 -167
  86. data/benchmarks/stubs/merb-app/config/database.yml +0 -33
  87. data/benchmarks/stubs/merb-app/config/dependencies.rb +0 -36
  88. data/benchmarks/stubs/merb-app/config/environments/development.rb +0 -17
  89. data/benchmarks/stubs/merb-app/config/environments/production.rb +0 -12
  90. data/benchmarks/stubs/merb-app/config/environments/rake.rb +0 -13
  91. data/benchmarks/stubs/merb-app/config/environments/staging.rb +0 -12
  92. data/benchmarks/stubs/merb-app/config/environments/test.rb +0 -14
  93. data/benchmarks/stubs/merb-app/config/init.rb +0 -26
  94. data/benchmarks/stubs/merb-app/config/rack.rb +0 -13
  95. data/benchmarks/stubs/merb-app/config/router.rb +0 -46
  96. data/benchmarks/stubs/merb-app/doc/rdoc/generators/merb_generator.rb +0 -1364
  97. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/api_grease.js +0 -640
  98. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/index.html.erb +0 -37
  99. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/merb.css +0 -252
  100. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/merb.rb +0 -353
  101. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/merb_doc_styles.css +0 -492
  102. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/prototype.js +0 -2515
  103. data/benchmarks/stubs/merb-app/merb/merb-auth/setup.rb +0 -46
  104. data/benchmarks/stubs/merb-app/merb/merb-auth/strategies.rb +0 -13
  105. data/benchmarks/stubs/merb-app/merb/session/session.rb +0 -11
  106. data/benchmarks/stubs/merb-app/public/.htaccess +0 -17
  107. data/benchmarks/stubs/merb-app/public/favicon.ico +0 -0
  108. data/benchmarks/stubs/merb-app/public/images/merb.jpg +0 -0
  109. data/benchmarks/stubs/merb-app/public/javascripts/application.js +0 -1
  110. data/benchmarks/stubs/merb-app/public/javascripts/jquery.js +0 -19
  111. data/benchmarks/stubs/merb-app/public/merb.fcgi +0 -22
  112. data/benchmarks/stubs/merb-app/public/robots.txt +0 -5
  113. data/benchmarks/stubs/merb-app/public/stylesheets/master.css +0 -119
  114. data/benchmarks/stubs/merb-app/spec/spec_helper.rb +0 -27
  115. data/benchmarks/stubs/merb-app/tasks/doc.thor +0 -151
  116. data/benchmarks/stubs/merb-app/tasks/merb.thor/app_script.rb +0 -33
  117. data/benchmarks/stubs/merb-app/tasks/merb.thor/common.rb +0 -70
  118. data/benchmarks/stubs/merb-app/tasks/merb.thor/gem_ext.rb +0 -127
  119. data/benchmarks/stubs/merb-app/tasks/merb.thor/main.thor +0 -152
  120. data/benchmarks/stubs/merb-app/tasks/merb.thor/ops.rb +0 -95
  121. data/benchmarks/stubs/merb-app/tasks/merb.thor/utils.rb +0 -42
  122. data/benchmarks/stubs/merb-core/.gitignore +0 -21
  123. data/benchmarks/stubs/merb-core/Rakefile +0 -35
  124. data/benchmarks/stubs/merb-core/app/controllers/application.rb +0 -4
  125. data/benchmarks/stubs/merb-core/app/controllers/exceptions.rb +0 -15
  126. data/benchmarks/stubs/merb-core/app/helpers/global_helpers.rb +0 -7
  127. data/benchmarks/stubs/merb-core/app/views/exceptions/not_acceptable.html.erb +0 -63
  128. data/benchmarks/stubs/merb-core/app/views/exceptions/not_found.html.erb +0 -47
  129. data/benchmarks/stubs/merb-core/app/views/layout/application.html.erb +0 -12
  130. data/benchmarks/stubs/merb-core/autotest/discover.rb +0 -1
  131. data/benchmarks/stubs/merb-core/autotest/merb.rb +0 -151
  132. data/benchmarks/stubs/merb-core/autotest/merb_rspec.rb +0 -167
  133. data/benchmarks/stubs/merb-core/config/environments/development.rb +0 -17
  134. data/benchmarks/stubs/merb-core/config/environments/production.rb +0 -12
  135. data/benchmarks/stubs/merb-core/config/environments/rake.rb +0 -13
  136. data/benchmarks/stubs/merb-core/config/environments/staging.rb +0 -12
  137. data/benchmarks/stubs/merb-core/config/environments/test.rb +0 -14
  138. data/benchmarks/stubs/merb-core/config/init.rb +0 -27
  139. data/benchmarks/stubs/merb-core/config/rack.rb +0 -13
  140. data/benchmarks/stubs/merb-core/config/router.rb +0 -43
  141. data/benchmarks/stubs/merb-core/doc/rdoc/generators/merb_generator.rb +0 -1364
  142. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/api_grease.js +0 -640
  143. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/index.html.erb +0 -37
  144. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/merb.css +0 -252
  145. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/merb.rb +0 -353
  146. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/merb_doc_styles.css +0 -492
  147. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/prototype.js +0 -2515
  148. data/benchmarks/stubs/merb-core/public/.htaccess +0 -17
  149. data/benchmarks/stubs/merb-core/public/favicon.ico +0 -0
  150. data/benchmarks/stubs/merb-core/public/images/merb.jpg +0 -0
  151. data/benchmarks/stubs/merb-core/public/javascripts/application.js +0 -1
  152. data/benchmarks/stubs/merb-core/public/merb.fcgi +0 -22
  153. data/benchmarks/stubs/merb-core/public/robots.txt +0 -5
  154. data/benchmarks/stubs/merb-core/public/stylesheets/master.css +0 -119
  155. data/benchmarks/stubs/merb-core/spec/spec_helper.rb +0 -22
  156. data/benchmarks/stubs/merb-core/tasks/merb.thor/app_script.rb +0 -33
  157. data/benchmarks/stubs/merb-core/tasks/merb.thor/common.rb +0 -70
  158. data/benchmarks/stubs/merb-core/tasks/merb.thor/gem_ext.rb +0 -127
  159. data/benchmarks/stubs/merb-core/tasks/merb.thor/main.thor +0 -152
  160. data/benchmarks/stubs/merb-core/tasks/merb.thor/ops.rb +0 -95
  161. data/benchmarks/stubs/merb-core/tasks/merb.thor/utils.rb +0 -42
  162. data/benchmarks/stubs/merb-flat/.gitignore +0 -21
  163. data/benchmarks/stubs/merb-flat/README.txt +0 -10
  164. data/benchmarks/stubs/merb-flat/Rakefile +0 -35
  165. data/benchmarks/stubs/merb-flat/application.rb +0 -17
  166. data/benchmarks/stubs/merb-flat/config/framework.rb +0 -9
  167. data/benchmarks/stubs/merb-flat/config/init.rb +0 -42
  168. data/benchmarks/stubs/merb-flat/spec/spec_helper.rb +0 -26
  169. data/benchmarks/stubs/merb-flat/tasks/merb.thor/app_script.rb +0 -33
  170. data/benchmarks/stubs/merb-flat/tasks/merb.thor/common.rb +0 -70
  171. data/benchmarks/stubs/merb-flat/tasks/merb.thor/gem_ext.rb +0 -127
  172. data/benchmarks/stubs/merb-flat/tasks/merb.thor/main.thor +0 -152
  173. data/benchmarks/stubs/merb-flat/tasks/merb.thor/ops.rb +0 -95
  174. data/benchmarks/stubs/merb-flat/tasks/merb.thor/utils.rb +0 -42
  175. data/benchmarks/stubs/merb-flat/views/foo.html.erb +0 -3
  176. data/benchmarks/stubs/merb-very-flat/.gitignore +0 -21
  177. data/benchmarks/stubs/merb-very-flat/Rakefile +0 -35
  178. data/benchmarks/stubs/merb-very-flat/merb-very-flat.rb +0 -61
  179. data/benchmarks/stubs/merb-very-flat/spec/spec_helper.rb +0 -26
  180. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/app_script.rb +0 -33
  181. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/common.rb +0 -70
  182. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/gem_ext.rb +0 -127
  183. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/main.thor +0 -152
  184. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/ops.rb +0 -95
  185. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/utils.rb +0 -42
  186. data/benchmarks/stubs/rails/README +0 -243
  187. data/benchmarks/stubs/rails/Rakefile +0 -10
  188. data/benchmarks/stubs/rails/app/controllers/application_controller.rb +0 -12
  189. data/benchmarks/stubs/rails/app/helpers/application_helper.rb +0 -5
  190. data/benchmarks/stubs/rails/config/boot.rb +0 -112
  191. data/benchmarks/stubs/rails/config/database.yml +0 -22
  192. data/benchmarks/stubs/rails/config/environment.rb +0 -43
  193. data/benchmarks/stubs/rails/config/environments/development.rb +0 -19
  194. data/benchmarks/stubs/rails/config/environments/production.rb +0 -30
  195. data/benchmarks/stubs/rails/config/environments/test.rb +0 -30
  196. data/benchmarks/stubs/rails/config/initializers/backtrace_silencers.rb +0 -9
  197. data/benchmarks/stubs/rails/config/initializers/inflections.rb +0 -12
  198. data/benchmarks/stubs/rails/config/initializers/mime_types.rb +0 -7
  199. data/benchmarks/stubs/rails/config/initializers/new_rails_defaults.rb +0 -21
  200. data/benchmarks/stubs/rails/config/initializers/session_store.rb +0 -17
  201. data/benchmarks/stubs/rails/config/locales/en.yml +0 -5
  202. data/benchmarks/stubs/rails/config/routes.rb +0 -45
  203. data/benchmarks/stubs/rails/doc/README_FOR_APP +0 -2
  204. data/benchmarks/stubs/rails/public/404.html +0 -30
  205. data/benchmarks/stubs/rails/public/422.html +0 -30
  206. data/benchmarks/stubs/rails/public/500.html +0 -30
  207. data/benchmarks/stubs/rails/public/images/rails.png +0 -0
  208. data/benchmarks/stubs/rails/public/index.html +0 -275
  209. data/benchmarks/stubs/rails/public/javascripts/application.js +0 -2
  210. data/benchmarks/stubs/rails/public/javascripts/controls.js +0 -963
  211. data/benchmarks/stubs/rails/public/javascripts/dragdrop.js +0 -973
  212. data/benchmarks/stubs/rails/public/javascripts/effects.js +0 -1128
  213. data/benchmarks/stubs/rails/public/javascripts/prototype.js +0 -4320
  214. data/benchmarks/stubs/rails/public/robots.txt +0 -5
  215. data/benchmarks/stubs/rails/script/about +0 -4
  216. data/benchmarks/stubs/rails/script/console +0 -3
  217. data/benchmarks/stubs/rails/script/dbconsole +0 -3
  218. data/benchmarks/stubs/rails/script/destroy +0 -3
  219. data/benchmarks/stubs/rails/script/generate +0 -3
  220. data/benchmarks/stubs/rails/script/performance/benchmarker +0 -3
  221. data/benchmarks/stubs/rails/script/performance/profiler +0 -3
  222. data/benchmarks/stubs/rails/script/plugin +0 -3
  223. data/benchmarks/stubs/rails/script/runner +0 -3
  224. data/benchmarks/stubs/rails/script/server +0 -3
  225. data/benchmarks/stubs/rails/test/performance/browsing_test.rb +0 -11
  226. data/benchmarks/stubs/rails/test/test_helper.rb +0 -40
  227. data/benchmarks/stubs/ramaze.rb +0 -0
  228. data/benchmarks/stubs/sinatra.rb +0 -11
  229. data/gems/cache/code-cleaner-0.1.gem +0 -0
  230. data/gems/cache/code-cleaner-0.2.gem +0 -0
  231. data/gems/cache/code-cleaner-0.3.gem +0 -0
  232. data/gems/cache/code-cleaner-0.4.gem +0 -0
  233. data/gems/cache/code-cleaner-0.5.gem +0 -0
  234. data/gems/cache/code-cleaner-0.6.gem +0 -0
  235. data/gems/cache/code-cleaner-0.7.gem +0 -0
  236. data/gems/cache/code-cleaner-0.8.1.gem +0 -0
  237. data/gems/cache/code-cleaner-0.8.gem +0 -0
  238. data/gems/cache/extlib-0.9.14.gem +0 -0
  239. data/gems/cache/haml-2.2.16.gem +0 -0
  240. data/gems/cache/haml-2.2.17.gem +0 -0
  241. data/gems/cache/nake-0.0.2.gem +0 -0
  242. data/gems/cache/nake-0.0.3.gem +0 -0
  243. data/gems/cache/nake-0.0.5.gem +0 -0
  244. data/gems/cache/nake-0.0.6.gem +0 -0
  245. data/gems/cache/rack-1.0.1.gem +0 -0
  246. data/gems/cache/rack-1.1.0.gem +0 -0
  247. data/gems/cache/rspec-1.2.9.gem +0 -0
  248. data/gems/cache/term-ansicolor-1.0.4.gem +0 -0
  249. data/gems/cache/tilt-0.4.gem +0 -0
  250. data/gems/cache/tilt-0.5.gem +0 -0
  251. data/lib/rango/forms/form.rb +0 -30
  252. data/lib/rango/helpers.rb +0 -31
  253. data/lib/rango/helpers/assets.rb +0 -46
  254. data/lib/rango/helpers/general.rb +0 -53
  255. data/lib/rango/helpers/syntax.rb +0 -30
  256. data/lib/rango/mixins/chainable.rb +0 -66
  257. data/lib/rango/mixins/http_caching.rb +0 -78
  258. data/lib/rango/router/adapters/rack_router.rb +0 -7
  259. data/lib/rango/templates/exts/erubis.rb +0 -65
  260. data/spec/rango/forms/form_spec.rb +0 -0
  261. data/spec/rango/helpers/assets_spec.rb +0 -0
  262. data/spec/rango/helpers/general_spec.rb +0 -0
  263. data/spec/rango/helpers/syntax_spec.rb +0 -0
  264. data/spec/rango/helpers_spec.rb +0 -0
  265. data/spec/rango/rack/middlewares/email_obfuscator_spec.rb +0 -0
  266. data/spec/rango/router/adapters/rack_router_spec.rb +0 -0
  267. data/spec/rango/templates/exts/erubis_spec.rb +0 -0
  268. data/spec/stubs/templates/_basic.html.erb +0 -6
  269. data/spec/stubs/templates/basic.html.erb +0 -6
  270. data/spec/stubs/templates/capture.html.erb +0 -11
  271. data/spec/stubs/templates/context.html.erb +0 -6
  272. data/spec/stubs/templates/erubis.html.erubis +0 -2
  273. data/spec/stubs/templates/exception.html.erb +0 -1
  274. data/spec/stubs/templates/inheritance/capture/erb/base.html.erb +0 -3
  275. data/spec/stubs/templates/inheritance/capture/erb/index.html.erb +0 -4
  276. data/spec/stubs/templates/inheritance/capture/erubis/base.html.erubis +0 -3
  277. data/spec/stubs/templates/inheritance/capture/erubis/index.html.erubis +0 -4
  278. data/stubs/stack/content/lib/%name%/config.rb.rbt +0 -0
  279. data/stubs/stack/content/lib/%name%/initializers/middlewares.rb.rbt +0 -5
  280. data/stubs/stack/content/rackup.rb.rbt +0 -41
  281. data/support/hooks/pre-commit +0 -12
data/.gitignore CHANGED
@@ -5,5 +5,5 @@
5
5
  .yardoc
6
6
 
7
7
  script/*
8
- gems/*
9
- !gems/cache
8
+ .bundle
9
+ .rvmrc
data/CHANGELOG CHANGED
@@ -75,3 +75,12 @@
75
75
  * [FIX] Cookies are passed into the redirect request
76
76
  * [FIX] All non-http exceptions which occur in controller are captured and passed to rescue_http_error as a new instance of InternalServerError, except development environment where we want to get the Rack error screen.
77
77
  * [FIX] Fixed encoding problem in messages. It's actually Rack fault, but hey.
78
+
79
+ = Version 0.2.4
80
+ * Removed all helpers, if you need some, use http://github.com/botanicus/helpers
81
+ * [FEATURE] Added rango/mailer with mail helper for sending e-mails
82
+ * Rango.root & Rango.media_path are now instances of Pathname rather than String
83
+ * rango/environments are no longer optional
84
+ * Ripple support in stack generator
85
+ * Removed Erubis support, since it doesn't support <%= block(&block) %> so it's useless for us
86
+ * Specs are green again
@@ -1,5 +1,4 @@
1
1
  Jakub Šťastný aka Botanicus (main author)
2
2
  Grant Michael Levkoff aka grantmichaels (wrote awesome http://www.rubyinside.com/rango-ruby-web-app-framework-2858.html)
3
- Martin Hrdlička
4
3
  Tomasz Werbicki aka neaf
5
4
  Simon Hafner aka Tass
data/Gemfile CHANGED
@@ -1,11 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
- # configuration
4
- bundle_path "gems"
5
- bin_path "script"
6
- disable_rubygems
3
+ source :gemcutter
7
4
 
8
- # gems
9
5
  gem "nake"
10
6
  gem "code-cleaner"
11
7
 
@@ -15,6 +11,6 @@ gem "rack"
15
11
  gem "haml"
16
12
  gem "erubis"
17
13
 
18
- only(:test) do
14
+ group(:test) do
19
15
  gem "rspec"
20
16
  end
@@ -5,29 +5,30 @@ if RUBY_VERSION < "1.9.1"
5
5
  end
6
6
 
7
7
  require "rango/cli"
8
+ require "rango/version"
9
+ require "rango/environments"
10
+ require "pathname"
8
11
 
9
12
  module Rango
10
- VERSION = "0.2.1"
11
-
12
13
  # all the helpers are in Rango::Helpers
13
14
  # so if you want to register your own, just
14
15
  # Rango::Helpers.send(:include, Pupu::Helpers)
15
- Helpers ||= Module.new
16
+ module Helpers; end
16
17
 
17
18
  def self.root=(root)
18
- @@root = root
19
+ @@root = Pathname.new(root)
19
20
  end
20
21
 
21
22
  def self.root
22
- @@root ||= Dir.pwd
23
+ @@root ||= Pathname.new(Dir.pwd)
23
24
  end
24
25
 
25
26
  def self.media_root=(media_root)
26
- @@media_root = media_root
27
+ @@media_root = Pathname.new(media_root)
27
28
  end
28
29
 
29
30
  def self.media_root
30
- @@media_root ||= File.join(self.root, "media")
31
+ @@media_root ||= self.root.join("media")
31
32
  end
32
33
 
33
34
  # Basic environment support. Use rango/environments.rb for more advanced behaviour.
@@ -47,7 +48,9 @@ module Rango
47
48
  def self.environment=(environment)
48
49
  ENV["RACK_ENV"] = environment
49
50
  @@environment = environment
51
+ verbose, $VERBOSE = $VERBOSE, nil
50
52
  const_set(:RACK_ENV, environment)
53
+ $VERBOSE = verbose
51
54
  end
52
55
 
53
56
  def self.environment?(environment)
@@ -6,7 +6,7 @@ module Rango
6
6
  # if you will run this script with -i argument, interactive session will begin
7
7
  Rango.interactive if ARGV.delete("-i")
8
8
  # so it can work as a runner
9
- load ARGV.shift if ARGV.first && File.exist?(ARGV.first)
9
+ load ARGV.shift if ARGV.first && File.exist?(ARGV.first) && ARGV.first.end_with?(".rb")
10
10
  end
11
11
 
12
12
  # Start IRB interactive session
@@ -5,10 +5,14 @@ module Rango
5
5
  module Sequel
6
6
  module Dataset
7
7
  # @since 0.2.2
8
- def paginate(current = 1, per_page = Page.per_page, options = Hash.new)
8
+ # @example
9
+ # Sticker.paginate(page, 20, online: false)
10
+ # Sticker.filter(online: false).paginate(page)
11
+ def paginate(current = 1, per_page = Page.per_page, options = nil)
9
12
  current = current ? current.to_i : 1 # current can be nil or "1"
10
13
  page = Page.new(current: current, count: self.count, per_page: per_page)
11
- return page, limit(per_page, (current - 1) * per_page)
14
+ dataset = options ? self.filter(options) : self
15
+ return page, dataset.limit(per_page, (current - 1) * per_page)
12
16
  end
13
17
  end
14
18
  end
@@ -59,7 +59,7 @@ module Rango
59
59
  rescue HttpError => exception
60
60
  self.rescue_http_error(exception)
61
61
  rescue Exception => exception # so we can be sure that all the exceptions which occures in controller can be captured by rescue_http_error method
62
- if Rango.development?
62
+ if Rango.development? or Rango.testing?
63
63
  raise exception
64
64
  else
65
65
  message = "#{exception.class}: #{exception.message}"
@@ -91,7 +91,7 @@ module Rango
91
91
  # @since 0.0.2
92
92
  # @version 0.2.1
93
93
  # @return [String] Escaped URL (which is RFC recommendation)
94
- def redirect(location, status = 301, &block)
94
+ def redirect(location, status = 303, &block)
95
95
  if (300..399).include?(status)
96
96
  exception = Redirection.new(absolute_uri(location))
97
97
  exception.status = status
@@ -119,26 +119,15 @@ module Rango
119
119
  def_delegators :request, :cookies, :session
120
120
 
121
121
  def router_params
122
- @router_params ||= begin
123
- params = self.env["rango.router.params"]
124
- raise "rango.router.params property has to be setup at least to empty hash" if params.nil?
125
-
126
- symbolize_keys = lambda do |hash|
127
- hash.reduce(Hash.new) do |hash, pair|
128
- if pair.last.is_a?(Hash)
129
- hash.merge(pair.first.to_sym => symbolize_keys.call(pair.last))
130
- else
131
- hash.merge(pair.first.to_sym => pair.last)
132
- end
133
- end
134
- end
135
-
136
- symbolize_keys.call(params)
137
- end
122
+ @router_params ||= self.env["rango.router.params"]
138
123
  end
139
124
 
140
125
  def params
141
- @params ||= self.request.params.merge(self.router_params).symbolize_keys
126
+ @params ||= begin
127
+ params = self.request.params
128
+ params.merge!(self.router_params) if router_params
129
+ params
130
+ end
142
131
  end
143
132
 
144
133
  # redefine this method for your controller if you want to provide custom error pages
@@ -152,7 +141,22 @@ module Rango
152
141
  end
153
142
 
154
143
  def render_http_error(exception)
155
- "EXCEPTION"
144
+ exception.headers["Content-Type"] = "text/html"
145
+ if Rango.production?
146
+ <<-EOF
147
+ <h1>Application Error</h1>
148
+ <p>
149
+ The application you are trying to reach has currently some issues. Please contact our team and tell us about the troubles. Thank you.
150
+ </p>
151
+ EOF
152
+ else
153
+ <<-EOF
154
+ <h1>#{exception.class}: #{exception.message}</h1>
155
+ <ul>
156
+ <li>#{exception.backtrace.join("</li><li>")}</li>
157
+ </ul>
158
+ EOF
159
+ end
156
160
  end
157
161
  end
158
162
  end
@@ -1,22 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
- module Enumerable
4
- # similar to
5
- def inject!(&block)
6
- self.inject(self.class.new, &block)
7
- end
8
- end
9
-
10
3
  class String
11
- ##
12
4
  # Convert to snake case.
13
- #
14
5
  # "FooBar".snake_case #=> "foo_bar"
15
6
  # "HeadlineCNNNews".snake_case #=> "headline_cnn_news"
16
7
  # "CNN".snake_case #=> "cnn"
17
8
  #
18
9
  # @return [String] Receiver converted to snake case.
19
- #
20
10
  # @api public
21
11
  def snake_case
22
12
  return self.downcase if self =~ /^[A-Z]+$/
@@ -24,43 +14,15 @@ class String
24
14
  return $+.downcase
25
15
  end
26
16
 
27
- ##
28
17
  # Convert to camel case.
29
- #
30
18
  # "foo_bar".camel_case #=> "FooBar"
31
19
  #
32
20
  # @return [String] Receiver converted to camel case.
33
- #
34
21
  # @api public
35
22
  def camel_case
36
23
  return self if self !~ /_/ && self =~ /[A-Z]+.*/
37
24
  split('_').map{|e| e.capitalize}.join
38
25
  end
39
-
40
- ##
41
- # Convert a path string to a constant name.
42
- #
43
- # "merb/core_ext/string".to_const_string #=> "Merb::CoreExt::String"
44
- #
45
- # @return [String] Receiver converted to a constant name.
46
- #
47
- # @api public
48
- def to_const_string
49
- gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
50
- end
51
-
52
- ##
53
- # Convert a constant name to a path, assuming a conventional structure.
54
- #
55
- # "FooBar::Baz".to_const_path # => "foo_bar/baz"
56
- #
57
- # @return [String] Path to the file containing the constant named by receiver
58
- # (constantized string), assuming a conventional structure.
59
- #
60
- # @api public
61
- def to_const_path
62
- snake_case.gsub(/::/, "/")
63
- end
64
26
  end
65
27
 
66
28
  class Hash
@@ -75,30 +37,63 @@ class Hash
75
37
  result
76
38
  end
77
39
  end
40
+ end
78
41
 
79
- # Replace keys in self by coresponding symbols
80
- #
81
- # @author Botanicus
82
- # @since 0.0.2
83
- # @return [Hash] A hash with all keys transformed into symbols
84
- def symbolize_keys!
85
- self.replace(self.symbolize_keys)
42
+ module ParamsMixin
43
+ def self.switch_string_to_symbol_or_back(value)
44
+ if value.is_a?(String)
45
+ value.to_sym
46
+ elsif value.is_a?(Symbol)
47
+ value.to_s
48
+ else
49
+ value
50
+ end
86
51
  end
87
52
 
88
- # Return duplication of self with all keys recursively converted to symbols
89
- #
90
- # @author Botanicus
91
- # @since 0.0.2
92
- # @return [Hash] A hash with all keys transformed into symbols even in inner hashes
93
- def deep_symbolize_keys
94
- self.inject(Hash.new) do |result, array|
95
- key, value = array.first, array.last
96
- if value.respond_to?(:symbolize_keys)
97
- result[key.to_sym] = value.symbolize_keys
98
- else
99
- result[key.to_sym] = value
100
- end
101
- result
53
+ def self.convert(hash)
54
+ hash.extend(ParamsMixin)
55
+ hash.each do |key, value|
56
+ self.convert(value) if value.is_a?(Hash)
57
+ end
58
+ end
59
+
60
+ def [](key)
61
+ if self.has_key?(key)
62
+ super(key)
63
+ elsif key2 = ParamsMixin.switch_string_to_symbol_or_back(key)
64
+ super(key2)
65
+ else # get the default value or run the default block
66
+ super(key)
102
67
  end
103
68
  end
69
+
70
+ def []=(key, value)
71
+ if self.has_key?(key)
72
+ super(key, value)
73
+ elsif key2 = ParamsMixin.switch_string_to_symbol_or_back(key)
74
+ super(key2, value)
75
+ else # get the default value or run the default block
76
+ super(key, value)
77
+ end
78
+ end
79
+
80
+ # This might be very nasty if you expect a symbol,
81
+ # but we can't just call #to_sym on it because of
82
+ # security. Symbols aren't GCed, so if someone would
83
+ # send a lot of requests with different keys, it will
84
+ # crash your app or even server because it would run
85
+ # out of memory.
86
+ def keys
87
+ super.map do |key|
88
+ key.is_a?(Symbol) ? key.to_s : key
89
+ end
90
+ end
91
+
92
+ def merge(*args)
93
+ super(*args).extend(ParamsMixin)
94
+ end
95
+
96
+ def merge!(*args)
97
+ super(*args).extend(ParamsMixin)
98
+ end
104
99
  end
@@ -83,7 +83,7 @@ module Rango
83
83
  # @returns [String]
84
84
  # @example NotFound.new.to_snakecase # "not_found"
85
85
  def to_snakecase
86
- self.class.name.split("::").last.snake_case
86
+ self.class.name.gsub(" ", "_").downcase
87
87
  end
88
88
 
89
89
  def to_response
@@ -137,7 +137,7 @@ module Rango
137
137
  Error300 = MultipleChoices = Class.new(Redirection) { self.status ||= 300; self.name ||= "Multiple Choices" }
138
138
  Error301 = MovedPermanently = Class.new(Redirection) { self.status ||= 301; self.name ||= "Moved Permanently" }
139
139
  Error302 = MovedTemporarily = Class.new(Redirection) { self.status ||= 302; self.name ||= "Moved Temporarily" }
140
- Error303 = SeeOther = Class.new(Redirection) { self.status ||= 303; self.name ||= "See Other" }
140
+ Error303 = SeeOther = Class.new(Redirection) { self.status ||= 303; self.name ||= "See Other" } # this is the redirect you want to use after POST
141
141
  Error304 = NotModified = Class.new(Redirection) { self.status ||= 304; self.name ||= "Not Modified" }
142
142
  Error305 = UseProxy = Class.new(Redirection) { self.status ||= 305; self.name ||= "Use Proxy" }
143
143
  Error307 = TemporaryRedirect = Class.new(Redirection) { self.status ||= 307; self.name ||= "Temporary Redirect" }
@@ -32,7 +32,7 @@ module Rango
32
32
  # any particular router and your router might not provide this
33
33
  # functionality. In this case you can always use this generic view.
34
34
  # get("/index.php").to(Rango::GV.redirect("/"))
35
- def self.redirect(url, status = 302)
35
+ def self.redirect(url, status = 301)
36
36
  Rango::Mini.app do |request, response|
37
37
  response.redirect(url, status)
38
38
  return String.new
@@ -5,7 +5,6 @@ require "rango/mini"
5
5
  require "rango/mixins/render"
6
6
 
7
7
  require "rango" # Rango.root
8
- Rango::Template.template_paths.push(File.join(Rango.root, "templates"))
9
8
 
10
9
  # NOTE: this is just proof of concept, do not use it so far!
11
10
  # However this is the way how we can use CRUD in Rango.
@@ -1,48 +1,28 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "net/smtp"
4
-
5
- # Mailer.new("noreply@rangoproject.org", "RangoProject.org")
6
- # self.to = "tony@example.com"
7
- # self.subject = "Just hey"
8
- # self.body = "Hey Tony, what's up?"
3
+ # mail("rango@project.org", "joe@doe.com", "Free VIAGRA") do
4
+ # render "mails/spam.html"
9
5
  # end
10
- module Rango
11
- class Mailer
12
- @@config = {smtp: ["localhost", 25]}
13
-
14
- def self.mail(options = Hash.new)
15
- self.new(options[:from]).tap do |mailer|
16
- mailer.body = options[:body]
17
- end
18
- end
19
-
20
- attr_accessor :to, :to_alias
21
- attr_accessor :from, :from_alias
22
- attr_accessor :body, :subject
23
-
24
- def initialize(from, from_alias = from, &block)
25
- @from, @from_alias = from, from_alias
26
- unless block.nil?
27
- block.instance_eval(&block)
28
- block.send
29
- end
30
- end
31
-
32
- def raw
33
- <<-EOF
34
- From: #{from_alias} <#{from}>
35
- To: #{to_alias} <#{to}>
36
- Subject: #{subject}
37
-
38
- #{body}
39
- EOF
40
- end
6
+ begin
7
+ require "mail"
8
+ rescue LoadError
9
+ raise "You have to install mail gem!"
10
+ end
41
11
 
42
- def send(to)
43
- Net::SMTP.start(*@@config[:smtp]) do |smtp|
44
- smtp.send_message(self.raw, @from, to)
12
+ module Rango
13
+ module Mailing
14
+ def mail(to, from, subject, &block)
15
+ Mail.deliver do |mail|
16
+ mail.to = to
17
+ mail.from = from
18
+ mail.subject = subject
19
+ mail.body = block.call
20
+ puts self
45
21
  end
22
+ rescue Errno::ECONNREFUSED
23
+ Rango.logger.error("E-mail from #{caller[0]} can't be send due to refused connection to the SMTP server")
46
24
  end
47
25
  end
48
26
  end
27
+
28
+ Rango::Controller.send(:include, Rango::Mailing)