Class: Delegator
- Inherits:
- BasicObject
- Defined in:
- opal/stdlib/delegate.rb
Direct Known Subclasses
Constant Summary collapse
- VERSION =
'0.2.0'
Class Method Summary collapse
-
.const_missing(n) ⇒ Object
:stopdoc:.
-
.delegating_block(mid) ⇒ Object
:nodoc:.
-
.public_api ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#! ⇒ Object
Delegates ! to the __getobj__.
-
#!=(obj) ⇒ Object
Returns true if two objects are not considered of equal value.
-
#==(obj) ⇒ Object
Returns true if two objects are considered of equal value.
-
#__getobj__ ⇒ Object
This method must be overridden by subclasses and should return the object method calls are being delegated to.
-
#__setobj__(obj) ⇒ Object
This method must be overridden by subclasses and change the object delegate to obj.
-
#eql?(obj) ⇒ Boolean
Returns true if two objects are considered of equal value.
-
#freeze ⇒ Object
:method: freeze Freeze both the object returned by __getobj__ and self.
- #frozen? ⇒ Boolean
-
#initialize(obj) ⇒ Delegator
constructor
Pass in the obj to delegate method calls to.
-
#marshal_dump ⇒ Object
Serialization support for the object returned by __getobj__.
-
#marshal_load(data) ⇒ Object
Reinitializes delegation from a serialized object.
-
#methods(all = true) ⇒ Object
Returns the methods available to this delegate object as the union of this object's and __getobj__ methods.
-
#protected_methods(all = true) ⇒ Object
Returns the methods available to this delegate object as the union of this object's and __getobj__ protected methods.
-
#public_methods(all = true) ⇒ Object
Returns the methods available to this delegate object as the union of this object's and __getobj__ public methods.
-
#respond_to_missing?(m, include_private) ⇒ Boolean
Checks for a method provided by this the delegate object by forwarding the call through __getobj__.
Constructor Details
#initialize(obj) ⇒ Delegator
Pass in the obj to delegate method calls to. All methods supported by obj will be delegated to.
82 83 84 |
# File 'opal/stdlib/delegate.rb', line 82 def initialize(obj) __setobj__(obj) end |
Class Method Details
.const_missing(n) ⇒ Object
:stopdoc:
67 68 69 |
# File 'opal/stdlib/delegate.rb', line 67 def self.const_missing(n) ::Object.const_get(n) end |
.delegating_block(mid) ⇒ Object
:nodoc:
359 360 361 362 363 364 |
# File 'opal/stdlib/delegate.rb', line 359 def Delegator.delegating_block(mid) # :nodoc: ->(*args, &block) do target = __getobj__ target.__send__(mid, *args, &block) end.ruby2_keywords end |
.public_api ⇒ Object
:nodoc:
256 257 258 |
# File 'opal/stdlib/delegate.rb', line 256 def self.public_api # :nodoc: @delegator_api end |
Instance Method Details
#! ⇒ Object
Delegates ! to the __getobj__
187 188 189 |
# File 'opal/stdlib/delegate.rb', line 187 def ! !__getobj__ end |
#!=(obj) ⇒ Object
Returns true if two objects are not considered of equal value.
171 172 173 174 |
# File 'opal/stdlib/delegate.rb', line 171 def !=(obj) return false if obj.equal?(self) __getobj__ != obj end |
#==(obj) ⇒ Object
Returns true if two objects are considered of equal value.
163 164 165 166 |
# File 'opal/stdlib/delegate.rb', line 163 def ==(obj) return true if obj.equal?(self) __getobj__ == obj end |
#__getobj__ ⇒ Object
This method must be overridden by subclasses and should return the object method calls are being delegated to.
195 196 197 |
# File 'opal/stdlib/delegate.rb', line 195 def __getobj__ __raise__ ::NotImplementedError, "need to define `__getobj__'" end |
#__setobj__(obj) ⇒ Object
This method must be overridden by subclasses and change the object delegate to obj.
203 204 205 |
# File 'opal/stdlib/delegate.rb', line 203 def __setobj__(obj) __raise__ ::NotImplementedError, "need to define `__setobj__'" end |
#eql?(obj) ⇒ Boolean
Returns true if two objects are considered of equal value.
179 180 181 182 |
# File 'opal/stdlib/delegate.rb', line 179 def eql?(obj) return true if obj.equal?(self) obj.eql?(__getobj__) end |
#freeze ⇒ Object
:method: freeze Freeze both the object returned by __getobj__ and self.
245 246 247 248 249 |
# File 'opal/stdlib/delegate.rb', line 245 def freeze __getobj__.freeze `$freeze_props(self)` `$freeze(self)` end |
#frozen? ⇒ Boolean
251 252 253 |
# File 'opal/stdlib/delegate.rb', line 251 def frozen? `(self.$$frozen || false)` end |
#marshal_dump ⇒ Object
Serialization support for the object returned by __getobj__.
210 211 212 213 214 215 216 217 |
# File 'opal/stdlib/delegate.rb', line 210 def marshal_dump ivars = instance_variables.reject { |var| /\A@delegate_/ =~ var } [ :__v2__, ivars, ivars.map { |var| instance_variable_get(var) }, __getobj__ ] end |
#marshal_load(data) ⇒ Object
Reinitializes delegation from a serialized object.
222 223 224 225 226 227 228 229 230 |
# File 'opal/stdlib/delegate.rb', line 222 def marshal_load(data) version, vars, values, obj = data if version == :__v2__ vars.each_with_index { |var, i| instance_variable_set(var, values[i]) } __setobj__(obj) else __setobj__(data) end end |
#methods(all = true) ⇒ Object
Returns the methods available to this delegate object as the union of this object's and __getobj__ methods.
138 139 140 |
# File 'opal/stdlib/delegate.rb', line 138 def methods(all = true) __getobj__.methods(all) | super end |
#protected_methods(all = true) ⇒ Object
Returns the methods available to this delegate object as the union of this object's and __getobj__ protected methods.
154 155 156 |
# File 'opal/stdlib/delegate.rb', line 154 def protected_methods(all = true) __getobj__.protected_methods(all) | super end |
#public_methods(all = true) ⇒ Object
Returns the methods available to this delegate object as the union of this object's and __getobj__ public methods.
146 147 148 |
# File 'opal/stdlib/delegate.rb', line 146 def public_methods(all = true) __getobj__.public_methods(all) | super end |
#respond_to_missing?(m, include_private) ⇒ Boolean
Checks for a method provided by this the delegate object by forwarding the call through __getobj__.
106 107 108 109 110 111 112 113 114 115 |
# File 'opal/stdlib/delegate.rb', line 106 def respond_to_missing?(m, include_private) r = true target = __getobj__ { r = false } r &&= target_respond_to?(target, m, include_private) if r && include_private && !target_respond_to?(target, m, false) warn "delegator does not forward private method \##{m}", uplevel: 3 return false end r end |