Sha256: 411897c219d1a4be086d3592ee027967fcc71a386f344f50d469a6b2b223b043

Contents?: true

Size: 1.61 KB

Versions: 27

Compression:

Stored size: 1.61 KB

Contents

module Isomorfeus
  class VivifyModule < ::Module
    # this is required for autoloading support, as the component may not be loaded and so its method is not registered.
    # must load it first, done by const_get, and next time the method will be there.
    alias _react_component_class_resolution_original_method_missing method_missing

    def method_missing(component_name, *args, &block)
      # check for ruby component and render it
      # otherwise pass on method missing
      # language=JS
      %x{
        var constant;
        var component = null;
        var modules = self.$to_s().split("::");
        var modules_length = modules.length;
        var module;
        for (var i = modules_length; i > 0; i--) {
          try {
            module = modules.slice(0, i).join('::');
            constant = self.$const_get(module).$const_get(component_name, false);
            if (typeof constant.react_component !== 'undefined') {
              component = constant.react_component;
              break;
            }
          } catch(err) { component = null; }
        }
        if (!component) {
          try {
            constant = Opal.Object.$const_get(component_name);
            if (typeof constant.react_component !== 'undefined') {
              component = constant.react_component;
            }
          } catch(err) { component = null; }
        }
        if (component) {
          return Opal.React.internal_prepare_args_and_render(component, args, block);
        } else {
          return #{_react_component_class_resolution_original_method_missing(component_name, *args, block)};
        }
      }
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
isomorfeus-react-16.13.6 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.13.5 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.13.4 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.13.3 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.13.2 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.13.1 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.13.0 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.24 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.23 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.22 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.21 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.20 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.19 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.18 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.17 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.16 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.15 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.14 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.13 lib/isomorfeus/vivify_module.rb
isomorfeus-react-16.12.12 lib/isomorfeus/vivify_module.rb