Class: BlackBoard::Folder
- Inherits:
-
Hash
- Object
- Hash
- BlackBoard::Folder
show all
- Defined in:
- lib/blackboard.rb
Instance Method Summary
collapse
Constructor Details
#initialize(name, items, options, &block) ⇒ Folder
Returns a new instance of Folder.
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/blackboard.rb', line 47
def initialize name, items, options, &block
@name = name
@folders = []
@ttl = options[:ttl]
@store = options[:store]
raise ArgumentError, "Folder.new should not receive ttl bigger than #seconds in 30 days" if @ttl > 2592000
create_children items
instance_eval(&block) unless block.nil?
instance_eval "def method_missing folder; raise BlackBoardError, \"Folder \#{folder} not found\"; end"
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/blackboard.rb', line 62
def method_missing name, *args, &block
raise BlackBoardError, "Folder #{name} already exists" if @folders.include?(name)
instance_eval %Q{def #{name}; self[:#{name}]._update; self[:#{name}]; end}
options = args[-1].is_a?(Hash) ? args.delete_at(-1) : {}
options[:ttl] ||= @ttl
options[:store] ||= @store
self[name] = Folder.new "#{@name}.#{name}", args, options, &block
end
|
Instance Method Details
#_update ⇒ Object
75
76
77
78
79
80
|
# File 'lib/blackboard.rb', line 75
def _update
@items.keys.each do |k|
self[k] = get k
end
@folders.each {|f| ; self[f]._update }
end
|
#add(name, object) ⇒ Object
99
100
101
102
103
104
105
106
107
|
# File 'lib/blackboard.rb', line 99
def add name, object
obj_ttl = (@ttl - (Time.now - object.timestamp)).round
return unless obj_ttl > 0
return if object.timestamp < @items[name]
@items[name] = object.timestamp
obj = Data.new(name, object)
@store.store "#{@name}.#{name}", obj, :expires_in => obj_ttl
end
|
#create_children(children) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/blackboard.rb', line 82
def create_children children
@items = {}
children.each do |child|
self[child] = nil
instance_eval %Q{
def #{child}=(object)
add :#{child}, object
end
def #{child}
self[:#{child}] = get :#{child}
end
}
@items[child] = Time.at 0
end
end
|
#get(obj_name) ⇒ Object
109
110
111
112
113
114
|
# File 'lib/blackboard.rb', line 109
def get obj_name
raise BlackBoardError, "Key #{obj_name} doesn't exist in folder #{@name}." unless @items.has_key?(obj_name)
ret = @store["#{@name}.#{obj_name}"]
return if ret.nil?
ret.data
end
|