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
@@ -9,19 +9,20 @@
9
9
  # method(:test).parameters
10
10
  # => [[:req, :name], [:opt, :params], [:rest, :args]]
11
11
 
12
- if RUBY_VERSION < "1.9.2"
12
+ unless Kernel.method(:require).respond_to?(:parameters)
13
13
  raise <<-EOF
14
- Method#parameters is a part of Ruby 1.9.2 and higher, you can't use it with Ruby #{RUBY_VERSION}.
14
+ For action args mixin you need to have Method#parameters defined. This method is defined in 1.9.2 and higher or you can use genkhi/methopara on GitHub to get it working in Ruby 1.9.1, if it will work, but it never did for me.
15
15
  EOF
16
16
  end
17
17
 
18
18
  module Rango
19
19
  module ActionArgsMixin
20
20
  def invoke_action(action)
21
- view = self.method(action)
22
- names = view.parameters.map { |type, name| name }
23
- types = view.parameters.map { |type, name| type }
24
- required = view.parameters.map { |type, name| name if type.eql?(:req) }.compact
21
+ view = self.method(action)
22
+ parameters = view.parameters.map! { |type, name| [type, name.to_s] }
23
+ names = parameters.map { |type, name| name }
24
+ types = parameters.map { |type, name| type }
25
+ required = parameters.map { |type, name| name if type.eql?(:req) }.compact
25
26
 
26
27
  # validate types
27
28
  if types.include?(:rest)
@@ -36,7 +37,7 @@ module Rango
36
37
  end
37
38
 
38
39
  args = Array.new
39
- view.parameters.each do |type, name|
40
+ parameters.each do |type, name|
40
41
  args.push(self.params[name]) if type.eql?(:req) || (type.eql?(:opt) && !self.params[name].nil?) # this is a bit complex, but we have to do because of rewriting optional args by nil value if we use just map with params[name]
41
42
  end
42
43
  puts "Rendering #{self.class}##{action} with #{args.map(&:inspect).join(", ")}"
@@ -38,6 +38,7 @@ module Rango
38
38
  def inherited(subclass)
39
39
  subclass.before_filters.replace(self.before_filters)
40
40
  subclass.after_filters.replace(self.after_filters)
41
+ super
41
42
  end
42
43
 
43
44
  # @since 0.2
@@ -1,55 +1,59 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "rango/mixins/chainable"
4
-
5
3
  module Rango
6
4
  module MessageMixin
7
5
  # The rails-style flash messages
8
6
  # @since 0.0.2
9
7
  # NOTE: it's important to include this mixin after ImplicitRendering mixin
10
8
  def self.included(controller)
11
- unless controller.method_defined?(:request)
12
- raise "Rango::MessageMixin requires method request to be defined"
13
- end
14
- if controller.method_defined?(:context)
15
- Rango.logger.debug("Extending context by message")
16
- controller.class_eval do
17
- extend Chainable
18
- chainable do
9
+ controller.class_eval do
10
+ if self.method_defined?(:context)
11
+ Rango.logger.debug("Extending #{self}#context by message")
12
+ # This could be in the mixin itself, but we don't want
13
+ # to define it if the context method doesn't exist, so
14
+ # context.respond_to?(:context) as a detection of explicit
15
+ # rendering mixin and similar can work. BTW the following
16
+ # doesn't work with do/end syntax.
17
+ include Module.new {
19
18
  def context
20
- super.merge!(message: self.message)
21
- end
22
-
23
- def redirect(uri, status = 301, options = Hash.new, &block)
24
- status, options = 301, status if status.is_a?(Hash)
25
- if options.respond_to?(:inject)
26
- # redirect "/post", error: "Try again"
27
- # ?msg[error]="Try again"
28
- uri = options.inject(uri) do |uri, pair|
29
- type, message = pair
30
- uri + "?msg[#{type}]=#{message}"
31
- end
32
- else
33
- # redirect "/post", "Try again"
34
- # ?msg="Try again"
35
- uri.concat("?msg=#{options}")
36
- end
37
- super(uri, status)
19
+ @context ||= super.merge!(message: self.message)
38
20
  end
39
- end
21
+ }
22
+ else
23
+ Rango.logger.warn("Context #{self}#method isn't defined")
40
24
  end
41
- else
42
- Rango.logger.warn("Context method isn't defined")
43
25
  end
44
26
  end
45
27
 
46
28
  def message
47
29
  @message ||= begin
48
30
  messages = request.GET[:msg] || Hash.new
49
- messages.inject(Hash.new) do |result, pair|
50
- result.merge(pair[0] => pair[1].force_encoding(Encoding.default_external))
31
+ if messages.is_a?(String)
32
+ messages.force_encoding(Encoding.default_external)
33
+ elsif messages.is_a?(Hash)
34
+ messages.inject(Hash.new.extend(ParamsMixin)) do |result, pair| # TODO: here is the problem, Hash.new isn't params mixin
35
+ result.merge(pair[0] => pair[1].force_encoding(Encoding.default_external))
36
+ end
37
+ end
38
+ end
39
+ end
40
+ alias_method :flash, :message
41
+
42
+ def redirect(uri, options = Hash.new, status = 303, &block)
43
+ # status, options = 303, status if status.is_a?(Hash)
44
+ if options.respond_to?(:inject)
45
+ # redirect "/post", error: "Try again"
46
+ # ?msg[error]="Try again"
47
+ uri = options.inject(uri) do |uri, pair|
48
+ type, message = pair
49
+ uri + "?msg[#{type}]=#{message}"
51
50
  end
51
+ else
52
+ # redirect "/post", "Try again"
53
+ # ?msg="Try again"
54
+ uri.concat("?msg=#{options}")
52
55
  end
56
+ super(uri, status)
53
57
  end
54
58
  end
55
59
  end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ # @see http://nakajima.github.com/rack-flash
4
+ # @example
5
+ # use Rack::Flash
6
+ # message["notice"]
7
+ # flash["notice"]
8
+ # OR
9
+ # use Rack::Flash, accessorize: [:notice, :error]
10
+ # message.notice
11
+ # flash.notice
12
+ module Rango
13
+ module RackFlashMixin
14
+ # @since 0.2.4
15
+ # NOTE: it's important to include this mixin after ImplicitRendering mixin
16
+ def self.included(controller)
17
+ if controller.method_defined?(:context)
18
+ Rango.logger.debug("Extending context by message")
19
+ controller.class_eval do
20
+ include Module.new {
21
+ def context
22
+ @context ||= super.merge!(message: self.message)
23
+ end
24
+ }
25
+ end
26
+ else
27
+ Rango.logger.warn("Context method isn't defined")
28
+ end
29
+ end
30
+
31
+ def message
32
+ @message ||= begin
33
+ request.env["x-rack.flash"]
34
+ end
35
+ end
36
+ alias_method :flash, :message
37
+
38
+ def redirect(uri, status = 303, options = Hash.new, &block)
39
+ status, options = 303, status if status.is_a?(Hash)
40
+ options.each { |type, message| flash[type] = message }
41
+ super(uri, status)
42
+ end
43
+ end
44
+ end
@@ -66,11 +66,11 @@ module Rango
66
66
  end
67
67
 
68
68
  def GET
69
- normalize_params(super)
69
+ ParamsMixin.convert(super)
70
70
  end
71
71
 
72
72
  def POST
73
- normalize_params(super)
73
+ ParamsMixin.convert(super)
74
74
  end
75
75
 
76
76
  def PUT
@@ -85,7 +85,7 @@ module Rango
85
85
  @env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"])
86
86
  @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
87
87
  end
88
- normalize_params(@env["rack.request.form_hash"])
88
+ ParamsMixin.convert(@env["rack.request.form_hash"])
89
89
  else
90
90
  {}
91
91
  end
@@ -93,9 +93,13 @@ module Rango
93
93
  end
94
94
 
95
95
  def params
96
- input = [self.GET, self.POST, self.PUT]
97
- input.inject(Hash.new) do |result, hash|
98
- hash ? result.merge!(hash) : result
96
+ @params ||= begin
97
+ input = [self.GET, self.POST, self.PUT]
98
+ ParamsMixin.convert(
99
+ input.inject(Hash.new) do |result, hash|
100
+ hash ? result.merge!(hash) : result
101
+ end
102
+ )
99
103
  end
100
104
  end
101
105
 
@@ -104,16 +108,14 @@ module Rango
104
108
  end
105
109
 
106
110
  def form
107
- normalize_params(env["rack.request.form_hash"] || Hash.new)
111
+ ParamsMixin.convert(env["rack.request.form_hash"] || Hash.new)
108
112
  end
109
113
 
110
114
  def session
111
115
  @env['rack.session'] ||= {}
112
116
  end
113
117
 
114
- def ajax?
115
- env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
116
- end
118
+ alias_method :ajax?, :xhr?
117
119
 
118
120
  # @since 0.0.1
119
121
  # @example: "cz"
@@ -156,10 +158,5 @@ module Rango
156
158
  end
157
159
  url
158
160
  end
159
-
160
- protected
161
- def normalize_params(hash)
162
- hash.deep_symbolize_keys.tap { |hash| hash.delete(:_method) }
163
- end
164
161
  end
165
162
  end
@@ -3,6 +3,10 @@
3
3
  require "rango" # for helpers
4
4
 
5
5
  module Rango
6
+ module Exceptions
7
+ class RouterNotInitialized < StandardError; end
8
+ end
9
+
6
10
  module UrlHelper
7
11
  # url(:login)
8
12
  def url(*args)
@@ -16,8 +20,8 @@ module Rango
16
20
  @@routers ||= Hash.new
17
21
  def self.app
18
22
  @@app
19
- rescue
20
- raise "You have to assign your router application to Rango::Router.app\nFor example Rango::Router.app = Usher::Interface.for(:rack, &block)"
23
+ rescue NameError
24
+ raise Exceptions::RouterNotInitialized, "You have to assign your router application to Rango::Router.app\nFor example Rango::Router.app = Usher::Interface.for(:rack, &block)"
21
25
  end
22
26
 
23
27
  def self.app=(app)
@@ -26,7 +30,7 @@ module Rango
26
30
 
27
31
  def self.router
28
32
  @@router
29
- rescue
33
+ rescue NameError
30
34
  raise "You have to run Rango::Router.use(router_name) first!"
31
35
  end
32
36
 
@@ -1,6 +1,13 @@
1
- require "crudtree/generator"
1
+ # encoding: utf-8
2
+
2
3
  require_relative "usher"
3
4
 
5
+ begin
6
+ require "crudtree/generator"
7
+ rescue LoadError
8
+ raise LoadError, "You have to install crudtree gem!"
9
+ end
10
+
4
11
  module Rango
5
12
  module UrlHelper
6
13
  # resource(@post, :edit), resource(:posts)
@@ -1,6 +1,10 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "rack/mount"
3
+ begin
4
+ require "rack/mount"
5
+ rescue LoadError
6
+ raise LoadError, "You have to install rack-mount gem!"
7
+ end
4
8
 
5
9
  Rango::Router.implement(:rack_mount) do |env|
6
10
  env["rango.router.params"] = env["rack.routing_args"]
@@ -1,6 +1,10 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "usher"
3
+ begin
4
+ require "usher"
5
+ rescue LoadError
6
+ raise LoadError, "You have to install usher gem!"
7
+ end
4
8
 
5
9
  Rango::Router.implement(:usher) do |env|
6
10
  # when usher routes to the default app, then usher.params is nil
@@ -11,7 +15,6 @@ module Rango
11
15
  module UrlHelper
12
16
  # url(:login)
13
17
  def url(*args)
14
- raise "You have to asign your routes to Rango::Router.app, for example Rango::Router.app = Usher::Interface.for(:rack) { get('/') }" if Rango::Router.app.nil?
15
18
  Rango::Router.app.router.generator.generate(*args)
16
19
  end
17
20
  end
@@ -1,7 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require "rango"
4
- require "rango/helpers"
5
4
  require "rango/controller"
6
5
  require "rango/environments"
7
6
  require "rango/mixins/rendering"
@@ -9,26 +9,25 @@
9
9
  # Defaults to `{script: {type: "text/javascript"}, form: {method: "POST"}}`
10
10
 
11
11
  module Haml
12
- class Engine
13
- alias_method :__initialize__, :initialize
14
- def initialize(template, options = Hash.new)
15
- __initialize__(template, options)
16
- @options[:default_attributes] = Hash.new
17
- # symbolize keys
18
- @options[:default_attributes] = @options[:default_attributes].inject(Hash.new) do |options, pair|
19
- options.merge(pair.first.to_sym => pair.last)
20
- end
21
- end
22
- end
23
-
24
12
  module Precompiler
25
13
  alias_method :__prerender_tag__, :prerender_tag
26
14
  def prerender_tag(name, self_close, attributes)
27
15
  # merge given attributes with default attributes from options
28
- if default_attributes = @options[:default_attributes][name.to_sym]
29
- attributes = default_attributes.merge(attributes)
30
- end
16
+ defaults = Tilt::HamlTemplate.options[:default_attributes][name.to_sym]
17
+ attributes = defaults.merge(attributes) if defaults
31
18
  __prerender_tag__(name, self_close, attributes)
32
19
  end
33
20
  end
21
+
22
+ class Buffer
23
+ alias_method :__open_tag__, :open_tag
24
+ def open_tag(name, self_closing, try_one_line, preserve_tag, escape_html, class_id,
25
+ nuke_outer_whitespace, nuke_inner_whitespace, obj_ref, content, *attributes_hashes)
26
+ defaults = Tilt::HamlTemplate.options[:default_attributes][name.to_sym]
27
+ attributes_hashes.unshift(defaults) if defaults
28
+
29
+ __open_tag__(name, self_closing, try_one_line, preserve_tag, escape_html, class_id,
30
+ nuke_outer_whitespace, nuke_inner_whitespace, obj_ref, content, *attributes_hashes)
31
+ end
32
+ end
34
33
  end
@@ -1,36 +1,29 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require "tilt"
4
- require "rango/mixins/chainable"
5
4
 
6
- module Tilt
7
- ErubisTemplate.class_eval do
8
- extend Chainable
9
- chainable do
10
- def initialize_engine
11
- super
12
- require "rango/templates/exts/erubis"
5
+ module Rango
6
+ module TiltExtensions
7
+ # Tilt::HamlTemplate.options[:default_attributes] = {script: {type: "text/javascript"}, form: {method: "POST"}}
8
+ module Haml
9
+ def self.included(klass)
10
+ klass.send(:remove_method, :initialize_engine)
11
+ def klass.options
12
+ @options ||= Hash.new
13
+ end
13
14
  end
14
- end
15
- end
16
-
17
- # Tilt::HamlTemplate.options[:default_attributes] = {script: {type: "text/javascript"}, form: {method: "POST"}}
18
- HamlTemplate.class_eval do
19
- extend Chainable
20
15
 
21
- def self.options
22
- @options ||= Hash.new
23
- end
24
-
25
- chainable do
26
16
  def initialize_engine
27
- super
28
- require "rango/templates/exts/haml"
17
+ require_template_library 'haml' unless defined? ::Haml::Engine
18
+ require "rango/templates/exts/haml" if self.class.options[:default_attributes]
29
19
  end
30
20
 
31
- def haml_options
32
- super.merge!(self.class.options)
21
+ def initialize(*args)
22
+ super
23
+ self.options.merge!(self.class.options)
33
24
  end
34
25
  end
35
26
  end
36
27
  end
28
+
29
+ Tilt::HamlTemplate.send(:include, Rango::TiltExtensions::Haml)
@@ -84,6 +84,15 @@ module Rango
84
84
  return self.template.blocks[name]
85
85
  end
86
86
 
87
+ # Clears default content of given block.
88
+ #
89
+ # @example
90
+ # clear_block(:flyout)
91
+ def clear_block(name)
92
+ raise ArgumentError, "You need to specify name of block to clear." if name.nil?
93
+ self.template.blocks[name] = String.new
94
+ end
95
+
87
96
  # Low-level rendering method for templates.
88
97
  #
89
98
  # @since 0.2
@@ -113,7 +122,7 @@ module Rango
113
122
 
114
123
  # @since 0.2
115
124
  def includes(template, context = Hash.new)
116
- render template, context
125
+ render normalize_template_path(template), context
117
126
  return true
118
127
  end
119
128