ramaze 2008.06 → 2008.11

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 (184) hide show
  1. data/README.markdown +6 -6
  2. data/Rakefile +33 -3
  3. data/bin/ramaze +18 -0
  4. data/doc/CHANGELOG +960 -0
  5. data/doc/LEGAL +5 -1
  6. data/doc/meta/announcement.txt +20 -36
  7. data/doc/tutorial/todolist.html +421 -313
  8. data/doc/tutorial/todolist.mkd +33 -16
  9. data/examples/app/blog/spec/blog.rb +3 -3
  10. data/examples/app/rapaste/controller/paste.rb +8 -1
  11. data/examples/app/rapaste/model/paste.rb +3 -0
  12. data/examples/app/rapaste/spec/rapaste.rb +3 -1
  13. data/examples/app/rapaste/start.rb +3 -2
  14. data/examples/app/sourceview/public/sourceview.js +2 -2
  15. data/examples/app/todolist/spec/todolist.rb +6 -6
  16. data/examples/app/todolist/template/index.xhtml +1 -1
  17. data/examples/app/whywiki/spec/whywiki.rb +2 -2
  18. data/examples/app/wikore/spec/wikore.rb +2 -2
  19. data/examples/app/wikore/src/model.rb +4 -3
  20. data/examples/app/wiktacular/spec/wiktacular.rb +7 -7
  21. data/examples/basic/simple.rb +2 -2
  22. data/examples/helpers/paginate.rb +71 -0
  23. data/examples/misc/simple_auth.rb +20 -8
  24. data/lib/proto/controller/init.rb +10 -0
  25. data/lib/proto/controller/main.rb +1 -3
  26. data/lib/proto/model/init.rb +4 -0
  27. data/lib/proto/public/dispatch.fcgi +1 -1
  28. data/lib/proto/spec/main.rb +2 -1
  29. data/lib/proto/start.rb +3 -3
  30. data/lib/proto/start.ru +1 -1
  31. data/lib/proto/view/error.xhtml +4 -4
  32. data/lib/ramaze.rb +8 -3
  33. data/lib/ramaze/action.rb +6 -6
  34. data/lib/ramaze/adapter.rb +1 -6
  35. data/lib/ramaze/adapter/base.rb +30 -27
  36. data/lib/ramaze/adapter/cgi.rb +1 -0
  37. data/lib/ramaze/cache.rb +1 -3
  38. data/lib/ramaze/cache/memcached.rb +3 -5
  39. data/lib/ramaze/contrib/auto_params.rb +2 -2
  40. data/lib/ramaze/contrib/auto_params/get_args.rb +2 -1
  41. data/lib/ramaze/contrib/gems.rb +17 -18
  42. data/lib/ramaze/contrib/gzip_filter.rb +22 -9
  43. data/lib/ramaze/contrib/maruku_uv.rb +59 -0
  44. data/lib/ramaze/contrib/profiling.rb +1 -1
  45. data/lib/ramaze/contrib/rest.rb +16 -13
  46. data/lib/ramaze/contrib/sequel/create_join.rb +25 -0
  47. data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
  48. data/lib/ramaze/contrib/sequel/image.rb +198 -0
  49. data/lib/ramaze/contrib/sequel/relation.rb +82 -0
  50. data/lib/ramaze/controller.rb +33 -34
  51. data/lib/ramaze/controller/resolve.rb +29 -9
  52. data/lib/ramaze/current.rb +60 -20
  53. data/lib/ramaze/current/request.rb +8 -7
  54. data/lib/ramaze/current/response.rb +15 -3
  55. data/lib/ramaze/current/session/flash.rb +8 -0
  56. data/lib/ramaze/dispatcher.rb +17 -9
  57. data/lib/ramaze/dispatcher/action.rb +4 -5
  58. data/lib/ramaze/dispatcher/directory.rb +1 -1
  59. data/lib/ramaze/dispatcher/error.rb +4 -4
  60. data/lib/ramaze/dispatcher/file.rb +4 -4
  61. data/lib/ramaze/gestalt.rb +15 -20
  62. data/lib/ramaze/helper/cgi.rb +7 -15
  63. data/lib/ramaze/helper/formatting.rb +41 -1
  64. data/lib/ramaze/helper/httpdigest.rb +20 -7
  65. data/lib/ramaze/helper/link.rb +4 -6
  66. data/lib/ramaze/helper/paginate.rb +233 -0
  67. data/lib/ramaze/helper/redirect.rb +1 -1
  68. data/lib/ramaze/helper/rest.rb +1 -1
  69. data/lib/ramaze/helper/thread.rb +17 -0
  70. data/lib/ramaze/helper/ultraviolet.rb +44 -0
  71. data/lib/ramaze/helper/user.rb +4 -9
  72. data/lib/ramaze/log.rb +2 -2
  73. data/lib/ramaze/log/analogger.rb +21 -23
  74. data/lib/ramaze/log/growl.rb +21 -23
  75. data/lib/ramaze/log/hub.rb +1 -1
  76. data/lib/ramaze/log/informer.rb +97 -99
  77. data/lib/ramaze/log/knotify.rb +14 -16
  78. data/lib/ramaze/log/logger.rb +11 -13
  79. data/lib/ramaze/log/logging.rb +61 -63
  80. data/lib/ramaze/log/rotatinginformer.rb +168 -0
  81. data/lib/ramaze/log/syslog.rb +41 -31
  82. data/lib/ramaze/log/xosd.rb +70 -72
  83. data/lib/ramaze/option.rb +9 -6
  84. data/lib/ramaze/option/holder.rb +5 -27
  85. data/lib/ramaze/reloader.rb +186 -0
  86. data/lib/ramaze/setup.rb +1 -1
  87. data/lib/ramaze/snippets.rb +13 -0
  88. data/lib/ramaze/snippets/array/put_within.rb +31 -24
  89. data/lib/ramaze/snippets/binding/locals.rb +23 -11
  90. data/lib/ramaze/snippets/dictionary.rb +2 -2
  91. data/lib/ramaze/snippets/fiber.rb +63 -0
  92. data/lib/ramaze/snippets/kernel/constant.rb +36 -21
  93. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +12 -6
  94. data/lib/ramaze/snippets/numeric/filesize_format.rb +24 -17
  95. data/lib/ramaze/snippets/numeric/time.rb +63 -0
  96. data/lib/ramaze/snippets/object/__dir__.rb +29 -0
  97. data/lib/ramaze/snippets/object/acquire.rb +40 -0
  98. data/lib/ramaze/snippets/object/instance_variable_defined.rb +16 -5
  99. data/lib/ramaze/snippets/object/pretty.rb +14 -4
  100. data/lib/ramaze/snippets/object/scope.rb +14 -7
  101. data/lib/ramaze/snippets/ordered_set.rb +25 -14
  102. data/lib/ramaze/snippets/proc/locals.rb +17 -9
  103. data/lib/ramaze/snippets/ramaze/deprecated.rb +13 -0
  104. data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
  105. data/lib/ramaze/snippets/ramaze/state.rb +86 -0
  106. data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
  107. data/lib/ramaze/snippets/string/camel_case.rb +13 -8
  108. data/lib/ramaze/snippets/string/color.rb +24 -20
  109. data/lib/ramaze/snippets/string/each.rb +14 -3
  110. data/lib/ramaze/snippets/string/end_with.rb +20 -0
  111. data/lib/ramaze/snippets/string/esc.rb +26 -21
  112. data/lib/ramaze/snippets/string/ord.rb +12 -6
  113. data/lib/ramaze/snippets/string/snake_case.rb +13 -7
  114. data/lib/ramaze/snippets/string/start_with.rb +16 -5
  115. data/lib/ramaze/snippets/string/unindent.rb +23 -15
  116. data/lib/ramaze/snippets/thread/into.rb +3 -3
  117. data/lib/ramaze/spec/helper/bacon.rb +5 -5
  118. data/lib/ramaze/spec/helper/mock_http.rb +1 -1
  119. data/lib/ramaze/spec/helper/pretty_output.rb +2 -2
  120. data/lib/ramaze/spec/helper/snippets.rb +8 -0
  121. data/lib/ramaze/template.rb +4 -1
  122. data/lib/ramaze/template/ezamar/textpow.syntax +34 -0
  123. data/lib/ramaze/template/maruku.rb +34 -0
  124. data/lib/ramaze/template/tagz.rb +2 -2
  125. data/lib/ramaze/template/xslt.rb +2 -2
  126. data/lib/ramaze/tool/create.rb +27 -53
  127. data/lib/ramaze/tool/localize.rb +8 -4
  128. data/lib/ramaze/tool/mime.rb +11 -1
  129. data/lib/ramaze/tool/project_creator.rb +110 -0
  130. data/lib/ramaze/trinity.rb +4 -1
  131. data/lib/ramaze/version.rb +1 -1
  132. data/lib/vendor/bacon.rb +323 -0
  133. data/rake_tasks/gem.rake +10 -1
  134. data/rake_tasks/maintenance.rake +40 -2
  135. data/rake_tasks/metric.rake +24 -0
  136. data/rake_tasks/release.rake +17 -4
  137. data/rake_tasks/spec.rake +1 -2
  138. data/ramaze.gemspec +549 -495
  139. data/spec/contrib/auto_params.rb +3 -3
  140. data/spec/contrib/profiling.rb +2 -2
  141. data/spec/examples/simple_auth.rb +2 -2
  142. data/spec/examples/templates/template_haml.rb +0 -2
  143. data/spec/ramaze/action/file_cache.rb +22 -0
  144. data/spec/ramaze/adapter.rb +2 -2
  145. data/spec/ramaze/controller/actionless_templates.rb +1 -1
  146. data/spec/ramaze/controller/subclass.rb +15 -0
  147. data/spec/ramaze/controller/template_resolving.rb +1 -1
  148. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  149. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  150. data/spec/ramaze/current/session.rb +1 -1
  151. data/spec/ramaze/dispatcher/file.rb +2 -2
  152. data/spec/ramaze/helper/aspect.rb +26 -17
  153. data/spec/ramaze/helper/formatting.rb +13 -0
  154. data/spec/ramaze/log/informer.rb +10 -10
  155. data/spec/ramaze/log/syslog.rb +67 -4
  156. data/spec/ramaze/rewrite.rb +1 -1
  157. data/spec/ramaze/route.rb +1 -1
  158. data/spec/ramaze/struct.rb +47 -0
  159. data/spec/ramaze/template/markaby.rb +1 -1
  160. data/spec/ramaze/template/tagz.rb +1 -1
  161. data/spec/snippets/binding/locals.rb +9 -0
  162. data/spec/snippets/numeric/time.rb +12 -0
  163. data/spec/snippets/{kernel → object}/__dir__.rb +0 -0
  164. data/spec/snippets/{kernel → object}/acquire.rb +0 -0
  165. metadata +90 -81
  166. data/cache.yaml +0 -7
  167. data/examples/app/rammit/spec/rammit.rb +0 -31
  168. data/examples/app/rammit/src/controller/main.rb +0 -3
  169. data/examples/app/rammit/src/controller/page.rb +0 -16
  170. data/examples/app/rammit/src/model.rb +0 -33
  171. data/examples/app/rammit/start.rb +0 -8
  172. data/examples/app/rammit/template/index.xhtml +0 -14
  173. data/examples/app/rammit/template/page/view.xhtml +0 -4
  174. data/lib/ramaze/snippets/kernel/__dir__.rb +0 -23
  175. data/lib/ramaze/snippets/kernel/acquire.rb +0 -34
  176. data/lib/ramaze/snippets/object/thread_accessor.rb +0 -5
  177. data/lib/ramaze/snippets/ramaze/thread_accessor.rb +0 -58
  178. data/lib/ramaze/snippets/struct/fill.rb +0 -23
  179. data/lib/ramaze/snippets/struct/values_at.rb +0 -39
  180. data/lib/ramaze/snippets/symbol/to_proc.rb +0 -24
  181. data/lib/ramaze/sourcereload.rb +0 -176
  182. data/spec/snippets/struct/fill.rb +0 -26
  183. data/spec/snippets/struct/values_at.rb +0 -52
  184. data/spec/snippets/symbol/to_proc.rb +0 -13
@@ -1,10 +1,10 @@
1
1
  # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
2
  # All files in this distribution are subject to the terms of the Ruby license.
3
3
 
4
+ # Extensions for Thread
5
+
4
6
  class Thread
5
- # Copy following:
6
- # :action, :response, :request, :session,
7
- # :task, :adapter, :controller, :exception
7
+ # Copy all thread variables into the new thread
8
8
 
9
9
  def self.into *args
10
10
  Thread.new(Thread.current, *args) do |thread, *args|
@@ -1,7 +1,7 @@
1
- require 'bacon'
2
-
3
- dir = File.dirname(__FILE__)
4
- require File.join(File.dirname(__FILE__), 'pretty_output')
5
-
1
+ libdir = File.expand_path(File.join(File.dirname(__FILE__), '../../../'))
2
+ $LOAD_PATH.unshift libdir
3
+ require 'vendor/bacon'
4
+ require 'ramaze/spec/helper/pretty_output'
6
5
  Bacon.extend Bacon::PrettyOutput
6
+ # Bacon.extend Bacon::TestUnitOutput
7
7
  Bacon.summary_on_exit
@@ -57,7 +57,7 @@ module MockHTTP
57
57
  def make_query query
58
58
  return query unless query and not query.is_a?(String)
59
59
  query.map{|key, value|
60
- "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}"
60
+ "#{Rack::Utils.escape(key)}=#{Rack::Utils.escape(value)}"
61
61
  }.join('&')
62
62
  end
63
63
  end
@@ -16,9 +16,9 @@ module Bacon
16
16
  error = yield
17
17
 
18
18
  unless error.empty?
19
- if defined?(Ramaze::Logging::Logging)
19
+ if defined?(Ramaze::Logging)
20
20
  puts '', " #{NAME} -- #{description} [FAILED]".center(70, '-'), ''
21
- colors = Ramaze::Logging::Logger::Informer::COLORS
21
+ colors = Ramaze::Logger::Informer::COLORS
22
22
 
23
23
  until RamazeLogger.history.empty?
24
24
  tag, line = RamazeLogger.history.shift
@@ -1,6 +1,14 @@
1
1
  if caller
2
2
  snippet = caller.grep(%r!spec/snippets/!).first.split(':').first
3
3
  require File.expand_path(snippet).gsub('/spec/', '/lib/ramaze/')
4
+
5
+ if defined?(Ramaze::CoreExtensions)
6
+ Ramaze::CoreExtensions.constants.each do |const|
7
+ ext = Ramaze::CoreExtensions.const_get(const)
8
+ into = Module.const_get(const)
9
+ into.__send__(:include, ext)
10
+ end
11
+ end
4
12
  end
5
13
 
6
14
  require 'lib/ramaze/spec/helper/bacon'
@@ -16,7 +16,10 @@ module Ramaze
16
16
 
17
17
  ENGINES = {} unless defined?(ENGINES)
18
18
 
19
- AVAILABLE_ENGINES = %w[ Amrita2 Builder Erubis Haml Liquid Markaby Nagoro None RedCloth Remarkably Sass XSLT Tenjin Tagz ]
19
+ AVAILABLE_ENGINES = %w[
20
+ Amrita2 Builder Erubis Haml Liquid Markaby Maruku Nagoro None RedCloth
21
+ Remarkably Sass Tagz Tenjin XSLT
22
+ ]
20
23
 
21
24
  AVAILABLE_ENGINES.each do |const|
22
25
  autoload(const, "ramaze/template/#{const.downcase}")
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: HTML (Ezamar)
3
+ fileTypes:
4
+ - xhtml
5
+ scopeName: text.html.ruby
6
+ uuid: 45D7E1FC-7D0B-4205-A1A2-3D10BB555A5C
7
+ foldingStartMarker: |-
8
+ (?x)
9
+ (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?>
10
+ |<!--(?!.*-->)
11
+ |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
12
+ )
13
+ patterns:
14
+ - name: source.ruby.ezamar.embedded.html
15
+ captures:
16
+ "0":
17
+ name: punctuation.section.embedded.ruby
18
+ begin: "<?r"
19
+ end: "?>"
20
+ patterns:
21
+ - name: comment.line.number-sign.ruby
22
+ captures:
23
+ "1":
24
+ name: punctuation.definition.comment.ruby
25
+ match: (#).*?(?=-?\?>)
26
+ - include: source.ruby.ezamar
27
+ - include: text.html.basic
28
+ foldingStopMarker: |-
29
+ (?x)
30
+ (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)>
31
+ |^\s*-->
32
+ |(^|\s)\}
33
+ )
34
+ keyEquivalent: ^~R
@@ -0,0 +1,34 @@
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 'maruku'
5
+
6
+ module Ramaze
7
+ module Template
8
+
9
+ # Is responsible for compiling a template using the Ezamar templating engine.
10
+
11
+ class Maruku < Template
12
+
13
+ ENGINES[self] = %w[ mkd ]
14
+
15
+ class << self
16
+
17
+ # Transforms an action into the XHTML code for parsing and returns
18
+ # the result
19
+ def transform(action)
20
+ maruku = wrap_compile(action)
21
+ maruku.to_html
22
+ end
23
+
24
+ # Compile a template, applying all transformations from the pipeline
25
+ # and returning an instance of ::Ezamar::Template
26
+
27
+ def compile(action, template)
28
+ ::Maruku.new(template)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -55,11 +55,11 @@ module Ramaze
55
55
  end
56
56
 
57
57
  def p *a
58
- a.each{|elem| tagz << "#{ CGI.escapeHTML elem.inspect }#{ eol }"}
58
+ a.each{|elem| tagz << "#{ Rack::Utils.escape_html elem.inspect }#{ eol }"}
59
59
  end
60
60
 
61
61
  def pp *a
62
- a.each{|elem| tagz << "#{ CGI.escapeHTML PP.pp(elem, '') }#{ eol }"}
62
+ a.each{|elem| tagz << "#{ Rack::Utils.escape_html PP.pp(elem, '') }#{ eol }"}
63
63
  end
64
64
 
65
65
  def eol
@@ -55,8 +55,8 @@ module Ramaze
55
55
  end
56
56
 
57
57
  # Synchronize the block to run with the mutex
58
- def ext_functions_synchronize &block
59
- XSLT_EXT_FUNCTIONS_LOCK.synchronize &block
58
+ def ext_functions_synchronize(&block)
59
+ XSLT_EXT_FUNCTIONS_LOCK.synchronize(&block)
60
60
  end
61
61
 
62
62
  # Expose functors
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
2
2
  # All files in this distribution are subject to the terms of the Ruby license.
3
3
 
4
+ require 'ramaze/tool/project_creator'
5
+
4
6
  module Ramaze
5
7
  module Tool
6
8
 
@@ -14,60 +16,32 @@ module Ramaze
14
16
  # where project is the directory you want the content put into.
15
17
 
16
18
  class Create
17
- class << self
18
-
19
- # a method to create a new project by copying the contents of lib/proto
20
- # to the position you specify (project)
21
- #
22
- # It is just a nice wrapper showing you what files/directories are put
23
- # in place.
24
-
25
- def create project
26
- @basedir = ::Ramaze::BASEDIR / 'proto'
27
- @destdir = Dir.pwd / project
28
-
29
- if File.directory?(@destdir)
30
- puts "Error: #{project}/ already exists. Rename or delete directory and try again."
31
- return
32
- end
33
-
34
- puts "Creating project #{project}"
35
-
36
- FileUtils.mkdir_p(project)
37
-
38
- puts "Copying skeleton project to new project (#@destdir)..."
39
-
40
- directories, files =
41
- Dir[@basedir / '**' / '*'].partition{ |f| File.directory?(f) }
42
-
43
- # gem packaging removes empty model directory, so add it in ourselves
44
- create_dirs(*Array[ @basedir/'model', *directories ].uniq)
45
- copy_files(*files)
46
-
47
- puts "\nStart your new ramaze app: ruby #{project}/start.rb"
48
- end
49
-
50
- # create the directories recursivly
51
-
52
- def create_dirs(*dirs)
53
- dirs.each do |dir|
54
- dest = dir.gsub(@basedir, @destdir)
55
-
56
- puts "Create directory: '#{dest}'"
57
- FileUtils.mkdir_p(dest)
58
- end
59
- end
60
-
61
- # copy the files over
62
-
63
- def copy_files(*files)
64
- files.each do |file|
65
- dest = file.gsub(@basedir, @destdir)
66
19
 
67
- puts "Copy file: '#{dest}'"
68
- FileUtils.cp(file, dest)
69
- end
70
- end
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(::Ramaze::BASEDIR, '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
71
45
  end
72
46
  end
73
47
  end
@@ -63,10 +63,14 @@ module Ramaze
63
63
 
64
64
  def call(response, options = {})
65
65
  return response unless trait[:enable]
66
- return response if response.body.nil?
67
- return response if response.body.respond_to?(:read)
68
- response.body = localize_body(response.body, options)
69
- response
66
+
67
+ body = []
68
+
69
+ response.body.each do |chunk|
70
+ body << localize_body(chunk, options)
71
+ end
72
+
73
+ response.body = body
70
74
  end
71
75
 
72
76
  # Localizes a response body. It reacts to a regular expression as given
@@ -15,10 +15,20 @@ module Ramaze
15
15
 
16
16
  # Get MIME-type for the given filename based on extension.
17
17
  # Answers with an empty string if none is found.
18
- def type_for file
18
+ def type_for(file)
19
19
  ext = File.extname(file)
20
20
  trait[:types][ext].to_s
21
21
  end
22
+
23
+ def ext_for(mime)
24
+ exts = []
25
+
26
+ trait[:types].each do |ext, mime_type|
27
+ exts << ext if mime == mime_type
28
+ end
29
+
30
+ exts.sort_by{|e| e.size }.first
31
+ end
22
32
  end
23
33
  end
24
34
  end
@@ -0,0 +1,110 @@
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 = ['~/.proto/']
9
+ attr_accessor :name, :options
10
+
11
+ def initialize(name, options = {})
12
+ @name, @options = name, options
13
+ end
14
+
15
+ def target
16
+ File.expand_path(name)
17
+ end
18
+
19
+ def proto
20
+ PROTO.map!{|pr| File.expand_path(pr) }
21
+ proto = options[:proto] ||= PROTO.find{|f| File.directory?(f) }
22
+ layout = options[:layout] ||= '/'
23
+ File.expand_path(File.join(proto, layout))
24
+ end
25
+
26
+ def create_root?
27
+ return true unless File.directory?(target)
28
+ return true if amend? or force?
29
+ fatal "%p is a directory, choose different project name or use --amend/--force" % target
30
+ end
31
+
32
+ def got_proto?
33
+ return true if File.directory?(proto)
34
+ fatal "Cannot create, %p doesn't exist, use --proto or create the proto directory" % proto
35
+ end
36
+
37
+ def create
38
+ got_proto?
39
+
40
+ puts "Found proto at: %p, proceeding...\n\n" % proto
41
+ mkdir(relate('/')) if create_root?
42
+ proceed
43
+ end
44
+
45
+ def proceed
46
+ files, directories = partition{|path| File.file?(path) }
47
+ proceed_directories(directories)
48
+ proceed_files(files)
49
+ end
50
+
51
+ def proceed_files(files)
52
+ files.each{|file| copy(file, relate(file)) }
53
+ end
54
+
55
+ def proceed_directories(dirs)
56
+ dirs.each{|dir| mkdir(relate(dir)) }
57
+ end
58
+
59
+ def mkdir(dir)
60
+ exists = File.directory?(dir)
61
+ return if exists and amend?
62
+ return if exists and not force?
63
+ puts "mkdir(%p)" % dir
64
+ FileUtils.mkdir_p(dir)
65
+ end
66
+
67
+ def copy(from, to)
68
+ return unless copy_check(to)
69
+ puts "copy(%p, %p)" % [from, to]
70
+ FileUtils.cp(from, to)
71
+ post_process(to)
72
+ end
73
+
74
+ def copy_check(to)
75
+ exists = File.file?(to)
76
+ return if exists and amend?
77
+ return if exists and not force?
78
+ return true
79
+ end
80
+
81
+ # Think about a useful way to process the generated files it should be
82
+ # possible to substitute some things like the project name in the
83
+ # configuration
84
+
85
+ def post_process(file)
86
+ return
87
+ source = File.read(file)
88
+ File.open(file, 'w+') do |io|
89
+ io.write(source.gsub('$project', "'#@name'"))
90
+ end
91
+ end
92
+
93
+ def relate(path)
94
+ File.join(target, path.to_s.sub(proto, ''))
95
+ end
96
+
97
+ def amend?; options[:amend] end
98
+ def force?; options[:force] end
99
+
100
+ def fatal(message)
101
+ warn message
102
+ exit 1
103
+ end
104
+
105
+ def each
106
+ Dir["#{proto}/**/*"].each{|path| yield(path) }
107
+ end
108
+
109
+ include Enumerable
110
+ end
@@ -2,12 +2,15 @@
2
2
  # All files in this distribution are subject to the terms of the Ruby license.
3
3
 
4
4
  module Ramaze
5
+ STATE = State.new
5
6
 
6
7
  # The module to be included into the Controller it basically just provides
7
8
  # #request, #response and #session, each accessing Thread.current to
8
9
  # retrieve the demanded object
9
10
 
10
11
  module Trinity
11
- thread_accessor :request, :response, :session
12
+ extend StateAccessor
13
+
14
+ state_accessor :request, :response, :session
12
15
  end
13
16
  end
@@ -2,5 +2,5 @@
2
2
  # All files in this distribution are subject to the terms of the Ruby license.
3
3
 
4
4
  module Ramaze
5
- VERSION = "2008.06"
5
+ VERSION = "2008.10"
6
6
  end