Class: SimpleMasker

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/simple-masker.rb

Overview

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object) ⇒ SimpleMasker

Returns a new instance of SimpleMasker.



44
45
46
# File 'lib/simple-masker.rb', line 44

def initialize(object)
  _set_masked_object object
end

Class Method Details

.masks(masked_name) ⇒ Object

Names the beast behind the mask



49
50
51
# File 'lib/simple-masker.rb', line 49

def self.masks(masked_name)
  define_method(masked_name){ _get_masked_object }
end

.reveal_method(*method_names) ⇒ Object

Reveals the specified method(s)



54
55
56
# File 'lib/simple-masker.rb', line 54

def self.reveal_method(*method_names)
  def_delegators :_get_masked_object, *method_names
end