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