jsvd-blackboard 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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"