Top Level Namespace

Defined Under Namespace

Modules: PatternMatching Classes: Object

Instance Method Summary collapse

Instance Method Details

#behavior(name) ⇒ Object Also known as: behaviour, behaves_as

Raises:

  • (ArgumentError)


28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/behavior.rb', line 28

def behavior(name)

  name = name.to_sym
  raise ArgumentError.new("undefined behavior '#{name}'") if $__behavior_info__[name].nil?

  clazz = self.method(:behavior).receiver

  unless clazz.instance_methods(false).include?(:behaviors)
    class << clazz
      def behaviors
        @behaviors ||= []
      end
    end
  end

  clazz.behaviors << name

  class << clazz
    def new(*args, &block)
      name = self.behaviors.first
      obj = super
      unless obj.behaves_as?(name)
        raise ArgumentError.new("undefined callback functions in #{self} (behavior '#{name}')")
      else
        return obj
      end
    end
  end
end

#behavior_info(name, callbacks = {}) ⇒ Object Also known as: behaviour_info, interface



1
2
3
4
# File 'lib/behavior.rb', line 1

def behavior_info(name, callbacks = {})
  $__behavior_info__ ||= {}
  $__behavior_info__[name.to_sym] = callbacks.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
end