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.
83 84 85 |
# File 'opal/stdlib/delegate.rb', line 83 def initialize(obj) __setobj__(obj) end |
Class Method Details
.const_missing(n) ⇒ Object
:stopdoc:
68 69 70 |
# File 'opal/stdlib/delegate.rb', line 68 def self.const_missing(n) ::Object.const_get(n) end |
.delegating_block(mid) ⇒ Object
:nodoc:
360 361 362 363 364 365 |
# File 'opal/stdlib/delegate.rb', line 360 def Delegator.delegating_block(mid) # :nodoc: ->(*args, &block) do target = __getobj__ target.__send__(mid, *args, &block) end.ruby2_keywords end |
.public_api ⇒ Object
:nodoc:
257 258 259 |
# File 'opal/stdlib/delegate.rb', line 257 def self.public_api # :nodoc: @delegator_api end |
Instance Method Details
#! ⇒ Object
Delegates ! to the __getobj__
188 189 190 |
# File 'opal/stdlib/delegate.rb', line 188 def ! !__getobj__ end |
#!=(obj) ⇒ Object
Returns true if two objects are not considered of equal value.
172 173 174 175 |
# File 'opal/stdlib/delegate.rb', line 172 def !=(obj) return false if obj.equal?(self) __getobj__ != obj end |
#==(obj) ⇒ Object
Returns true if two objects are considered of equal value.
164 165 166 167 |
# File 'opal/stdlib/delegate.rb', line 164 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.
196 197 198 |
# File 'opal/stdlib/delegate.rb', line 196 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.
204 205 206 |
# File 'opal/stdlib/delegate.rb', line 204 def __setobj__(obj) __raise__ ::NotImplementedError, "need to define `__setobj__'" end |
#eql?(obj) ⇒ Boolean
Returns true if two objects are considered of equal value.
180 181 182 183 |
# File 'opal/stdlib/delegate.rb', line 180 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.
246 247 248 249 250 |
# File 'opal/stdlib/delegate.rb', line 246 def freeze __getobj__.freeze `$freeze_props(self)` `$freeze(self)` end |
#frozen? ⇒ Boolean
252 253 254 |
# File 'opal/stdlib/delegate.rb', line 252 def frozen? `(self.$$frozen || false)` end |
#marshal_dump ⇒ Object
Serialization support for the object returned by __getobj__.
211 212 213 214 215 216 217 218 |
# File 'opal/stdlib/delegate.rb', line 211 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.
223 224 225 226 227 228 229 230 231 |
# File 'opal/stdlib/delegate.rb', line 223 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.
139 140 141 |
# File 'opal/stdlib/delegate.rb', line 139 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.
155 156 157 |
# File 'opal/stdlib/delegate.rb', line 155 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.
147 148 149 |
# File 'opal/stdlib/delegate.rb', line 147 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__.
107 108 109 110 111 112 113 114 115 116 |
# File 'opal/stdlib/delegate.rb', line 107 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 |