hyper-react 1.0.0.lap27 → 1.0.0.lap28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/hyper-react.gemspec +4 -3
- data/lib/hyper-react.rb +1 -0
- data/lib/react/api.rb +10 -2
- data/lib/react/component/api.rb +4 -3
- data/lib/react/element.rb +11 -2
- data/lib/react/ext/opal-jquery/element.rb +11 -0
- data/lib/react/object.rb +0 -16
- data/lib/react/to_key.rb +26 -0
- data/lib/reactive-ruby/rails/component_mount.rb +3 -3
- data/lib/reactive-ruby/serializers.rb +11 -3
- data/lib/reactive-ruby/server_rendering/contextual_renderer.rb +5 -0
- data/lib/reactive-ruby/version.rb +1 -1
- data/spec/react/component_spec.rb +43 -2
- data/spec/react/dsl_spec.rb +2 -2
- data/spec/react/element_spec.rb +3 -3
- data/spec/react/opal_jquery_extensions_spec.rb +23 -0
- metadata +66 -37
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d9576218218234fed776182c5bd4814d2214d0bccb8102713c9dfcb5c02896f7
         | 
| 4 | 
            +
              data.tar.gz: 2459b76e64f90a64ebae1d995b823b9518eec3a3a11344f49f370506cebe9796
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: aef37ff1d4521bde8476c00f98b312c17f72db9a36694dd7a3427d17dcc8572205cd2524c53a1e312e8250c18f8341d384dab85e0bb43fff86197a0980de1a02
         | 
| 7 | 
            +
              data.tar.gz: d39a312fe4ba268ca680411ff37c6ee981501c4cccc382d432387e2fd31d486e2e2aa8e01b1743b43c7af846e5631c68c602e8364c1a58b4f13a697de947284b
         | 
    
        data/hyper-react.gemspec
    CHANGED
    
    | @@ -18,7 +18,6 @@ Gem::Specification.new do |spec| | |
| 18 18 | 
             
              # }
         | 
| 19 19 |  | 
| 20 20 | 
             
              spec.files         = `git ls-files`.split("\n").reject { |f| f.match(%r{^(gemfiles|spec)/}) }
         | 
| 21 | 
            -
              spec.executables   = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
         | 
| 22 21 | 
             
              spec.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
| 23 22 | 
             
              spec.require_paths = ['lib']
         | 
| 24 23 |  | 
| @@ -26,6 +25,8 @@ Gem::Specification.new do |spec| | |
| 26 25 | 
             
              spec.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
         | 
| 27 26 | 
             
              spec.add_dependency 'opal-activesupport', '~> 0.3.1'
         | 
| 28 27 | 
             
              spec.add_dependency 'hyperloop-config', React::VERSION
         | 
| 28 | 
            +
              spec.add_dependency 'mini_racer', '~> 0.1.15'
         | 
| 29 | 
            +
              spec.add_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
         | 
| 29 30 |  | 
| 30 31 | 
             
              spec.add_development_dependency 'chromedriver-helper'
         | 
| 31 32 | 
             
              spec.add_development_dependency 'hyper-spec', React::VERSION
         | 
| @@ -36,13 +37,13 @@ Gem::Specification.new do |spec| | |
| 36 37 | 
             
              spec.add_development_dependency 'opal-jquery'
         | 
| 37 38 | 
             
              spec.add_development_dependency 'opal-rails', '~> 0.9.4'
         | 
| 38 39 | 
             
              spec.add_development_dependency 'opal-rspec'
         | 
| 40 | 
            +
              spec.add_development_dependency 'puma'
         | 
| 41 | 
            +
              spec.add_development_dependency 'pry'
         | 
| 39 42 | 
             
              spec.add_development_dependency 'rails', '>= 4.0.0'
         | 
| 40 43 | 
             
              spec.add_development_dependency 'rails-controller-testing'
         | 
| 41 44 | 
             
              spec.add_development_dependency 'rake'
         | 
| 42 | 
            -
              spec.add_development_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
         | 
| 43 45 | 
             
              spec.add_development_dependency 'rspec-rails'
         | 
| 44 46 | 
             
              spec.add_development_dependency 'rubocop', '~> 0.51.0'
         | 
| 45 47 | 
             
              spec.add_development_dependency 'sqlite3'
         | 
| 46 | 
            -
              spec.add_development_dependency 'mini_racer', '~> 0.1.15'
         | 
| 47 48 | 
             
              spec.add_development_dependency 'timecop', '~> 0.8.1'
         | 
| 48 49 | 
             
            end
         | 
    
        data/lib/hyper-react.rb
    CHANGED
    
    | @@ -39,6 +39,7 @@ if RUBY_ENGINE == 'opal' | |
| 39 39 | 
             
              require 'react/rendering_context'
         | 
| 40 40 | 
             
              require 'react/state'
         | 
| 41 41 | 
             
              require 'react/object'
         | 
| 42 | 
            +
              require 'react/to_key'
         | 
| 42 43 | 
             
              require 'react/ext/opal-jquery/element'
         | 
| 43 44 | 
             
              require 'reactive-ruby/isomorphic_helpers'
         | 
| 44 45 | 
             
              require 'rails-helpers/top_level_rails_component'
         | 
    
        data/lib/react/api.rb
    CHANGED
    
    | @@ -56,9 +56,17 @@ module React | |
| 56 56 | 
             
                        this.__opalInstance = #{type.new(`this`)};
         | 
| 57 57 | 
             
                        this.__opalInstanceInitializedState = true;
         | 
| 58 58 | 
             
                        this.__opalInstanceSyncSetState = false;
         | 
| 59 | 
            +
                        this.__name = #{type.name};
         | 
| 59 60 | 
             
                      }
         | 
| 60 61 | 
             
                      static get displayName() {
         | 
| 61 | 
            -
                         | 
| 62 | 
            +
                        if (typeof this.__name != "undefined") {
         | 
| 63 | 
            +
                          return this.__name;
         | 
| 64 | 
            +
                        } else {
         | 
| 65 | 
            +
                          return #{type.name};
         | 
| 66 | 
            +
                        }
         | 
| 67 | 
            +
                      }
         | 
| 68 | 
            +
                      static set displayName(name) {
         | 
| 69 | 
            +
                        this.__name = name;
         | 
| 62 70 | 
             
                      }
         | 
| 63 71 | 
             
                      static get defaultProps() {
         | 
| 64 72 | 
             
                        return #{type.respond_to?(:default_props) ? type.default_props.to_n : `{}`};
         | 
| @@ -106,11 +114,11 @@ module React | |
| 106 114 | 
             
                        }
         | 
| 107 115 | 
             
                      }
         | 
| 108 116 | 
             
                      componentWillUnmount() {
         | 
| 109 | 
            -
                        this.__opalInstance.is_mounted = false;
         | 
| 110 117 | 
             
                        if (#{type.method_defined? :component_will_unmount}) {
         | 
| 111 118 | 
             
                          this.__opalInstanceSyncSetState = false;
         | 
| 112 119 | 
             
                          this.__opalInstance.$component_will_unmount();
         | 
| 113 120 | 
             
                        }
         | 
| 121 | 
            +
                        this.__opalInstance.is_mounted = false;
         | 
| 114 122 | 
             
                      }
         | 
| 115 123 | 
             
                      componentDidCatch(error, info) {
         | 
| 116 124 | 
             
                        if (#{type.method_defined? :component_did_catch}) {
         | 
    
        data/lib/react/component/api.rb
    CHANGED
    
    | @@ -11,6 +11,7 @@ module React | |
| 11 11 |  | 
| 12 12 | 
             
                  def force_update!
         | 
| 13 13 | 
             
                    `#{self}.native.forceUpdate()`
         | 
| 14 | 
            +
                    self
         | 
| 14 15 | 
             
                  end
         | 
| 15 16 |  | 
| 16 17 | 
             
                  def set_props(prop, &block)
         | 
| @@ -32,15 +33,15 @@ module React | |
| 32 33 | 
             
                  def set_or_replace_state_or_prop(state_or_prop, method, &block)
         | 
| 33 34 | 
             
                    raise "No native ReactComponent associated" unless @native
         | 
| 34 35 | 
             
                    `var state_prop_n = #{state_or_prop.shallow_to_n}`
         | 
| 35 | 
            -
                    # the state object is initalized when the ruby component is  | 
| 36 | 
            +
                    # the state object is initalized when the ruby component is instantiated
         | 
| 36 37 | 
             
                    # this is detected by self.native.__opalInstanceInitializedState
         | 
| 37 | 
            -
                    # which is set in the  | 
| 38 | 
            +
                    # which is set in the native component constructor in react/api.rb
         | 
| 38 39 | 
             
                    # the setState update callback is not called when initalizing initial state
         | 
| 39 40 | 
             
                    if block
         | 
| 40 41 | 
             
                      %x{
         | 
| 41 42 | 
             
                        if (#{@native}.__opalInstanceInitializedState === true) {
         | 
| 42 43 | 
             
                          #{@native}[method](state_prop_n, function(){
         | 
| 43 | 
            -
                             | 
| 44 | 
            +
                            block.$call();
         | 
| 44 45 | 
             
                          });
         | 
| 45 46 | 
             
                        } else {
         | 
| 46 47 | 
             
                          for (var sp in state_prop_n) {
         | 
    
        data/lib/react/element.rb
    CHANGED
    
    | @@ -130,8 +130,17 @@ module React | |
| 130 130 | 
             
                def merge_built_in_event_prop!(prop_name)
         | 
| 131 131 | 
             
                  @properties.merge!(
         | 
| 132 132 | 
             
                    prop_name => %x{
         | 
| 133 | 
            -
                      function( | 
| 134 | 
            -
                         | 
| 133 | 
            +
                      function(){
         | 
| 134 | 
            +
                        var react_event = arguments[0];
         | 
| 135 | 
            +
                        var all_args;
         | 
| 136 | 
            +
                        var other_args;
         | 
| 137 | 
            +
                        if (arguments.length > 1) {
         | 
| 138 | 
            +
                          all_args = Array.prototype.slice.call(arguments);
         | 
| 139 | 
            +
                          other_args = all_args.slice(1, arguments.length);
         | 
| 140 | 
            +
                          return #{yield(React::Event.new(`react_event`), *(`other_args`))};
         | 
| 141 | 
            +
                        } else {
         | 
| 142 | 
            +
                          return #{yield(React::Event.new(`react_event`))};
         | 
| 143 | 
            +
                        }
         | 
| 135 144 | 
             
                      }
         | 
| 136 145 | 
             
                    }
         | 
| 137 146 | 
             
                  )
         | 
| @@ -23,4 +23,15 @@ Element.instance_eval do | |
| 23 23 |  | 
| 24 24 | 
             
                React.render(React.create_element(`#{self.to_n}._reactrb_component_class`), self)
         | 
| 25 25 | 
             
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              # mount_components is useful for dynamically generated page segments for example
         | 
| 28 | 
            +
              # see react-rails documentation for more details
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              %x{
         | 
| 31 | 
            +
                $.fn.mount_components = function() {
         | 
| 32 | 
            +
                  this.each(function(e) { ReactRailsUJS.mountComponents(e[0]) })
         | 
| 33 | 
            +
                  return this;
         | 
| 34 | 
            +
                }
         | 
| 35 | 
            +
              }
         | 
| 36 | 
            +
              Element.expose :mount_components
         | 
| 26 37 | 
             
            end if Object.const_defined?('Element')
         | 
    
        data/lib/react/object.rb
    CHANGED
    
    | @@ -12,20 +12,4 @@ class Object | |
| 12 12 | 
             
                  React::Component::Tags.html_tag_class_for(const_name) || raise(e)
         | 
| 13 13 | 
             
                end
         | 
| 14 14 | 
             
              end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
              def to_key
         | 
| 17 | 
            -
                object_id
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
            end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            class Number
         | 
| 22 | 
            -
              def to_key
         | 
| 23 | 
            -
                self
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
            end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            class Boolean
         | 
| 28 | 
            -
              def to_key
         | 
| 29 | 
            -
                self
         | 
| 30 | 
            -
              end
         | 
| 31 15 | 
             
            end
         | 
    
        data/lib/react/to_key.rb
    ADDED
    
    | @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            # to_key method returns a suitable unique id that can be used as
         | 
| 2 | 
            +
            # a react `key`.  Other classes may override to_key as needed
         | 
| 3 | 
            +
            # for example hyper_mesh returns the object id of the internal
         | 
| 4 | 
            +
            # backing record.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # to_key is automatically called on objects passed as keys for
         | 
| 7 | 
            +
            # example Foo(key: my_object) results in Foo(key: my_object.to_key)
         | 
| 8 | 
            +
            class Object
         | 
| 9 | 
            +
              def to_key
         | 
| 10 | 
            +
                object_id
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # for Number to_key can just be the number itself
         | 
| 15 | 
            +
            class Number
         | 
| 16 | 
            +
              def to_key
         | 
| 17 | 
            +
                self
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            # for Boolean to_key can be true or false
         | 
| 22 | 
            +
            class Boolean
         | 
| 23 | 
            +
              def to_key
         | 
| 24 | 
            +
                self
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -12,9 +12,9 @@ module ReactiveRuby | |
| 12 12 | 
             
                      options = context_initializer_options(options, name)
         | 
| 13 13 | 
             
                    end
         | 
| 14 14 | 
             
                    props = serialized_props(props, name, controller)
         | 
| 15 | 
            -
                    super(top_level_name, props, options, &block).gsub("\n","")
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 15 | 
            +
                    result = super(top_level_name, props, options, &block).gsub("\n","")
         | 
| 16 | 
            +
                    result = result.gsub(/(<script.*<\/script>)<\/div>$/,'</div>\1').html_safe
         | 
| 17 | 
            +
                    result + footers
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 20 | 
             
                  private
         | 
| @@ -1,12 +1,20 @@ | |
| 1 | 
            -
            [ | 
| 2 | 
            -
              klass.send(:define_method, :react_serializer) do | 
| 1 | 
            +
            [FalseClass, Float, Integer, NilClass, String, Symbol, Time, TrueClass].each do |klass|
         | 
| 2 | 
            +
              klass.send(:define_method, :react_serializer) do
         | 
| 3 3 | 
             
                as_json
         | 
| 4 4 | 
             
              end
         | 
| 5 5 | 
             
            end
         | 
| 6 6 |  | 
| 7 | 
            +
            if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.4.0')
         | 
| 8 | 
            +
              [Bignum, Fixnum].each do |klass|
         | 
| 9 | 
            +
                klass.send(:define_method, :react_serializer) do
         | 
| 10 | 
            +
                  as_json
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 7 15 | 
             
            BigDecimal.send(:define_method, :react_serializer) { as_json } rescue nil
         | 
| 8 16 |  | 
| 9 | 
            -
            Array.send(:define_method, :react_serializer) do | 
| 17 | 
            +
            Array.send(:define_method, :react_serializer) do
         | 
| 10 18 | 
             
              self.collect { |e| e.react_serializer }.as_json
         | 
| 11 19 | 
             
            end
         | 
| 12 20 |  | 
| @@ -14,6 +14,11 @@ module ReactiveRuby | |
| 14 14 | 
             
                    ComponentLoader.new(v8_context).load
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 |  | 
| 17 | 
            +
                  def before_render(*args)
         | 
| 18 | 
            +
                    # the base class clears the log history... we don't want that as it is taken
         | 
| 19 | 
            +
                    # care of in IsomorphicHelpers.load_context
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 17 22 | 
             
                  def render(component_name, props, prerender_options)
         | 
| 18 23 | 
             
                    if prerender_options.is_a?(Hash)
         | 
| 19 24 | 
             
                      if !v8_runtime? && prerender_options[:context_initializer]
         | 
| @@ -116,7 +116,7 @@ describe 'React::Component', js: true do | |
| 116 116 | 
             
                      def self.get_error
         | 
| 117 117 | 
             
                        @@error
         | 
| 118 118 | 
             
                      end
         | 
| 119 | 
            -
             | 
| 119 | 
            +
             | 
| 120 120 | 
             
                      def self.get_info
         | 
| 121 121 | 
             
                        @@info
         | 
| 122 122 | 
             
                      end
         | 
| @@ -136,6 +136,48 @@ describe 'React::Component', js: true do | |
| 136 136 | 
             
                end
         | 
| 137 137 | 
             
              end
         | 
| 138 138 |  | 
| 139 | 
            +
              describe 'Misc Methods' do
         | 
| 140 | 
            +
                it 'has a force_update! method' do
         | 
| 141 | 
            +
                  mount 'Foo' do
         | 
| 142 | 
            +
                    class Foo < Hyperloop::Component
         | 
| 143 | 
            +
                      class << self
         | 
| 144 | 
            +
                        attr_accessor :render_counter
         | 
| 145 | 
            +
                        attr_accessor :instance
         | 
| 146 | 
            +
                      end
         | 
| 147 | 
            +
                      before_mount do
         | 
| 148 | 
            +
                        Foo.render_counter = 0
         | 
| 149 | 
            +
                        Foo.instance = self
         | 
| 150 | 
            +
                      end
         | 
| 151 | 
            +
                      def render
         | 
| 152 | 
            +
                        Foo.render_counter += 1
         | 
| 153 | 
            +
                        DIV { "I have been rendered #{Foo.render_counter} times" }
         | 
| 154 | 
            +
                      end
         | 
| 155 | 
            +
                    end
         | 
| 156 | 
            +
                  end
         | 
| 157 | 
            +
                  expect_evaluate_ruby do
         | 
| 158 | 
            +
                    Foo.instance.force_update!
         | 
| 159 | 
            +
                    Foo.render_counter
         | 
| 160 | 
            +
                  end.to eq(2)
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                it 'has its force_update! method return itself' do
         | 
| 164 | 
            +
                  mount 'Foo' do
         | 
| 165 | 
            +
                    class Foo < Hyperloop::Component
         | 
| 166 | 
            +
                      class << self
         | 
| 167 | 
            +
                        attr_accessor :instance
         | 
| 168 | 
            +
                      end
         | 
| 169 | 
            +
                      before_mount do
         | 
| 170 | 
            +
                        Foo.instance = self
         | 
| 171 | 
            +
                      end
         | 
| 172 | 
            +
                      def render
         | 
| 173 | 
            +
                        DIV { "I have been rendered" }
         | 
| 174 | 
            +
                      end
         | 
| 175 | 
            +
                    end
         | 
| 176 | 
            +
                  end
         | 
| 177 | 
            +
                  expect_evaluate_ruby('Foo.instance == Foo.instance.force_update!').to be_truthy
         | 
| 178 | 
            +
                end
         | 
| 179 | 
            +
              end
         | 
| 180 | 
            +
             | 
| 139 181 | 
             
              describe 'New style setter & getter' do
         | 
| 140 182 | 
             
                before(:each) do
         | 
| 141 183 | 
             
                  on_client do
         | 
| @@ -843,7 +885,6 @@ describe 'React::Component', js: true do | |
| 843 885 |  | 
| 844 886 | 
             
                it 'only overrides `p` in render context' do
         | 
| 845 887 | 
             
                  mount 'Foo' do
         | 
| 846 | 
            -
                    
         | 
| 847 888 | 
             
                    class Foo
         | 
| 848 889 | 
             
                      include React::Component
         | 
| 849 890 |  | 
    
        data/spec/react/dsl_spec.rb
    CHANGED
    
    | @@ -103,7 +103,7 @@ describe 'the React DSL', js: true do | |
| 103 103 | 
             
                    end
         | 
| 104 104 | 
             
                  end
         | 
| 105 105 | 
             
                end
         | 
| 106 | 
            -
                expect(page.body[- | 
| 106 | 
            +
                expect(page.body[-285..-233]).to match(/(<div data-reactroot=""|<div)><span>hello<(br|br\/|br \/)><\/span><\/div>/)
         | 
| 107 107 | 
             
              end
         | 
| 108 108 |  | 
| 109 109 | 
             
              it "has a .td short hand String method" do
         | 
| @@ -197,7 +197,7 @@ describe 'the React DSL', js: true do | |
| 197 197 | 
             
                    'raised for sure!'
         | 
| 198 198 | 
             
                  end
         | 
| 199 199 | 
             
                end.to eq('raised for sure!')
         | 
| 200 | 
            -
             | 
| 200 | 
            +
             | 
| 201 201 | 
             
              end
         | 
| 202 202 |  | 
| 203 203 | 
             
              it "will treat the component class name as a first class component name" do
         | 
    
        data/spec/react/element_spec.rb
    CHANGED
    
    | @@ -28,7 +28,7 @@ describe 'React::Element', js: true do | |
| 28 28 | 
             
                      end
         | 
| 29 29 | 
             
                    end
         | 
| 30 30 | 
             
                  end
         | 
| 31 | 
            -
                  expect(page.body[- | 
| 31 | 
            +
                  expect(page.body[-285..-233]).to match(/<input (type="text" value=""|value="" type="text").*\/>/)
         | 
| 32 32 | 
             
                end
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| @@ -62,7 +62,7 @@ describe 'React::Element', js: true do | |
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 64 | 
             
                it 'will subscribe to a native components event param' do
         | 
| 65 | 
            -
             | 
| 65 | 
            +
             | 
| 66 66 | 
             
                  evaluate_ruby do
         | 
| 67 67 | 
             
                    "this makes sure everything is loaded"
         | 
| 68 68 | 
             
                  end
         | 
| @@ -84,7 +84,7 @@ describe 'React::Element', js: true do | |
| 84 84 | 
             
                end
         | 
| 85 85 |  | 
| 86 86 | 
             
                it 'will subscribe to a component event param with a non-default name' do
         | 
| 87 | 
            -
             | 
| 87 | 
            +
             | 
| 88 88 | 
             
                  evaluate_ruby do
         | 
| 89 89 | 
             
                    class Foo < React::Component::Base
         | 
| 90 90 | 
             
                      param :my_event, type: Proc, default: nil, allow_nil: true
         | 
| @@ -67,5 +67,28 @@ describe 'opal-jquery extensions', js: true do | |
| 67 67 | 
             
                  expect(page.driver.browser.manage.logs.get(:browser).map { |m| m.message.gsub(/\\n/, "\n") }.to_a.join("\n"))
         | 
| 68 68 | 
             
                      .not_to match(/Exception|Error/)
         | 
| 69 69 | 
             
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                it "can dynamically mount components" do
         | 
| 72 | 
            +
                  on_client do
         | 
| 73 | 
            +
                    class DynoMount < Hyperloop::Component
         | 
| 74 | 
            +
                      render(DIV) { 'I got rendered' }
         | 
| 75 | 
            +
                    end
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                  mount 'MountPoint' do
         | 
| 78 | 
            +
                    class MountPoint < Hyperloop::Component
         | 
| 79 | 
            +
                      render(DIV) do
         | 
| 80 | 
            +
                        # simulate what react-rails render_component output
         | 
| 81 | 
            +
                        DIV(
         | 
| 82 | 
            +
                          'data-react-class' => 'React.TopLevelRailsComponent',
         | 
| 83 | 
            +
                          'data-react-props' => '{"render_params": {}, "component_name": "DynoMount", "controller": ""}'
         | 
| 84 | 
            +
                        )
         | 
| 85 | 
            +
                      end
         | 
| 86 | 
            +
                    end
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
                  evaluate_ruby do
         | 
| 89 | 
            +
                    Element['body'].mount_components
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
                  expect(page).to have_content('I got rendered')
         | 
| 92 | 
            +
                end
         | 
| 70 93 | 
             
              end
         | 
| 71 94 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hyper-react
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0.0. | 
| 4 | 
            +
              version: 1.0.0.lap28
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Chang
         | 
| @@ -11,7 +11,7 @@ authors: | |
| 11 11 | 
             
            autorequire: 
         | 
| 12 12 | 
             
            bindir: bin
         | 
| 13 13 | 
             
            cert_chain: []
         | 
| 14 | 
            -
            date: 2018- | 
| 14 | 
            +
            date: 2018-05-06 00:00:00.000000000 Z
         | 
| 15 15 | 
             
            dependencies:
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 17 17 | 
             
              name: hyper-store
         | 
| @@ -19,14 +19,14 @@ dependencies: | |
| 19 19 | 
             
                requirements:
         | 
| 20 20 | 
             
                - - '='
         | 
| 21 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version: 1.0.0. | 
| 22 | 
            +
                    version: 1.0.0.lap28
         | 
| 23 23 | 
             
              type: :runtime
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 25 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 26 | 
             
                requirements:
         | 
| 27 27 | 
             
                - - '='
         | 
| 28 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: 1.0.0. | 
| 29 | 
            +
                    version: 1.0.0.lap28
         | 
| 30 30 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 31 | 
             
              name: opal
         | 
| 32 32 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -67,14 +67,48 @@ dependencies: | |
| 67 67 | 
             
                requirements:
         | 
| 68 68 | 
             
                - - '='
         | 
| 69 69 | 
             
                  - !ruby/object:Gem::Version
         | 
| 70 | 
            -
                    version: 1.0.0. | 
| 70 | 
            +
                    version: 1.0.0.lap28
         | 
| 71 71 | 
             
              type: :runtime
         | 
| 72 72 | 
             
              prerelease: false
         | 
| 73 73 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 74 74 | 
             
                requirements:
         | 
| 75 75 | 
             
                - - '='
         | 
| 76 76 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            -
                    version: 1.0.0. | 
| 77 | 
            +
                    version: 1.0.0.lap28
         | 
| 78 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 79 | 
            +
              name: mini_racer
         | 
| 80 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            +
                requirements:
         | 
| 82 | 
            +
                - - "~>"
         | 
| 83 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 84 | 
            +
                    version: 0.1.15
         | 
| 85 | 
            +
              type: :runtime
         | 
| 86 | 
            +
              prerelease: false
         | 
| 87 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 88 | 
            +
                requirements:
         | 
| 89 | 
            +
                - - "~>"
         | 
| 90 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 91 | 
            +
                    version: 0.1.15
         | 
| 92 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 93 | 
            +
              name: react-rails
         | 
| 94 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 95 | 
            +
                requirements:
         | 
| 96 | 
            +
                - - ">="
         | 
| 97 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 98 | 
            +
                    version: 2.4.0
         | 
| 99 | 
            +
                - - "<"
         | 
| 100 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 101 | 
            +
                    version: 2.5.0
         | 
| 102 | 
            +
              type: :runtime
         | 
| 103 | 
            +
              prerelease: false
         | 
| 104 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 105 | 
            +
                requirements:
         | 
| 106 | 
            +
                - - ">="
         | 
| 107 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 108 | 
            +
                    version: 2.4.0
         | 
| 109 | 
            +
                - - "<"
         | 
| 110 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 111 | 
            +
                    version: 2.5.0
         | 
| 78 112 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 79 113 | 
             
              name: chromedriver-helper
         | 
| 80 114 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -95,14 +129,14 @@ dependencies: | |
| 95 129 | 
             
                requirements:
         | 
| 96 130 | 
             
                - - '='
         | 
| 97 131 | 
             
                  - !ruby/object:Gem::Version
         | 
| 98 | 
            -
                    version: 1.0.0. | 
| 132 | 
            +
                    version: 1.0.0.lap28
         | 
| 99 133 | 
             
              type: :development
         | 
| 100 134 | 
             
              prerelease: false
         | 
| 101 135 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 102 136 | 
             
                requirements:
         | 
| 103 137 | 
             
                - - '='
         | 
| 104 138 | 
             
                  - !ruby/object:Gem::Version
         | 
| 105 | 
            -
                    version: 1.0.0. | 
| 139 | 
            +
                    version: 1.0.0.lap28
         | 
| 106 140 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 107 141 | 
             
              name: jquery-rails
         | 
| 108 142 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -202,21 +236,21 @@ dependencies: | |
| 202 236 | 
             
                  - !ruby/object:Gem::Version
         | 
| 203 237 | 
             
                    version: '0'
         | 
| 204 238 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 205 | 
            -
              name:  | 
| 239 | 
            +
              name: puma
         | 
| 206 240 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 207 241 | 
             
                requirements:
         | 
| 208 242 | 
             
                - - ">="
         | 
| 209 243 | 
             
                  - !ruby/object:Gem::Version
         | 
| 210 | 
            -
                    version:  | 
| 244 | 
            +
                    version: '0'
         | 
| 211 245 | 
             
              type: :development
         | 
| 212 246 | 
             
              prerelease: false
         | 
| 213 247 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 214 248 | 
             
                requirements:
         | 
| 215 249 | 
             
                - - ">="
         | 
| 216 250 | 
             
                  - !ruby/object:Gem::Version
         | 
| 217 | 
            -
                    version:  | 
| 251 | 
            +
                    version: '0'
         | 
| 218 252 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 219 | 
            -
              name:  | 
| 253 | 
            +
              name: pry
         | 
| 220 254 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 221 255 | 
             
                requirements:
         | 
| 222 256 | 
             
                - - ">="
         | 
| @@ -230,7 +264,21 @@ dependencies: | |
| 230 264 | 
             
                  - !ruby/object:Gem::Version
         | 
| 231 265 | 
             
                    version: '0'
         | 
| 232 266 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 233 | 
            -
              name:  | 
| 267 | 
            +
              name: rails
         | 
| 268 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 269 | 
            +
                requirements:
         | 
| 270 | 
            +
                - - ">="
         | 
| 271 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 272 | 
            +
                    version: 4.0.0
         | 
| 273 | 
            +
              type: :development
         | 
| 274 | 
            +
              prerelease: false
         | 
| 275 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 276 | 
            +
                requirements:
         | 
| 277 | 
            +
                - - ">="
         | 
| 278 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 279 | 
            +
                    version: 4.0.0
         | 
| 280 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 281 | 
            +
              name: rails-controller-testing
         | 
| 234 282 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 235 283 | 
             
                requirements:
         | 
| 236 284 | 
             
                - - ">="
         | 
| @@ -244,25 +292,19 @@ dependencies: | |
| 244 292 | 
             
                  - !ruby/object:Gem::Version
         | 
| 245 293 | 
             
                    version: '0'
         | 
| 246 294 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 247 | 
            -
              name:  | 
| 295 | 
            +
              name: rake
         | 
| 248 296 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 249 297 | 
             
                requirements:
         | 
| 250 298 | 
             
                - - ">="
         | 
| 251 299 | 
             
                  - !ruby/object:Gem::Version
         | 
| 252 | 
            -
                    version:  | 
| 253 | 
            -
                - - "<"
         | 
| 254 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 255 | 
            -
                    version: 2.5.0
         | 
| 300 | 
            +
                    version: '0'
         | 
| 256 301 | 
             
              type: :development
         | 
| 257 302 | 
             
              prerelease: false
         | 
| 258 303 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 259 304 | 
             
                requirements:
         | 
| 260 305 | 
             
                - - ">="
         | 
| 261 306 | 
             
                  - !ruby/object:Gem::Version
         | 
| 262 | 
            -
                    version:  | 
| 263 | 
            -
                - - "<"
         | 
| 264 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 265 | 
            -
                    version: 2.5.0
         | 
| 307 | 
            +
                    version: '0'
         | 
| 266 308 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 267 309 | 
             
              name: rspec-rails
         | 
| 268 310 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -305,20 +347,6 @@ dependencies: | |
| 305 347 | 
             
                - - ">="
         | 
| 306 348 | 
             
                  - !ruby/object:Gem::Version
         | 
| 307 349 | 
             
                    version: '0'
         | 
| 308 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 309 | 
            -
              name: mini_racer
         | 
| 310 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 311 | 
            -
                requirements:
         | 
| 312 | 
            -
                - - "~>"
         | 
| 313 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 314 | 
            -
                    version: 0.1.15
         | 
| 315 | 
            -
              type: :development
         | 
| 316 | 
            -
              prerelease: false
         | 
| 317 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 318 | 
            -
                requirements:
         | 
| 319 | 
            -
                - - "~>"
         | 
| 320 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 321 | 
            -
                    version: 0.1.15
         | 
| 322 350 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 323 351 | 
             
              name: timecop
         | 
| 324 352 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -401,6 +429,7 @@ files: | |
| 401 429 | 
             
            - lib/react/test/rspec.rb
         | 
| 402 430 | 
             
            - lib/react/test/session.rb
         | 
| 403 431 | 
             
            - lib/react/test/utils.rb
         | 
| 432 | 
            +
            - lib/react/to_key.rb
         | 
| 404 433 | 
             
            - lib/react/top_level.rb
         | 
| 405 434 | 
             
            - lib/react/top_level_render.rb
         | 
| 406 435 | 
             
            - lib/react/validator.rb
         | 
| @@ -540,7 +569,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 540 569 | 
             
                  version: 1.3.1
         | 
| 541 570 | 
             
            requirements: []
         | 
| 542 571 | 
             
            rubyforge_project: 
         | 
| 543 | 
            -
            rubygems_version: 2.7. | 
| 572 | 
            +
            rubygems_version: 2.7.6
         | 
| 544 573 | 
             
            signing_key: 
         | 
| 545 574 | 
             
            specification_version: 4
         | 
| 546 575 | 
             
            summary: Opal Ruby wrapper of React.js library.
         |