wee 0.4.0 → 0.5.0

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 (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>)