Module: PlasticWrap

Defined in:
lib/plastic_wrap.rb,
lib/plastic_wrap/heavy.rb,
lib/plastic_wrap/light.rb,
lib/plastic_wrap/version.rb,
lib/plastic_wrap/cardboard_tube.rb

Defined Under Namespace

Modules: CardboardTube Classes: Heavy, Light

Constant Summary collapse

VERSION =
"0.0.2"

Class Method Summary collapse

Class Method Details

.create_wrap(superclass, base_wrap = Heavy) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/plastic_wrap.rb', line 8

def self.create_wrap(superclass, base_wrap=Heavy)
  klass = Class.new(base_wrap)
  methods = superclass.instance_methods
  methods -= base_wrap.public_instance_methods
  methods -= [:to_s,:inspect,:=~,:!~,:===]

  klass.module_eval do
    methods.each do |method|
      define_method(method, Delegator.delegating_block(method))
    end
  end

  klass.define_singleton_method :public_instance_methods do |all=true|
    super(all) - superclass.protected_instance_methods
  end

  klass.define_singleton_method :protected_instance_methods do |all=true|
    super(all) | superclass.protected_instance_methods
  end

  # UGLY but simple form really likes to know about associations
  klass.define_singleton_method :reflect_on_association do |association|
    superclass.reflect_on_association(association)
  end

  return klass
end