wee 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. data/ChangeLog +75 -0
  2. data/README +17 -9
  3. data/Rakefile +2 -2
  4. data/TODO +20 -0
  5. data/benchmark/Makefile +14 -9
  6. data/benchmark/counter.rb +11 -30
  7. data/benchmark/report_req.rb +12 -0
  8. data/doc/rdoc/classes/Array.html +12 -12
  9. data/doc/rdoc/classes/Cache/StorageCache.html +38 -38
  10. data/doc/rdoc/classes/Cache/Strategy/CapacityBounded.html +30 -30
  11. data/doc/rdoc/classes/Cache/Strategy/LFU.html +24 -24
  12. data/doc/rdoc/classes/Cache/Strategy/LRU.html +24 -24
  13. data/doc/rdoc/classes/Cache/Strategy/Unbounded.html +24 -24
  14. data/doc/rdoc/classes/Enumerable.html +6 -6
  15. data/doc/rdoc/classes/Object.html +12 -12
  16. data/doc/rdoc/classes/OgApplication.html +126 -0
  17. data/doc/rdoc/classes/OgScaffolder.html +401 -0
  18. data/doc/rdoc/classes/OgSession.html +172 -0
  19. data/doc/rdoc/classes/String.html +12 -12
  20. data/doc/rdoc/classes/Struct.html +12 -12
  21. data/doc/rdoc/classes/Wee.html +5 -62
  22. data/doc/rdoc/classes/Wee/AnswerDecoration.html +9 -9
  23. data/doc/rdoc/classes/Wee/Application.html +107 -39
  24. data/doc/rdoc/classes/Wee/Brush.html +22 -18
  25. data/doc/rdoc/classes/Wee/Brush/ActionCallbackMixin.html +17 -11
  26. data/doc/rdoc/classes/Wee/Brush/ActionURLCallbackMixin.html +18 -10
  27. data/doc/rdoc/classes/Wee/Brush/AnchorTag.html +30 -64
  28. data/doc/rdoc/classes/Wee/Brush/FileUploadTag.html +8 -10
  29. data/doc/rdoc/classes/Wee/Brush/FormTag.html +27 -79
  30. data/doc/rdoc/classes/Wee/Brush/GenericEncodedTextBrush.html +12 -12
  31. data/doc/rdoc/classes/Wee/Brush/GenericSingleTagBrush.html +146 -0
  32. data/doc/rdoc/classes/Wee/Brush/GenericTagBrush.html +179 -65
  33. data/doc/rdoc/classes/Wee/Brush/GenericTextBrush.html +12 -12
  34. data/doc/rdoc/classes/Wee/Brush/ImageButtonTag.html +16 -18
  35. data/doc/rdoc/classes/Wee/Brush/ImageTag.html +203 -0
  36. data/doc/rdoc/classes/Wee/Brush/InputCallbackMixin.html +17 -11
  37. data/doc/rdoc/classes/Wee/Brush/InputTag.html +15 -15
  38. data/doc/rdoc/classes/Wee/Brush/JavascriptTag.html +147 -0
  39. data/doc/rdoc/classes/Wee/Brush/Page.html +17 -17
  40. data/doc/rdoc/classes/Wee/Brush/SelectListTag.html +25 -50
  41. data/doc/rdoc/classes/Wee/Brush/SelectOptionTag.html +7 -38
  42. data/doc/rdoc/classes/Wee/Brush/SubmitButtonTag.html +7 -7
  43. data/doc/rdoc/classes/Wee/Brush/TableDataTag.html +15 -16
  44. data/doc/rdoc/classes/Wee/Brush/TableHeaderTag.html +7 -7
  45. data/doc/rdoc/classes/Wee/Brush/TableRowTag.html +65 -50
  46. data/doc/rdoc/classes/Wee/Brush/TableTag.html +7 -7
  47. data/doc/rdoc/classes/Wee/Brush/TextAreaTag.html +14 -64
  48. data/doc/rdoc/classes/Wee/Brush/TextInputTag.html +7 -7
  49. data/doc/rdoc/classes/Wee/Brush/ToCallback.html +146 -0
  50. data/doc/rdoc/classes/Wee/CallbackRegistry.html +40 -40
  51. data/doc/rdoc/classes/Wee/CallbackStream.html +18 -18
  52. data/doc/rdoc/classes/Wee/Canvas.html +24 -24
  53. data/doc/rdoc/classes/Wee/Component.html +232 -149
  54. data/doc/rdoc/classes/Wee/Component/OnAnswer.html +153 -0
  55. data/doc/rdoc/classes/Wee/Decoration.html +42 -42
  56. data/doc/rdoc/classes/Wee/Delegate.html +27 -27
  57. data/doc/rdoc/classes/Wee/ErrorResponse.html +12 -12
  58. data/doc/rdoc/classes/Wee/FormDecoration.html +148 -0
  59. data/doc/rdoc/classes/Wee/GenericResponse.html +6 -6
  60. data/doc/rdoc/classes/Wee/HtmlCanvas.html +296 -215
  61. data/doc/rdoc/classes/Wee/HtmlWriter.html +83 -81
  62. data/doc/rdoc/classes/Wee/LiteralMethodCallback.html +21 -16
  63. data/doc/rdoc/classes/Wee/MessageBox.html +180 -0
  64. data/doc/rdoc/classes/Wee/PageDecoration.html +30 -30
  65. data/doc/rdoc/classes/Wee/Presenter.html +237 -69
  66. data/doc/rdoc/classes/Wee/RedirectResponse.html +6 -6
  67. data/doc/rdoc/classes/Wee/RefreshResponse.html +6 -6
  68. data/doc/rdoc/classes/Wee/Request.html +18 -18
  69. data/doc/rdoc/classes/Wee/RequestHandler.html +43 -39
  70. data/doc/rdoc/classes/Wee/Response.html +24 -24
  71. data/doc/rdoc/classes/Wee/Session.html +746 -72
  72. data/doc/rdoc/classes/Wee/SimpleIdGenerator.html +18 -18
  73. data/doc/rdoc/classes/Wee/Snapshot.html +19 -19
  74. data/doc/rdoc/classes/Wee/Utils.html +138 -2
  75. data/doc/rdoc/classes/Wee/Utils/LRUCache.html +7 -7
  76. data/doc/rdoc/classes/Wee/ValueHolder.html +18 -18
  77. data/doc/rdoc/classes/Wee/WEBrickAdaptor.html +43 -68
  78. data/doc/rdoc/classes/Wee/WrapperDecoration.html +150 -0
  79. data/doc/rdoc/created.rid +1 -1
  80. data/doc/rdoc/files/README.html +29 -15
  81. data/doc/rdoc/files/lib/wee/adaptors/webrick_rb.html +1 -1
  82. data/doc/rdoc/files/lib/wee/application_rb.html +1 -1
  83. data/doc/rdoc/files/lib/wee/components/form_decoration_rb.html +101 -0
  84. data/doc/rdoc/files/lib/wee/components/messagebox_rb.html +101 -0
  85. data/doc/rdoc/files/lib/wee/components/page_decoration_rb.html +1 -1
  86. data/doc/rdoc/files/lib/wee/components/wrapper_decoration_rb.html +101 -0
  87. data/doc/rdoc/files/lib/wee/components_rb.html +4 -1
  88. data/doc/rdoc/files/lib/wee/continuation/core/component_rb.html +101 -0
  89. data/doc/rdoc/files/lib/wee/continuation/session_rb.html +110 -0
  90. data/doc/rdoc/files/lib/wee/continuation_rb.html +116 -0
  91. data/doc/rdoc/files/lib/wee/core/callback_rb.html +1 -1
  92. data/doc/rdoc/files/lib/wee/core/component_rb.html +1 -1
  93. data/doc/rdoc/files/lib/wee/core/presenter_rb.html +1 -1
  94. data/doc/rdoc/files/lib/wee/core_rb.html +3 -3
  95. data/doc/rdoc/files/lib/wee/databases/og_rb.html +108 -0
  96. data/doc/rdoc/files/lib/wee/renderer/html/brushes_rb.html +1 -1
  97. data/doc/rdoc/files/lib/wee/renderer/html/canvas_rb.html +1 -1
  98. data/doc/rdoc/files/lib/wee/renderer/html/writer_rb.html +1 -1
  99. data/doc/rdoc/files/lib/wee/requesthandler_rb.html +1 -1
  100. data/doc/rdoc/files/lib/wee/session_rb.html +1 -2
  101. data/doc/rdoc/files/lib/wee/utils/autoreload_rb.html +1 -1
  102. data/doc/rdoc/files/lib/wee/utils/cache_rb.html +1 -1
  103. data/doc/rdoc/files/lib/wee/utils/helper_rb.html +1 -8
  104. data/doc/rdoc/files/lib/wee/utils_rb.html +110 -0
  105. data/doc/rdoc/files/lib/wee_rb.html +1 -1
  106. data/doc/rdoc/fr_class_index.html +11 -1
  107. data/doc/rdoc/fr_file_index.html +8 -0
  108. data/doc/rdoc/fr_method_index.html +269 -228
  109. data/examples/calculator.rb +69 -0
  110. data/examples/calendar.rb +5 -17
  111. data/examples/example.rb +2 -2
  112. data/examples/hw.rb +17 -0
  113. data/examples/live-update.rb +45 -0
  114. data/examples/og-test.rb +51 -0
  115. data/lib/wee.rb +1 -1
  116. data/lib/wee/adaptors/webrick.rb +2 -0
  117. data/lib/wee/application.rb +16 -0
  118. data/lib/wee/components.rb +3 -0
  119. data/lib/wee/components/form_decoration.rb +7 -0
  120. data/{test → lib/wee}/components/messagebox.rb +1 -1
  121. data/lib/wee/components/page_decoration.rb +5 -5
  122. data/lib/wee/components/wrapper_decoration.rb +7 -0
  123. data/lib/wee/continuation.rb +5 -0
  124. data/lib/wee/continuation/core/component.rb +55 -0
  125. data/lib/wee/continuation/session.rb +217 -0
  126. data/lib/wee/core/callback.rb +11 -6
  127. data/lib/wee/core/component.rb +45 -33
  128. data/lib/wee/core/presenter.rb +68 -0
  129. data/lib/wee/databases/og.rb +114 -0
  130. data/lib/wee/renderer/html/brushes.rb +179 -98
  131. data/lib/wee/renderer/html/canvas.rb +37 -13
  132. data/lib/wee/renderer/html/writer.rb +34 -32
  133. data/lib/wee/requesthandler.rb +6 -3
  134. data/lib/wee/session.rb +73 -54
  135. data/lib/wee/utils.rb +5 -0
  136. data/lib/wee/utils/autoreload.rb +1 -1
  137. data/lib/wee/utils/cache.rb +0 -2
  138. data/lib/wee/utils/helper.rb +40 -8
  139. data/test/components/calltest-cont.rb +16 -0
  140. data/test/components/calltest.rb +15 -10
  141. data/test/stress.rb +31 -28
  142. data/test/stress_and_measure.rb +53 -0
  143. data/test/stressed_application.rb +15 -0
  144. data/test/test_html_writer.rb +9 -4
  145. metadata +236 -195
  146. data/benchmark/bench.sh +0 -24
data/ChangeLog ADDED
@@ -0,0 +1,75 @@
1
+ Wed Jan 26 20:22:55 CET 2005 Michael Neumann <mneumann@ntecs.de>
2
+
3
+ * Raised version up to 0.5.0 (nearing a release)
4
+
5
+ * Fixed test cases.
6
+
7
+ Wed Jan 26 18:19:39 CET 2005 Michael Neumann <mneumann@ntecs.de>
8
+
9
+ * updated docs
10
+
11
+ * made Component#call's marshallable by using an object of class
12
+ Wee::Component::OnAnswer instead of a Proc.
13
+
14
+ * Moved all continuation-dependent code into directory
15
+ wee/continuation. By default Wee uses no continuations, you have to
16
+ require 'wee/continuation' to enable them.
17
+
18
+ Wed Jan 26 13:51:22 CET 2005 Michael Neumann <mneumann@ntecs.de>
19
+
20
+ * If you pass nil to an attribute method of a Brush, e.g.
21
+
22
+ r.table_data.width(nil)
23
+
24
+ This will remove the 'width' attribute from the tag.
25
+
26
+ * Method HtmlCanvas#javascript added:
27
+
28
+ # external javascript resource
29
+ r.javascript.src('/test.js')
30
+
31
+ # internal javascript
32
+ r.javascript.with('function js() { ... }')
33
+
34
+ * Method Presenter.uses_property added. Used to declare required
35
+ properties. This has actually no effect. It's sole purpose is to
36
+ describe the dependencies.
37
+
38
+ NO DATE AVAILABLE Michael Neumann <mneumann@ntecs.de>
39
+
40
+ * Enable Socket.do_not_reverse_lookup in WEBrickAdaptor by default, as
41
+ this has been the reason for much slowliness
42
+
43
+ * Method Component#add_child returns the child so that the following
44
+ code becomes possible:
45
+
46
+ @pager = add_child Pager.new(...)
47
+
48
+ * Added experimental property system.
49
+
50
+ * Added methods GenericTagBrush#onclick_callback, HtmlCanvas#link_css,
51
+ lots of refactoring
52
+
53
+ * New examples: hw.rb, live-update.rb, calculator.rb
54
+
55
+ * Wee::Brush::InputTag: methods #disabled and #readonly added
56
+
57
+ * Wee::Utils.app_for takes now (optionally) a block.
58
+
59
+ * Wee::MessageBox, Wee::WrapperDecoration, Wee::FromDecoration added
60
+
61
+ * Wee::Session#current_page, #current_context methods added
62
+
63
+ * added ground-work for live-updates (see examples/live-update.rb)
64
+
65
+ * added wee/databases/og.rb, which defines OgApplication and
66
+ OgSession, as well as a generic (but still very limited)
67
+ OgScaffolder.
68
+
69
+ * Methods Wee::Session#sleep and #awake added, which are called before and
70
+ after the request is handled. They can be used for example to setup
71
+ and release a database connection.
72
+
73
+ * Wee::Helper.app_for is now Wee::Utils.app_for
74
+
75
+ * require 'wee/utils' will load all utility methods.
data/README CHANGED
@@ -10,12 +10,15 @@ different terms.
10
10
 
11
11
  == Status and Bugs
12
12
 
13
- Wee is not considered production ready! It should only be used for small
14
- things.
13
+ Wee is now considered pretty stable (if you don't use continuations).
14
+ Nevertheless I wouldn't use it yet for mission-critical applications ;-)
15
15
 
16
16
  Known Bugs:
17
17
 
18
- * Continuations leak memory!
18
+ * Using continuations might leak memory, at least they did in the past. The
19
+ latest memory stress-test has not showed up any memory problems, but since I
20
+ haven't changed anything at the continuation implementation, I can't say for
21
+ sure whether the problem has been fixed or not.
19
22
 
20
23
  == Introduction
21
24
 
@@ -80,11 +83,12 @@ can be any object, e.g. whole components:
80
83
  items = labels.collect {|m| MessageBox.new(m)}
81
84
  r.select_list(items).labels(labels).callback {|choosen| call choosen.first}
82
85
 
83
- === Continuation based (Optional)
86
+ === Optional use of Continuations
84
87
 
85
- <b>IMPORTANT:</b> <i>The current implementation of continuations in Ruby might lead
86
- to memory leaks, if you use continuations. Furthermore, if you use
87
- continuations, it's no longer possible to store the session state to disk.</i>
88
+ <b>IMPORTANT:</b> <i>The current implementation of continuations in Ruby (or
89
+ their use in Wee) might lead to memory leaks, if you use continuations.
90
+ Furthermore, if you use continuations, it's no longer possible to store the
91
+ session state to disk.</i>
88
92
 
89
93
  Continuation-based frameworks are also known as _modal_ frameworks. You can
90
94
  write code like the one shown below (taken from one of Avi's emails) where each
@@ -104,6 +108,10 @@ method displays a new page:
104
108
  Try to implement the same in a non-continuation based framework and show me
105
109
  your code... ;-)
106
110
 
111
+ To enable continuations, you have to require:
112
+
113
+ require 'wee/continuation'
114
+
107
115
  === Fully Marshallable (drops Continuation support)
108
116
 
109
117
  If you don't need continuations, Wee can be made fully marshallable. It is not
@@ -119,8 +127,8 @@ yet fully marshallable (it was in the past), but it can be made, if required.
119
127
  DragonFly[www.dragonflybsd.org]. But with this approach it's still impossible
120
128
  to store sessions _selectively_ to disk.
121
129
 
122
- * Each session runs in it's own (light-weigth) thread (this is a neccessity
123
- when using continuations).
130
+ * When using continuations, each session runs in it's own (light-weigth)
131
+ thread. This is not the case if you don't use continuations.
124
132
 
125
133
  * Only one action callback can be invoked per request (a former version of Wee
126
134
  was able to invoke multiple callback, and answer even from multiple
data/Rakefile CHANGED
@@ -22,8 +22,8 @@ task :package do
22
22
  end
23
23
 
24
24
  task :local_install => [:package] do
25
- sh 'gem uninstall wee || true'
26
- sh 'gem install wee-*.gem'
25
+ sh '(yes | gem uninstall wee) || true'
26
+ sh 'gem install --no-rdoc wee-*.gem'
27
27
  end
28
28
 
29
29
  task :clean => [:clobber_rdoc]
data/TODO CHANGED
@@ -1,3 +1,23 @@
1
+ * OgScaffolder: cache fields
2
+
3
+ * LiteralMethodCallback: use a simple symbol instead?
4
+
5
+ * brushes.rb: tags as constants
6
+
7
+ * Session.new(application)
8
+
9
+ * live updates
10
+
11
+ * transactions
12
+
13
+ * use it with databases
14
+
15
+ * diverting html-renderer
16
+
17
+ * Add unit-tests for new global/local decorations
18
+
19
+ * MessageBox: Buttons: OK_Cancel, YES_NO, Confirm
20
+
1
21
  * req-handler gc interval
2
22
 
3
23
  * use LiteralMethod object instead of block if callback(:method_name) is given
data/benchmark/Makefile CHANGED
@@ -1,4 +1,6 @@
1
1
  N=2000
2
+ PORT=2000
3
+ COUNTERS=10
2
4
 
3
5
  RUBY=ruby
4
6
 
@@ -7,21 +9,24 @@ all: bench1 bench2
7
9
 
8
10
  start_counter:
9
11
  # start the counter app
10
- $(RUBY) counter.rb 2000 > /dev/null 2> /dev/null &
12
+ $(RUBY) counter.rb $(PORT) $(COUNTERS) > /dev/null 2> /dev/null &
11
13
  sleep 3
12
14
 
13
15
  stop_counter:
14
- kill -9 `cat counter.2000.pid`
15
- rm -f counter.2000.pid
16
+ kill -9 `cat counter.$(PORT).pid`
17
+ rm -f counter.$(PORT).pid
16
18
  rm -f dump
17
19
 
18
20
  bench_counter:
19
21
  # generate initial session and first page
20
- fetch -o counter.html http://localhost:2000/counter
22
+ fetch -o counter.html http://localhost:$(PORT)/counter
21
23
 
22
24
  # perform benchmark
23
- ab -n ${N} http://localhost:2000/counter/s:1/p:1 > result.${N}.counter.render
24
- ab -n ${N} http://localhost:2000/counter/s:1/p:1/h:1 > result.${N}.counter.action
25
+ ab -n ${N} http://localhost:$(PORT)/counter/@1/1 > result.${N}.counter.render
26
+ ab -n ${N} http://localhost:$(PORT)/counter/@1/1?4 > result.${N}.counter.action
27
+
28
+ report_counter:
29
+ $(RUBY) report_req.rb result.$(N).counter.render result.$(N).counter.action
25
30
 
26
31
  start_filehandler:
27
32
  # start the filehandler app
@@ -33,16 +38,16 @@ stop_filehandler:
33
38
  rm -f filehandler.pid
34
39
 
35
40
  bench_filehandler:
36
- ab -n ${N} http://localhost:2000/counter.html > result.${N}.filehandler
41
+ ab -n ${N} http://localhost:$(PORT)/counter.html > result.${N}.filehandler
37
42
 
38
43
  clean:
39
- rm -f counter.2000.pid
44
+ rm -f counter.$(PORT).pid
40
45
  rm -f filehandler.pid
41
46
  rm -f dump
42
47
  rm -f result.${N}.*
43
48
  rm -f counter.html
44
49
 
45
- bench1: start_counter bench_counter stop_counter
50
+ bench1: start_counter bench_counter stop_counter report_counter
46
51
  bench2: start_filehandler bench_filehandler stop_filehandler
47
52
 
48
53
 
data/benchmark/counter.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift '../lib'
2
2
  require 'wee'
3
- require 'wee/webrick'
4
- require 'wee/utils/cache'
3
+ require 'wee/adaptors/webrick'
4
+ require 'wee/utils'
5
5
 
6
6
  class Counter < Wee::Component
7
7
  def initialize(cnt)
@@ -24,18 +24,18 @@ class Counter < Wee::Component
24
24
  end
25
25
 
26
26
  def render
27
- r.form.action(:submit).with do
28
- r.anchor.action(:dec).with("--")
27
+ r.form.callback(:submit).with do
28
+ r.anchor.callback(:dec).with("--")
29
29
  r.space
30
30
 
31
31
  if @show_edit_field
32
- r.text_input.assign(:cnt=).value(@cnt).size(6)
32
+ r.text_input.callback(:cnt=).value(@cnt).size(6)
33
33
  else
34
- r.anchor.action(:submit).with(@cnt)
34
+ r.anchor.callback(:submit).with(@cnt)
35
35
  end
36
36
 
37
37
  r.space
38
- r.anchor.action(:inc).with("++")
38
+ r.anchor.callback(:inc).with("++")
39
39
  end
40
40
  end
41
41
 
@@ -57,7 +57,7 @@ end
57
57
  class Main < Wee::Component
58
58
  def initialize
59
59
  super()
60
- @counters = (1..20).map {|i| Counter.new(i)}
60
+ @counters = (1..COUNTERS).map {|i| Counter.new(i)}
61
61
  children.push(*@counters)
62
62
  end
63
63
 
@@ -68,29 +68,10 @@ class Main < Wee::Component
68
68
  end
69
69
  end
70
70
 
71
- class MySession < Wee::Session
72
- def initialize
73
- super do
74
- self.root_component = Main.new
75
- self.page_store = Wee::Utils::LRUCache.new(10) # backtrack up to 10 pages
76
- end
77
- end
78
- end
79
-
80
- class MyApplication < Wee::Application
81
- def setup_session_id_generator
82
- @session_cnt = 0
83
- end
84
- end
85
-
86
-
87
71
  if __FILE__ == $0
88
72
  PORT = (ARGV[0] || 2000).to_i
73
+ COUNTERS = (ARGV[1] || 20).to_i
89
74
  File.open("counter.#{ PORT }.pid", 'w+') {|f| f.puts($$.to_s) }
90
- MyApplication.new {|app|
91
- app.name = 'Counter'
92
- app.path = '/counter'
93
- app.session_class = MySession
94
- app.session_store = Wee::Utils::LRUCache.new(100) # handle up to 100 sessions
95
- }.start(:Port => PORT)
75
+ app = Wee::Utils.app_for(Main, :id_seed => 0, :page_cache_capacity => 10)
76
+ Wee::WEBrickAdaptor.register('/counter' => app).start(:Port => PORT)
96
77
  end
@@ -0,0 +1,12 @@
1
+ sum = 0.0
2
+
3
+ ARGV.each do |f|
4
+ data = File.read(f)
5
+ if data =~ /^Requests per second:\s+(\d+.\d+)/
6
+ sum += 1/$1.to_f
7
+ else
8
+ raise "no req/sec found"
9
+ end
10
+ end
11
+
12
+ puts 1/sum
@@ -88,8 +88,8 @@
88
88
  <h3 class="section-bar">Methods</h3>
89
89
 
90
90
  <div class="name-list">
91
- <a href="#M000004">restore_snapshot</a>&nbsp;&nbsp;
92
- <a href="#M000003">take_snapshot</a>&nbsp;&nbsp;
91
+ <a href="#M000006">restore_snapshot</a>&nbsp;&nbsp;
92
+ <a href="#M000005">take_snapshot</a>&nbsp;&nbsp;
93
93
  </div>
94
94
  </div>
95
95
 
@@ -111,19 +111,19 @@
111
111
  <div id="methods">
112
112
  <h3 class="section-bar">Public Instance methods</h3>
113
113
 
114
- <div id="method-M000004" class="method-detail">
115
- <a name="M000004"></a>
114
+ <div id="method-M000006" class="method-detail">
115
+ <a name="M000006"></a>
116
116
 
117
117
  <div class="method-heading">
118
- <a href="#M000004" class="method-signature">
118
+ <a href="#M000006" class="method-signature">
119
119
  <span class="method-name">restore_snapshot</span><span class="method-args">(snap)</span>
120
120
  </a>
121
121
  </div>
122
122
 
123
123
  <div class="method-description">
124
124
  <p><a class="source-toggle" href="#"
125
- onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
126
- <div class="method-source-code" id="M000004-source">
125
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
126
+ <div class="method-source-code" id="M000006-source">
127
127
  <pre>
128
128
  <span class="ruby-comment cmt"># File lib/wee/snapshot_ext.rb, line 22</span>
129
129
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">restore_snapshot</span>(<span class="ruby-identifier">snap</span>)
@@ -134,19 +134,19 @@
134
134
  </div>
135
135
  </div>
136
136
 
137
- <div id="method-M000003" class="method-detail">
138
- <a name="M000003"></a>
137
+ <div id="method-M000005" class="method-detail">
138
+ <a name="M000005"></a>
139
139
 
140
140
  <div class="method-heading">
141
- <a href="#M000003" class="method-signature">
141
+ <a href="#M000005" class="method-signature">
142
142
  <span class="method-name">take_snapshot</span><span class="method-args">()</span>
143
143
  </a>
144
144
  </div>
145
145
 
146
146
  <div class="method-description">
147
147
  <p><a class="source-toggle" href="#"
148
- onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
149
- <div class="method-source-code" id="M000003-source">
148
+ onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
149
+ <div class="method-source-code" id="M000005-source">
150
150
  <pre>
151
151
  <span class="ruby-comment cmt"># File lib/wee/snapshot_ext.rb, line 18</span>
152
152
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">take_snapshot</span>
@@ -101,13 +101,13 @@ protocol that the <em>store</em> must understand is:
101
101
  <h3 class="section-bar">Methods</h3>
102
102
 
103
103
  <div class="name-list">
104
- <a href="#M000010">[]</a>&nbsp;&nbsp;
105
- <a href="#M000011">[]=</a>&nbsp;&nbsp;
106
- <a href="#M000007">delete</a>&nbsp;&nbsp;
107
- <a href="#M000008">fetch</a>&nbsp;&nbsp;
108
- <a href="#M000006">has_key?</a>&nbsp;&nbsp;
109
- <a href="#M000005">new</a>&nbsp;&nbsp;
110
- <a href="#M000009">store</a>&nbsp;&nbsp;
104
+ <a href="#M000012">[]</a>&nbsp;&nbsp;
105
+ <a href="#M000013">[]=</a>&nbsp;&nbsp;
106
+ <a href="#M000009">delete</a>&nbsp;&nbsp;
107
+ <a href="#M000010">fetch</a>&nbsp;&nbsp;
108
+ <a href="#M000008">has_key?</a>&nbsp;&nbsp;
109
+ <a href="#M000007">new</a>&nbsp;&nbsp;
110
+ <a href="#M000011">store</a>&nbsp;&nbsp;
111
111
  </div>
112
112
  </div>
113
113
 
@@ -129,19 +129,19 @@ protocol that the <em>store</em> must understand is:
129
129
  <div id="methods">
130
130
  <h3 class="section-bar">Public Class methods</h3>
131
131
 
132
- <div id="method-M000005" class="method-detail">
133
- <a name="M000005"></a>
132
+ <div id="method-M000007" class="method-detail">
133
+ <a name="M000007"></a>
134
134
 
135
135
  <div class="method-heading">
136
- <a href="#M000005" class="method-signature">
136
+ <a href="#M000007" class="method-signature">
137
137
  <span class="method-name">new</span><span class="method-args">(strategy, store=Hash.new, store_on_update=false)</span>
138
138
  </a>
139
139
  </div>
140
140
 
141
141
  <div class="method-description">
142
142
  <p><a class="source-toggle" href="#"
143
- onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
144
- <div class="method-source-code" id="M000005-source">
143
+ onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
144
+ <div class="method-source-code" id="M000007-source">
145
145
  <pre>
146
146
  <span class="ruby-comment cmt"># File lib/cache/cache.rb, line 114</span>
147
147
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">strategy</span>, <span class="ruby-identifier">store</span>=<span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>, <span class="ruby-identifier">store_on_update</span>=<span class="ruby-keyword kw">false</span>)
@@ -156,8 +156,8 @@ protocol that the <em>store</em> must understand is:
156
156
 
157
157
  <h3 class="section-bar">Public Instance methods</h3>
158
158
 
159
- <div id="method-M000010" class="method-detail">
160
- <a name="M000010"></a>
159
+ <div id="method-M000012" class="method-detail">
160
+ <a name="M000012"></a>
161
161
 
162
162
  <div class="method-heading">
163
163
  <span class="method-name">[]</span><span class="method-args">(key, default_value=nil)</span>
@@ -165,13 +165,13 @@ protocol that the <em>store</em> must understand is:
165
165
 
166
166
  <div class="method-description">
167
167
  <p>
168
- Alias for <a href="StorageCache.html#M000008">fetch</a>
168
+ Alias for <a href="StorageCache.html#M000010">fetch</a>
169
169
  </p>
170
170
  </div>
171
171
  </div>
172
172
 
173
- <div id="method-M000011" class="method-detail">
174
- <a name="M000011"></a>
173
+ <div id="method-M000013" class="method-detail">
174
+ <a name="M000013"></a>
175
175
 
176
176
  <div class="method-heading">
177
177
  <span class="method-name">[]=</span><span class="method-args">(key, value)</span>
@@ -179,24 +179,24 @@ Alias for <a href="StorageCache.html#M000008">fetch</a>
179
179
 
180
180
  <div class="method-description">
181
181
  <p>
182
- Alias for <a href="StorageCache.html#M000009">store</a>
182
+ Alias for <a href="StorageCache.html#M000011">store</a>
183
183
  </p>
184
184
  </div>
185
185
  </div>
186
186
 
187
- <div id="method-M000007" class="method-detail">
188
- <a name="M000007"></a>
187
+ <div id="method-M000009" class="method-detail">
188
+ <a name="M000009"></a>
189
189
 
190
190
  <div class="method-heading">
191
- <a href="#M000007" class="method-signature">
191
+ <a href="#M000009" class="method-signature">
192
192
  <span class="method-name">delete</span><span class="method-args">(key)</span>
193
193
  </a>
194
194
  </div>
195
195
 
196
196
  <div class="method-description">
197
197
  <p><a class="source-toggle" href="#"
198
- onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
199
- <div class="method-source-code" id="M000007-source">
198
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
199
+ <div class="method-source-code" id="M000009-source">
200
200
  <pre>
201
201
  <span class="ruby-comment cmt"># File lib/cache/cache.rb, line 124</span>
202
202
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>)
@@ -213,19 +213,19 @@ Alias for <a href="StorageCache.html#M000009">store</a>
213
213
  </div>
214
214
  </div>
215
215
 
216
- <div id="method-M000008" class="method-detail">
217
- <a name="M000008"></a>
216
+ <div id="method-M000010" class="method-detail">
217
+ <a name="M000010"></a>
218
218
 
219
219
  <div class="method-heading">
220
- <a href="#M000008" class="method-signature">
220
+ <a href="#M000010" class="method-signature">
221
221
  <span class="method-name">fetch</span><span class="method-args">(key, default_value=nil)</span>
222
222
  </a>
223
223
  </div>
224
224
 
225
225
  <div class="method-description">
226
226
  <p><a class="source-toggle" href="#"
227
- onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
228
- <div class="method-source-code" id="M000008-source">
227
+ onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
228
+ <div class="method-source-code" id="M000010-source">
229
229
  <pre>
230
230
  <span class="ruby-comment cmt"># File lib/cache/cache.rb, line 134</span>
231
231
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">default_value</span>=<span class="ruby-keyword kw">nil</span>)
@@ -243,19 +243,19 @@ Alias for <a href="StorageCache.html#M000009">store</a>
243
243
  </div>
244
244
  </div>
245
245
 
246
- <div id="method-M000006" class="method-detail">
247
- <a name="M000006"></a>
246
+ <div id="method-M000008" class="method-detail">
247
+ <a name="M000008"></a>
248
248
 
249
249
  <div class="method-heading">
250
- <a href="#M000006" class="method-signature">
250
+ <a href="#M000008" class="method-signature">
251
251
  <span class="method-name">has_key?</span><span class="method-args">(key)</span>
252
252
  </a>
253
253
  </div>
254
254
 
255
255
  <div class="method-description">
256
256
  <p><a class="source-toggle" href="#"
257
- onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
258
- <div class="method-source-code" id="M000006-source">
257
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
258
+ <div class="method-source-code" id="M000008-source">
259
259
  <pre>
260
260
  <span class="ruby-comment cmt"># File lib/cache/cache.rb, line 120</span>
261
261
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">key</span>)
@@ -266,19 +266,19 @@ Alias for <a href="StorageCache.html#M000009">store</a>
266
266
  </div>
267
267
  </div>
268
268
 
269
- <div id="method-M000009" class="method-detail">
270
- <a name="M000009"></a>
269
+ <div id="method-M000011" class="method-detail">
270
+ <a name="M000011"></a>
271
271
 
272
272
  <div class="method-heading">
273
- <a href="#M000009" class="method-signature">
273
+ <a href="#M000011" class="method-signature">
274
274
  <span class="method-name">store</span><span class="method-args">(key, value)</span>
275
275
  </a>
276
276
  </div>
277
277
 
278
278
  <div class="method-description">
279
279
  <p><a class="source-toggle" href="#"
280
- onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
281
- <div class="method-source-code" id="M000009-source">
280
+ onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
281
+ <div class="method-source-code" id="M000011-source">
282
282
  <pre>
283
283
  <span class="ruby-comment cmt"># File lib/cache/cache.rb, line 145</span>
284
284
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">store</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)