fazibear/opal-virtual-dom

View on GitHub
opal/virtual_dom/hook.rb

Summary

Maintainability
A
0 mins
Test Coverage
module VirtualDOM
  class CommonHook
    def self.method(mthd)
      new do |node, name, previous|
        mthd.call(node, name, previous)
      end
    end

    def initialize(&block)
      @block = block
    end

    def to_n
      self
    end

    def call_block(node, name, previous)
      node = Support.wrap_node(node)
      name = Native(name)
      previous = Native(previous)
      @block.call(node, name, previous)
    end
  end

  class Hook < CommonHook
    %x{
      Opal.defn(self, 'hook', function(node, name, previous) {
        var self = this;
        #{call_block(`node`, `name`, `previous`)};
      });
      Opal.defn(self, 'unhook', function(node, name, previous) {});
    }
  end

  class UnHook < CommonHook
    %x{
      Opal.defn(self, 'unhook', function(node, name, previous) {
        var self = this;
        #{call_block(`node`, `name`, `previous`)};
      });
      Opal.defn(self, 'hook', function(node, name, previous) {});
    }
  end
end