rango 0.2 → 0.2.1.pre

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 (261) hide show
  1. data/.gitignore +9 -0
  2. data/.gitmodules +3 -0
  3. data/CHANGELOG +5 -0
  4. data/CONTRIBUTORS +1 -0
  5. data/Gemfile +20 -0
  6. data/LICENSE +1 -1
  7. data/README.textile +5 -4
  8. data/benchmarks/ab.rb +6 -0
  9. data/benchmarks/bm/boot.rb +20 -0
  10. data/{spec/rango/version_spec.rb → benchmarks/bm/callbacks.rb} +0 -0
  11. data/benchmarks/bm/request.rb +4 -0
  12. data/benchmarks/bm/routers.rb +22 -0
  13. data/benchmarks/bm/stack.rb +19 -0
  14. data/{spec/stubs/acqs/dir/lib.rb → benchmarks/bm/templates.rb} +0 -0
  15. data/benchmarks/helper.rb +7 -0
  16. data/benchmarks/stubs/merb-app/.gitignore +21 -0
  17. data/benchmarks/stubs/merb-app/Rakefile +35 -0
  18. data/benchmarks/stubs/merb-app/app/controllers/application.rb +4 -0
  19. data/benchmarks/stubs/merb-app/app/controllers/exceptions.rb +15 -0
  20. data/benchmarks/stubs/merb-app/app/helpers/global_helpers.rb +7 -0
  21. data/benchmarks/stubs/merb-app/app/models/user.rb +19 -0
  22. data/benchmarks/stubs/merb-app/app/views/exceptions/not_acceptable.html.erb +63 -0
  23. data/benchmarks/stubs/merb-app/app/views/exceptions/not_found.html.erb +47 -0
  24. data/benchmarks/stubs/merb-app/app/views/layout/application.html.erb +12 -0
  25. data/benchmarks/stubs/merb-app/autotest/discover.rb +4 -0
  26. data/benchmarks/stubs/merb-app/autotest/merb.rb +154 -0
  27. data/benchmarks/stubs/merb-app/autotest/merb_rspec.rb +167 -0
  28. data/benchmarks/stubs/merb-app/config/database.yml +33 -0
  29. data/benchmarks/stubs/merb-app/config/dependencies.rb +36 -0
  30. data/benchmarks/stubs/merb-app/config/environments/development.rb +17 -0
  31. data/benchmarks/stubs/merb-app/config/environments/production.rb +12 -0
  32. data/benchmarks/stubs/merb-app/config/environments/rake.rb +13 -0
  33. data/benchmarks/stubs/merb-app/config/environments/staging.rb +12 -0
  34. data/benchmarks/stubs/merb-app/config/environments/test.rb +14 -0
  35. data/benchmarks/stubs/merb-app/config/init.rb +26 -0
  36. data/benchmarks/stubs/merb-app/config/rack.rb +13 -0
  37. data/benchmarks/stubs/merb-app/config/router.rb +46 -0
  38. data/benchmarks/stubs/merb-app/doc/rdoc/generators/merb_generator.rb +1364 -0
  39. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/api_grease.js +640 -0
  40. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/index.html.erb +37 -0
  41. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/merb.css +252 -0
  42. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/merb.rb +353 -0
  43. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
  44. data/benchmarks/stubs/merb-app/doc/rdoc/generators/template/merb/prototype.js +2515 -0
  45. data/benchmarks/stubs/merb-app/merb/merb-auth/setup.rb +46 -0
  46. data/benchmarks/stubs/merb-app/merb/merb-auth/strategies.rb +13 -0
  47. data/benchmarks/stubs/merb-app/merb/session/session.rb +11 -0
  48. data/benchmarks/stubs/merb-app/public/.htaccess +17 -0
  49. data/benchmarks/stubs/merb-app/public/favicon.ico +0 -0
  50. data/benchmarks/stubs/merb-app/public/images/merb.jpg +0 -0
  51. data/benchmarks/stubs/merb-app/public/javascripts/application.js +1 -0
  52. data/benchmarks/stubs/merb-app/public/javascripts/jquery.js +19 -0
  53. data/benchmarks/stubs/merb-app/public/merb.fcgi +22 -0
  54. data/benchmarks/stubs/merb-app/public/robots.txt +5 -0
  55. data/benchmarks/stubs/merb-app/public/stylesheets/master.css +119 -0
  56. data/{spec/stubs/acqs/dir/lib_spec.rb → benchmarks/stubs/merb-app/spec/spec.opts} +0 -0
  57. data/benchmarks/stubs/merb-app/spec/spec_helper.rb +27 -0
  58. data/benchmarks/stubs/merb-app/tasks/doc.thor +151 -0
  59. data/benchmarks/stubs/merb-app/tasks/merb.thor/app_script.rb +33 -0
  60. data/benchmarks/stubs/merb-app/tasks/merb.thor/common.rb +70 -0
  61. data/benchmarks/stubs/merb-app/tasks/merb.thor/gem_ext.rb +127 -0
  62. data/benchmarks/stubs/merb-app/tasks/merb.thor/main.thor +152 -0
  63. data/benchmarks/stubs/merb-app/tasks/merb.thor/ops.rb +95 -0
  64. data/benchmarks/stubs/merb-app/tasks/merb.thor/utils.rb +42 -0
  65. data/benchmarks/stubs/merb-core/.gitignore +21 -0
  66. data/benchmarks/stubs/merb-core/Rakefile +35 -0
  67. data/benchmarks/stubs/merb-core/app/controllers/application.rb +4 -0
  68. data/benchmarks/stubs/merb-core/app/controllers/exceptions.rb +15 -0
  69. data/benchmarks/stubs/merb-core/app/helpers/global_helpers.rb +7 -0
  70. data/benchmarks/stubs/merb-core/app/views/exceptions/not_acceptable.html.erb +63 -0
  71. data/benchmarks/stubs/merb-core/app/views/exceptions/not_found.html.erb +47 -0
  72. data/benchmarks/stubs/merb-core/app/views/layout/application.html.erb +12 -0
  73. data/benchmarks/stubs/merb-core/autotest/discover.rb +1 -0
  74. data/benchmarks/stubs/merb-core/autotest/merb.rb +151 -0
  75. data/benchmarks/stubs/merb-core/autotest/merb_rspec.rb +167 -0
  76. data/benchmarks/stubs/merb-core/config/environments/development.rb +17 -0
  77. data/benchmarks/stubs/merb-core/config/environments/production.rb +12 -0
  78. data/benchmarks/stubs/merb-core/config/environments/rake.rb +13 -0
  79. data/benchmarks/stubs/merb-core/config/environments/staging.rb +12 -0
  80. data/benchmarks/stubs/merb-core/config/environments/test.rb +14 -0
  81. data/benchmarks/stubs/merb-core/config/init.rb +27 -0
  82. data/benchmarks/stubs/merb-core/config/rack.rb +13 -0
  83. data/benchmarks/stubs/merb-core/config/router.rb +43 -0
  84. data/benchmarks/stubs/merb-core/doc/rdoc/generators/merb_generator.rb +1364 -0
  85. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/api_grease.js +640 -0
  86. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/index.html.erb +37 -0
  87. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/merb.css +252 -0
  88. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/merb.rb +353 -0
  89. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/merb_doc_styles.css +492 -0
  90. data/benchmarks/stubs/merb-core/doc/rdoc/generators/template/merb/prototype.js +2515 -0
  91. data/benchmarks/stubs/merb-core/public/.htaccess +17 -0
  92. data/benchmarks/stubs/merb-core/public/favicon.ico +0 -0
  93. data/benchmarks/stubs/merb-core/public/images/merb.jpg +0 -0
  94. data/benchmarks/stubs/merb-core/public/javascripts/application.js +1 -0
  95. data/benchmarks/stubs/merb-core/public/merb.fcgi +22 -0
  96. data/benchmarks/stubs/merb-core/public/robots.txt +5 -0
  97. data/benchmarks/stubs/merb-core/public/stylesheets/master.css +119 -0
  98. data/{spec/stubs/acqs/lib.rb → benchmarks/stubs/merb-core/spec/spec.opts} +0 -0
  99. data/benchmarks/stubs/merb-core/spec/spec_helper.rb +22 -0
  100. data/benchmarks/stubs/merb-core/tasks/merb.thor/app_script.rb +33 -0
  101. data/benchmarks/stubs/merb-core/tasks/merb.thor/common.rb +70 -0
  102. data/benchmarks/stubs/merb-core/tasks/merb.thor/gem_ext.rb +127 -0
  103. data/benchmarks/stubs/merb-core/tasks/merb.thor/main.thor +152 -0
  104. data/benchmarks/stubs/merb-core/tasks/merb.thor/ops.rb +95 -0
  105. data/benchmarks/stubs/merb-core/tasks/merb.thor/utils.rb +42 -0
  106. data/benchmarks/stubs/merb-flat/.gitignore +21 -0
  107. data/benchmarks/stubs/merb-flat/README.txt +10 -0
  108. data/benchmarks/stubs/merb-flat/Rakefile +35 -0
  109. data/benchmarks/stubs/merb-flat/application.rb +17 -0
  110. data/benchmarks/stubs/merb-flat/config/framework.rb +9 -0
  111. data/benchmarks/stubs/merb-flat/config/init.rb +42 -0
  112. data/benchmarks/stubs/merb-flat/spec/spec_helper.rb +26 -0
  113. data/benchmarks/stubs/merb-flat/tasks/merb.thor/app_script.rb +33 -0
  114. data/benchmarks/stubs/merb-flat/tasks/merb.thor/common.rb +70 -0
  115. data/benchmarks/stubs/merb-flat/tasks/merb.thor/gem_ext.rb +127 -0
  116. data/benchmarks/stubs/merb-flat/tasks/merb.thor/main.thor +152 -0
  117. data/benchmarks/stubs/merb-flat/tasks/merb.thor/ops.rb +95 -0
  118. data/benchmarks/stubs/merb-flat/tasks/merb.thor/utils.rb +42 -0
  119. data/benchmarks/stubs/merb-flat/views/foo.html.erb +3 -0
  120. data/benchmarks/stubs/merb-very-flat/.gitignore +21 -0
  121. data/benchmarks/stubs/merb-very-flat/Rakefile +35 -0
  122. data/benchmarks/stubs/merb-very-flat/merb-very-flat.rb +61 -0
  123. data/benchmarks/stubs/merb-very-flat/spec/spec_helper.rb +26 -0
  124. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/app_script.rb +33 -0
  125. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/common.rb +70 -0
  126. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/gem_ext.rb +127 -0
  127. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/main.thor +152 -0
  128. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/ops.rb +95 -0
  129. data/benchmarks/stubs/merb-very-flat/tasks/merb.thor/utils.rb +42 -0
  130. data/benchmarks/stubs/rails/README +243 -0
  131. data/benchmarks/stubs/rails/Rakefile +10 -0
  132. data/benchmarks/stubs/rails/app/controllers/application_controller.rb +12 -0
  133. data/benchmarks/stubs/rails/app/helpers/application_helper.rb +5 -0
  134. data/benchmarks/stubs/rails/config/boot.rb +112 -0
  135. data/benchmarks/stubs/rails/config/database.yml +22 -0
  136. data/benchmarks/stubs/rails/config/environment.rb +43 -0
  137. data/benchmarks/stubs/rails/config/environments/development.rb +19 -0
  138. data/benchmarks/stubs/rails/config/environments/production.rb +30 -0
  139. data/benchmarks/stubs/rails/config/environments/test.rb +30 -0
  140. data/benchmarks/stubs/rails/config/initializers/backtrace_silencers.rb +9 -0
  141. data/benchmarks/stubs/rails/config/initializers/inflections.rb +12 -0
  142. data/benchmarks/stubs/rails/config/initializers/mime_types.rb +7 -0
  143. data/benchmarks/stubs/rails/config/initializers/new_rails_defaults.rb +21 -0
  144. data/benchmarks/stubs/rails/config/initializers/session_store.rb +17 -0
  145. data/benchmarks/stubs/rails/config/locales/en.yml +5 -0
  146. data/benchmarks/stubs/rails/config/routes.rb +45 -0
  147. data/benchmarks/stubs/rails/doc/README_FOR_APP +2 -0
  148. data/{spec/stubs/acqs/tasks.thor → benchmarks/stubs/rails/log/development.log} +0 -0
  149. data/{stubs/stack/content/TODO.txt → benchmarks/stubs/rails/log/production.log} +0 -0
  150. data/benchmarks/stubs/rails/log/server.log +0 -0
  151. data/benchmarks/stubs/rails/log/test.log +0 -0
  152. data/benchmarks/stubs/rails/public/404.html +30 -0
  153. data/benchmarks/stubs/rails/public/422.html +30 -0
  154. data/benchmarks/stubs/rails/public/500.html +30 -0
  155. data/benchmarks/stubs/rails/public/favicon.ico +0 -0
  156. data/benchmarks/stubs/rails/public/images/rails.png +0 -0
  157. data/benchmarks/stubs/rails/public/index.html +275 -0
  158. data/benchmarks/stubs/rails/public/javascripts/application.js +2 -0
  159. data/benchmarks/stubs/rails/public/javascripts/controls.js +963 -0
  160. data/benchmarks/stubs/rails/public/javascripts/dragdrop.js +973 -0
  161. data/benchmarks/stubs/rails/public/javascripts/effects.js +1128 -0
  162. data/benchmarks/stubs/rails/public/javascripts/prototype.js +4320 -0
  163. data/benchmarks/stubs/rails/public/robots.txt +5 -0
  164. data/benchmarks/stubs/rails/script/about +4 -0
  165. data/benchmarks/stubs/rails/script/console +3 -0
  166. data/benchmarks/stubs/rails/script/dbconsole +3 -0
  167. data/benchmarks/stubs/rails/script/destroy +3 -0
  168. data/benchmarks/stubs/rails/script/generate +3 -0
  169. data/benchmarks/stubs/rails/script/performance/benchmarker +3 -0
  170. data/benchmarks/stubs/rails/script/performance/profiler +3 -0
  171. data/benchmarks/stubs/rails/script/plugin +3 -0
  172. data/benchmarks/stubs/rails/script/runner +3 -0
  173. data/benchmarks/stubs/rails/script/server +3 -0
  174. data/benchmarks/stubs/rails/test/performance/browsing_test.rb +11 -0
  175. data/benchmarks/stubs/rails/test/test_helper.rb +40 -0
  176. data/benchmarks/stubs/ramaze.rb +0 -0
  177. data/benchmarks/stubs/sinatra.rb +11 -0
  178. data/bin/rango +2 -2
  179. data/deps.rip +7 -0
  180. data/deps.rip.rbe +7 -0
  181. data/gems/cache/abstract-1.0.0.gem +0 -0
  182. data/gems/cache/code-cleaner-0.1.gem +0 -0
  183. data/gems/cache/code-cleaner-0.2.gem +0 -0
  184. data/gems/cache/code-cleaner-0.3.gem +0 -0
  185. data/gems/cache/code-cleaner-0.4.gem +0 -0
  186. data/gems/cache/code-cleaner-0.5.gem +0 -0
  187. data/gems/cache/code-cleaner-0.6.gem +0 -0
  188. data/gems/cache/code-cleaner-0.7.gem +0 -0
  189. data/gems/cache/code-cleaner-0.8.1.gem +0 -0
  190. data/gems/cache/code-cleaner-0.8.gem +0 -0
  191. data/gems/cache/erubis-2.6.5.gem +0 -0
  192. data/gems/cache/extlib-0.9.14.gem +0 -0
  193. data/gems/cache/haml-2.2.16.gem +0 -0
  194. data/gems/cache/haml-2.2.17.gem +0 -0
  195. data/gems/cache/nake-0.0.2.gem +0 -0
  196. data/gems/cache/nake-0.0.3.gem +0 -0
  197. data/gems/cache/nake-0.0.5.gem +0 -0
  198. data/gems/cache/nake-0.0.6.gem +0 -0
  199. data/gems/cache/nake-0.0.8.gem +0 -0
  200. data/gems/cache/rack-1.0.1.gem +0 -0
  201. data/gems/cache/rack-1.1.0.gem +0 -0
  202. data/gems/cache/rspec-1.2.9.gem +0 -0
  203. data/gems/cache/rspec-1.3.0.gem +0 -0
  204. data/gems/cache/term-ansicolor-1.0.4.gem +0 -0
  205. data/gems/cache/tilt-0.4.gem +0 -0
  206. data/gems/cache/tilt-0.5.gem +0 -0
  207. data/lib/rango.rb +28 -28
  208. data/lib/rango/cli.rb +34 -0
  209. data/lib/rango/contrib/pagination/adapters/datamapper.rb +21 -17
  210. data/lib/rango/controller.rb +36 -4
  211. data/lib/rango/environments.rb +1 -15
  212. data/lib/rango/exceptions.rb +144 -86
  213. data/lib/rango/helpers.rb +10 -2
  214. data/lib/rango/mailer.rb +48 -0
  215. data/lib/rango/mixins/action_args.rb +5 -7
  216. data/lib/rango/mixins/filters.rb +18 -14
  217. data/lib/rango/mixins/message.rb +30 -24
  218. data/lib/rango/mixins/rendering.rb +54 -0
  219. data/lib/rango/orm/tasks/datamapper.nake +81 -0
  220. data/lib/rango/orm/tasks/sequel.nake +43 -0
  221. data/lib/rango/router/adapters/usher.rb +2 -1
  222. data/lib/rango/stacks/controller.rb +12 -0
  223. data/lib/rango/tasks/spec.nake +9 -0
  224. data/lib/rango/templates/exts/haml.rb +1 -1
  225. data/lib/rango/templates/exts/tilt.rb +10 -0
  226. data/lib/rango/templates/helpers.rb +29 -25
  227. data/lib/rango/templates/template.rb +7 -6
  228. data/rango.gemspec +52 -0
  229. data/rango.pre.gemspec +8 -0
  230. data/spec/rango/environments_spec.rb +1 -1
  231. data/spec/rango/exceptions_spec.rb +8 -7
  232. data/spec/rango/mixins/render_spec.rb +1 -1
  233. data/spec/rango/templates/template_spec.rb +1 -1
  234. data/stubs/stack/content/%name%.gemspec.rbt +52 -0
  235. data/stubs/stack/content/%name%.pre.gemspec.rbt +8 -0
  236. data/stubs/stack/content/CHANGELOG +0 -0
  237. data/stubs/stack/content/Gemfile.rbt +22 -11
  238. data/stubs/stack/content/README.textile.rbt +7 -0
  239. data/stubs/stack/content/config.ru.rbt +33 -62
  240. data/stubs/stack/content/deps.rip +0 -0
  241. data/stubs/stack/content/init.rb.rbt +14 -39
  242. data/stubs/stack/content/lib/%name%.rb.rbt +8 -0
  243. data/stubs/stack/content/lib/%name%/config.rb.rbt +0 -0
  244. data/stubs/stack/content/{environments.rb.rbt → lib/%name%/environments/development.rb.rbt} +5 -0
  245. data/stubs/stack/content/lib/%name%/environments/production.rb.rbt +0 -0
  246. data/stubs/stack/content/lib/%name%/environments/stagging.rb.rbt +0 -0
  247. data/stubs/stack/content/lib/%name%/initializers/middlewares.rb.rbt +5 -0
  248. data/stubs/stack/content/lib/%name%/initializers/urls.rb.rbt +24 -0
  249. data/stubs/stack/content/{models.rb.rbt → lib/%name%/models.rb.rbt} +7 -0
  250. data/stubs/stack/content/{views.rb.rbt → lib/%name%/views.rb.rbt} +2 -8
  251. data/stubs/stack/content/rackup.rb.rbt +41 -0
  252. data/stubs/stack/content/tasks.rb.rbt +52 -0
  253. data/stubs/stack/setup.rb +7 -1
  254. data/support/hooks/pre-commit +12 -0
  255. data/tasks.rb +49 -0
  256. metadata +250 -54
  257. data/Rakefile +0 -33
  258. data/lib/rango/rack/middlewares/email_obfuscator.rb +0 -25
  259. data/lib/rango/version.rb +0 -7
  260. data/stubs/stack/content/.rvmrc.rbt +0 -2
  261. data/stubs/stack/content/Rakefile.rbt +0 -12
@@ -3,6 +3,60 @@
3
3
  require "rango/mixins/render"
4
4
 
5
5
  module Rango
6
+ module FormatMixin
7
+ def self.extended
8
+ end
9
+
10
+ def inherited
11
+ end
12
+
13
+ attr_writer :format
14
+ def formats
15
+ @formats ||= Hash.new { |hash, format| hash[:html] if hash.has_key?(:html) }
16
+ end
17
+
18
+ # format(:json) do |object|
19
+ # object.to_json
20
+ # end
21
+ def format(format, &block)
22
+ self.formats[:format] = block
23
+ end
24
+ end
25
+ module StackRendering
26
+ include Rango::RenderMixin
27
+ def template_dirname
28
+ self.class.name.gsub("::", "/").camel_case
29
+ end
30
+
31
+ def template_basename
32
+ request["router.action"]
33
+ end
34
+
35
+ #def template_basename
36
+ # case request["router.action"]
37
+ # when "show"
38
+ # self.class.name.singularize
39
+ # when "index"
40
+ # else
41
+ # end
42
+ #end
43
+
44
+ def template_path
45
+ File.join(template_dirname, template_basename)
46
+ end
47
+
48
+ def render(context = Hash.new)
49
+ super(self.template_path, self.scope, self.context.merge!(context))
50
+ end
51
+
52
+ def display(object)
53
+ render
54
+ rescue TemplateNotFound
55
+ callback = self.formats[request.action]
56
+ callback.call
57
+ end
58
+ end
59
+
6
60
  module ExplicitRendering
7
61
  include Rango::RenderMixin
8
62
  def render(template, context = Hash.new)
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ # @since 0.0.2.1
4
+ # ./tasks.rb db:automigrate test
5
+ Task.new("db:automigrate") do |task|
6
+ task.description = "Automigrate the database. It will destroy all the data!"
7
+ task.define do |environment = "development", options|
8
+ Task[:environment].call(environment)
9
+ Rango.logger.info("[#{Rango.environment}] Migrating databases ...")
10
+ result = DataMapper.auto_migrate!
11
+ Rango.logger.debug("Result: #{result.inspect}")
12
+ end
13
+ end
14
+
15
+ # @since 0.0.2.1
16
+ # ./tasks.rb db:autoupgrade test
17
+ Task.new("db:autoupgrade") do |task|
18
+ task.description = "Autoupgrade the database structure. Data should stay untouched."
19
+ task.define do |environment = "development", options|
20
+ Task[:environment].call(environment)
21
+ Rango.logger.info("[#{Rango.environment}] Upgrading databases ...")
22
+ result = DataMapper.auto_upgrade!
23
+ Rango.logger.debug("Result: #{result.inspect}")
24
+ end
25
+ end
26
+
27
+ # @since 0.0.2.1
28
+ # ./tasks.rb db:report test
29
+ Task.new("db:report") do |task|
30
+ task.description = "Report count of objects in database."
31
+ task.define do |environment = "development", options|
32
+ Task[:environment].call(environment)
33
+ ObjectSpace.classes.each do |klass|
34
+ if klass.included(DataMapper::Resource)
35
+ puts "#{model_class}: #{model_class.count}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ Task.new("db:migrate") do |task|
42
+ task.hidden = true
43
+ task.define do |*args, options|
44
+ abort "Use #{$0} db:migrate:up version or #{$0} db:migrate:down version"
45
+ end
46
+ end
47
+
48
+ Task.new("db:migrate:load") do |task|
49
+ task.hidden = true
50
+ task.define do |environment, options|
51
+ Task[:environment].call(environment)
52
+ begin
53
+ require "dm-migrations/migration_runner"
54
+ rescue LoadError
55
+ abort "You have to install dm-migrations gem for this!"
56
+ end
57
+ Dir["db/migrations/*.rb"].each do |migration|
58
+ load migration
59
+ end
60
+ end
61
+ end
62
+
63
+ # @since 0.0.2.1
64
+ # ./tasks.rb db:migrate:up test --version=10
65
+ Task.new("db:migrate:up") do |task|
66
+ task.description = "Migrate up using migrations."
67
+ task.define do |environment = "development", options|
68
+ Task["db:migrate:load"].call(environment)
69
+ migrate_up!(options[:version])
70
+ end
71
+ end
72
+
73
+ # @since 0.0.2.1
74
+ # ./tasks.rb db:migrate:down test --version=10
75
+ Task.new("db:migrate:down") do |task|
76
+ task.description = "Migrate down using migrations."
77
+ task.define do |environment = "development", options|
78
+ Task["db:migrate:load"].call(environment)
79
+ migrate_down!(options[:version])
80
+ end
81
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ # @since 0.0.2.1
4
+ # ./tasks.rb db:migrate test
5
+ Task.new("db:migrate") do |task|
6
+ task.description = "Perform migration using migrations in schema/migrations"
7
+ task.define do |environment = "development", options|
8
+ Task[:environment].call(environment)
9
+ require "sequel/extensions/migration"
10
+ Sequel::Migrator.apply(Sequel::Model.db, "db/migrations", options[:version])
11
+ end
12
+ end
13
+
14
+ # @since 0.0.2.1
15
+ # ./tasks.rb db:drop:all test
16
+ Task.new("db:drop:all") do |task|
17
+ task.description = "Drop all the tables"
18
+ task.define do |environment = "development", options|
19
+ Task[:environment].call(environment)
20
+ Sequel::Model.db.drop_table *Sequel::Model.db.tables
21
+ end
22
+ end
23
+
24
+ # @since 0.0.2.1
25
+ # ./tasks.rb db:reset test
26
+ Task.new("db:reset") do |task|
27
+ task.description = "Drop all tables and perform migrations"
28
+ task.define do |environment = "development", options|
29
+ Task[:environment].call(environment)
30
+ Task["db:drop:all"].call
31
+ Task["db:migrate"]
32
+ end
33
+ end
34
+
35
+ # @since 0.0.2.1
36
+ # ./tasks.rb db:truncate test
37
+ Task.new("db:truncate") do |task|
38
+ task.description = "Truncate all tables in database"
39
+ task.define do |environment = "development", options|
40
+ Task[:environment].call(environment)
41
+ Sequel::Model.db << "TRUNCATE #{db.tables.join(', ')} CASCADE;"
42
+ end
43
+ end
@@ -3,7 +3,8 @@
3
3
  require "usher"
4
4
 
5
5
  Rango::Router.implement(:usher) do |env|
6
- env["rango.router.params"] = env["usher.params"]
6
+ # when usher routes to the default app, then usher.params is nil
7
+ env["rango.router.params"] = env["usher.params"] || Hash.new
7
8
  end
8
9
 
9
10
  module Rango
@@ -1,6 +1,18 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require "rango"
4
+ require "rango/helpers"
4
5
  require "rango/controller"
5
6
  require "rango/environments"
7
+ require "rango/mixins/rendering"
8
+ require "rango/mixins/message"
9
+ require "rango/mixins/filters"
6
10
  require "rango/rack/middlewares/basic"
11
+
12
+ module Rango
13
+ class StackController < Controller
14
+ include ExplicitRendering
15
+ include FiltersMixin
16
+ include MessageMixin
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ Task.new(:spec) do |task|
4
+ task.description = "Run specs"
5
+ task.define do |path = "spec", options|
6
+ path = args.path ? "spec" : args.path
7
+ sh "./bin/spec --options spec/spec.opts #{path}"
8
+ end
9
+ end
@@ -6,7 +6,7 @@
6
6
  # Attributes of each tag will reverse merged with his default attributes, so you
7
7
  # don't have to write over and over that script tag has attribute `type` with value
8
8
  # `text/javascript`. For example, `%script` compiles to `<script type="text/javascript"></script>`.
9
- # Defaults to `{:script => {:type => "text/javascript"}, :form => {:method => "POST"}}`
9
+ # Defaults to `{script: {type: "text/javascript"}, form: {method: "POST"}}`
10
10
 
11
11
  module Haml
12
12
  class Engine
@@ -14,13 +14,23 @@ module Tilt
14
14
  end
15
15
  end
16
16
 
17
+ # Tilt::HamlTemplate.options[:default_attributes] = {script: {type: "text/javascript"}, form: {method: "POST"}}
17
18
  HamlTemplate.class_eval do
18
19
  extend Chainable
20
+
21
+ def self.options
22
+ @options ||= Hash.new
23
+ end
24
+
19
25
  chainable do
20
26
  def initialize_engine
21
27
  super
22
28
  require "rango/templates/exts/haml"
23
29
  end
30
+
31
+ def haml_options
32
+ super.merge!(self.class.options)
33
+ end
24
34
  end
25
35
  end
26
36
  end
@@ -4,10 +4,12 @@ require "rango"
4
4
  require "rango/templates/template"
5
5
 
6
6
  module Rango
7
+ SubtemplateNotFound = Class.new(StandardError)
8
+
7
9
  module TemplateHelpers
8
10
  def self.extended(scope)
9
11
  class << scope
10
- attr_accessor :_template
12
+ attr_accessor :template
11
13
  # @example Capture being used in a .html.erb page:
12
14
  # <% @foo = capture do %>
13
15
  # <p>Some Foo content!</p>
@@ -18,13 +20,13 @@ module Rango
18
20
  # @return [String] The output of the block.
19
21
  # @api private
20
22
  def capture(*args, &block)
21
- capture_method = "capture_#{self._template.adapter}"
23
+ capture_method = "capture_#{self.template.adapter}"
22
24
  if self.respond_to?(capture_method) # tilt doesn't support @_out_buf for haml
23
- self.send("capture_#{self._template.adapter}", *args, &block)
25
+ self.send("capture_#{self.template.adapter}", *args, &block)
24
26
  else
25
27
  # @_out_buf comes from tilt
26
28
  unless self.instance_variable_defined?("@_out_buf")
27
- raise "Adapter #{self._template.adapter} doesn't support capturing"
29
+ raise "Adapter #{self.template.adapter} doesn't support capturing"
28
30
  end
29
31
  _old_buf, @_out_buf = @_out_buf, ""
30
32
  block.call(*args)
@@ -33,13 +35,13 @@ module Rango
33
35
  end
34
36
 
35
37
  def concat(string)
36
- concat_method = "concat_#{self._template.adapter}"
38
+ concat_method = "concat_#{self.template.adapter}"
37
39
  if self.respond_to?(concat_method) # tilt doesn't support @_out_buf for haml
38
- self.send("concat_#{self._template.adapter}", string)
40
+ self.send("concat_#{self.template.adapter}", string)
39
41
  else
40
42
  # @_out_buf comes from tilt
41
43
  unless self.instance_variable_defined?("@_out_buf")
42
- raise "Adapter #{self._template.adapter} doesn't support concating"
44
+ raise "Adapter #{self.template.adapter} doesn't support concating"
43
45
  end
44
46
  @_out_buf << string
45
47
  end
@@ -48,7 +50,7 @@ module Rango
48
50
  end
49
51
 
50
52
  def self.included(scope_class)
51
- scope_class.class_eval { attr_accessor :_template}
53
+ scope_class.class_eval { attr_accessor :template }
52
54
  end
53
55
 
54
56
  # post/show.html: it's block is the block we like to see in output
@@ -59,15 +61,15 @@ module Rango
59
61
  def block(name, value = nil, &block)
60
62
  raise ArgumentError, "Block has to have a name!" if name.nil?
61
63
  raise ArgumentError, "You have to provide value or block, not both of them!" if value && block
62
- self._template.blocks[name] ||= block ? self._template.scope.capture(&block) : value
63
- return self._template.blocks[name]
64
+ self.template.blocks[name] ||= block ? self.template.scope.capture(&block) : value
65
+ return self.template.blocks[name]
64
66
  end
65
67
 
66
68
  # - extend_block(:head) do
67
69
  # = pupu :lighter, syntax: "html", theme: "standard"
68
70
  # = block(:head)
69
71
  def extend_block(name, value = nil, &block)
70
- unless self._template.blocks[name]
72
+ unless self.template.blocks[name]
71
73
  raise NameError, "Block #{name.inspect} wasn't defined yet, you can't extend it!"
72
74
  end
73
75
  self.enhance_block(name, value, &block)
@@ -76,9 +78,9 @@ module Rango
76
78
  def enhance_block(name, value = nil, &block)
77
79
  raise ArgumentError, "Block has to have a name!" if name.nil?
78
80
  raise ArgumentError, "You have to provide value or block, not both of them!" if value && block
79
- value = self._template.scope.capture(&block) if value.nil? && block
80
- self._template.blocks[name] = "#{self._template.blocks[name]}\n#{value}" if value
81
- return self._template.blocks[name]
81
+ value = self.template.scope.capture(&block) if value.nil? && block
82
+ self.template.blocks[name] = "#{self.template.blocks[name]}\n#{value}" if value
83
+ return self.template.blocks[name]
82
84
  end
83
85
 
84
86
  # Low-level rendering method for templates.
@@ -88,22 +90,24 @@ module Rango
88
90
  # render "base.html"
89
91
  # render "./base.html"
90
92
  # render "../base.html"
91
- def render(template, context = Hash.new)
92
- normalize_template_path(template)
93
- original_template = self._template
94
- template = Rango::Template.new(template, self) # self is scope
95
- self._template = original_template
93
+ def render(path, context = Hash.new)
94
+ full_path = normalize_template_path(path)
95
+ original_template = self.template
96
+ template = Rango::Template.new(full_path, self) # self is scope
97
+ self.template = original_template
96
98
  return template.render(context)
99
+ rescue Exceptions::TemplateNotFound # FIXME: this doesn't work
100
+ raise SubtemplateNotFound, "Template #{path} doesn't exist in #{full_path}"
97
101
  end
98
102
 
99
103
  # partial "products/list"
100
104
  # @since 0.0.2
101
- # @version 0.2
102
- def partial(template, context = Hash.new)
105
+ # @version 0.2.1
106
+ def partial(template, extra_context = Hash.new)
103
107
  # NOTE: we can't use File.split because it normalize the path,
104
108
  # so "./base.html" will be the same as "base.html", but it shouldn't be
105
109
  *path, basename = template.split("/")
106
- render File.join(*path, "_#{basename}")
110
+ render File.join(path.join("/"), "_#{basename}"), self.template.context.merge(extra_context)
107
111
  end
108
112
 
109
113
  # @since 0.2
@@ -116,15 +120,15 @@ module Rango
116
120
  # @since 0.0.2
117
121
  def extends(path)
118
122
  # we can't just create a new template, because it has to do it after it reads the whole file
119
- self._template.supertemplate = normalize_template_path(path)
123
+ self.template.supertemplate = normalize_template_path(path)
120
124
  end
121
125
 
122
126
  # @since 0.2
123
127
  def normalize_template_path(template)
124
128
  if template.start_with?("./")
125
- File.expand_path(File.join(File.dirname(self._template.fullpath), template))
129
+ File.expand_path(File.join(File.dirname(self.template.fullpath), template))
126
130
  elsif template.start_with?("../")
127
- File.expand_path(File.join(File.dirname(self._template.fullpath), "..", template))
131
+ File.expand_path(File.join(File.dirname(self.template.fullpath), "..", template))
128
132
  else
129
133
  template
130
134
  end
@@ -6,7 +6,7 @@ require "rango/templates/helpers"
6
6
  require "rango/exceptions"
7
7
 
8
8
  module Rango
9
- module Errors # so we can catch it with other HTTP errors
9
+ module Exceptions # so we can catch it with other HTTP errors
10
10
  TemplateNotFound = Class.new(NotFound)
11
11
  end
12
12
 
@@ -17,7 +17,7 @@ module Rango
17
17
 
18
18
  # template -> supertemplate is the same relationship as class -> superclass
19
19
  # @since 0.0.2
20
- attr_accessor :path, :scope, :supertemplate
20
+ attr_accessor :path, :scope, :supertemplate, :context
21
21
 
22
22
  # @since 0.0.2
23
23
  attr_writer :blocks
@@ -29,7 +29,7 @@ module Rango
29
29
  def initialize(path, scope = Object.new)
30
30
  self.path = path#[scope.class.template_prefix.chomp("/"), template].join("/")
31
31
  self.scope = scope.extend(TemplateHelpers)
32
- self.scope._template = self
32
+ self.scope.template = self
33
33
  end
34
34
 
35
35
  # @since 0.0.2
@@ -57,10 +57,11 @@ module Rango
57
57
 
58
58
  # @since 0.0.2
59
59
  def render(context = Hash.new)
60
- raise Errors::TemplateNotFound.new("Template #{self.path} wasn't found in these template_paths: #{self.class.template_paths.inspect}") if self.fullpath.nil?
60
+ raise Exceptions::TemplateNotFound.new("Template #{self.path} wasn't found in these template_paths: #{self.class.template_paths.inspect}") if self.fullpath.nil?
61
+ Rango.logger.info("Rendering template #{self.path} with context keys #{context.keys.inspect}")
62
+ self.context = context
61
63
  value = self.template.render(self.scope, context)
62
- Rango.logger.info("Rendering template #{self.path}")
63
- # #Rango.logger.inspect(self.blocks)
64
+ Rango.logger.debug("Available blocks: #{self.blocks.keys.inspect}")
64
65
  if self.supertemplate
65
66
  Rango.logger.debug("Extends call: #{self.supertemplate}")
66
67
  supertemplate = self.class.new(self.supertemplate, self.scope)
data/rango.gemspec ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env gem build
2
+ # encoding: utf-8
3
+
4
+ require "base64"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "rango"
8
+ s.version = "0.2.1"
9
+ s.authors = ["Jakub Šťastný aka Botanicus"]
10
+ s.homepage = "http://github.com/botanicus/rango"
11
+ s.summary = "Rango is ultralightweight, ultracustomizable, ultracool web framework deeply inspired by Django."
12
+ s.description = "" # TODO: long description
13
+ s.cert_chain = nil
14
+ s.email = Base64.decode64("c3Rhc3RueUAxMDFpZGVhcy5jeg==\n")
15
+ s.has_rdoc = true
16
+
17
+ # files
18
+ s.files = `git ls-files`.split("\n")
19
+
20
+ Dir["bin/*"].map(&File.method(:basename))
21
+ s.default_executable = "rango"
22
+ s.require_paths = ["lib"]
23
+
24
+ # Ruby version
25
+ # Current JRuby with --1.9 switch has RUBY_VERSION set to "1.9.2dev"
26
+ # and RubyGems don't play well with it, so we have to set minimal
27
+ # Ruby version to 1.9, even if it actually is 1.9.1
28
+ s.required_ruby_version = ::Gem::Requirement.new("~> 1.9")
29
+
30
+ # === Dependencies ===
31
+ # RubyGems has runtime dependencies (add_dependency) and
32
+ # development dependencies (add_development_dependency)
33
+ # Rango isn't a monolithic framework, so you might want
34
+ # to use just one specific part of it, so it has no sense
35
+ # to specify dependencies for the whole gem. If you want
36
+ # to install everything what you need for start with Rango,
37
+ # just run gem install rango --development
38
+
39
+ s.add_development_dependency "simple-templater", ">= 0.0.1.2"
40
+ s.add_development_dependency "bundler"
41
+
42
+ begin
43
+ require "changelog"
44
+ rescue LoadError
45
+ warn "You have to have changelog gem installed for post install message"
46
+ else
47
+ s.post_install_message = CHANGELOG.new.version_changes
48
+ end
49
+
50
+ # RubyForge
51
+ s.rubyforge_project = "rango"
52
+ end