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
@@ -0,0 +1,95 @@
1
+ # encoding: utf-8
2
+
3
+ module Thor::Tasks
4
+ module Merb
5
+ class Collector
6
+ attr_reader :dependencies
7
+
8
+ def self.collect(str)
9
+ collector = new
10
+ collector.instance_eval(str)
11
+ collector.dependencies
12
+ end
13
+
14
+ def initialize
15
+ @dependencies = []
16
+ end
17
+
18
+ def dependency(name, *versions)
19
+ versions.pop if versions.last.is_a?(Hash)
20
+ @dependencies << [name, versions]
21
+ end
22
+ end
23
+
24
+ class Gem < Thor
25
+ def full_list
26
+ @idx.load_gems_in("gems/specifications")
27
+
28
+ @list.map do |name, versions|
29
+ dep = ::Gem::Dependency.new(name, versions)
30
+ spec = @idx.search(dep).last
31
+ unless spec
32
+ self.class.error "A required dependency #{dep} was not found"
33
+ self.class.rollback_trans
34
+ end
35
+ deps = spec.recursive_dependencies(dep, @idx)
36
+ [spec] + deps
37
+ end.flatten.uniq
38
+ end
39
+
40
+ def rescue_failures(error = StandardError, prc = nil)
41
+ begin
42
+ yield
43
+ rescue error => e
44
+ if prc
45
+ prc.call(e)
46
+ else
47
+ puts e.message
48
+ puts e.backtrace
49
+ end
50
+ self.class.rollback_trans
51
+ end
52
+ end
53
+
54
+ def self.begin_trans
55
+ note "Beginning transaction"
56
+ FileUtils.cp_r(Dir.pwd / "gems", Dir.pwd / ".original_gems")
57
+ end
58
+
59
+ def self.commit_trans
60
+ note "Committing transaction"
61
+ FileUtils.rm_rf(Dir.pwd / ".original_gems")
62
+ end
63
+
64
+ def self.rollback_trans
65
+ if File.exist?(Dir.pwd / ".original_gems")
66
+ note "Rolling back transaction"
67
+ FileUtils.rm_rf(Dir.pwd / "gems")
68
+ FileUtils.mv(Dir.pwd / ".original_gems", Dir.pwd / "gems")
69
+ end
70
+ exit!
71
+ end
72
+
73
+ private
74
+ def _install(dep)
75
+ @idx.load_gems_in("gems/specifications")
76
+ return if @idx.search(dep).last
77
+
78
+ installer = ::Gem::DependencyInstaller.new(
79
+ :bin_dir => Dir.pwd / "bin",
80
+ :install_dir => Dir.pwd / "gems",
81
+ :user_install => false)
82
+
83
+ begin
84
+ installer.install dep.name, dep.version_requirements
85
+ rescue ::Gem::GemNotFoundException => e
86
+ puts "Cannot find #{dep}"
87
+ rescue ::Gem::RemoteFetcher::FetchError => e
88
+ puts e.message
89
+ puts "Retrying..."
90
+ retry
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ class String
4
+ def /(other)
5
+ (Pathname.new(self) + other).to_s
6
+ end
7
+ end
8
+
9
+ module ColorfulMessages
10
+
11
+ # red
12
+ def error(*messages)
13
+ puts messages.map { |msg| "\033[1;31m#{msg}\033[0m" }
14
+ end
15
+
16
+ # yellow
17
+ def warning(*messages)
18
+ puts messages.map { |msg| "\033[1;33m#{msg}\033[0m" }
19
+ end
20
+
21
+ # green
22
+ def success(*messages)
23
+ puts messages.map { |msg| "\033[1;32m#{msg}\033[0m" }
24
+ end
25
+
26
+ alias_method :message, :success
27
+
28
+ # magenta
29
+ def note(*messages)
30
+ puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
31
+ end
32
+
33
+ # blue
34
+ def info(*messages)
35
+ puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
36
+ end
37
+
38
+ end
39
+
40
+ module ThorUI
41
+ extend ColorfulMessages
42
+ end
@@ -0,0 +1,21 @@
1
+ .DS_Store
2
+ log/*
3
+ tmp/*
4
+ TAGS
5
+ *~
6
+ .#*
7
+ schema/schema.rb
8
+ schema/*_structure.sql
9
+ schema/*.sqlite3
10
+ schema/*.sqlite
11
+ schema/*.db
12
+ *.sqlite
13
+ *.sqlite3
14
+ *.db
15
+ src/*
16
+ .hgignore
17
+ .hg/*
18
+ .svn/*
19
+ gems/gems/*
20
+ gems/specifications/*
21
+ merb_profile_results
@@ -0,0 +1,10 @@
1
+ Merb Flat
2
+ ==============
3
+
4
+ An example of a small Merb application. Uses a single views directory and one
5
+ controller file.
6
+
7
+ Start with
8
+
9
+ merb
10
+
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'rake/rdoctask'
3
+
4
+ require 'merb-core'
5
+ require 'merb-core/tasks/merb'
6
+
7
+ include FileUtils
8
+
9
+ # Load the basic runtime dependencies; this will include
10
+ # any plugins and therefore plugin rake tasks.
11
+ init_env = ENV['MERB_ENV'] || 'rake'
12
+ Merb.load_dependencies(:environment => init_env)
13
+
14
+ # Get Merb plugins and dependencies
15
+ Merb::Plugins.rakefiles.each { |r| require r }
16
+
17
+ # Load any app level custom rakefile extensions from lib/tasks
18
+ tasks_path = File.join(File.dirname(__FILE__), "lib", "tasks")
19
+ rake_files = Dir["#{tasks_path}/*.rake"]
20
+ rake_files.each{|rake_file| load rake_file }
21
+
22
+ desc "Start runner environment"
23
+ task :merb_env do
24
+ Merb.start_environment(:environment => init_env, :adapter => 'runner')
25
+ end
26
+
27
+ require 'spec/rake/spectask'
28
+ require 'merb-core/test/tasks/spectasks'
29
+ desc 'Default: run spec examples'
30
+ task :default => 'spec'
31
+
32
+ ##############################################################################
33
+ # ADD YOUR CUSTOM TASKS IN /lib/tasks
34
+ # NAME YOUR RAKE FILES file_name.rake
35
+ ##############################################################################
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ class MerbFlat < Merb::Controller
4
+
5
+ def _template_location(action, type = nil, controller = controller_name)
6
+ controller == "layout" ? "layout.#{action}.#{type}" : "#{action}.#{type}"
7
+ end
8
+
9
+ def index
10
+ "Hello, I am flat Merb application. I only have one single file for the application, single file for configs and routes, and a directory for views."
11
+ end
12
+
13
+ def foo
14
+ render
15
+ end
16
+
17
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ Merb::Config[:framework] = {
4
+ :application => Merb.root / "application.rb",
5
+ :config => [Merb.root / "config", nil],
6
+ :public => [Merb.root / "public", nil],
7
+ :view => Merb.root / "views"
8
+ }
9
+
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ # Go to http://wiki.merbivore.com/pages/init-rb
4
+
5
+ # use_orm :none
6
+ use_test :rspec
7
+ use_template_engine :erb
8
+
9
+ # Specify a specific version of a dependency
10
+ # dependency "RedCloth", "> 3.0"
11
+
12
+ Merb::BootLoader.before_app_loads do
13
+ # This will get executed after dependencies have been loaded but before your app's classes have loaded.
14
+ end
15
+
16
+ Merb::BootLoader.after_app_loads do
17
+ # This will get executed after your app's classes have been loaded.
18
+ end
19
+
20
+ # Move this to application.rb if you want it to be reloadable in dev mode.
21
+ Merb::Router.prepare do
22
+ match('/').to(:controller => "merb_flat", :action =>'index')
23
+
24
+ default_routes
25
+ end
26
+
27
+ Merb::Config.use { |c|
28
+ c[:environment] = 'production',
29
+ c[:framework] = {},
30
+ c[:log_level] = :debug,
31
+ c[:log_stream] = STDOUT,
32
+ # or use file for logging:
33
+ # c[:log_file] = Merb.root / "log" / "merb.log",
34
+ c[:use_mutex] = false,
35
+ c[:session_store] = 'cookie',
36
+ c[:session_id_key] = '_merb-flat_session_id',
37
+ c[:session_secret_key] = 'e3f5fa49385a0e117fd1fca8a45d21eec02055e7',
38
+ c[:exception_details] = true,
39
+ c[:reload_classes] = true,
40
+ c[:reload_templates] = true,
41
+ c[:reload_time] = 0.5
42
+ }
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ require "rubygems"
4
+
5
+ # Add the local gems dir if found within the app root; any dependencies loaded
6
+ # hereafter will try to load from the local gems before loading system gems.
7
+ if (local_gem_dir = File.join(File.dirname(__FILE__), '..', 'gems')) && $BUNDLE.nil?
8
+ $BUNDLE = true; Gem.clear_paths; Gem.path.unshift(local_gem_dir)
9
+ end
10
+
11
+ require "spec"
12
+ require "merb-core"
13
+
14
+ Merb::Config.use do |c|
15
+ c[:session_store] = "memory"
16
+ end
17
+
18
+ Merb.start_environment(:testing => true,
19
+ :adapter => 'runner',
20
+ :environment => ENV['MERB_ENV'] || 'test')
21
+
22
+ Spec::Runner.configure do |config|
23
+ config.include(Merb::Test::ViewHelper)
24
+ config.include(Merb::Test::RouteHelper)
25
+ config.include(Merb::Test::ControllerHelper)
26
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ #!/usr/bin/env ruby
4
+
5
+ # This was added by Merb's bundler
6
+
7
+ require "rubygems"
8
+ require File.join(File.dirname(__FILE__), "common")
9
+
10
+ gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
11
+
12
+ if File.directory?(gems_dir)
13
+ $BUNDLE = true
14
+ Gem.clear_paths
15
+ Gem.path.replace([File.expand_path(gems_dir)])
16
+ ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
17
+
18
+ gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
19
+
20
+ if local_gem = Dir[gem_file].last
21
+ version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
22
+ end
23
+ end
24
+
25
+ version ||= "<%= Gem::Requirement.default %>"
26
+
27
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
28
+ version = $1
29
+ ARGV.shift
30
+ end
31
+
32
+ gem '<%= @spec.name %>', version
33
+ load '<%= bin_file_name %>'
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+
3
+ # This was added via Merb's bundler
4
+
5
+ require "rubygems"
6
+ require "rubygems/source_index"
7
+
8
+ module Gem
9
+ BUNDLED_SPECS = File.join(Dir.pwd, "gems", "specifications")
10
+ MAIN_INDEX = Gem::SourceIndex.from_gems_in(BUNDLED_SPECS)
11
+ FALLBACK_INDEX = Gem::SourceIndex.from_installed_gems
12
+
13
+ def self.source_index
14
+ MultiSourceIndex.new
15
+ end
16
+
17
+ def self.searcher
18
+ MultiPathSearcher.new
19
+ end
20
+
21
+ class ArbitrarySearcher < GemPathSearcher
22
+ def initialize(source_index)
23
+ @source_index = source_index
24
+ super()
25
+ end
26
+
27
+ def init_gemspecs
28
+ @source_index.map { |_, spec| spec }.sort { |a,b|
29
+ (a.name <=> b.name).nonzero? || (b.version <=> a.version)
30
+ }
31
+ end
32
+ end
33
+
34
+ class MultiPathSearcher
35
+ def initialize
36
+ @main_searcher = ArbitrarySearcher.new(MAIN_INDEX)
37
+ @fallback_searcher = ArbitrarySearcher.new(FALLBACK_INDEX)
38
+ end
39
+
40
+ def find(path)
41
+ try = @main_searcher.find(path)
42
+ return try if try
43
+ @fallback_searcher.find(path)
44
+ end
45
+
46
+ def find_all(path)
47
+ try = @main_searcher.find_all(path)
48
+ return try unless try.empty?
49
+ @fallback_searcher.find_all(path)
50
+ end
51
+ end
52
+
53
+ class MultiSourceIndex
54
+ # Used by merb.thor to confirm; not needed when MSI is in use
55
+ def load_gems_in(*args)
56
+ end
57
+
58
+ def search(*args)
59
+ try = MAIN_INDEX.search(*args)
60
+ return try unless try.empty?
61
+ FALLBACK_INDEX.search(*args)
62
+ end
63
+
64
+ def find_name(*args)
65
+ try = MAIN_INDEX.find_name(*args)
66
+ return try unless try.empty?
67
+ FALLBACK_INDEX.find_name(*args)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,127 @@
1
+ # encoding: utf-8
2
+
3
+ require "erb"
4
+
5
+ Gem.pre_install_hooks.push(proc do |installer|
6
+ unless File.file?(installer.bin_dir / "common.rb")
7
+ FileUtils.mkdir_p(installer.bin_dir)
8
+ FileUtils.cp(File.dirname(__FILE__) / "common.rb", installer.bin_dir / "common.rb")
9
+ end
10
+
11
+ include ColorfulMessages
12
+ name = installer.spec.name
13
+ if $GEMS && versions = ($GEMS.assoc(name) || [])[1]
14
+ dep = Gem::Dependency.new(name, versions)
15
+ unless dep.version_requirements.satisfied_by?(installer.spec.version)
16
+ error "Cannot install #{installer.spec.full_name} " \
17
+ "for #{$INSTALLING}; " \
18
+ "you required #{dep}"
19
+ ::Thor::Tasks::Merb::Gem.rollback_trans
20
+ exit!
21
+ end
22
+ end
23
+ success "Installing #{installer.spec.full_name}"
24
+ end)
25
+
26
+ class ::Gem::Uninstaller
27
+ def self._with_silent_ui
28
+
29
+ ui = Gem::DefaultUserInteraction.ui
30
+ def ui.say(str)
31
+ puts "- #{str}"
32
+ end
33
+
34
+ yield
35
+
36
+ class << Gem::DefaultUserInteraction.ui
37
+ remove_method :say
38
+ end
39
+ end
40
+
41
+ def self._uninstall(source_index, name, op, version)
42
+ unless source_index.find_name(name, "#{op} #{version}").empty?
43
+ uninstaller = Gem::Uninstaller.new(
44
+ name,
45
+ :version => "#{op} #{version}",
46
+ :install_dir => Dir.pwd / "gems",
47
+ :all => true,
48
+ :ignore => true
49
+ )
50
+ _with_silent_ui { uninstaller.uninstall }
51
+ end
52
+ end
53
+
54
+ def self._uninstall_others(source_index, name, version)
55
+ _uninstall(source_index, name, "<", version)
56
+ _uninstall(source_index, name, ">", version)
57
+ end
58
+ end
59
+
60
+ Gem.post_install_hooks.push(proc do |installer|
61
+ source_index = installer.instance_variable_get("@source_index")
62
+ ::Gem::Uninstaller._uninstall_others(
63
+ source_index, installer.spec.name, installer.spec.version
64
+ )
65
+ end)
66
+
67
+ class ::Gem::DependencyInstaller
68
+ alias old_fg find_gems_with_sources
69
+
70
+ def find_gems_with_sources(dep)
71
+ if @source_index.any? { |_, installed_spec|
72
+ installed_spec.satisfies_requirement?(dep)
73
+ }
74
+ return []
75
+ end
76
+
77
+ old_fg(dep)
78
+ end
79
+ end
80
+
81
+ class ::Gem::SpecFetcher
82
+ alias old_fetch fetch
83
+ def fetch(dependency, all = false, matching_platform = true)
84
+ idx = Gem::SourceIndex.from_installed_gems
85
+
86
+ reqs = dependency.version_requirements.requirements
87
+
88
+ if reqs.size == 1 && reqs[0][0] == "="
89
+ dep = idx.search(dependency).sort.last
90
+ end
91
+
92
+ if dep
93
+ file = dep.loaded_from.dup
94
+ file.gsub!(/specifications/, "cache")
95
+ file.gsub!(/gemspec$/, "gem")
96
+ spec = ::Gem::Format.from_file_by_path(file).spec
97
+ [[spec, file]]
98
+ else
99
+ old_fetch(dependency, all, matching_platform)
100
+ end
101
+ end
102
+ end
103
+
104
+ class ::Gem::Installer
105
+ def app_script_text(bin_file_name)
106
+ template = File.read(File.dirname(__FILE__) / "app_script.rb")
107
+ erb = ERB.new(template)
108
+ erb.result(binding)
109
+ end
110
+ end
111
+
112
+ class ::Gem::Specification
113
+ def recursive_dependencies(from, index = Gem.source_index)
114
+ specs = self.runtime_dependencies.map do |dep|
115
+ spec = index.search(dep).last
116
+ unless spec
117
+ from_name = from.is_a?(::Gem::Specification) ? from.full_name : from.to_s
118
+ wider_net = index.find_name(dep.name).last
119
+ ThorUI.error "Needed #{dep} for #{from_name}, but could not find it"
120
+ ThorUI.error "Found #{wider_net.full_name}" if wider_net
121
+ ::Thor::Tasks::Merb::Gem.rollback_trans
122
+ end
123
+ spec
124
+ end
125
+ specs + specs.map {|s| s.recursive_dependencies(self, index)}.flatten.uniq
126
+ end
127
+ end