Sha256: bd7149e6edee946f7a77b635665078231ad57ff259740fbd4f18433d0f5575c4

Contents?: true

Size: 1.06 KB

Versions: 10

Compression:

Stored size: 1.06 KB

Contents

require 'set'

module Clevic
  # This is a quickie emitter for Swing mostly. Qt has this built in.
  module Emitter
    def self.included( base )
      base.extend( ClassMethods )
    end

    module ClassMethods
      def emitter( emitter_name )
        line, st = __LINE__, <<-EOF
          def #{emitter_name}_listeners
            @#{emitter_name}_listeners ||= Set.new
          end

          # If msg is provided, yield to stored block.
          # If block is provided, store it for later.
          def emit_#{emitter_name}( *args, &notifier_block )
            if block_given?
              #{emitter_name}_listeners << notifier_block
            else
              puts "emit_#{emitter_name} called with " + args.inspect
              #{emitter_name}_listeners.each do |notify|
                notify.call( *args )
              end
            end
          end

          def remove_#{emitter_name}( &notifier_block )
            #{emitter_name}_listeners.delete( notifier_block )
          end
        EOF
        class_eval st, __FILE__, line + 1
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
clevic-0.14.6 lib/clevic/emitter.rb
clevic-0.14.5 lib/clevic/emitter.rb
clevic-0.14.4 lib/clevic/emitter.rb
clevic-0.14.3 lib/clevic/emitter.rb
clevic-0.14.2 lib/clevic/emitter.rb
clevic-0.14.1 lib/clevic/emitter.rb
clevic-0.14.0 lib/clevic/emitter.rb
clevic-0.13.0.b12 lib/clevic/emitter.rb
clevic-0.13.0.b11 lib/clevic/emitter.rb
clevic-0.13.0.b10 lib/clevic/emitter.rb