ramaze 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. data/Rakefile +360 -0
  2. data/bin/ramaze +152 -0
  3. data/doc/CHANGELOG +2021 -0
  4. data/doc/COPYING +56 -0
  5. data/doc/COPYING.ja +51 -0
  6. data/doc/README +275 -0
  7. data/doc/TODO +33 -0
  8. data/doc/allison/LICENSE +184 -0
  9. data/doc/allison/README +37 -0
  10. data/doc/allison/allison.css +300 -0
  11. data/doc/allison/allison.gif +0 -0
  12. data/doc/allison/allison.js +307 -0
  13. data/doc/allison/allison.rb +287 -0
  14. data/doc/allison/cache/BODY +588 -0
  15. data/doc/allison/cache/CLASS_INDEX +4 -0
  16. data/doc/allison/cache/CLASS_PAGE +1 -0
  17. data/doc/allison/cache/FILE_INDEX +4 -0
  18. data/doc/allison/cache/FILE_PAGE +1 -0
  19. data/doc/allison/cache/FONTS +1 -0
  20. data/doc/allison/cache/FR_INDEX_BODY +1 -0
  21. data/doc/allison/cache/IMGPATH +1 -0
  22. data/doc/allison/cache/INDEX +1 -0
  23. data/doc/allison/cache/JAVASCRIPT +307 -0
  24. data/doc/allison/cache/METHOD_INDEX +4 -0
  25. data/doc/allison/cache/METHOD_LIST +1 -0
  26. data/doc/allison/cache/SRC_PAGE +1 -0
  27. data/doc/allison/cache/STYLE +322 -0
  28. data/doc/allison/cache/URL +1 -0
  29. data/examples/blog/main.rb +16 -0
  30. data/examples/blog/public/screen.css +106 -0
  31. data/examples/blog/src/controller.rb +50 -0
  32. data/examples/blog/src/element.rb +53 -0
  33. data/examples/blog/src/model.rb +29 -0
  34. data/examples/blog/template/edit.xhtml +6 -0
  35. data/examples/blog/template/index.xhtml +24 -0
  36. data/examples/blog/template/new.xhtml +5 -0
  37. data/examples/blog/template/view.xhtml +15 -0
  38. data/examples/blog/test/tc_entry.rb +18 -0
  39. data/examples/caching.rb +23 -0
  40. data/examples/element.rb +40 -0
  41. data/examples/hello.rb +23 -0
  42. data/examples/simple.rb +60 -0
  43. data/examples/templates/template/external.haml +21 -0
  44. data/examples/templates/template/external.liquid +28 -0
  45. data/examples/templates/template/external.mab +27 -0
  46. data/examples/templates/template/external.rhtml +29 -0
  47. data/examples/templates/template/external.rmze +24 -0
  48. data/examples/templates/template_erubis.rb +50 -0
  49. data/examples/templates/template_haml.rb +48 -0
  50. data/examples/templates/template_liquid.rb +64 -0
  51. data/examples/templates/template_markaby.rb +52 -0
  52. data/examples/templates/template_ramaze.rb +49 -0
  53. data/examples/whywiki/main.rb +56 -0
  54. data/examples/whywiki/template/edit.xhtml +14 -0
  55. data/examples/whywiki/template/show.xhtml +17 -0
  56. data/lib/proto/conf/benchmark.yaml +35 -0
  57. data/lib/proto/conf/debug.yaml +34 -0
  58. data/lib/proto/conf/live.yaml +33 -0
  59. data/lib/proto/conf/silent.yaml +31 -0
  60. data/lib/proto/conf/stage.yaml +33 -0
  61. data/lib/proto/main.rb +18 -0
  62. data/lib/proto/public/404.jpg +0 -0
  63. data/lib/proto/public/css/coderay.css +105 -0
  64. data/lib/proto/public/css/ramaze_error.css +42 -0
  65. data/lib/proto/public/error.xhtml +74 -0
  66. data/lib/proto/public/favicon.ico +0 -0
  67. data/lib/proto/public/js/jquery.js +1923 -0
  68. data/lib/proto/public/ramaze.png +0 -0
  69. data/lib/proto/src/controller/main.rb +7 -0
  70. data/lib/proto/src/element/page.rb +16 -0
  71. data/lib/proto/src/model.rb +5 -0
  72. data/lib/proto/template/index.xhtml +6 -0
  73. data/lib/ramaze.rb +317 -0
  74. data/lib/ramaze/adapter/mongrel.rb +111 -0
  75. data/lib/ramaze/adapter/webrick.rb +161 -0
  76. data/lib/ramaze/cache.rb +11 -0
  77. data/lib/ramaze/cache/memcached.rb +52 -0
  78. data/lib/ramaze/cache/memory.rb +6 -0
  79. data/lib/ramaze/cache/yaml_store.rb +37 -0
  80. data/lib/ramaze/controller.rb +10 -0
  81. data/lib/ramaze/dispatcher.rb +315 -0
  82. data/lib/ramaze/error.rb +11 -0
  83. data/lib/ramaze/gestalt.rb +108 -0
  84. data/lib/ramaze/global.rb +120 -0
  85. data/lib/ramaze/helper.rb +32 -0
  86. data/lib/ramaze/helper/aspect.rb +189 -0
  87. data/lib/ramaze/helper/auth.rb +120 -0
  88. data/lib/ramaze/helper/cache.rb +52 -0
  89. data/lib/ramaze/helper/feed.rb +135 -0
  90. data/lib/ramaze/helper/form.rb +204 -0
  91. data/lib/ramaze/helper/link.rb +80 -0
  92. data/lib/ramaze/helper/redirect.rb +48 -0
  93. data/lib/ramaze/helper/stack.rb +67 -0
  94. data/lib/ramaze/http_status.rb +66 -0
  95. data/lib/ramaze/inform.rb +166 -0
  96. data/lib/ramaze/snippets.rb +5 -0
  97. data/lib/ramaze/snippets/hash/keys_to_sym.rb +19 -0
  98. data/lib/ramaze/snippets/kernel/aquire.rb +22 -0
  99. data/lib/ramaze/snippets/kernel/autoreload.rb +79 -0
  100. data/lib/ramaze/snippets/kernel/caller_lines.rb +58 -0
  101. data/lib/ramaze/snippets/kernel/constant.rb +24 -0
  102. data/lib/ramaze/snippets/kernel/rescue_require.rb +12 -0
  103. data/lib/ramaze/snippets/kernel/self_method.rb +41 -0
  104. data/lib/ramaze/snippets/kernel/silently.rb +13 -0
  105. data/lib/ramaze/snippets/object/traits.rb +60 -0
  106. data/lib/ramaze/snippets/openstruct/temp.rb +10 -0
  107. data/lib/ramaze/snippets/string/DIVIDE.rb +16 -0
  108. data/lib/ramaze/snippets/string/camel_case.rb +14 -0
  109. data/lib/ramaze/snippets/string/snake_case.rb +12 -0
  110. data/lib/ramaze/snippets/symbol/to_proc.rb +14 -0
  111. data/lib/ramaze/snippets/thread/deadQUESTIONMARK.rb +11 -0
  112. data/lib/ramaze/store/default.rb +48 -0
  113. data/lib/ramaze/template.rb +102 -0
  114. data/lib/ramaze/template/amrita2.rb +40 -0
  115. data/lib/ramaze/template/erubis.rb +58 -0
  116. data/lib/ramaze/template/haml.rb +65 -0
  117. data/lib/ramaze/template/haml/actionview_stub.rb +20 -0
  118. data/lib/ramaze/template/liquid.rb +74 -0
  119. data/lib/ramaze/template/markaby.rb +68 -0
  120. data/lib/ramaze/template/ramaze.rb +177 -0
  121. data/lib/ramaze/template/ramaze/element.rb +166 -0
  122. data/lib/ramaze/template/ramaze/morpher.rb +156 -0
  123. data/lib/ramaze/tool/create.rb +70 -0
  124. data/lib/ramaze/tool/tidy.rb +71 -0
  125. data/lib/ramaze/trinity.rb +38 -0
  126. data/lib/ramaze/trinity/request.rb +244 -0
  127. data/lib/ramaze/trinity/response.rb +41 -0
  128. data/lib/ramaze/trinity/session.rb +129 -0
  129. data/lib/ramaze/version.rb +14 -0
  130. data/spec/spec_all.rb +73 -0
  131. data/spec/spec_helper.rb +215 -0
  132. data/spec/tc_adapter_mongrel.rb +24 -0
  133. data/spec/tc_adapter_webrick.rb +22 -0
  134. data/spec/tc_cache.rb +79 -0
  135. data/spec/tc_controller.rb +39 -0
  136. data/spec/tc_element.rb +100 -0
  137. data/spec/tc_error.rb +23 -0
  138. data/spec/tc_gestalt.rb +90 -0
  139. data/spec/tc_global.rb +46 -0
  140. data/spec/tc_helper_aspect.rb +65 -0
  141. data/spec/tc_helper_auth.rb +61 -0
  142. data/spec/tc_helper_cache.rb +81 -0
  143. data/spec/tc_helper_feed.rb +129 -0
  144. data/spec/tc_helper_form.rb +146 -0
  145. data/spec/tc_helper_link.rb +58 -0
  146. data/spec/tc_helper_redirect.rb +51 -0
  147. data/spec/tc_helper_stack.rb +55 -0
  148. data/spec/tc_morpher.rb +90 -0
  149. data/spec/tc_params.rb +84 -0
  150. data/spec/tc_request.rb +111 -0
  151. data/spec/tc_session.rb +56 -0
  152. data/spec/tc_store.rb +25 -0
  153. data/spec/tc_template_amrita2.rb +34 -0
  154. data/spec/tc_template_erubis.rb +41 -0
  155. data/spec/tc_template_haml.rb +44 -0
  156. data/spec/tc_template_liquid.rb +98 -0
  157. data/spec/tc_template_markaby.rb +74 -0
  158. data/spec/tc_template_ramaze.rb +54 -0
  159. data/spec/tc_tidy.rb +14 -0
  160. data/spec/template/amrita2/data.html +6 -0
  161. data/spec/template/amrita2/index.html +1 -0
  162. data/spec/template/amrita2/sum.html +1 -0
  163. data/spec/template/erubis/sum.rhtml +1 -0
  164. data/spec/template/haml/index.haml +5 -0
  165. data/spec/template/haml/with_vars.haml +4 -0
  166. data/spec/template/liquid/index.liquid +1 -0
  167. data/spec/template/liquid/products.liquid +45 -0
  168. data/spec/template/markaby/external.mab +8 -0
  169. data/spec/template/markaby/sum.mab +1 -0
  170. data/spec/template/ramaze/file_only.rmze +1 -0
  171. data/spec/template/ramaze/index.rmze +1 -0
  172. data/spec/template/ramaze/nested.rmze +1 -0
  173. data/spec/template/ramaze/sum.rmze +1 -0
  174. metadata +317 -0
@@ -0,0 +1,22 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Kernel
5
+
6
+ # Example:
7
+ # aquire 'foo/bar/*'
8
+ # requires all files inside foo/bar - recursive
9
+ # can take multiple parameters, it's mainly used to require all the
10
+ # snippets.
11
+
12
+ def aquire *files
13
+ files.each do |file|
14
+ require file if %w(rb so).any?{|f| File.file?("#{file}.#{f}")}
15
+ $:.each do |path|
16
+ Dir[File.join(path, file, '*.rb')].each do |file|
17
+ require file
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,79 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'set'
5
+
6
+ module Ramaze
7
+
8
+ # this method loops through all loaded/required files
9
+ # and re-loads them when they are updated.
10
+ # It takes one parameter, which is the interval in seconds
11
+ # with a default of 10.
12
+ # You can also safely kill all threads (except for the main)
13
+ # and it will just restart the autoreloader.
14
+
15
+ def self.autoreload interval = 10
16
+ debug "initialize autoreload with an interval of #{interval} seconds"
17
+
18
+ gatherer = Thread.new do
19
+ this = Thread.current
20
+ this[:task] = :autoreload
21
+
22
+ cache = {}
23
+ file_set = Set.new
24
+
25
+ loop do
26
+ files = file_set.dup
27
+ $LOADED_FEATURES.map do |file|
28
+ file = file.to_s
29
+ paths = $LOAD_PATH + ['']
30
+ correct_path = paths.find{|lp| File.exist?(File.join(lp.to_s, file))}
31
+ correct_file = File.expand_path(File.join(correct_path, file)) if correct_path
32
+
33
+ files << correct_file if correct_file
34
+ end
35
+
36
+ this[:files] = files
37
+
38
+ sleep_interval = this[:interval] ||= interval || 10
39
+ sleep sleep_interval
40
+ end
41
+ end
42
+
43
+ reloader = Thread.new do
44
+ this = Thread.current
45
+ this[:task] = :autoreload
46
+
47
+ cache = {}
48
+ this[:interval] = interval
49
+ sleep 0.1 until gatherer[:files] # wait for the gatherer
50
+
51
+ loop do
52
+ gatherer[:files].each do |file|
53
+ begin
54
+ current_time = File.mtime(file)
55
+ if last_time = cache[file]
56
+ unless last_time == current_time
57
+ Ramaze::Informer.info "autoreload #{file}"
58
+ load(file)
59
+ cache[file] = current_time
60
+ end
61
+ else
62
+ cache[file] = current_time
63
+ end
64
+ rescue Object => ex # catches errors when the load fails
65
+ # in case mtime fails
66
+ unless ex.message =~ /No such file or directory/
67
+ puts ex
68
+ puts ex.backtrace
69
+ end
70
+ # sleep a total of reloader[:interval],
71
+ # but spread it evenly on all files
72
+ end # begin
73
+ sleep_interval = this[:interval].to_f / gatherer[:files].size
74
+ sleep sleep_interval
75
+ end # each
76
+ end # loop
77
+ end # Thread.new
78
+ end # autoreload
79
+ end # Ramaze
@@ -0,0 +1,58 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Kernel
5
+ # Gives you back the file, line and method of the caller number i
6
+ # Example:
7
+ # __caller_info__(1) # -> ['/usr/lib/ruby/1.8/irb/workspace.rb', '52', 'irb_binding']
8
+
9
+ def __caller_info__(i = 1)
10
+ file, line, meth = caller[i].scan(/(.*?):(\d+):in `(.*?)'/).first
11
+ end
12
+
13
+ # Gives you some context around a specific line in a file.
14
+ # the size argument works in both directions + the actual line,
15
+ # size = 2 gives you 5 lines of source, the returned array has the
16
+ # following format.
17
+ # [
18
+ # line = [
19
+ # lineno = Integer,
20
+ # line = String,
21
+ # is_searched_line = (lineno == initial_lineno)
22
+ # ],
23
+ # ...,
24
+ # ...
25
+ # ]
26
+ # Example:
27
+ # __caller_lines__('/usr/lib/ruby/1.8/debug.rb', 122, 2) # ->
28
+ # [
29
+ # [ 120, " def check_suspend", false ],
30
+ # [ 121, " return if Thread.critical", false ],
31
+ # [ 122, " while (Thread.critical = true; @suspend_next)", true ],
32
+ # [ 123, " DEBUGGER__.waiting.push Thread.current", false ],
33
+ # [ 124, " @suspend_next = false", false ]
34
+ # ]
35
+
36
+ def __caller_lines__ file, line, size = 4
37
+ return [[0, file, true]] if file == '(eval)'
38
+ lines = File.readlines(file)
39
+ current = line.to_i - 1
40
+
41
+ first = current - size
42
+ first = first < 0 ? 0 : first
43
+
44
+ last = current + size
45
+ last = last > lines.size ? lines.size : last
46
+
47
+ log = lines[first..last]
48
+
49
+ area = []
50
+
51
+ log.each_with_index do |line, index|
52
+ index = index + first + 1
53
+ area << [index, line.chomp, index == current + 1]
54
+ end
55
+
56
+ area
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Kernel
5
+ # Original from Trans (Facets 1.4.5)
6
+ # This is similar to +Module#const_get+ but is accessible at all levels,
7
+ # and, unlike +const_get+, can handle module hierarchy.
8
+ #
9
+ # constant("Fixnum") # -> Fixnum
10
+ # constant(:Fixnum) # -> Fixnum
11
+ #
12
+ # constant("Process::Sys") # -> Process::Sys
13
+ # constant("Regexp::MULTILINE") # -> 4
14
+ #
15
+ # require 'test/unit'
16
+ # Test.constant("Unit::Assertions") # -> Test::Unit::Assertions
17
+ # Test.constant("::Test::Unit") # -> Test::Unit
18
+ #
19
+ def constant(const)
20
+ const = const.to_s.dup
21
+ base = const.sub!(/^::/, '') ? Object : ( self.kind_of?(Module) ? self : self.class )
22
+ const.split(/::/).inject(base){ |mod, name| mod.const_get(name) }
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+ module Kernel
4
+
5
+ # try to require a file, output message if it failes.
6
+
7
+ def rescue_require(sym, message = nil)
8
+ require sym
9
+ rescue LoadError, RuntimeError
10
+ puts message if message
11
+ end
12
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Kernel
5
+ alias_method :method_get, :method unless defined? method_get
6
+
7
+ # get the object of the method you are currently in or any
8
+ # other out of the backtrace, as long as it is in the same
9
+ # instance and retrievable via method_get (which is the old #method).
10
+ #
11
+ # class Foo
12
+ # def bar
13
+ # method
14
+ # end
15
+ # end
16
+ #
17
+ # Foo.new.bar #=> #<Method: Foo#bar>
18
+
19
+ def method(n = 0)
20
+ return method_get(n) unless n.is_a? Integer
21
+ method_get caller.to_s.scan(/`(.*?)'/)[n].first rescue nil
22
+ end
23
+ end
24
+
25
+ class Method
26
+
27
+ # name of the Method (example shows combination with the new Kernel#method)
28
+ #
29
+ # class Foo
30
+ # def bar
31
+ # method.name
32
+ # end
33
+ # end
34
+ #
35
+ # Foo.new.bar #=> 'bar'
36
+
37
+ def name
38
+ #<Method: A.d>
39
+ inspect.gsub(/#<Method: .*?[\.#](.*?)>/, '\1')
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+ module Kernel
4
+
5
+ # sets $VERBOSE temporarily to nil so you can redefine constants in peace
6
+
7
+ def silently
8
+ old_verbose, $VERBOSE = $VERBOSE, nil
9
+ yield
10
+ ensure
11
+ $VERBOSE = old_verbose
12
+ end
13
+ end
@@ -0,0 +1,60 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ Traits = Hash.new{|h,k| h[k] = {}}
5
+
6
+ class Object
7
+
8
+ # Adds a method to Object to annotate your objects with certain traits.
9
+ # It's basically a simple Hash that takes the current object as key
10
+ #
11
+ # Example:
12
+ #
13
+ # class Foo
14
+ # trait :instance => false
15
+ #
16
+ # def initialize
17
+ # trait :instance => true
18
+ # end
19
+ # end
20
+ #
21
+ # Foo.trait[:instance]
22
+ # # false
23
+ #
24
+ # foo = Foo.new
25
+ # foo.trait[:instance]
26
+ # # true
27
+
28
+ def trait hash = nil
29
+ if hash
30
+ Traits[self].merge! hash
31
+ else
32
+ Traits[self]
33
+ end
34
+ end
35
+
36
+ # builds a trait from all the ancestors, closer ancestors
37
+ # overwrite distant ancestors
38
+ #
39
+ # class Foo
40
+ # trait :one => :eins
41
+ # trait :first => :erstes
42
+ # end
43
+ #
44
+ # class Bar < Foo
45
+ # trait :two => :zwei
46
+ # end
47
+ #
48
+ # class Foobar < Bar
49
+ # trait :three => :drei
50
+ # trait :first => :overwritten
51
+ # end
52
+ #
53
+ # Foobar.ancestral_trait
54
+ # {:three=>:drei, :two=>:zwei, :one=>:eins, :first=>:overwritten}
55
+
56
+ def ancestral_trait
57
+ ancs = (ancestors rescue self.class.ancestors)
58
+ ancs.reverse.inject({}){|s,v| s.merge(v.trait)}.merge(trait)
59
+ end
60
+ end
@@ -0,0 +1,10 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+ class OpenStruct
4
+
5
+ # create a new OpenStruct and fill it with a merge of the old @table and the passed hash
6
+
7
+ def temp hash
8
+ self.class.new(@table.merge(hash))
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ class String
5
+
6
+ # A convinient way to do File.join
7
+ #
8
+ # Example:
9
+ # 'a' / 'b' # -> 'a/b'
10
+ # File.dirname(__FILE__) / 'bar' # -> "ramaze/snippets/string/bar"
11
+
12
+ def / obj
13
+ File.join(self, obj.to_s)
14
+ end
15
+ end
16
+
@@ -0,0 +1,14 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ class String
5
+
6
+ # simple transformation to CamelCase from snake_case
7
+ #
8
+ # 'foo_bar'.camel_case # => 'FooBar'
9
+
10
+ def camel_case
11
+ split('_').map{|e| e.capitalize}.join
12
+ end
13
+ end
14
+
@@ -0,0 +1,12 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+ class String
4
+
5
+ # convert to snake_case from CamelCase
6
+ #
7
+ # 'FooBar'.snake_case # => 'foo_bar'
8
+
9
+ def snake_case
10
+ gsub(/\B[A-Z]/, '_\&').downcase.gsub(' ', '_')
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+ class Symbol
4
+
5
+ # the well-known #to_proc
6
+ # creates a lambda that sends the symbol and any further arguments
7
+ # to the object yielded.
8
+ # [1, 2, 3].map(&:to_s) # => ['1', '2', '3']
9
+ # %w[a b c].map(&:to_sym) # => [:a, :b, :c]
10
+
11
+ def to_proc
12
+ lambda{|o, *args| o.send(self, *args) }
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ class Thread
5
+
6
+ # check if the thread is not alive (not alive?)
7
+
8
+ def dead?
9
+ not alive?
10
+ end
11
+ end
@@ -0,0 +1,48 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'yaml/store'
5
+
6
+ module Ramaze
7
+ module Store
8
+
9
+ # A simple wrapper around YAML::Store
10
+
11
+ class Default
12
+ attr_accessor :db
13
+
14
+ # create a new store with a filename
15
+
16
+ def initialize filename = 'db.yaml'
17
+ FileUtils.touch(filename)
18
+ @db = YAML::Store.new(filename)
19
+ end
20
+
21
+ # pass on all methods inside a transaction
22
+
23
+ def method_missing(meth, *args, &block)
24
+ @db.transaction do
25
+ @db.send(meth, *args, &block)
26
+ end
27
+ end
28
+
29
+ # the actual content of the store in YAML format
30
+
31
+ def to_yaml
32
+ Db.dump(:x)
33
+ end
34
+
35
+ # loads the #to_yaml
36
+
37
+ def original
38
+ YAML.load(to_yaml)
39
+ end
40
+
41
+ # available keys of the store
42
+
43
+ def keys
44
+ original.keys
45
+ end
46
+ end
47
+ end
48
+ end