ramaze 2011.01.30 → 2011.07.25

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 (229) hide show
  1. data/.gitignore +2 -1
  2. data/.mailmap +2 -0
  3. data/.rvmrc +1 -0
  4. data/README.md +119 -197
  5. data/Rakefile +14 -97
  6. data/bin/ramaze +6 -14
  7. data/doc/AUTHORS +8 -4
  8. data/doc/CHANGELOG +3784 -3339
  9. data/examples/app/chat/start.rb +2 -2
  10. data/lib/proto/app.rb +2 -3
  11. data/lib/proto/config.ru +4 -5
  12. data/lib/proto/controller/init.rb +11 -4
  13. data/lib/proto/controller/main.rb +12 -7
  14. data/lib/proto/layout/default.xhtml +56 -23
  15. data/lib/proto/model/init.rb +3 -1
  16. data/lib/proto/public/css/grid.css +107 -0
  17. data/lib/proto/public/css/layout.css +81 -0
  18. data/lib/proto/public/css/reset.css +123 -0
  19. data/lib/proto/public/css/text.css +109 -0
  20. data/lib/proto/public/images/bg.png +0 -0
  21. data/lib/proto/spec/main.rb +2 -2
  22. data/lib/proto/start.rb +11 -1
  23. data/lib/proto/view/index.xhtml +27 -23
  24. data/lib/ramaze.rb +0 -1
  25. data/lib/ramaze/app.rb +85 -12
  26. data/lib/ramaze/app_graph.rb +107 -0
  27. data/lib/ramaze/bin/console.rb +87 -0
  28. data/lib/ramaze/bin/create.rb +94 -0
  29. data/lib/ramaze/bin/helper.rb +107 -0
  30. data/lib/ramaze/bin/restart.rb +95 -0
  31. data/lib/ramaze/bin/runner.rb +141 -0
  32. data/lib/ramaze/bin/start.rb +206 -0
  33. data/lib/ramaze/bin/status.rb +152 -0
  34. data/lib/ramaze/bin/stop.rb +112 -0
  35. data/lib/ramaze/cache.rb +9 -4
  36. data/lib/ramaze/cache/localmemcache.rb +10 -13
  37. data/lib/ramaze/cache/lru.rb +49 -7
  38. data/lib/ramaze/cache/memcache.rb +170 -92
  39. data/lib/ramaze/cache/sequel.rb +301 -118
  40. data/lib/ramaze/controller.rb +108 -9
  41. data/lib/ramaze/controller/default.rb +15 -2
  42. data/lib/ramaze/current.rb +14 -2
  43. data/lib/ramaze/dependencies.rb +46 -0
  44. data/lib/ramaze/files.rb +38 -3
  45. data/lib/ramaze/gestalt.rb +12 -12
  46. data/lib/ramaze/helper.rb +0 -2
  47. data/lib/ramaze/helper/auth.rb +30 -23
  48. data/lib/ramaze/helper/blue_form.rb +175 -126
  49. data/lib/ramaze/helper/csrf.rb +76 -91
  50. data/lib/ramaze/helper/email.rb +105 -0
  51. data/lib/ramaze/helper/erector.rb +16 -15
  52. data/lib/ramaze/helper/gestalt.rb +2 -2
  53. data/lib/ramaze/helper/layout.rb +89 -73
  54. data/lib/ramaze/helper/link.rb +7 -6
  55. data/lib/ramaze/helper/localize.rb +6 -5
  56. data/lib/ramaze/helper/markaby.rb +25 -23
  57. data/lib/ramaze/helper/maruku.rb +3 -3
  58. data/lib/ramaze/helper/paginate.rb +19 -27
  59. data/lib/ramaze/helper/remarkably.rb +3 -3
  60. data/lib/ramaze/helper/request_accessor.rb +3 -3
  61. data/lib/ramaze/helper/send_file.rb +12 -8
  62. data/lib/ramaze/helper/simple_captcha.rb +5 -6
  63. data/lib/ramaze/helper/stack.rb +7 -4
  64. data/lib/ramaze/helper/tagz.rb +10 -11
  65. data/lib/ramaze/helper/thread.rb +19 -16
  66. data/lib/ramaze/helper/ultraviolet.rb +7 -4
  67. data/lib/ramaze/helper/user.rb +40 -21
  68. data/lib/ramaze/helper/xhtml.rb +29 -20
  69. data/lib/ramaze/log.rb +3 -11
  70. data/lib/ramaze/log/analogger.rb +5 -4
  71. data/lib/ramaze/log/growl.rb +9 -7
  72. data/lib/ramaze/log/hub.rb +3 -5
  73. data/lib/ramaze/log/informer.rb +15 -12
  74. data/lib/ramaze/log/knotify.rb +3 -5
  75. data/lib/ramaze/log/logger.rb +3 -5
  76. data/lib/ramaze/log/logging.rb +6 -8
  77. data/lib/ramaze/log/rotatinginformer.rb +27 -17
  78. data/lib/ramaze/log/syslog.rb +7 -7
  79. data/lib/ramaze/log/xosd.rb +3 -5
  80. data/lib/ramaze/middleware_compiler.rb +27 -4
  81. data/lib/ramaze/reloader.rb +50 -12
  82. data/lib/ramaze/reloader/watch_inotify.rb +4 -5
  83. data/lib/ramaze/reloader/watch_stat.rb +3 -3
  84. data/lib/ramaze/request.rb +18 -8
  85. data/lib/ramaze/response.rb +38 -7
  86. data/lib/ramaze/rest.rb +36 -0
  87. data/lib/ramaze/setup.rb +101 -31
  88. data/lib/ramaze/spec.rb +1 -1
  89. data/lib/ramaze/spec/bacon.rb +6 -3
  90. data/lib/ramaze/spec/helper/bacon.rb +0 -1
  91. data/lib/ramaze/version.rb +1 -1
  92. data/lib/ramaze/view.rb +2 -11
  93. data/lib/ramaze/view/erector.rb +46 -31
  94. data/lib/ramaze/view/erubis.rb +7 -3
  95. data/lib/ramaze/view/ezamar.rb +7 -3
  96. data/lib/ramaze/view/gestalt.rb +9 -3
  97. data/lib/ramaze/view/haml.rb +7 -3
  98. data/lib/ramaze/view/liquid.rb +3 -3
  99. data/lib/ramaze/view/lokar.rb +7 -3
  100. data/lib/ramaze/view/mustache.rb +11 -5
  101. data/lib/ramaze/view/nagoro.rb +3 -3
  102. data/lib/ramaze/view/sass.rb +1 -1
  103. data/lib/ramaze/view/slippers.rb +40 -13
  104. data/lib/ramaze/view/tagz.rb +9 -5
  105. data/ramaze.gemspec +23 -128
  106. data/spec/helper.rb +5 -0
  107. data/spec/ramaze/bin/app/config.ru +11 -0
  108. data/spec/ramaze/bin/create.rb +28 -0
  109. data/spec/ramaze/bin/runner.rb +30 -0
  110. data/spec/ramaze/bin/start.rb +38 -0
  111. data/spec/ramaze/cache/memcache.rb +10 -3
  112. data/spec/ramaze/cache/sequel.rb +7 -0
  113. data/spec/ramaze/controller/provide_inheritance.rb +0 -10
  114. data/spec/ramaze/dispatcher/file.rb +19 -15
  115. data/spec/ramaze/helper/auth.rb +10 -9
  116. data/spec/ramaze/helper/blue_form.rb +121 -68
  117. data/spec/ramaze/helper/email.rb +69 -0
  118. data/spec/ramaze/helper/layout.rb +12 -15
  119. data/spec/ramaze/helper/layout/alternative.xhtml +5 -0
  120. data/spec/ramaze/helper/user.rb +2 -0
  121. data/spec/ramaze/log/growl.rb +14 -1
  122. data/spec/{contrib → ramaze}/rest.rb +1 -1
  123. data/spec/ramaze/session/memcache.rb +2 -2
  124. data/spec/ramaze/view/sass.rb +1 -1
  125. data/tasks/bacon.rake +3 -3
  126. data/tasks/gem.rake +17 -18
  127. data/tasks/rcov.rake +2 -3
  128. data/tasks/release.rake +8 -65
  129. data/tasks/setup.rake +10 -8
  130. data/tasks/todo.rake +9 -5
  131. data/tasks/yard.rake +3 -2
  132. metadata +105 -397
  133. data/MANIFEST +0 -532
  134. data/TODO.md +0 -19
  135. data/benchmark/bench_templates/bench.rb +0 -67
  136. data/benchmark/bench_templates/view/large.erb +0 -79
  137. data/benchmark/bench_templates/view/large.haml +0 -41
  138. data/benchmark/bench_templates/view/large.lok +0 -79
  139. data/benchmark/bench_templates/view/large.xhtml +0 -79
  140. data/benchmark/bench_templates/view/small.erb +0 -21
  141. data/benchmark/bench_templates/view/small.haml +0 -12
  142. data/benchmark/bench_templates/view/small.lok +0 -21
  143. data/benchmark/bench_templates/view/small.xhtml +0 -21
  144. data/benchmark/results.txt +0 -131
  145. data/benchmark/run.rb +0 -355
  146. data/benchmark/suite/minimal.rb +0 -11
  147. data/benchmark/suite/no_informer.rb +0 -7
  148. data/benchmark/suite/no_sessions.rb +0 -9
  149. data/benchmark/suite/no_template.rb +0 -7
  150. data/benchmark/suite/simple.rb +0 -5
  151. data/benchmark/suite/template_erubis.rb +0 -8
  152. data/benchmark/suite/template_etanni.rb +0 -8
  153. data/benchmark/suite/template_ezamar.rb +0 -8
  154. data/benchmark/suite/template_haml.rb +0 -13
  155. data/benchmark/suite/template_liquid.rb +0 -11
  156. data/benchmark/suite/template_markaby.rb +0 -9
  157. data/benchmark/suite/template_nagoro.rb +0 -8
  158. data/benchmark/suite/template_redcloth.rb +0 -13
  159. data/benchmark/suite/template_tenjin.rb +0 -8
  160. data/benchmark/test.rb +0 -35
  161. data/doc/FAQ +0 -92
  162. data/doc/INSTALL +0 -92
  163. data/doc/TODO +0 -29
  164. data/doc/meta/announcement.txt +0 -119
  165. data/doc/meta/configuration.txt +0 -163
  166. data/doc/meta/internals.txt +0 -278
  167. data/doc/meta/users.kml +0 -64
  168. data/doc/tutorial/todolist.html +0 -1512
  169. data/doc/tutorial/todolist.txt +0 -920
  170. data/examples/app/sourceview/public/coderay.css +0 -104
  171. data/examples/app/sourceview/public/images/file.gif +0 -0
  172. data/examples/app/sourceview/public/images/folder.gif +0 -0
  173. data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
  174. data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
  175. data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
  176. data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
  177. data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
  178. data/examples/app/sourceview/public/images/tv-item.gif +0 -0
  179. data/examples/app/sourceview/public/jquery.js +0 -11
  180. data/examples/app/sourceview/public/jquery.treeview.css +0 -48
  181. data/examples/app/sourceview/public/jquery.treeview.js +0 -223
  182. data/examples/app/sourceview/public/sourceview.js +0 -52
  183. data/examples/app/sourceview/start.rb +0 -79
  184. data/examples/app/sourceview/view/index.haml +0 -59
  185. data/examples/helpers/httpdigest.rb +0 -107
  186. data/lib/proto/public/css/screen.css +0 -30
  187. data/lib/proto/public/js/jquery.js +0 -7179
  188. data/lib/ramaze/contrib/addressable_route.rb +0 -56
  189. data/lib/ramaze/contrib/app_graph.rb +0 -64
  190. data/lib/ramaze/contrib/email.rb +0 -88
  191. data/lib/ramaze/contrib/facebook.rb +0 -23
  192. data/lib/ramaze/contrib/facebook/facebook.rb +0 -171
  193. data/lib/ramaze/contrib/gettext.rb +0 -113
  194. data/lib/ramaze/contrib/gettext/mo.rb +0 -155
  195. data/lib/ramaze/contrib/gettext/parser.rb +0 -46
  196. data/lib/ramaze/contrib/gettext/po.rb +0 -109
  197. data/lib/ramaze/contrib/gzip_filter.rb +0 -1
  198. data/lib/ramaze/contrib/maruku_uv.rb +0 -59
  199. data/lib/ramaze/contrib/profiling.rb +0 -36
  200. data/lib/ramaze/contrib/rest.rb +0 -23
  201. data/lib/ramaze/contrib/sequel/create_join.rb +0 -26
  202. data/lib/ramaze/contrib/sequel/form_field.rb +0 -129
  203. data/lib/ramaze/contrib/sequel/image.rb +0 -196
  204. data/lib/ramaze/contrib/sequel/relation.rb +0 -98
  205. data/lib/ramaze/helper/httpdigest.rb +0 -96
  206. data/lib/ramaze/tool/bin.rb +0 -340
  207. data/lib/ramaze/tool/create.rb +0 -48
  208. data/lib/ramaze/tool/project_creator.rb +0 -120
  209. data/lib/ramaze/view/less.rb +0 -12
  210. data/lib/ramaze/view/maruku.rb +0 -15
  211. data/lib/ramaze/view/redcloth.rb +0 -21
  212. data/spec/contrib/addressable_route.rb +0 -30
  213. data/spec/examples/helpers/httpdigest.rb +0 -64
  214. data/spec/examples/templates/template_redcloth.rb +0 -13
  215. data/spec/ramaze/bin/ramaze.rb +0 -96
  216. data/spec/ramaze/helper/httpdigest.rb +0 -176
  217. data/spec/ramaze/view/less.rb +0 -60
  218. data/spec/ramaze/view/less/file.css.less +0 -8
  219. data/spec/ramaze/view/redcloth.rb +0 -66
  220. data/spec/ramaze/view/redcloth/external.redcloth +0 -8
  221. data/tasks/copyright.rake +0 -21
  222. data/tasks/gem_setup.rake +0 -112
  223. data/tasks/git.rake +0 -46
  224. data/tasks/grancher.rake +0 -12
  225. data/tasks/jquery.rake +0 -15
  226. data/tasks/manifest.rake +0 -4
  227. data/tasks/metric_changes.rake +0 -24
  228. data/tasks/reversion.rake +0 -8
  229. data/tasks/traits.rake +0 -21
@@ -1,340 +0,0 @@
1
- #!/usr/bin/env ruby
2
- ### This module offers the functionality to start, stop, restart, create,
3
- ### Check status, or run a console of a ramaze application
4
- ### see ramaze -h for usage
5
- module Ramaze
6
- module Tool
7
- module Bin
8
- module Helpers # Helper methods {{{
9
-
10
- def default_pidfile # {{{
11
- return @default_pidfile if @default_pidfile
12
- require "pathname"
13
- @default_pidfile = (Pathname.new(".").expand_path.basename.to_s + ".pid").strip
14
- end # }}}
15
-
16
- # We're really only concerned about win32ole, so we focus our check on its
17
- # ability to load that
18
- def is_windows? # {{{
19
- return @is_win if @is_win
20
- begin
21
- require "win32ole"
22
- rescue LoadError
23
- end
24
- @is_win ||= Object.const_defined?("WIN32OLE")
25
- end # }}}
26
-
27
- # Find the path to rackup, by searching for -R (undocumented cli argument),
28
- # then checking RUBYLIB for the _first_ rack it can find there, finally
29
- # falling back to gems and looking for rackup in the gem bindir.
30
- # If we can't find rackup we're raising; not even #usage is sane without
31
- # rackup.
32
- def rackup_path # {{{
33
- return @rackup_path if @rackup_path
34
- # Use the supplied path if the user supplied -R
35
- if path_supplied = ARGV.delete("-R")
36
- @rackup_path = ARGV.delete(@ourargs[@ourargs.index("-R") + 1])
37
- if @rackup_path and File.file?(@rackup_path)
38
- return @rackup_path
39
- else
40
- $stderr.puts "rackup does not exist at #{@rackup_path} (given with -R)"
41
- end
42
- end
43
- # Check with 'which' on platforms which support it
44
- unless is_windows?
45
- @rackup_path = %x{which rackup}.to_s.chomp
46
- if @rackup_path.size > 0 and File.file?(@rackup_path)
47
- return @rackup_path
48
- end
49
- end
50
- # check for rackup in RUBYLIB
51
- libs = ENV["RUBYLIB"].to_s.split(is_windows? ? ";" : ":")
52
- if rack_lib = libs.detect { |r| r.match %r<(\\|/)rack\1> }
53
- require "pathname"
54
- @rackup_path = Pathname.new(rack_lib).parent.join("bin").join("rackup").expand_path
55
- return @rackup_path if File.file?(@rackup_path)
56
- end
57
- begin
58
- require "rubygems"
59
- require "rack"
60
- require "pathname"
61
- @rackup_path = Pathname.new(Gem.bindir).join("rackup").to_s
62
- return @rackup_path if File.file?(@rackup_path)
63
- rescue LoadError
64
- nil
65
- end
66
- @rackup_path = nil
67
- raise "Cannot find path to rackup, please supply full path to rackup with -R"
68
- end # }}}
69
-
70
- def is_running?(pid) # {{{
71
- if is_windows?
72
- wmi = WIN32OLE.connect("winmgmts://")
73
- processes, ours = wmi.ExecQuery("select * from win32_process where ProcessId = #{pid}"), []
74
- processes.each { |process| ours << process.Name }
75
- ours.first.nil?
76
- else
77
- begin
78
- prio = Process.getpriority(Process::PRIO_PROCESS, pid)
79
- true
80
- rescue Errno::ESRCH
81
- false
82
- end
83
- end
84
- end # }}}
85
-
86
- def check_running?(pid_file) # {{{
87
- return false unless File.file?(pid_file)
88
- is_running?(File.read(pid_file).to_i)
89
- end # }}}
90
-
91
- def find_pid(pid_file) # {{{
92
- if pid_file.nil? or not File.file?(pid_file)
93
- pid_file = default_pidfile
94
- end
95
- unless File.file?(pid_file)
96
- $stderr.puts "Could not find running process id."
97
- return false
98
- end
99
- pid_file
100
- end # }}}
101
- end # End helper methods }}}
102
-
103
- class Cmd # This class contains the command methods {{{
104
- include Helpers
105
- attr_accessor :command
106
-
107
- def initialize(args = nil)
108
- args ||= ARGV
109
- raise "arguments must be an array!" unless args.respond_to?(:detect)
110
- @ourargs = args.dup
111
- @command = args.detect { |arg| arg.match(/^(?:--?)?(?:start|stop|restart|create|h(?:elp)?|v(?:ersion)?|console|status)/) }
112
- if command.nil?
113
- @command = ""
114
- else
115
- args.delete(@command)
116
- end
117
- ARGV.replace(args)
118
- end
119
-
120
- # {{{ #run is called when we're interactive ($0 == __FILE__)
121
- def self.run(args = nil)
122
- cmd = new(args)
123
- case cmd.command
124
- when /^(?:--?)?status$/
125
- cmd.status(cmd.command)
126
- when /^(?:--?)?restart$/
127
- cmd.stop(cmd.command)
128
- cmd.start
129
- when /^(?:--?)?start$/
130
- cmd.start
131
- when /^(?:--?)?create$/
132
- cmd.create(cmd.command)
133
- when /^(?:--?)?stop$/
134
- if cmd.stop(cmd.command)
135
- puts "Ramazement has ended, go in peace."
136
- $stdout.flush
137
- else
138
- puts "Ramaze failed to stop (or was not running)"
139
- end
140
- when /^(?:--?)?console$/
141
- require "ramaze"
142
- require "irb"
143
- require "irb/completion"
144
- Ramaze.options.started = true
145
- require "./start"
146
- IRB.start
147
- puts "Ramazement has ended, go in peace."
148
- when /^(?:--?)?h(elp)?$/
149
- puts cmd.usage
150
- when /^(?:--?)?v(ersion)?$/
151
- cmd.include_ramaze
152
- puts Ramaze::VERSION
153
- exit
154
- when /^$/
155
- puts "Must supply a valid command"
156
- puts cmd.usage
157
- exit 1
158
- else
159
- puts "#{command} not implemented"
160
- puts cmd.usage
161
- exit 1
162
- end
163
- end # }}}
164
-
165
- def include_ramaze # {{{
166
- begin
167
- $:.unshift File.join(File.dirname(__FILE__), '/../lib')
168
- require 'ramaze'
169
- rescue LoadError
170
- $:.shift
171
-
172
- begin
173
- require 'rubygems'
174
- rescue LoadError
175
- end
176
- require 'ramaze'
177
- end
178
- end # }}}
179
-
180
- def usage # {{{
181
- txt = [
182
- "\n Usage:",
183
- "ramaze <start [PIDFILE]|stop [PIDFILE]|restart [PIDFILE]|status [PIDFILE]|create PROJECT|console> [ruby/rack options]\n",
184
- "Commands:\n",
185
- " * All commands which take an optional PIDFILE (defaults to PROJECT.pid otherwise).",
186
- " * All commands which start a ramaze instance will default to webrick on port 7000",
187
- " unless you supply the rack options -p/--port PORT and/or * -s/--server SERVER.\n",
188
- " start - Starts an instance of this application.\n",
189
- " stop - Stops a running instance of this application.\n",
190
- " restart - Stops running instance of this application, then starts it back up. Pidfile",
191
- " (if supplied) is used for both stop and start.\n",
192
- " status - Gives status of a running ramaze instance\n",
193
- " create - Creates a new prototype Ramaze application in a directory named PROJECT in",
194
- " the current directory. ramaze create foo would make ./foo containing an",
195
- " application prototype. Rack options are ignored here.\n",
196
- " console - Starts an irb console with app.rb (and irb completion) loaded. This command",
197
- " ignores rack options, ARGV is passed on to IRB.\n\n\t"
198
- ].join("\n\t")
199
-
200
- if is_windows?
201
- txt << %x{ruby #{rackup_path} --help}.split("\n").reject { |line| line.match(/^Usage:/) }.join("\n\t")
202
- else
203
- txt << %x{#{rackup_path} --help}.split("\n").reject { |line| line.match(/^Usage:/) }.join("\n\t")
204
- end
205
-
206
- txt.gsub(/^\t$/, '')
207
- end # }}}
208
-
209
- ### Methods for commands {{{
210
- def start # {{{
211
- include_ramaze
212
-
213
- # Find the name of this app
214
- app_name = default_pidfile.sub(/\.pid$/,'')
215
- rack_args = []
216
-
217
- if daemonize = @ourargs.detect { |arg| arg.match(/^(-[dD]|--daemonize)$/) }
218
- if pid_arg = @ourargs.detect { |arg| arg.match(/^(-P|--pid)/) }
219
- puts "User supplied pid: #{pid_arg}"
220
- pid_file = @ourargs[@ourargs.index(pid_arg) + 1]
221
- puts "Starting daemon with user defined pidfile: #{pid_file}"
222
- else
223
- puts "Starting daemon with default pidfile: #{pid_file = default_pidfile}"
224
- rack_args += ["-P", pid_file]
225
- end
226
- if check_running?(pid_file)
227
- $stderr.puts "Ramaze is already running with pidfile: #{pid_file}"
228
- exit 127
229
- end
230
- end
231
-
232
- port = Ramaze.options.adapter.port.to_s
233
- rack_args += ["-p", port ] if @ourargs.grep(/^(-p|--port)/).empty?
234
-
235
- handler = Ramaze.options.adapter.handler.to_s
236
- rack_args += ["-s", handler] if @ourargs.grep(/^(-s|--server)/).empty?
237
-
238
- if is_windows?
239
- exec("ruby", rackup_path.to_s, "config.ru", *(ARGV + rack_args))
240
- else
241
- exec(rackup_path.to_s, "config.ru", *(ARGV + rack_args))
242
- end
243
- end # }}}
244
-
245
- def create(command) # {{{
246
- opts = {}
247
- if forced = @ourargs.detect { |arg| arg.match(/^(--force)/) }
248
- puts "Overwriting any existing files as requested."
249
- opts[:force] = true
250
- @ourargs.delete(forced)
251
- end
252
- if amended = @ourargs.detect { |arg| arg.match(/^(--amend)/) }
253
- puts "Only amending missing files as requested."
254
- opts[:amend] = true
255
- @ourargs.delete(amended)
256
- end
257
- project_name = @ourargs[@ourargs.index(command) + 1]
258
- if project_name.nil?
259
- $stderr.puts "Must supply a project name" if project_name.nil?
260
- puts usage
261
- exit 1
262
- end
263
- include_ramaze
264
- require 'ramaze/tool/create'
265
- Ramaze::Tool::Create.create(project_name, opts)
266
- end # }}}
267
-
268
- def stop(command) # {{{
269
- unless pid_file = find_pid(@ourargs[@ourargs.index(command) + 1])
270
- $stderr.puts "No pid_file found! Cannot stop ramaze (may not be started)."
271
- return false
272
- end
273
- pid = File.read(pid_file).to_i
274
- puts "Stopping pid #{pid}"
275
- Process.kill("INT", pid)
276
- sleep 2
277
- if is_running?(pid)
278
- $stderr.puts "Process #{pid} did not die, forcing it with -9"
279
- Process.kill(9, pid)
280
- File.unlink(pid_file) if File.file?(pid_file)
281
- true
282
- else
283
- File.unlink(pid_file) if File.file?(pid_file)
284
- true
285
- end
286
- end # }}}
287
-
288
- def status(command) # {{{
289
- unless pid_file = find_pid(@ourargs[@ourargs.index(command) + 1])
290
- $stderr.puts "No pid_file found! Ramaze may not be started."
291
- exit 1
292
- end
293
- puts "Pid file #{pid_file} found, PID is #{pid = File.read(pid_file)}"
294
- unless is_running?(pid.to_i)
295
- $stderr.puts "PID #{pid} is not running"
296
- exit 1
297
- end
298
- if is_windows?
299
- wmi = WIN32OLE.connect("winmgmts://")
300
- processes, ours = wmi.ExecQuery("select * from win32_process where ProcessId = #{pid}"), []
301
- processes.each { |p| ours << [p.Name, p.CommandLine, p.VirtualSize, p.CreationDate, p.ExecutablePath, p.Status ] }
302
- puts "Ramaze is running!\n\tName: %s\n\tCommand Line: %s\n\tVirtual Size: %s\n\tStarted: %s\n\tExec Path: %s\n\tStatus: %s" % ours.first
303
- else
304
- require "pathname"
305
- # Check for /proc
306
- if File.directory?(proc_dir = Pathname.new("/proc"))
307
- proc_dir = proc_dir.join(pid)
308
- # If we have a "stat" file, we'll assume linux and get as much info
309
- # as we can
310
- if File.file?(stat_file = proc_dir.join("stat"))
311
- stats = File.read(stat_file).split
312
- puts "Ramaze is running!\n\tCommand Line: %s\n\tVirtual Size: %s\n\tStarted: %s\n\tExec Path: %s\n\tStatus: %s" % [
313
- File.read(proc_dir.join("cmdline")).split("\000").join(" "),
314
- "%s k" % (stats[22].to_f / 1024),
315
- File.mtime(proc_dir),
316
- File.readlink(proc_dir.join("exe")),
317
- stats[2]
318
- ]
319
- exit
320
- end
321
- end
322
- # Fallthrough status, just print a ps
323
- puts "Ramaze process #{pid} is running!"
324
- begin
325
- puts %x{ps l #{pid}}
326
- rescue
327
- puts "No further information available"
328
- end
329
- end
330
- end # }}}
331
-
332
- ### End of command methods }}}
333
- end # }}}
334
- end
335
- end
336
- end
337
-
338
- if $0 == __FILE__
339
- Ramaze::Tool::Bin::Cmd.run(ARGV)
340
- end
@@ -1,48 +0,0 @@
1
- # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
- # All files in this distribution are subject to the terms of the Ruby license.
3
-
4
- require 'ramaze/tool/project_creator'
5
-
6
- module Ramaze
7
- module Tool
8
-
9
- # Create is a simple class used to create new projects based on the proto
10
- # directory.
11
- #
12
- # It is primarly used for this command:
13
- #
14
- # ramaze --create project
15
- #
16
- # where project is the directory you want the content put into.
17
-
18
- class Create
19
-
20
- # Default options passed to Create::create
21
- # :proto is the directory to duplicate
22
- # :amend no files may be overwritten but missing files will be added
23
- # :force will overwrite existing files
24
- # :layout copy one subdirectory in +proto+
25
-
26
- DEFAULT = {
27
- :proto => File.join(ROOT, 'proto'),
28
- :amend => false,
29
- :force => false,
30
- :layout => '/',
31
- }
32
-
33
- # Using ProjectCreator to copy all files and directories from lib/proto
34
- # to another location.
35
- # +options+ are described in the DEFAULT constant and should be:
36
- # :force => (true|false|nil)
37
- # :amend => (true|false|nil)
38
- # :layout => (String|nil)
39
- # :proto => String
40
-
41
- def self.create(project, options = {})
42
- options = DEFAULT.merge(options)
43
- creator = ProjectCreator.new(project, options)
44
- creator.create
45
- end
46
- end
47
- end
48
- end
@@ -1,120 +0,0 @@
1
- # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
- # All files in this distribution are subject to the terms of the Ruby license.
3
-
4
- require 'fileutils'
5
- require 'find'
6
-
7
- class ProjectCreator
8
- PROTO = []
9
- PROTO << '~/.proto/' if ENV["HOME"] # Guard against Windows
10
- attr_accessor :name, :options
11
-
12
- def initialize(name, options = {})
13
- @name, @options = name, options
14
- end
15
-
16
- def target
17
- File.expand_path(name)
18
- end
19
-
20
- def proto
21
- PROTO.map!{|pr| File.expand_path(pr) }
22
- proto = options[:proto] ||= PROTO.find{|f| File.directory?(f) }
23
- layout = options[:layout] ||= '/'
24
- File.expand_path(File.join(proto, layout))
25
- end
26
-
27
- def create_root?
28
- return true unless File.directory?(target)
29
- return true if amend? or force?
30
- fatal "%p is a directory, choose different project name or use --amend/--force" % target
31
- end
32
-
33
- def got_proto?
34
- return true if File.directory?(proto)
35
- fatal "Cannot create, %p doesn't exist, use --proto or create the proto directory" % proto
36
- end
37
-
38
- def create
39
- got_proto?
40
-
41
- puts "Found proto at: %p, proceeding...\n\n" % proto
42
- mkdir(relate('/')) if create_root?
43
- proceed
44
- end
45
-
46
- def proceed
47
- files, directories = partition{|path| File.file?(path) }
48
- proceed_directories(directories)
49
- proceed_files(files)
50
- end
51
-
52
- def proceed_files(files)
53
- files.each{|file| copy(file, relate(file)) }
54
- end
55
-
56
- def proceed_directories(dirs)
57
- dirs.each{|dir| mkdir(relate(dir)) }
58
- end
59
-
60
- def mkdir(dir)
61
- return unless mkdir?(dir)
62
-
63
- relate = dir.sub("#{target}/", '')
64
- puts "%12s %s" % ['mkdir', relate]
65
-
66
- FileUtils.mkdir_p(dir)
67
- end
68
-
69
- def mkdir?(dir)
70
- exists = File.directory?(dir)
71
-
72
- !exists && amend? or exists && force? or !exists
73
- end
74
-
75
- def copy(from, to)
76
- return unless copy?(to)
77
-
78
- relate = to.sub("#{target}/", '')
79
- puts "%12s %s" % ['create', relate]
80
-
81
- FileUtils.cp(from, to, :preserve => true)
82
- post_process(to)
83
- end
84
-
85
- def copy?(file)
86
- exists = File.file?(file)
87
-
88
- !exists && amend? or exists && force? or !exists
89
- end
90
-
91
- # Think about a useful way to process the generated files it should be
92
- # possible to substitute some things like the project name in the
93
- # configuration
94
-
95
- def post_process(file)
96
- return
97
- source = File.read(file)
98
- File.open(file, 'w+') do |io|
99
- io.write(source.gsub('$project', "'#@name'"))
100
- end
101
- end
102
-
103
- def relate(path)
104
- File.join(target, path.to_s.sub(proto, ''))
105
- end
106
-
107
- def amend?; options[:amend] end
108
- def force?; options[:force] end
109
-
110
- def fatal(message)
111
- warn message
112
- exit 1
113
- end
114
-
115
- def each
116
- Dir.glob("#{proto}/**/*", File::FNM_DOTMATCH).each{|path| yield(path) }
117
- end
118
-
119
- include Enumerable
120
- end