Sha256: e1fe1b14069613719faa7445b92e96641634f746d44c42409406a08abc155edc

Contents?: true

Size: 1.86 KB

Versions: 43

Compression:

Stored size: 1.86 KB

Contents

module Rabbit
  module Element
    module Base
      module DrawHook
        @@draw_hook_names = []

        class << self
          def def_draw_hook(klass, name)
            @@draw_hook_names << name
            base_name = "#{name}_draw_proc"
            var_name = "@#{base_name}s"
            klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
              def add_#{base_name}(name=nil, &block)
                #{var_name} << [block, name]
                block
              end

              def delete_#{base_name}(name=nil, &block)
                #{var_name}.reject! do |blk,|
                  blk == block
                end
              end

              def delete_#{base_name}_by_name(name)
                #{var_name}.reject! do |_, nm|
                  name === nm
                end
              end

              def clear_#{base_name}s
                #{var_name} = []
              end

              def #{base_name}s(name)
                #{var_name}.find_all do |_, nm|
                  name === nm
                end
              end

              def #{base_name}(name)
                #{var_name}.find do |_, nm|
                  name === nm
                end
              end
EOC
          end

          def def_draw_hooks(klass, *names)
            names.each do |name|
              klass.def_draw_hook(name)
            end
          end

          private
          def append_features(klass)
            super
            methods(false).each do |name|
              klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
                def self.#{name}(*args)
                  #{self.name}.#{name}(self, *args)
                end
EOC
            end
          end
        end

        def clear_draw_procs
          @@draw_hook_names.each do |name|
            __send__("clear_#{name}_draw_procs")
          end
        end
      end
    end
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
rabbit-3.0.3 lib/rabbit/element/base/draw-hook.rb
rabbit-3.0.2 lib/rabbit/element/base/draw-hook.rb
rabbit-3.0.1 lib/rabbit/element/base/draw-hook.rb
rabbit-3.0.0 lib/rabbit/element/base/draw-hook.rb
rabbit-2.2.1 lib/rabbit/element/base/draw-hook.rb
rabbit-2.2.0 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.9 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.8 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.7 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.6 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.5 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.4 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.3 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.2 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.1 lib/rabbit/element/base/draw-hook.rb
rabbit-2.1.0 lib/rabbit/element/base/draw-hook.rb
rabbit-2.0.9 lib/rabbit/element/base/draw-hook.rb
rabbit-2.0.8 lib/rabbit/element/base/draw-hook.rb
rabbit-2.0.7 lib/rabbit/element/base/draw-hook.rb
rabbit-2.0.6 lib/rabbit/element/base/draw-hook.rb