Sha256: d20db8d6c4bbade85df0a7a64996c9f2c74cffdd192e746f51abcbad9d3f2346

Contents?: true

Size: 886 Bytes

Versions: 3

Compression:

Stored size: 886 Bytes

Contents

module Artoo
  module Events
    # Subscribe to an event from a device
    def on(device, events={})
      events.each do |k, v|
        subscribe("#{safe_name}_#{device.name}_#{k}", create_proxy_method(k, v))
      end
    end

    # Create an anonymous subscription method so we can wrap the
    # subscription method fire into a valid method regardless
    # of where it is defined
    def create_proxy_method(k, v)
      proxy_method_name(k).tap do |name|
        self.class.send :define_method, name do |*args|
          case v
          when Symbol
            self.send v.to_sym, *args
          when Proc
            v.call(*args)
          end
        end
      end
    end

    # A simple loop to create a 'fake' anonymous method
    def proxy_method_name(k)
      begin
        meth = "#{k}_#{Random.rand(999)}"
      end while respond_to?(meth)
      meth
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
artoo-0.4.0 lib/artoo/events.rb
artoo-0.3.0 lib/artoo/events.rb
artoo-0.2.0 lib/artoo/events.rb