Class: ClassRoom::Client
- Inherits:
-
BlankSlate
- Object
- BlankSlate
- ClassRoom::Client
- Defined in:
- lib/classroom.rb
Overview
Provides methods for the client side
Defined Under Namespace
Classes: ProxyObject
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(drb_url) ⇒ Client
constructor
Set up the DRbObject referring to the ClassRoom server.
-
#load_class(*classes) ⇒ Object
Load a class (or all classes, if :all is specified) from the ClassRoom server to be used locally.
-
#load_non_present_classes ⇒ Object
Load all classes on the ClassRoom server that do not already exist locally (not fully tested yet!).
-
#method_missing(method, *args) ⇒ Object
Passes through calls for non-local methods to the DRb server.
-
#remote_class(class_name) ⇒ Object
Returns a proxy object referring to the remote class required.
Constructor Details
#initialize(drb_url) ⇒ Client
Set up the DRbObject referring to the ClassRoom server
148 149 150 151 |
# File 'lib/classroom.rb', line 148 def initialize(drb_url) @drb_url = drb_url.gsub('classroom:', 'druby:') (@@drb ||= {})[@drb_url] = DRbObject.new(nil, @drb_url) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
Passes through calls for non-local methods to the DRb server
154 155 156 |
# File 'lib/classroom.rb', line 154 def method_missing(method, *args) @@drb[@drb_url].send(method, *args) end |
Class Method Details
.get_drb(drb_url) ⇒ Object
143 144 145 |
# File 'lib/classroom.rb', line 143 def self.get_drb(drb_url) @@drb[drb_url] end |
Instance Method Details
#load_class(*classes) ⇒ Object
Load a class (or all classes, if :all is specified) from the ClassRoom server to be used locally
165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/classroom.rb', line 165 def load_class(*classes) return nil unless classes classes = self.classes if classes.first == :all classes.each do |class_name| eval(%Q{ class #{class_name} < ClassRoom::Client::ProxyObject end #{class_name}.class_name = :\"#{class_name}\" #{class_name}.drb = ClassRoom::Client::get_drb('#{@drb_url}') }, TOPLEVEL_BINDING) end end |
#load_non_present_classes ⇒ Object
Load all classes on the ClassRoom server that do not already exist locally (not fully tested yet!)
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/classroom.rb', line 180 def load_non_present_classes classes = self.classes classes.each do |class_name| eval %Q{ unless defined?(#{class_name}) class #{class_name} < ClassRoom::Client::ProxyObject end end }, TOPLEVEL_BINDING eval %Q{ begin #{class_name}.drb = @drb rescue end }, TOPLEVEL_BINDING eval %Q{ begin #{class_name}.class_name = :\"#{class_name}\" rescue end }, TOPLEVEL_BINDING end end |
#remote_class(class_name) ⇒ Object
Returns a proxy object referring to the remote class required
159 160 161 |
# File 'lib/classroom.rb', line 159 def remote_class(class_name) ClassRoom::Client::ProxyObject.new(@drb, class_name) end |