class SimpleMasker
A simple implementation of a presenter / masker pattern. Acts like a SimpleDelegator implementing a decorator pattern except that it hides the object’s methods instead of delegating them by default. Useful for hiding the ugly beast behind the mask.
Usage:
require "simple-masker" class Beast def presentable puts "eyes, nose, mouth" end def ugly puts "furry face" end end class MaskedMan < SimpleMasker masks :beast reveal_method :presentable def decoration puts "sparkles" end end beast = Beast.new masked_man = MaskedMan.new( beast ) beast.respond_to? :presentable # => true beast.respond_to? :ugly # => true masked_man.respond_to? :presentable # => true masked_man.respond_to? :ugly # => false masked_man.respond_to? :decoration # => true
Public Class Methods
masks(masked_name)
click to toggle source
Names the beast behind the mask
# File lib/simple-masker.rb, line 49 def self.masks(masked_name) define_method(masked_name){ _get_masked_object } end
new(object)
click to toggle source
# File lib/simple-masker.rb, line 44 def initialize(object) _set_masked_object object end
reveal_method(*method_names)
click to toggle source
Reveals the specified method(s)
# File lib/simple-masker.rb, line 54 def self.reveal_method(*method_names) def_delegators :_get_masked_object, *method_names end
Private Instance Methods
_get_masked_object()
click to toggle source
# File lib/simple-masker.rb, line 60 def _get_masked_object @_masked_object end
_set_masked_object(masked_object)
click to toggle source
# File lib/simple-masker.rb, line 64 def _set_masked_object(masked_object) raise ArgumentError, "cannot mask self" if self.equal?(masked_object) @_masked_object = masked_object end