jsvd-blackboard 0.3.1 → 0.4.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.
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.4.0 / 2009-03-08
2
+
3
+ * Simpler interface for item and folder structure construction
4
+
1
5
  == 0.3.1 / 2009-03-01
2
6
 
3
7
  * Fixed moneta dependency (wycats-moneta)
data/README.rdoc CHANGED
@@ -2,12 +2,12 @@
2
2
  == BlackBoard
3
3
 
4
4
  * BlackBoard provides a folder-layer to moneta.
5
- * BlackBoard aims for quickly writing and reading of data.
5
+ * BlackBoard aims for quickly writing and reading data.
6
6
  * To be attached to EventMachine, for example.
7
7
 
8
8
  == Example
9
9
 
10
- # Objects written to the blackboard must answer to :timestamp, for they will expire.
10
+ # Objects written to the blackboard must answer to :timestamp, since they'll expire.
11
11
 
12
12
  class TestObject
13
13
  attr_reader :timestamp
@@ -17,13 +17,14 @@
17
17
  # A BlackBoard is created with a static structure of folders and items.
18
18
 
19
19
  bb = BlackBoard.new :ttl => 2 do
20
- folder :folder1, [:name1] do
21
- folder :folder1, [:name1, :name2]
22
- folder :folder2, [:name2]
23
- folder :folder3, [:name2]
24
- end
20
+ folder1 :name1 do
21
+ folder1 :name1, :name2
22
+ folder2 :name2
23
+ folder3 :name2, :ttl => 3
24
+ end
25
+ end
25
26
 
26
- # To write an item from a folder:
27
+ # To write an item to a folder:
27
28
 
28
29
  obj = TestObject.new
29
30
  bb.folder1.folder1.name1 = obj
@@ -32,24 +33,21 @@
32
33
 
33
34
  obj = bb.folder1.folder1.name1
34
35
 
35
- # To retrive all items in a folder:
36
+ # To retrieve all items in a folder:
36
37
 
37
38
  items = bb.folder1
38
39
  obj = items[:folder1][:name1]
39
40
 
40
41
  == Installation
41
42
 
42
- === Archive Installation
43
-
44
- rake install
45
-
46
43
  === Gem Installation
47
44
 
48
- gem install blackboard
45
+ gem install jsvd-blackboard -s http://gems.github.com
49
46
 
50
47
  == Features/Problems
51
48
 
52
49
  * Broken #empty?
50
+ * Unspecced Folder class since 0.4.0
53
51
 
54
52
  == Synopsis
55
53
 
data/blackboard.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = "blackboard"
3
- s.version = "0.3.1"
3
+ s.version = "0.4.0"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.has_rdoc = true
6
6
  s.summary = ""
data/lib/blackboard.rb CHANGED
@@ -14,6 +14,7 @@ class BlackBoard
14
14
  raise ArgumentError, "BlackBoard.new should not receive ttl bigger than #seconds in 30 days" if @ttl > 2592000
15
15
  @store = opts[:store] || Moneta::Memcache.new(:server => "127.0.0.1:11411")
16
16
  instance_eval(&block) unless block.nil?
17
+ instance_eval "def method_missing folder; raise BlackBoardError, \"Folder \#{folder} not found\"; end"
17
18
  end
18
19
 
19
20
  def has_folders?
@@ -24,60 +25,58 @@ class BlackBoard
24
25
  true
25
26
  end
26
27
 
27
- def folder name, keys, args = {}, &block
28
- raise BlackBoardError, "Folder #{name} already exists" if @folders.has_key?(name)
29
- ttl = args[:ttl]
30
- ttl ||= @ttl
31
- instance_eval %Q{def #{name}; @folders[:#{name}]._update; @folders[:#{name}]; end}
32
- @folders[name] = Folder.new name, keys, :cache => @store, :ttl => ttl, &block
33
- end
34
-
35
28
  def clear
36
29
  @store.clear
37
30
  end
38
31
 
39
- def method_missing folder
40
- raise BlackBoardError, "Folder #{folder} not found"
32
+ def method_missing name, *args, &block
33
+
34
+ raise BlackBoardError, "Folder #{name} already exists" if @folders.has_key?(name)
35
+ instance_eval %Q{def #{name}; @folders[:#{name}]._update; @folders[:#{name}]; end}
36
+
37
+ options = args[-1].is_a?(Hash) ? args.delete_at(-1) : {}
38
+ options[:ttl] ||= @ttl
39
+ options[:store] ||= @store
40
+
41
+ @folders[name] = Folder.new name, args, options, &block
42
+
41
43
  end
42
44
 
43
45
  class Folder < Hash
44
46
 
45
- def initialize name, children, args = {}, &block
47
+ def initialize name, items, options, &block
46
48
  @name = name
47
49
 
48
50
  @folders = []
49
- @ttl = args[:ttl]
50
- @store = args[:cache]
51
+ @ttl = options[:ttl]
52
+ @store = options[:store]
51
53
 
52
- raise ArgumentError, "Folder.new should receive name, keys, cache and ttl" if @ttl.nil? || args[:cache].nil?
53
54
  raise ArgumentError, "Folder.new should not receive ttl bigger than #seconds in 30 days" if @ttl > 2592000
54
55
 
55
- create_children children
56
+ create_children items
56
57
 
57
58
  instance_eval(&block) unless block.nil?
58
-
59
+ instance_eval "def method_missing folder; raise BlackBoardError, \"Folder \#{folder} not found\"; end"
59
60
  end
60
61
 
61
- def method_missing folder
62
- raise BlackBoardError, "Folder #{folder} not found"
62
+ def method_missing name, *args, &block
63
+
64
+ raise BlackBoardError, "Folder #{name} already exists" if @folders.include?(name)
65
+ instance_eval %Q{def #{name}; self[:#{name}]._update; self[:#{name}]; end}
66
+
67
+ options = args[-1].is_a?(Hash) ? args.delete_at(-1) : {}
68
+ options[:ttl] ||= @ttl
69
+ options[:store] ||= @store
70
+
71
+ self[name] = Folder.new "#{@name}.#{name}", args, options, &block
72
+
63
73
  end
64
74
 
65
75
  def _update
66
76
  @items.keys.each do |k|
67
77
  self[k] = get k
68
78
  end
69
- @folders.each {|f| self[f]._update }
70
- end
71
-
72
- private
73
- def folder name, keys, args = {}, &block
74
- raise BlackBoardError, "Folder #{name} already exists" if self.has_key?(name)
75
- ttl = args[:ttl]
76
- ttl ||= @ttl
77
- @folders << name
78
- self[name] = Folder.new "#{@name}.#{name}", keys, :cache => @store, :ttl => ttl, &block
79
- instance_eval %Q{def #{name}; self[:#{name}]._update ;self[:#{name}]; end}
80
-
79
+ @folders.each {|f| ; self[f]._update }
81
80
  end
82
81
 
83
82
  def create_children children
@@ -81,7 +81,7 @@ describe BlackBoard do
81
81
  before :all do
82
82
  `memcached -d -p 11411 -P /tmp/memcached-test.pid`
83
83
  @blackboard = BlackBoard.new :ttl => 2 do
84
- folder :folder1, [:name1, :name2]
84
+ folder1 :name1, :name2
85
85
  end
86
86
  end
87
87
 
@@ -104,7 +104,7 @@ describe BlackBoard do
104
104
 
105
105
  it "should have folders after adding one" do
106
106
  bb = BlackBoard.new do
107
- folder :folder1, [:name1, :name2]
107
+ folder1 :name1, :name2
108
108
  end
109
109
  bb.should have_folders
110
110
  bb.folders.keys.should include(:folder1)
@@ -129,8 +129,8 @@ describe BlackBoard do
129
129
 
130
130
  before :all do
131
131
  @blackboard = BlackBoard.new :ttl => 2 do
132
- folder :folder1, [:name1, :name2, :name3]
133
- folder :folder2, [:name4, :name5, :name6]
132
+ folder1 :name1, :name2, :name3
133
+ folder2 :name4, :name5, :name6
134
134
  end
135
135
  @blackboard.folders.keys.should include(:folder1)
136
136
  end
@@ -231,8 +231,8 @@ describe BlackBoard do
231
231
 
232
232
  lambda {
233
233
  @blackboard = BlackBoard.new :ttl => 2 do
234
- folder :folder1, [:name1, :name2, :name3] do
235
- folder :folder2, [:name4, :name5]
234
+ folder1 :name1, :name2, :name3 do
235
+ folder2 :name4, :name5
236
236
  end
237
237
  end
238
238
  }.should_not raise_error
@@ -244,8 +244,8 @@ describe BlackBoard do
244
244
  it "should be possible to write to a subfolder" do
245
245
 
246
246
  @blackboard = BlackBoard.new :ttl => 2 do
247
- folder :folder1, [:name1, :name2, :name3] do
248
- folder :folder2, [:name4, :name5]
247
+ folder1 :name1, :name2, :name3 do
248
+ folder2 :name4, :name5
249
249
  end
250
250
  end
251
251
 
@@ -267,8 +267,8 @@ describe BlackBoard do
267
267
 
268
268
  it "should allow different ttl for subfolders" do
269
269
  @blackboard = BlackBoard.new :ttl => 2 do
270
- folder :folder1, [:name1], :ttl => 1
271
- folder :folder2, [:name2], :ttl => 2
270
+ folder1 :name1, :ttl => 1
271
+ folder2 :name2, :ttl => 2
272
272
  end
273
273
  obj = TestObject.new
274
274
  obj.color = :green
@@ -286,8 +286,8 @@ describe BlackBoard do
286
286
 
287
287
  it "should allow different ttl between folder and subfolder" do
288
288
  @blackboard = BlackBoard.new :ttl => 2 do
289
- folder :folder1, [:name1], :ttl => 1 do
290
- folder :folder2, [:name2], :ttl => 2
289
+ folder1 :name1, :ttl => 1 do
290
+ folder2 :name2, :ttl => 2
291
291
  end
292
292
  end
293
293
  obj = TestObject.new
@@ -307,8 +307,8 @@ describe BlackBoard do
307
307
 
308
308
  it "should propagate tll to subfolders " do
309
309
  @blackboard = BlackBoard.new :ttl => 2 do
310
- folder :folder1, [:name1], :ttl => 1 do
311
- folder :folder2, [:name2]
310
+ folder1 :name1, :ttl => 1 do
311
+ folder2 :name2
312
312
  end
313
313
  end
314
314
  obj = TestObject.new
@@ -328,8 +328,8 @@ describe BlackBoard do
328
328
 
329
329
  it "should support writing to two elements with same name on different folders" do
330
330
  @blackboard = BlackBoard.new :ttl => 10 do
331
- folder :folder1, [:name1]
332
- folder :folder2, [:name1]
331
+ folder1 :name1
332
+ folder2 :name1
333
333
  end
334
334
  obj = TestObject.new
335
335
  obj.color = :green
@@ -344,12 +344,12 @@ describe BlackBoard do
344
344
 
345
345
  it "should not complain when creating sub sub folders" do
346
346
  lambda { @blackboard = BlackBoard.new :ttl => 10 do
347
- folder :folder1, [:name1] do
348
- folder :folder1, [:name1] do
349
- folder :folder1, [:name1] do
350
- folder :folder1, [:name1] do
351
- folder :folder1, [:name1] do
352
- folder :folder1, [:name1]
347
+ folder1 :name1 do
348
+ folder1 :name1 do
349
+ folder1 :name1 do
350
+ folder1 :name1 do
351
+ folder1 :name1 do
352
+ folder1 :name1
353
353
  end
354
354
  end
355
355
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsvd-blackboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Jo\xC3\xA3o Duarte"