From 1db8e6e2f48103d6567ce4c8176df0378bda3e25 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 29 Sep 2017 18:43:17 +0200 Subject: [PATCH 001/313] add travis badge to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 62fa1a5..6abf725 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ +[![Build Status](https://travis-ci.org/ruby-hyperloop/hyper-react.svg?branch=master)](https://travis-ci.org/ruby-hyperloop/hyper-react) [![Gem Version](https://badge.fury.io/rb/hyper-react.svg)](https://badge.fury.io/rb/hyper-react)

From 6817d206f778b5f994152b2ed7a7d940251084e8 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 29 Sep 2017 18:49:14 +0200 Subject: [PATCH 002/313] update ruby --- .travis.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9434934..ba6ff41 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: ruby rvm: - - 1.9.3 - - 2.0.0 - - 2.1 + - ruby - jruby-19mode before_script: - phantomjs --version @@ -29,7 +27,7 @@ before_install: - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then wget https://github.com/Medium/phantomjs/releases/download/v$PHANTOMJS_VERSION/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2; fi" - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi" - "phantomjs --version" - - gem install bundler -v 1.13.7 + - gem install bundler script: - bundle exec rake test_app - bundle exec rake @@ -44,19 +42,19 @@ matrix: - rvm: jruby-19mode gemfile: gemfiles/opal_0.9_react_15.gemfile include: - - rvm: 2.1 + - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_0.10_react_13.gemfile - - rvm: 2.1 + - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_0.10_react_14.gemfile - - rvm: 2.1 + - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_0.10_react_15.gemfile - - rvm: 2.1 + - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_master_react_15.gemfile allow_failures: - - rvm: 2.1 + - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_master_react_15.gemfile From cb65d64ca9157e73b53a78602c2fd29fda44020d Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 29 Sep 2017 19:02:26 +0200 Subject: [PATCH 003/313] creatiing a push, to see if travis picks up --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ba6ff41..023100d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,6 @@ before_script: env: - PHANTOMJS_VERSION=1.9.8 gemfile: - - gemfiles/opal_0.8_react_13.gemfile - gemfiles/opal_0.8_react_14.gemfile - gemfiles/opal_0.8_react_15.gemfile - gemfiles/opal_0.9_react_13.gemfile From a3f882c47e6d39ff41ee7f6e94bdd34d0a21d291 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 29 Sep 2017 19:38:22 +0200 Subject: [PATCH 004/313] creating a push, to see if travis picks up --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 023100d..e0beb75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,6 @@ before_script: env: - PHANTOMJS_VERSION=1.9.8 gemfile: - - gemfiles/opal_0.8_react_14.gemfile - gemfiles/opal_0.8_react_15.gemfile - gemfiles/opal_0.9_react_13.gemfile - gemfiles/opal_0.9_react_14.gemfile From eae2da843543c7a2a22f1b79a80b7b2160a32a7d Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:13:07 +0200 Subject: [PATCH 005/313] test_app: - update configuration for recent react-rails - provide server_rendering.js --- .../templates/assets/javascripts/server_rendering.js | 5 +++++ lib/generators/reactive_ruby/test_app/test_app_generator.rb | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 lib/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js diff --git a/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js b/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js new file mode 100644 index 0000000..6110b3c --- /dev/null +++ b/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js @@ -0,0 +1,5 @@ +//= require 'react-server' +//= require 'react_ujs' +//= require 'components' + +Opal.load('components') \ No newline at end of file diff --git a/lib/generators/reactive_ruby/test_app/test_app_generator.rb b/lib/generators/reactive_ruby/test_app/test_app_generator.rb index 41f2dd9..621b8a0 100644 --- a/lib/generators/reactive_ruby/test_app/test_app_generator.rb +++ b/lib/generators/reactive_ruby/test_app/test_app_generator.rb @@ -28,6 +28,8 @@ def configure_test_app template 'test_application.rb.erb', "#{test_app_path}/config/application.rb", force: true template 'assets/javascripts/test_application.rb', "#{test_app_path}/app/assets/javascripts/application.rb", force: true + template 'assets/javascripts/server_rendering.js', + "#{test_app_path}/app/assets/javascripts/server_rendering.rb", force: true template 'assets/javascripts/components.rb', "#{test_app_path}/app/views/components.rb", force: true template 'views/components/hello_world.rb', @@ -70,6 +72,10 @@ def configure_opal_rspec config.opal.spec_location = 'spec-opal' config.hyperloop.auto_config = false + config.react.server_renderer_options = { + files: ["server_rendering.js"] + } + config.react.server_renderer_directories = ["/app/assets/javascripts"] ] end end From 10d14a960385d239cc57e724ef0095a5ee2a698b Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:15:23 +0200 Subject: [PATCH 006/313] component_loader: - update error message react.rb -> HyperReact - rescue V8::Error in loaded? - remove support for obsolete Opal::Processor - update Opal::Sprockets call signature - def assets obsolete too, removed --- lib/reactive-ruby/component_loader.rb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/lib/reactive-ruby/component_loader.rb b/lib/reactive-ruby/component_loader.rb index 89738da..9c30d94 100644 --- a/lib/reactive-ruby/component_loader.rb +++ b/lib/reactive-ruby/component_loader.rb @@ -19,11 +19,13 @@ def load!(file = components) return true if loaded? self.load(file) ensure - raise "No react.rb components found in #{components}.rb" unless loaded? + raise "No HyperReact components found in #{components}" unless loaded? end def loaded? !!v8_context.eval('Opal.React') + rescue ::V8::Error + false end private @@ -35,16 +37,7 @@ def components end def opal(file) - if Opal::Processor.respond_to?(:load_asset_code) - Opal::Processor.load_asset_code(assets, file) - else - Opal::Sprockets.load_asset(file, assets) - end - rescue # What exception is being caught here? - end - - def assets - ::Rails.application.assets + Opal::Sprockets.load_asset(file) end end end From eedc8620add0674899e247b19a4edd7bd58df05d Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:17:20 +0200 Subject: [PATCH 007/313] component_loader_spec: - make sure to load 'components', because test_app config changed, would load 'server_rendering' otherwise --- spec/reactive-ruby/component_loader_spec.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/reactive-ruby/component_loader_spec.rb b/spec/reactive-ruby/component_loader_spec.rb index a72f1cd..30a2bfe 100644 --- a/spec/reactive-ruby/component_loader_spec.rb +++ b/spec/reactive-ruby/component_loader_spec.rb @@ -34,13 +34,13 @@ loader = described_class.new(v8_context) expect { - loader.load + loader.load('components') }.to change { !!v8_context.eval('Opal.React') }.from(false).to(true) end it 'is truthy upon successful load' do loader = described_class.new(v8_context) - expect(loader.load).to be_truthy + expect(loader.load('components')).to be_truthy end it 'fails silently returning false' do @@ -52,19 +52,19 @@ describe '#load!' do it 'is truthy upon successful load' do loader = described_class.new(v8_context) - expect(loader.load!).to be_truthy + expect(loader.load!('components')).to be_truthy end it 'raises an expection if loading fails' do loader = described_class.new(v8_context) - expect { loader.load!('foo') }.to raise_error(/No react\.rb components/) + expect { loader.load!('foo') }.to raise_error(/No HyperReact components/) end end describe '#loaded?' do it 'is truthy if components file is already loaded' do loader = described_class.new(v8_context) - loader.load + loader.load('components') expect(loader).to be_loaded end From de2b88d55af12d61db024d7430add4c93875c70d Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:22:02 +0200 Subject: [PATCH 008/313] contextual_renderer: - React::ServerRendering::SprocketsRenderer is obsolete, update to React::ServerRendering::BundleRenderer - fix PrerenderError.new -> 'const missing' to React::ServerRendering::PrerenderError.new - fix ["(V8)", "therubyrhino (Rhino)"] to ["therubyracer (V8)", "therubyrhino (Rhino)"] - fix v8_runtime? to !v8_runtime?, thats what is meant by: you must use 'therubyracer' --- .../server_rendering/contextual_renderer.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/reactive-ruby/server_rendering/contextual_renderer.rb b/lib/reactive-ruby/server_rendering/contextual_renderer.rb index b9e048d..c115e69 100644 --- a/lib/reactive-ruby/server_rendering/contextual_renderer.rb +++ b/lib/reactive-ruby/server_rendering/contextual_renderer.rb @@ -9,7 +9,7 @@ def self.context_instance_for(context) context.instance_variable_get(context_instance_name) end - class ContextualRenderer < React::ServerRendering::SprocketsRenderer + class ContextualRenderer < React::ServerRendering::BundleRenderer def initialize(options = {}) super(options) ComponentLoader.new(v8_context).load @@ -17,9 +17,10 @@ def initialize(options = {}) def render(component_name, props, prerender_options) if prerender_options.is_a?(Hash) - if v8_runtime? && prerender_options[:context_initializer] - raise PrerenderError.new(component_name, props, "you must use 'therubyracer' with the prerender[:context] option") unless v8_runtime? + if !v8_runtime? && prerender_options[:context_initializer] + raise React::ServerRendering::PrerenderError.new(component_name, props, "you must use 'therubyracer' with the prerender[:context] option") unless v8_runtime? else + puts "defining v8_context for #{ExecJS.runtime.name}" prerender_options[:context_initializer].call v8_context prerender_options = prerender_options[:static] ? :static : true end @@ -31,7 +32,7 @@ def render(component_name, props, prerender_options) private def v8_runtime? - ["(V8)", "therubyrhino (Rhino)"].include?(ExecJS.runtime.name) + ["therubyracer (V8)", "therubyrhino (Rhino)"].include?(ExecJS.runtime.name) end def v8_context From 735d4fb4afe9ede5cf799ac752306d4f6a9bd2e3 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:26:36 +0200 Subject: [PATCH 009/313] controller_helper_spec: - make sure its excluded when opal-specs are called, replace ruby? by if RUBY_ENGINE != 'opal' - remove no_prerender: true, obsolete - include 'rails-controller-testing' (needs updated gemspec) --- hyper-react.gemspec | 22 ++++++++++++---------- spec/controller_helper_spec.rb | 9 ++++++--- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index bd50967..609e482 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,31 +18,33 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'opal', '>= 0.8.0' - s.add_dependency 'opal-activesupport', '>= 0.2.0' + s.add_dependency 'opal' + s.add_dependency 'opal-activesupport' s.add_dependency 'hyper-store', '>= 0.2.1' s.add_dependency 'hyperloop-config', '>= 0.9.7' - s.add_development_dependency 'rake', '< 11.0' - s.add_development_dependency 'rspec-rails', '3.3.3' + s.add_development_dependency 'rake' + s.add_development_dependency 'rspec-rails' s.add_development_dependency 'timecop' s.add_development_dependency 'opal-rspec' s.add_development_dependency 'sinatra' s.add_development_dependency 'opal-jquery' # For Test Rails App - s.add_development_dependency 'rails', '4.2.4' - s.add_development_dependency 'mime-types', '< 3' + s.add_development_dependency 'rails' + s.add_development_dependency 'mime-types' + s.add_development_dependency 'listen' s.add_development_dependency 'opal-rails' - s.add_development_dependency 'react-rails', '<= 1.10.0' + s.add_development_dependency 'react-rails' + s.add_development_dependency 'rails-controller-testing' - s.add_development_dependency 'nokogiri', '< 1.7' + s.add_development_dependency 'nokogiri' s.add_development_dependency 'rubocop' if RUBY_PLATFORM == 'java' s.add_development_dependency 'jdbc-sqlite3' s.add_development_dependency 'activerecord-jdbcsqlite3-adapter' s.add_development_dependency 'therubyrhino' else - s.add_development_dependency 'sqlite3', '1.3.10' - s.add_development_dependency 'therubyracer', '0.12.2' + s.add_development_dependency 'sqlite3' + s.add_development_dependency 'therubyracer' end end diff --git a/spec/controller_helper_spec.rb b/spec/controller_helper_spec.rb index a889fd4..b4e96f4 100644 --- a/spec/controller_helper_spec.rb +++ b/spec/controller_helper_spec.rb @@ -1,6 +1,9 @@ require 'spec_helper' -if ruby? +if RUBY_ENGINE != 'opal' +require 'rails-controller-testing' +Rails::Controller::Testing.install + class TestController < ActionController::Base; end RSpec.describe TestController, type: :controller do @@ -21,12 +24,12 @@ def new end it 'renders with the default layout' do - get :index, no_prerender: true + get :index expect(response).to render_template(layout: :test_layout) end it "renders with a specified layout" do - get :new, no_prerender: true + get :new expect(response).to render_template(layout: :explicit_layout) end end From cfd885b186af961d0e84ce90ac2ac94c5e4bc4bd Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:28:03 +0200 Subject: [PATCH 010/313] isomorphic_helpers_spec: - use server_rendering.js for server rendering - update react.rb message to HyperReact --- spec/reactive-ruby/isomorphic_helpers_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/reactive-ruby/isomorphic_helpers_spec.rb b/spec/reactive-ruby/isomorphic_helpers_spec.rb index 6ab925f..dc549e0 100644 --- a/spec/reactive-ruby/isomorphic_helpers_spec.rb +++ b/spec/reactive-ruby/isomorphic_helpers_spec.rb @@ -79,7 +79,7 @@ def test_context(files = nil) def react_context if ::Rails.application.assets['react-server.js'] && !::Rails.application.assets['react-server.js'].to_s.start_with?("// A placeholder file") - test_context(['components', 'react-server.js']) + test_context(['server_rendering.js', 'react-server.js']) else test_context(['components', 'react.js']) end @@ -136,7 +136,7 @@ def self.valediction context.instance_variable_set(:@ctx, test_context) expect { context.send_to_opal(:foo) - }.to raise_error(/No react.rb components found/) + }.to raise_error(/No HyperReact components found/) end it 'executes method with args inside opal rubyracer context' do From f1b99021fe1e5395050a48e3f2978ffb4102c245 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:42:45 +0200 Subject: [PATCH 011/313] update travis config --- .travis.yml | 20 +------------------- gemfiles/opal_0.10_react_15.gemfile | 4 ++-- gemfiles/opal_master_react_15.gemfile | 6 +++--- 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/.travis.yml b/.travis.yml index e0beb75..5e69ec4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,11 +6,6 @@ before_script: - phantomjs --version env: - PHANTOMJS_VERSION=1.9.8 -gemfile: - - gemfiles/opal_0.8_react_15.gemfile - - gemfiles/opal_0.9_react_13.gemfile - - gemfiles/opal_0.9_react_14.gemfile - - gemfiles/opal_0.9_react_15.gemfile cache: directories: - "travis_phantomjs" @@ -34,24 +29,11 @@ script: matrix: exclude: - rvm: jruby-19mode - gemfile: gemfiles/opal_0.9_react_13.gemfile - - rvm: jruby-19mode - gemfile: gemfiles/opal_0.9_react_14.gemfile - - rvm: jruby-19mode - gemfile: gemfiles/opal_0.9_react_15.gemfile + gemfile: gemfiles/opal_0.10_react_15.gemfile include: - - rvm: ruby - env: PHANTOMJS_VERSION=2.1.1 - gemfile: gemfiles/opal_0.10_react_13.gemfile - - rvm: ruby - env: PHANTOMJS_VERSION=2.1.1 - gemfile: gemfiles/opal_0.10_react_14.gemfile - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_0.10_react_15.gemfile - - rvm: ruby - env: PHANTOMJS_VERSION=2.1.1 - gemfile: gemfiles/opal_master_react_15.gemfile allow_failures: - rvm: ruby env: PHANTOMJS_VERSION=2.1.1 diff --git a/gemfiles/opal_0.10_react_15.gemfile b/gemfiles/opal_0.10_react_15.gemfile index 5e2fff2..5cc1e32 100644 --- a/gemfiles/opal_0.10_react_15.gemfile +++ b/gemfiles/opal_0.10_react_15.gemfile @@ -2,11 +2,11 @@ source "https://rubygems.org" -ruby ">= 1.9.3" +ruby ">= 2.4.0" gem "opal", "~> 0.10.0" gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.10.0", :require => false +gem "react-rails", :require => false group :development do gem "appraisal" diff --git a/gemfiles/opal_master_react_15.gemfile b/gemfiles/opal_master_react_15.gemfile index 2ea22d4..47da58b 100644 --- a/gemfiles/opal_master_react_15.gemfile +++ b/gemfiles/opal_master_react_15.gemfile @@ -2,12 +2,12 @@ source "https://rubygems.org" -ruby ">= 2.0.0" +ruby ">= 2.4.0" gem "opal", :git => "https://github.com/opal/opal.git" gem "opal-sprockets", :git => "https://github.com/opal/opal-sprockets.git" -gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.10.0", :require => false +gem "opal-rails" +gem "react-rails":require => false group :development do gem "appraisal" From 9718600a9b204de1e72dc1f1a9ede600b0edfff9 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 18:45:57 +0200 Subject: [PATCH 012/313] phantomjs 1.9.8 failes to download --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5e69ec4..97a335e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ rvm: before_script: - phantomjs --version env: - - PHANTOMJS_VERSION=1.9.8 + - PHANTOMJS_VERSION=2.1.1 cache: directories: - "travis_phantomjs" @@ -32,9 +32,7 @@ matrix: gemfile: gemfiles/opal_0.10_react_15.gemfile include: - rvm: ruby - env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_0.10_react_15.gemfile allow_failures: - rvm: ruby - env: PHANTOMJS_VERSION=2.1.1 gemfile: gemfiles/opal_master_react_15.gemfile From 27add0d250127da0781f13174c3a1b197d1a91bb Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 21:56:38 +0200 Subject: [PATCH 013/313] build all branches --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 97a335e..827294e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,6 @@ env: cache: directories: - "travis_phantomjs" -branches: - only: - - master before_install: - "phantomjs --version" - "export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH" From ea7df77ddf43daafbe34698f4606ee71135fc00a Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 23:16:00 +0200 Subject: [PATCH 014/313] travis: - remove jruby, because no support for rails 5.1 - remove opal < 0.10 gemfiles - set react-rails >= 2.3.0 --- .travis.yml | 6 ------ gemfiles/opal_0.10_react_13.gemfile | 15 --------------- gemfiles/opal_0.10_react_14.gemfile | 15 --------------- gemfiles/opal_0.10_react_15.gemfile | 2 +- gemfiles/opal_0.8_react_13.gemfile | 15 --------------- gemfiles/opal_0.8_react_14.gemfile | 15 --------------- gemfiles/opal_0.8_react_15.gemfile | 15 --------------- gemfiles/opal_0.9_react_13.gemfile | 15 --------------- gemfiles/opal_0.9_react_14.gemfile | 15 --------------- gemfiles/opal_0.9_react_15.gemfile | 15 --------------- gemfiles/opal_master_react_15.gemfile | 2 +- hyper-react.gemspec | 2 +- 12 files changed, 3 insertions(+), 129 deletions(-) delete mode 100644 gemfiles/opal_0.10_react_13.gemfile delete mode 100644 gemfiles/opal_0.10_react_14.gemfile delete mode 100644 gemfiles/opal_0.8_react_13.gemfile delete mode 100644 gemfiles/opal_0.8_react_14.gemfile delete mode 100644 gemfiles/opal_0.8_react_15.gemfile delete mode 100644 gemfiles/opal_0.9_react_13.gemfile delete mode 100644 gemfiles/opal_0.9_react_14.gemfile delete mode 100644 gemfiles/opal_0.9_react_15.gemfile diff --git a/.travis.yml b/.travis.yml index 827294e..65e5fe7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: ruby rvm: - ruby - - jruby-19mode before_script: - phantomjs --version env: @@ -21,12 +20,7 @@ before_install: script: - bundle exec rake test_app - bundle exec rake -# These two setup seems to run indefinitely long -# further investigation required. matrix: - exclude: - - rvm: jruby-19mode - gemfile: gemfiles/opal_0.10_react_15.gemfile include: - rvm: ruby gemfile: gemfiles/opal_0.10_react_15.gemfile diff --git a/gemfiles/opal_0.10_react_13.gemfile b/gemfiles/opal_0.10_react_13.gemfile deleted file mode 100644 index 7a8c894..0000000 --- a/gemfiles/opal_0.10_react_13.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.10.0" -gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.3.3", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.10_react_14.gemfile b/gemfiles/opal_0.10_react_14.gemfile deleted file mode 100644 index 275bf73..0000000 --- a/gemfiles/opal_0.10_react_14.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.10.0" -gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.6.2", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.10_react_15.gemfile b/gemfiles/opal_0.10_react_15.gemfile index 5cc1e32..c93aa8b 100644 --- a/gemfiles/opal_0.10_react_15.gemfile +++ b/gemfiles/opal_0.10_react_15.gemfile @@ -6,7 +6,7 @@ ruby ">= 2.4.0" gem "opal", "~> 0.10.0" gem "opal-rails", "~> 0.9.0" -gem "react-rails", :require => false +gem "react-rails", ">= 2.3.0", :require => false group :development do gem "appraisal" diff --git a/gemfiles/opal_0.8_react_13.gemfile b/gemfiles/opal_0.8_react_13.gemfile deleted file mode 100644 index a36890c..0000000 --- a/gemfiles/opal_0.8_react_13.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.8.0" -gem "opal-rails", "~> 0.8.1" -gem "react-rails", "~> 1.3.3", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.8_react_14.gemfile b/gemfiles/opal_0.8_react_14.gemfile deleted file mode 100644 index 5529f7d..0000000 --- a/gemfiles/opal_0.8_react_14.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.8.0" -gem "opal-rails", "~> 0.8.1" -gem "react-rails", "~> 1.6.2", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.8_react_15.gemfile b/gemfiles/opal_0.8_react_15.gemfile deleted file mode 100644 index ded477a..0000000 --- a/gemfiles/opal_0.8_react_15.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.8.0" -gem "opal-rails", "~> 0.8.1" -gem "react-rails", "~> 1.10.0", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.9_react_13.gemfile b/gemfiles/opal_0.9_react_13.gemfile deleted file mode 100644 index ea11d6b..0000000 --- a/gemfiles/opal_0.9_react_13.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.9.0" -gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.3.3", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.9_react_14.gemfile b/gemfiles/opal_0.9_react_14.gemfile deleted file mode 100644 index 61df4bc..0000000 --- a/gemfiles/opal_0.9_react_14.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.9.0" -gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.6.2", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_0.9_react_15.gemfile b/gemfiles/opal_0.9_react_15.gemfile deleted file mode 100644 index 602cb8e..0000000 --- a/gemfiles/opal_0.9_react_15.gemfile +++ /dev/null @@ -1,15 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -ruby ">= 1.9.3" - -gem "opal", "~> 0.9.0" -gem "opal-rails", "~> 0.9.0" -gem "react-rails", "~> 1.10.0", :require => false - -group :development do - gem "appraisal" -end - -gemspec :path => "../" diff --git a/gemfiles/opal_master_react_15.gemfile b/gemfiles/opal_master_react_15.gemfile index 47da58b..0a79e5a 100644 --- a/gemfiles/opal_master_react_15.gemfile +++ b/gemfiles/opal_master_react_15.gemfile @@ -7,7 +7,7 @@ ruby ">= 2.4.0" gem "opal", :git => "https://github.com/opal/opal.git" gem "opal-sprockets", :git => "https://github.com/opal/opal-sprockets.git" gem "opal-rails" -gem "react-rails":require => false +gem "react-rails", ">= 2.3.0", :require => false group :development do gem "appraisal" diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 609e482..752d1f1 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -34,7 +34,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'mime-types' s.add_development_dependency 'listen' s.add_development_dependency 'opal-rails' - s.add_development_dependency 'react-rails' + s.add_development_dependency 'react-rails', '>= 2.3.0' s.add_development_dependency 'rails-controller-testing' s.add_development_dependency 'nokogiri' From 1890d1f3550501a20c49f8368dbb83da23115218 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 23:31:06 +0200 Subject: [PATCH 015/313] small fix --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 65e5fe7..158a4be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,8 +22,8 @@ script: - bundle exec rake matrix: include: - - rvm: ruby - gemfile: gemfiles/opal_0.10_react_15.gemfile + - rvm: ruby + gemfile: gemfiles/opal_0.10_react_15.gemfile allow_failures: - - rvm: ruby - gemfile: gemfiles/opal_master_react_15.gemfile + - rvm: ruby + gemfile: gemfiles/opal_master_react_15.gemfile From 0bc74172dfea45140aa264c90fff83cff9d2834b Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 30 Sep 2017 23:43:08 +0200 Subject: [PATCH 016/313] update build matrix --- .travis.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 158a4be..7627b0c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: ruby rvm: - ruby -before_script: - - phantomjs --version env: - PHANTOMJS_VERSION=2.1.1 cache: @@ -17,13 +15,14 @@ before_install: - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi" - "phantomjs --version" - gem install bundler +before_script: + - phantomjs --version script: - bundle exec rake test_app - bundle exec rake +gemfile: + - gemfiles/opal_0.10_react_15.gemfile + - gemfiles/opal_master_react_15.gemfile matrix: - include: - - rvm: ruby - gemfile: gemfiles/opal_0.10_react_15.gemfile allow_failures: - - rvm: ruby - gemfile: gemfiles/opal_master_react_15.gemfile + - gemfile: gemfiles/opal_master_react_15.gemfile From e6e4439dcea06c261543de9f6a6aef8cb267238a Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 2 Oct 2017 22:31:13 +0200 Subject: [PATCH 017/313] update travis test matrix, test against opal master and react-rails master --- .travis.yml | 11 +++++++---- ...le => opal_master_react-rails_release.gemfile} | 3 +-- gemfiles/opal_release_react-rails_master.gemfile | 15 +++++++++++++++ ...e => opal_release_react-rails_release.gemfile} | 4 ++-- 4 files changed, 25 insertions(+), 8 deletions(-) rename gemfiles/{opal_master_react_15.gemfile => opal_master_react-rails_release.gemfile} (73%) create mode 100644 gemfiles/opal_release_react-rails_master.gemfile rename gemfiles/{opal_0.10_react_15.gemfile => opal_release_react-rails_release.gemfile} (79%) diff --git a/.travis.yml b/.travis.yml index 7627b0c..dfc5306 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,10 +19,13 @@ before_script: - phantomjs --version script: - bundle exec rake test_app - - bundle exec rake + - bundle exec rake test gemfile: - - gemfiles/opal_0.10_react_15.gemfile - - gemfiles/opal_master_react_15.gemfile + - gemfiles/opal_release_react-rails_release.gemfile + - gemfiles/opal_master_react-rails_release.gemfile + - gemfiles/opal_release_react-rails_master.gemfile matrix: allow_failures: - - gemfile: gemfiles/opal_master_react_15.gemfile + - gemfile: gemfiles/opal_master_react-rails_release.gemfile + - gemfile: gemfiles/opal_release_react-rails_master.gemfile + diff --git a/gemfiles/opal_master_react_15.gemfile b/gemfiles/opal_master_react-rails_release.gemfile similarity index 73% rename from gemfiles/opal_master_react_15.gemfile rename to gemfiles/opal_master_react-rails_release.gemfile index 0a79e5a..339e6f6 100644 --- a/gemfiles/opal_master_react_15.gemfile +++ b/gemfiles/opal_master_react-rails_release.gemfile @@ -5,8 +5,7 @@ source "https://rubygems.org" ruby ">= 2.4.0" gem "opal", :git => "https://github.com/opal/opal.git" -gem "opal-sprockets", :git => "https://github.com/opal/opal-sprockets.git" -gem "opal-rails" +gem "opal-rails", ">= 0.9.3" gem "react-rails", ">= 2.3.0", :require => false group :development do diff --git a/gemfiles/opal_release_react-rails_master.gemfile b/gemfiles/opal_release_react-rails_master.gemfile new file mode 100644 index 0000000..0d7f5d6 --- /dev/null +++ b/gemfiles/opal_release_react-rails_master.gemfile @@ -0,0 +1,15 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +ruby ">= 2.4.0" + +gem "opal", "~> 0.10.5" +gem "opal-rails", "~> 0.9.3" +gem "react-rails", https://github.com/reactjs/react-rails.git + +group :development do + gem "appraisal" +end + +gemspec :path => "../" diff --git a/gemfiles/opal_0.10_react_15.gemfile b/gemfiles/opal_release_react-rails_release.gemfile similarity index 79% rename from gemfiles/opal_0.10_react_15.gemfile rename to gemfiles/opal_release_react-rails_release.gemfile index c93aa8b..f258b86 100644 --- a/gemfiles/opal_0.10_react_15.gemfile +++ b/gemfiles/opal_release_react-rails_release.gemfile @@ -4,8 +4,8 @@ source "https://rubygems.org" ruby ">= 2.4.0" -gem "opal", "~> 0.10.0" -gem "opal-rails", "~> 0.9.0" +gem "opal", ">= 0.10.5" +gem "opal-rails", ">= 0.9.3" gem "react-rails", ">= 2.3.0", :require => false group :development do From 2d1f27708cd4781b4a5916a55b9ef76339111143 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 2 Oct 2017 22:39:48 +0200 Subject: [PATCH 018/313] oops, add :git => --- gemfiles/opal_release_react-rails_master.gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/opal_release_react-rails_master.gemfile b/gemfiles/opal_release_react-rails_master.gemfile index 0d7f5d6..db38990 100644 --- a/gemfiles/opal_release_react-rails_master.gemfile +++ b/gemfiles/opal_release_react-rails_master.gemfile @@ -6,7 +6,7 @@ ruby ">= 2.4.0" gem "opal", "~> 0.10.5" gem "opal-rails", "~> 0.9.3" -gem "react-rails", https://github.com/reactjs/react-rails.git +gem "react-rails", :git => https://github.com/reactjs/react-rails.git group :development do gem "appraisal" From 21b55e54648a45b44d53e33bb307be617a5cd522 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 2 Oct 2017 22:47:12 +0200 Subject: [PATCH 019/313] oops, add "" --- gemfiles/opal_release_react-rails_master.gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/opal_release_react-rails_master.gemfile b/gemfiles/opal_release_react-rails_master.gemfile index db38990..3e46328 100644 --- a/gemfiles/opal_release_react-rails_master.gemfile +++ b/gemfiles/opal_release_react-rails_master.gemfile @@ -6,7 +6,7 @@ ruby ">= 2.4.0" gem "opal", "~> 0.10.5" gem "opal-rails", "~> 0.9.3" -gem "react-rails", :git => https://github.com/reactjs/react-rails.git +gem "react-rails", :git => "https://github.com/reactjs/react-rails.git" group :development do gem "appraisal" From dce87c683bd6286147873d852a3ba6c97bf6ce40 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 3 Oct 2017 03:00:29 +0200 Subject: [PATCH 020/313] update ruby in Gemfile --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ec6fa61..5bebf75 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ source 'https://rubygems.org' gemspec -ruby ">= 1.9.3" +ruby ">= 2.4.0" group :development do gem "appraisal" From 54f0e5c8f154e463b53595d3025a2b157651f72a Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 3 Oct 2017 08:05:54 +0200 Subject: [PATCH 021/313] use correct file name --- lib/generators/reactive_ruby/test_app/test_app_generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generators/reactive_ruby/test_app/test_app_generator.rb b/lib/generators/reactive_ruby/test_app/test_app_generator.rb index 621b8a0..a7c04aa 100644 --- a/lib/generators/reactive_ruby/test_app/test_app_generator.rb +++ b/lib/generators/reactive_ruby/test_app/test_app_generator.rb @@ -29,7 +29,7 @@ def configure_test_app template 'assets/javascripts/test_application.rb', "#{test_app_path}/app/assets/javascripts/application.rb", force: true template 'assets/javascripts/server_rendering.js', - "#{test_app_path}/app/assets/javascripts/server_rendering.rb", force: true + "#{test_app_path}/app/assets/javascripts/server_rendering.js", force: true template 'assets/javascripts/components.rb', "#{test_app_path}/app/views/components.rb", force: true template 'views/components/hello_world.rb', From f948dc6a10c45682bf8ccd0cdf5dadcb41982429 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Wed, 4 Oct 2017 05:05:48 +0200 Subject: [PATCH 022/313] remove debugging puts --- lib/reactive-ruby/server_rendering/contextual_renderer.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/reactive-ruby/server_rendering/contextual_renderer.rb b/lib/reactive-ruby/server_rendering/contextual_renderer.rb index c115e69..f0d3edd 100644 --- a/lib/reactive-ruby/server_rendering/contextual_renderer.rb +++ b/lib/reactive-ruby/server_rendering/contextual_renderer.rb @@ -20,7 +20,6 @@ def render(component_name, props, prerender_options) if !v8_runtime? && prerender_options[:context_initializer] raise React::ServerRendering::PrerenderError.new(component_name, props, "you must use 'therubyracer' with the prerender[:context] option") unless v8_runtime? else - puts "defining v8_context for #{ExecJS.runtime.name}" prerender_options[:context_initializer].call v8_context prerender_options = prerender_options[:static] ? :static : true end From f0332bea5b02ba208c345097721e95bf0910981b Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 6 Oct 2017 07:38:26 +0200 Subject: [PATCH 023/313] sync hyper gems version to 0.15 --- lib/reactive-ruby/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index ac3c82a..2f222c9 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = "0.12.8" + VERSION = '0.15.0' end From 13bb9c3e9bb6389ae9aed277a078ed17d86af8b1 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 6 Oct 2017 07:38:47 +0200 Subject: [PATCH 024/313] cleanup dependencies --- hyper-react.gemspec | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 752d1f1..4c53e67 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -12,39 +12,28 @@ Gem::Specification.new do |s| s.homepage = 'http://ruby-hyperloop.io/gems/reactrb/' s.summary = 'Opal Ruby wrapper of React.js library.' s.license = 'MIT' - s.description = "Write React UI components in pure Ruby." + s.description = 'Write React UI components in pure Ruby.' s.files = `git ls-files`.split("\n") s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) } s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] + s.add_dependency 'hyper-store', '= 0.15.0' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' - s.add_dependency 'hyper-store', '>= 0.2.1' - s.add_dependency 'hyperloop-config', '>= 0.9.7' - s.add_development_dependency 'rake' - s.add_development_dependency 'rspec-rails' - s.add_development_dependency 'timecop' - s.add_development_dependency 'opal-rspec' - s.add_development_dependency 'sinatra' - s.add_development_dependency 'opal-jquery' - # For Test Rails App - s.add_development_dependency 'rails' - s.add_development_dependency 'mime-types' s.add_development_dependency 'listen' - s.add_development_dependency 'opal-rails' - s.add_development_dependency 'react-rails', '>= 2.3.0' - s.add_development_dependency 'rails-controller-testing' - + s.add_development_dependency 'mime-types' s.add_development_dependency 'nokogiri' + s.add_development_dependency 'opal-rails', '>= 0.9.3' + s.add_development_dependency 'opal-rspec' + s.add_development_dependency 'rails', '>= 5.1.4' + s.add_development_dependency 'rails-controller-testing' + s.add_development_dependency 'rake' + s.add_development_dependency 'react-rails', '~> 2.3.0' + s.add_development_dependency 'rspec-rails' s.add_development_dependency 'rubocop' - if RUBY_PLATFORM == 'java' - s.add_development_dependency 'jdbc-sqlite3' - s.add_development_dependency 'activerecord-jdbcsqlite3-adapter' - s.add_development_dependency 'therubyrhino' - else - s.add_development_dependency 'sqlite3' - s.add_development_dependency 'therubyracer' - end + s.add_development_dependency 'sqlite3' + s.add_development_dependency 'therubyracer', '>= 0.12.3' + s.add_development_dependency 'timecop', '~> 0.8.1' end From a91c753a65f21087d7329faa2850ef0881fc3e85 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 6 Oct 2017 07:39:30 +0200 Subject: [PATCH 025/313] provide dev gem server setting --- Gemfile | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 5bebf75..8ec5884 100644 --- a/Gemfile +++ b/Gemfile @@ -1,8 +1,3 @@ source 'https://rubygems.org' +source ENV['HYPER_DEV_GEM_SOURCE'] if ENV['HYPER_DEV_GEM_SOURCE'] gemspec - -ruby ">= 2.4.0" - -group :development do - gem "appraisal" -end From cae881f54e90d92223b59c9ea344668da355f44c Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 6 Oct 2017 07:44:36 +0200 Subject: [PATCH 026/313] fix dependency version --- hyper-react.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 4c53e67..3be8681 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '= 0.15.0' + s.add_dependency 'hyper-store', '0.15.0' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' From 05ee0002ac2460a34a61dbf688fc404b121c9e54 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 6 Oct 2017 07:57:18 +0200 Subject: [PATCH 027/313] ignore .idea files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f51d0b1..fcfc0a9 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ Gemfile.lock /gemfiles/*.lock /tmp + +# ignore IDE files +.idea From 307cf1d6dd823085525fb46c49ec728d6bac60ca Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sat, 7 Oct 2017 14:30:22 +0200 Subject: [PATCH 028/313] use correct file name --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index fcfc0a9..3a5adbb 100644 --- a/.gitignore +++ b/.gitignore @@ -35,5 +35,8 @@ Gemfile.lock /gemfiles/*.lock /tmp +# ignore gem +*.gem + # ignore IDE files .idea From 40939d8a516bd4d02456cbcf1f43827416d1d77b Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 04:38:29 +0200 Subject: [PATCH 029/313] react source browser should be client only --- lib/hyper-react.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/hyper-react.rb b/lib/hyper-react.rb index 8dcb4ac..e12011d 100644 --- a/lib/hyper-react.rb +++ b/lib/hyper-react.rb @@ -1,6 +1,6 @@ require 'hyperloop-config' Hyperloop.import 'hyper-store' -Hyperloop.import 'react/react-source-browser' +Hyperloop.import 'react/react-source-browser', client_only: true Hyperloop.import 'react/react-source-server', server_only: true Hyperloop.import 'opal-jquery', client_only: true Hyperloop.import 'browser/delay', client_only: true From a04ccf4cf9006e71a53ef22bb275c342c2b3ad2c Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 08:27:04 +0200 Subject: [PATCH 030/313] style --- lib/react/react-source-server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/react/react-source-server.rb b/lib/react/react-source-server.rb index 4980be8..9a214e3 100644 --- a/lib/react/react-source-server.rb +++ b/lib/react/react-source-server.rb @@ -1,3 +1,3 @@ if RUBY_ENGINE == 'opal' - require "react-server.js" + require 'react-server.js' end From bf281de72897066d78a97e71d2a297e8d9ef9d57 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 08:27:33 +0200 Subject: [PATCH 031/313] need react_ujs on server too --- lib/hyper-react.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/hyper-react.rb b/lib/hyper-react.rb index e12011d..7d93a19 100644 --- a/lib/hyper-react.rb +++ b/lib/hyper-react.rb @@ -4,11 +4,10 @@ Hyperloop.import 'react/react-source-server', server_only: true Hyperloop.import 'opal-jquery', client_only: true Hyperloop.import 'browser/delay', client_only: true -Hyperloop.import 'react_ujs', client_only: true Hyperloop.import 'hyper-react' +Hyperloop.import 'react_ujs' if RUBY_ENGINE == 'opal' - module Hyperloop class Component end @@ -41,7 +40,7 @@ class Component require 'react/rendering_context' require 'react/state' require 'react/object' - require "react/ext/opal-jquery/element" + require 'react/ext/opal-jquery/element' require 'reactive-ruby/isomorphic_helpers' require 'rails-helpers/top_level_rails_component' require 'reactive-ruby/version' @@ -53,7 +52,6 @@ def self.inherited(child) end end React::Component.deprecation_warning( - 'components.rb', "Requiring 'hyper-react' is deprecated. Use gem 'hyper-component', and require 'hyper-component' instead." ) unless defined? Hyperloop::Component::VERSION else @@ -73,5 +71,5 @@ def self.inherited(child) require 'reactive-ruby/serializers' Opal.append_path File.expand_path('../', __FILE__).untaint - require "react/react-source" + require 'react/react-source' end From 5e87abadbc0e05711665547e12c173b8828faab4 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 08:48:08 +0200 Subject: [PATCH 032/313] accidental wrong fix corrected --- lib/hyper-react.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/hyper-react.rb b/lib/hyper-react.rb index 7d93a19..a39649a 100644 --- a/lib/hyper-react.rb +++ b/lib/hyper-react.rb @@ -52,6 +52,7 @@ def self.inherited(child) end end React::Component.deprecation_warning( + 'component.rb', "Requiring 'hyper-react' is deprecated. Use gem 'hyper-component', and require 'hyper-component' instead." ) unless defined? Hyperloop::Component::VERSION else From 1a2ac075cd8a82ea54c182f4c8dfcc09f4215aef Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 10:53:19 +0200 Subject: [PATCH 033/313] update gems and deps --- hyper-react.gemspec | 4 ++-- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 3be8681..2164820 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -7,7 +7,7 @@ Gem::Specification.new do |s| s.name = 'hyper-react' s.version = React::VERSION - s.authors = ['David Chang', 'Adam Jahn', 'Mitch VanDuyn'] + s.authors = ['David Chang', 'Adam Jahn', 'Mitch VanDuyn', 'janbiedermann'] s.email = 'reactrb@catprint.com' s.homepage = 'http://ruby-hyperloop.io/gems/reactrb/' s.summary = 'Opal Ruby wrapper of React.js library.' @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.0' + s.add_dependency 'hyper-store', '0.15.1' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index 2f222c9..6dd9627 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.0' + VERSION = '0.15.1' end From b480e1325b7923f761f692d2dec2c33a156ce897 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 13:05:14 +0200 Subject: [PATCH 034/313] new set --- hyper-react.gemspec | 2 +- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 2164820..a68c711 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.1' + s.add_dependency 'hyper-store', '0.15.2' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index 6dd9627..cc19eb2 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.1' + VERSION = '0.15.2' end From c1cb0831a71717489ef28f2bfad67577a744c4c4 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 8 Oct 2017 14:28:47 +0200 Subject: [PATCH 035/313] new set --- hyper-react.gemspec | 2 +- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index a68c711..636815d 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.2' + s.add_dependency 'hyper-store', '0.15.3' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index cc19eb2..d5b989a 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.2' + VERSION = '0.15.3' end From 20a9cacea7f6c19ce4ca4f3773af57c6842b9e5e Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 24 Oct 2017 19:02:25 +0200 Subject: [PATCH 036/313] fix callbacks const missing --- lib/react/component.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/react/component.rb b/lib/react/component.rb index 1435ddc..3496145 100644 --- a/lib/react/component.rb +++ b/lib/react/component.rb @@ -16,7 +16,7 @@ module Mixin def self.included(base) base.include(Store::Mixin) base.include(React::Component::API) - base.include(React::Component::Callbacks) + base.include(React::Callbacks) base.include(React::Component::Tags) base.include(React::Component::DslInstanceMethods) base.include(React::Component::ShouldComponentUpdate) From 8561c44a6474cb5c8f06b649c99276f8605c9d83 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 24 Oct 2017 19:02:36 +0200 Subject: [PATCH 037/313] new set --- lib/reactive-ruby/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index d5b989a..fac5179 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.3' + VERSION = '0.15.0-autobahn-a2' end From f71a2afd60ee2e6a8c118e64eedcbf6703a5ceb5 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 31 Oct 2017 15:56:41 +0100 Subject: [PATCH 038/313] lock react-rails to 2.3 --- hyper-react.gemspec | 4 ++-- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 636815d..dae090e 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.3' + s.add_dependency 'hyper-store', '0.15.0-autobahn-a5' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' @@ -30,7 +30,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'rails', '>= 5.1.4' s.add_development_dependency 'rails-controller-testing' s.add_development_dependency 'rake' - s.add_development_dependency 'react-rails', '~> 2.3.0' + s.add_development_dependency 'react-rails', '~> 2.3.1' s.add_development_dependency 'rspec-rails' s.add_development_dependency 'rubocop' s.add_development_dependency 'sqlite3' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index fac5179..ab083d8 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.0-autobahn-a2' + VERSION = '0.15.0-autobahn-a5' end From 5ad0b991646b410ea12712d8bec29fdf6eddfa81 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 31 Oct 2017 18:39:37 +0100 Subject: [PATCH 039/313] A6 --- hyper-react.gemspec | 2 +- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index dae090e..c1ab944 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.0-autobahn-a5' + s.add_dependency 'hyper-store', '0.15.0-autobahn-a6' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index ab083d8..1ebef0c 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.0-autobahn-a5' + VERSION = '0.15.0-autobahn-a6' end From fdedab0d721718fc246084208d027bd6e735d9f3 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 5 Nov 2017 15:14:09 +0100 Subject: [PATCH 040/313] A8 --- hyper-react.gemspec | 2 +- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index c1ab944..a7cc47e 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.0-autobahn-a6' + s.add_dependency 'hyper-store', '0.15.0-autobahn-a8' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index 1ebef0c..123d2c8 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.0-autobahn-a6' + VERSION = '0.15.0-autobahn-a8' end From 6b893b7aac51e640349b3b134d1830b445113098 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 5 Nov 2017 22:00:26 +0100 Subject: [PATCH 041/313] introduce mini_racer --- hyper-react.gemspec | 2 +- lib/reactive-ruby/component_loader.rb | 4 ++-- lib/reactive-ruby/isomorphic_helpers.rb | 10 +++++++--- .../server_rendering/contextual_renderer.rb | 7 +++---- spec/reactive-ruby/component_loader_spec.rb | 2 +- spec/reactive-ruby/isomorphic_helpers_spec.rb | 7 +------ 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index a7cc47e..de1e9d7 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -34,6 +34,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'rspec-rails' s.add_development_dependency 'rubocop' s.add_development_dependency 'sqlite3' - s.add_development_dependency 'therubyracer', '>= 0.12.3' + s.add_development_dependency 'mini_racer', '~> 0.1.14' s.add_development_dependency 'timecop', '~> 0.8.1' end diff --git a/lib/reactive-ruby/component_loader.rb b/lib/reactive-ruby/component_loader.rb index 9c30d94..f28bac5 100644 --- a/lib/reactive-ruby/component_loader.rb +++ b/lib/reactive-ruby/component_loader.rb @@ -23,8 +23,8 @@ def load!(file = components) end def loaded? - !!v8_context.eval('Opal.React') - rescue ::V8::Error + !!v8_context.eval('Opal.React !== undefined') + rescue ::ExecJS::Error false end diff --git a/lib/reactive-ruby/isomorphic_helpers.rb b/lib/reactive-ruby/isomorphic_helpers.rb index 40b7cfb..cb31472 100644 --- a/lib/reactive-ruby/isomorphic_helpers.rb +++ b/lib/reactive-ruby/isomorphic_helpers.rb @@ -95,6 +95,11 @@ class Context attr_reader :controller attr_reader :unique_id + def self.define_isomorphic_method(method_name, the_self, &block) + @ctx.attach("ServerSideIsomorphicMethod.#{the_self.name}.#{method_name}", block) + define_method(method_name, block) + end + def self.before_first_mount_blocks @before_first_mount_blocks ||= [] end @@ -108,7 +113,6 @@ def initialize(unique_id, ctx = nil, controller = nil, name = nil) if RUBY_ENGINE != 'opal' @controller = controller @ctx = ctx - ctx["ServerSideIsomorphicMethods"] = self send_to_opal(:load_context, @unique_id, name) end Hyperloop::Application::Boot.run(context: self) @@ -157,7 +161,7 @@ def when_on_client(&block) def send_to_server(*args) if IsomorphicHelpers.on_opal_server? args_as_json = args.to_json - @result = [JSON.parse(`Opal.global.ServerSideIsomorphicMethods[#{@name}](#{args_as_json})`)] + @result = [JSON.parse(`ServerSideIsomorphicMethod.#{self.name}.#{@name}(#{args_as_json})`)] end end @@ -193,7 +197,7 @@ def prerender_footer(&block) if RUBY_ENGINE != 'opal' def isomorphic_method(name, &block) - React::IsomorphicHelpers::Context.send(:define_method, name) do |args_as_json| + React::IsomorphicHelpers::Context.send(:define_isomorphic_method, self, name) do |args_as_json| React::IsomorphicHelpers::IsomorphicProcCall.new(name, block, self, *JSON.parse(args_as_json)).result end end diff --git a/lib/reactive-ruby/server_rendering/contextual_renderer.rb b/lib/reactive-ruby/server_rendering/contextual_renderer.rb index f0d3edd..5fe8cc1 100644 --- a/lib/reactive-ruby/server_rendering/contextual_renderer.rb +++ b/lib/reactive-ruby/server_rendering/contextual_renderer.rb @@ -1,8 +1,7 @@ module ReactiveRuby module ServerRendering def self.context_instance_name - return '@rhino_context' if RUBY_PLATFORM == 'java' - '@v8_context' + '@context' end def self.context_instance_for(context) @@ -18,7 +17,7 @@ def initialize(options = {}) def render(component_name, props, prerender_options) if prerender_options.is_a?(Hash) if !v8_runtime? && prerender_options[:context_initializer] - raise React::ServerRendering::PrerenderError.new(component_name, props, "you must use 'therubyracer' with the prerender[:context] option") unless v8_runtime? + raise React::ServerRendering::PrerenderError.new(component_name, props, "you must use 'mini_racer' with the prerender[:context] option") unless v8_runtime? else prerender_options[:context_initializer].call v8_context prerender_options = prerender_options[:static] ? :static : true @@ -31,7 +30,7 @@ def render(component_name, props, prerender_options) private def v8_runtime? - ["therubyracer (V8)", "therubyrhino (Rhino)"].include?(ExecJS.runtime.name) + ExecJS.runtime.name == 'mini_racer (V8)' end def v8_context diff --git a/spec/reactive-ruby/component_loader_spec.rb b/spec/reactive-ruby/component_loader_spec.rb index 30a2bfe..9b8cd1d 100644 --- a/spec/reactive-ruby/component_loader_spec.rb +++ b/spec/reactive-ruby/component_loader_spec.rb @@ -35,7 +35,7 @@ expect { loader.load('components') - }.to change { !!v8_context.eval('Opal.React') }.from(false).to(true) + }.to change { !!v8_context.eval('Opal.React !== undefined') }.from(false).to(true) end it 'is truthy upon successful load' do diff --git a/spec/reactive-ruby/isomorphic_helpers_spec.rb b/spec/reactive-ruby/isomorphic_helpers_spec.rb index dc549e0..b3a144d 100644 --- a/spec/reactive-ruby/isomorphic_helpers_spec.rb +++ b/spec/reactive-ruby/isomorphic_helpers_spec.rb @@ -93,11 +93,6 @@ def react_context end describe '#initialize' do - it "sets the given V8 context's ServerSideIsomorphicMethods to itself" do - context = described_class.new('unique-id', v8_context, controller, name) - expect(v8_context['ServerSideIsomorphicMethods']).to eq(context) - end - it 'calls before mount callbacks' do string = instance_double(String) described_class.register_before_first_mount_block do @@ -118,7 +113,7 @@ def react_context end describe '#send_to_opal' do - let(:opal_code) { Opal::Builder.new.build_str(ruby_code, __FILE__) } + let(:opal_code) { Opal::Builder.new.build_str(ruby_code, __FILE__).to_s } let(:ruby_code) { %Q[ module React::IsomorphicHelpers def self.greet(name) From d0b9649bd61c3f7dcf3b14ddcdc5b307e1d6dba3 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 5 Nov 2017 22:00:57 +0100 Subject: [PATCH 042/313] ignore more --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3a5adbb..5348bfa 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ Gemfile.lock # ignore IDE files .idea +.vscode From 2b29a061f7e4fc7ff73a96c3cae541e53090f127 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 5 Nov 2017 22:15:26 +0100 Subject: [PATCH 043/313] twisted --- lib/reactive-ruby/isomorphic_helpers.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/reactive-ruby/isomorphic_helpers.rb b/lib/reactive-ruby/isomorphic_helpers.rb index cb31472..14ef82e 100644 --- a/lib/reactive-ruby/isomorphic_helpers.rb +++ b/lib/reactive-ruby/isomorphic_helpers.rb @@ -197,7 +197,7 @@ def prerender_footer(&block) if RUBY_ENGINE != 'opal' def isomorphic_method(name, &block) - React::IsomorphicHelpers::Context.send(:define_isomorphic_method, self, name) do |args_as_json| + React::IsomorphicHelpers::Context.send(:define_isomorphic_method, name, self) do |args_as_json| React::IsomorphicHelpers::IsomorphicProcCall.new(name, block, self, *JSON.parse(args_as_json)).result end end From b194f14ba1d0e76dc07025b2f899dbba1d541f03 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Sun, 5 Nov 2017 22:32:06 +0100 Subject: [PATCH 044/313] proper context attach fix --- lib/reactive-ruby/isomorphic_helpers.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/reactive-ruby/isomorphic_helpers.rb b/lib/reactive-ruby/isomorphic_helpers.rb index 14ef82e..2225348 100644 --- a/lib/reactive-ruby/isomorphic_helpers.rb +++ b/lib/reactive-ruby/isomorphic_helpers.rb @@ -95,8 +95,9 @@ class Context attr_reader :controller attr_reader :unique_id - def self.define_isomorphic_method(method_name, the_self, &block) - @ctx.attach("ServerSideIsomorphicMethod.#{the_self.name}.#{method_name}", block) + def self.define_isomorphic_method(method_name, &block) + @@ctx_methods ||= [] + @@ctx_methods << [method_name, block] define_method(method_name, block) end @@ -113,6 +114,9 @@ def initialize(unique_id, ctx = nil, controller = nil, name = nil) if RUBY_ENGINE != 'opal' @controller = controller @ctx = ctx + @@ctx_methods.each do |ctxm| + @ctx.attach("ServerSideIsomorphicMethod.#{ctxm[0]}", ctxm[1]) + end send_to_opal(:load_context, @unique_id, name) end Hyperloop::Application::Boot.run(context: self) @@ -197,7 +201,7 @@ def prerender_footer(&block) if RUBY_ENGINE != 'opal' def isomorphic_method(name, &block) - React::IsomorphicHelpers::Context.send(:define_isomorphic_method, name, self) do |args_as_json| + React::IsomorphicHelpers::Context.send(:define_isomorphic_method, name) do |args_as_json| React::IsomorphicHelpers::IsomorphicProcCall.new(name, block, self, *JSON.parse(args_as_json)).result end end From ffd0699ff95c4fdd3209e20e736f2b9742ab89f1 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 6 Nov 2017 10:55:46 +0100 Subject: [PATCH 045/313] use hash instead of array to prevent multiple method registration --- lib/reactive-ruby/isomorphic_helpers.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/reactive-ruby/isomorphic_helpers.rb b/lib/reactive-ruby/isomorphic_helpers.rb index 2225348..78edc89 100644 --- a/lib/reactive-ruby/isomorphic_helpers.rb +++ b/lib/reactive-ruby/isomorphic_helpers.rb @@ -96,8 +96,8 @@ class Context attr_reader :unique_id def self.define_isomorphic_method(method_name, &block) - @@ctx_methods ||= [] - @@ctx_methods << [method_name, block] + @@ctx_methods ||= {} + @@ctx_methods[method_name] = block define_method(method_name, block) end @@ -114,8 +114,8 @@ def initialize(unique_id, ctx = nil, controller = nil, name = nil) if RUBY_ENGINE != 'opal' @controller = controller @ctx = ctx - @@ctx_methods.each do |ctxm| - @ctx.attach("ServerSideIsomorphicMethod.#{ctxm[0]}", ctxm[1]) + @@ctx_methods.each do |method_name, block| + @ctx.attach("ServerSideIsomorphicMethod.#{method_name}", block) end send_to_opal(:load_context, @unique_id, name) end From b9d104c7d3c0b6e2b2c8816c07547281e9eefc13 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 6 Nov 2017 14:34:08 +0100 Subject: [PATCH 046/313] fix --- lib/reactive-ruby/isomorphic_helpers.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/reactive-ruby/isomorphic_helpers.rb b/lib/reactive-ruby/isomorphic_helpers.rb index 78edc89..9926cf4 100644 --- a/lib/reactive-ruby/isomorphic_helpers.rb +++ b/lib/reactive-ruby/isomorphic_helpers.rb @@ -114,8 +114,10 @@ def initialize(unique_id, ctx = nil, controller = nil, name = nil) if RUBY_ENGINE != 'opal' @controller = controller @ctx = ctx - @@ctx_methods.each do |method_name, block| - @ctx.attach("ServerSideIsomorphicMethod.#{method_name}", block) + if defined? @@ctx_methods + @@ctx_methods.each do |method_name, block| + @ctx.attach("ServerSideIsomorphicMethod.#{method_name}", block) + end end send_to_opal(:load_context, @unique_id, name) end @@ -127,11 +129,11 @@ def eval(js) @ctx.eval(js) if @ctx end - def send_to_opal(method, *args) + def send_to_opal(method_name, *args) return unless @ctx args = [1] if args.length == 0 ::ReactiveRuby::ComponentLoader.new(@ctx).load! - @ctx.eval("Opal.React.$const_get('IsomorphicHelpers').$#{method}(#{args.collect { |arg| "'#{arg}'"}.join(', ')})") + @ctx.eval("Opal.React.$const_get('IsomorphicHelpers').$#{method_name}(#{args.collect { |arg| "'#{arg}'"}.join(', ')})") end def self.register_before_first_mount_block(&block) From b9cd364f11efb762f64f3f6fbd44227d6a86e71a Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 6 Nov 2017 14:34:57 +0100 Subject: [PATCH 047/313] createClass -> class extends disable propTypes --- lib/react/api.rb | 55 ++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/lib/react/api.rb b/lib/react/api.rb index c3ab079..9d192bd 100644 --- a/lib/react/api.rb +++ b/lib/react/api.rb @@ -46,43 +46,48 @@ def self.create_native_react_class(type) render_fn = (type.method_defined? :_render_wrapper) ? :_render_wrapper : :render # this was hashing type.to_s, not sure why but .to_s does not work as it Foo::Bar::View.to_s just returns "View" @@component_classes[type] ||= %x{ - React.createClass({ - displayName: #{type.name}, - propTypes: #{type.respond_to?(:prop_types) ? type.prop_types.to_n : `{}`}, - getDefaultProps: function(){ + class extends React.Component { + constructor(props) { + super(props); + this.displayName = #{type.name}; + this.mixins = #{type.respond_to?(:native_mixins) ? type.native_mixins : `[]`}; + this.statics = #{type.respond_to?(:static_call_backs) ? type.static_call_backs.to_n : `{}`}; + } + static get defaultProps() { return #{type.respond_to?(:default_props) ? type.default_props.to_n : `{}`}; - }, - mixins: #{type.respond_to?(:native_mixins) ? type.native_mixins : `[]`}, - statics: #{type.respond_to?(:static_call_backs) ? type.static_call_backs.to_n : `{}`}, - componentWillMount: function() { + } + /* static get propTypes() { + return #{type.respond_to?(:prop_types) ? type.prop_types.to_n : `{}`}; + } */ + componentWillMount() { var instance = this._getOpalInstance.apply(this); return #{`instance`.component_will_mount if type.method_defined? :component_will_mount}; - }, - componentDidMount: function() { + } + componentDidMount() { var instance = this._getOpalInstance.apply(this); return #{`instance`.component_did_mount if type.method_defined? :component_did_mount}; - }, - componentWillReceiveProps: function(next_props) { + } + componentWillReceiveProps(next_props) { var instance = this._getOpalInstance.apply(this); return #{`instance`.component_will_receive_props(Hash.new(`next_props`)) if type.method_defined? :component_will_receive_props}; - }, - shouldComponentUpdate: function(next_props, next_state) { + } + shouldComponentUpdate(next_props, next_state) { var instance = this._getOpalInstance.apply(this); return #{`instance`.should_component_update?(Hash.new(`next_props`), Hash.new(`next_state`)) if type.method_defined? :should_component_update?}; - }, - componentWillUpdate: function(next_props, next_state) { + } + componentWillUpdate(next_props, next_state) { var instance = this._getOpalInstance.apply(this); return #{`instance`.component_will_update(Hash.new(`next_props`), Hash.new(`next_state`)) if type.method_defined? :component_will_update}; - }, - componentDidUpdate: function(prev_props, prev_state) { + } + componentDidUpdate(prev_props, prev_state) { var instance = this._getOpalInstance.apply(this); return #{`instance`.component_did_update(Hash.new(`prev_props`), Hash.new(`prev_state`)) if type.method_defined? :component_did_update}; - }, - componentWillUnmount: function() { + } + componentWillUnmount() { var instance = this._getOpalInstance.apply(this); return #{`instance`.component_will_unmount if type.method_defined? :component_will_unmount}; - }, - _getOpalInstance: function() { + } + _getOpalInstance() { if (this.__opalInstance == undefined) { var instance = #{type.new(`this`)}; } else { @@ -90,12 +95,12 @@ def self.create_native_react_class(type) } this.__opalInstance = instance; return instance; - }, - render: function() { + } + render() { var instance = this._getOpalInstance.apply(this); return #{`instance`.send(render_fn).to_n}; } - }) + } } end From 84ef39ecc4cf4f4bbed0e99fe902f7d6f6483859 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 6 Nov 2017 14:36:13 +0100 Subject: [PATCH 048/313] createClass -> class extends --- spec/react/element_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/react/element_spec.rb b/spec/react/element_spec.rb index 8472dc5..1add351 100644 --- a/spec/react/element_spec.rb +++ b/spec/react/element_spec.rb @@ -60,9 +60,9 @@ def render it 'will subscribe to a native components event param' do %x{ - window.NativeComponent = React.createClass({ + window.NativeComponent = class extends React.Component({ displayName: "HelloMessage", - render: function render() { + render() { return React.createElement("span", null, this.props.onEvent()); } }) From 8303c87844aa78495d21f4a6c5083494c929fb42 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Mon, 6 Nov 2017 14:37:05 +0100 Subject: [PATCH 049/313] react-rails 2.4 Lap 2 --- Appraisals | 2 +- Gemfile | 2 ++ hyper-react.gemspec | 4 ++-- lib/reactive-ruby/version.rb | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Appraisals b/Appraisals index 2004041..4e676b2 100644 --- a/Appraisals +++ b/Appraisals @@ -27,5 +27,5 @@ appraise "opal-master-react-15" do gem 'opal', git: 'https://github.com/opal/opal.git' gem "opal-sprockets", git: 'https://github.com/opal/opal-sprockets.git' gem 'opal-rails', '~> 0.9.0' - gem 'react-rails', '~> 1.10.0', require: false + gem 'react-rails', '~> 2.4.0', require: false end diff --git a/Gemfile b/Gemfile index 8ec5884..1189cd4 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,5 @@ source 'https://rubygems.org' source ENV['HYPER_DEV_GEM_SOURCE'] if ENV['HYPER_DEV_GEM_SOURCE'] +gem 'debase' +gem 'ruby-debug-ide' gemspec diff --git a/hyper-react.gemspec b/hyper-react.gemspec index de1e9d7..30b8f79 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.0-autobahn-a8' + s.add_dependency 'hyper-store', '0.15.0-sachsenring-lap2' s.add_dependency 'opal' s.add_dependency 'opal-activesupport' @@ -30,7 +30,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'rails', '>= 5.1.4' s.add_development_dependency 'rails-controller-testing' s.add_development_dependency 'rake' - s.add_development_dependency 'react-rails', '~> 2.3.1' + s.add_development_dependency 'react-rails', '~> 2.4.0' s.add_development_dependency 'rspec-rails' s.add_development_dependency 'rubocop' s.add_development_dependency 'sqlite3' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index 123d2c8..0dad3fe 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.0-autobahn-a8' + VERSION = '0.15.0-sachsenring-lap2' end From f3a86f758d2ffff30cd65c978da3b81c1ed00a36 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 14 Nov 2017 21:30:42 +0100 Subject: [PATCH 050/313] fix should_component_update? --- lib/react/api.rb | 2 +- lib/react/component/should_component_update.rb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/react/api.rb b/lib/react/api.rb index 9d192bd..3c31315 100644 --- a/lib/react/api.rb +++ b/lib/react/api.rb @@ -73,7 +73,7 @@ class extends React.Component { } shouldComponentUpdate(next_props, next_state) { var instance = this._getOpalInstance.apply(this); - return #{`instance`.should_component_update?(Hash.new(`next_props`), Hash.new(`next_state`)) if type.method_defined? :should_component_update?}; + return #{`instance`.should_component_update?(`Opal.hash(next_props !== null ? next_props : {})`, `Opal.hash(next_state !== null ? next_state : {})`) if type.method_defined? :should_component_update?}; } componentWillUpdate(next_props, next_state) { var instance = this._getOpalInstance.apply(this); diff --git a/lib/react/component/should_component_update.rb b/lib/react/component/should_component_update.rb index fea8e93..dba7f87 100644 --- a/lib/react/component/should_component_update.rb +++ b/lib/react/component/should_component_update.rb @@ -25,7 +25,7 @@ module Component module ShouldComponentUpdate def should_component_update?(native_next_props, native_next_state) State.set_state_context_to(self, false) do - next_params = Hash.new(native_next_props) + next_params = native_next_props.clone # rubocop:disable Style/DoubleNegation # we must return true/false to js land if respond_to?(:needs_update?) !!call_needs_update(next_params, native_next_state) @@ -65,6 +65,7 @@ def call_needs_update(next_params, native_next_state) # rubocop:disable Metrics/MethodLength # for effeciency we want this to be one method def native_state_changed?(next_state) + next_state = next_state_hash.to_n %x{ var current_state = #{@native}.state var normalized_next_state = From 033f81945974246a17028ac8c194823b31efcb34 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 14 Nov 2017 21:31:54 +0100 Subject: [PATCH 051/313] call if only for

--- lib/react/component/tags.rb | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/react/component/tags.rb b/lib/react/component/tags.rb index ba50118..0569beb 100644 --- a/lib/react/component/tags.rb +++ b/lib/react/component/tags.rb @@ -39,25 +39,21 @@ def present(component, *params, &children) HTML_TAGS.each do |tag| - define_method(tag) do |*params, &children| - if tag == 'p' + if tag == 'p' + define_method(tag) do |*params, &children| if children || params.count == 0 || (params.count == 1 && params.first.is_a?(Hash)) React::RenderingContext.render(tag, *params, &children) else Kernel.p(*params) end - else - React::RenderingContext.render(tag, *params, &children) end - end - if tag != :div - alias_method tag.upcase, tag - const_set tag.upcase, tag else - alias_method tag.upcase, tag - #const_set tag.upcase, React.create_element(tag) - #Object.const_set tag.upcase, Class.new(HtmlTagWrapper) + define_method(tag) do |*params, &children| + React::RenderingContext.render(tag, *params, &children) + end end + alias_method tag.upcase, tag + const_set tag.upcase, tag end def self.html_tag_class_for(tag) From e1447661aa5f4f4ace51816771f7d5f574fd9e57 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 14 Nov 2017 21:32:20 +0100 Subject: [PATCH 052/313] turn prerendering off by default --- lib/react/config/server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/react/config/server.rb b/lib/react/config/server.rb index e65cc6b..81c2798 100644 --- a/lib/react/config/server.rb +++ b/lib/react/config/server.rb @@ -18,6 +18,6 @@ def default_config end end module Hyperloop - define_setting :prerendering, :on + define_setting :prerendering, :off end end From 2f0e8b207c845d2f32f3b124312df32a54ad48e1 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 14 Nov 2017 23:21:36 +0100 Subject: [PATCH 053/313] remove Hash.new, its done in api.rb --- lib/react/component.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/react/component.rb b/lib/react/component.rb index 3496145..0748b38 100644 --- a/lib/react/component.rb +++ b/lib/react/component.rb @@ -70,20 +70,20 @@ def component_did_mount def component_will_receive_props(next_props) # need to rethink how this works in opal-react, or if its actually that useful within the react.rb environment # for now we are just using it to clear processed_params - React::State.set_state_context_to(self) { self.run_callback(:before_receive_props, Hash.new(next_props)) } + React::State.set_state_context_to(self) { self.run_callback(:before_receive_props, next_props) } rescue Exception => e self.class.process_exception(e, self) end def component_will_update(next_props, next_state) - React::State.set_state_context_to(self) { self.run_callback(:before_update, Hash.new(next_props), Hash.new(next_state)) } + React::State.set_state_context_to(self) { self.run_callback(:before_update, next_props, next_state) } rescue Exception => e self.class.process_exception(e, self) end def component_did_update(prev_props, prev_state) React::State.set_state_context_to(self) do - self.run_callback(:after_update, Hash.new(prev_props), Hash.new(prev_state)) + self.run_callback(:after_update, prev_props, prev_state) React::State.update_states_to_observe end rescue Exception => e From c27000431b169045d2e10b0f6e3e6c1f177b07ad Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Tue, 14 Nov 2017 23:22:22 +0100 Subject: [PATCH 054/313] remove useless copying and a fix --- lib/react/component/should_component_update.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/react/component/should_component_update.rb b/lib/react/component/should_component_update.rb index dba7f87..0a913f9 100644 --- a/lib/react/component/should_component_update.rb +++ b/lib/react/component/should_component_update.rb @@ -23,14 +23,13 @@ module Component # the need for needs_update? # module ShouldComponentUpdate - def should_component_update?(native_next_props, native_next_state) + def should_component_update?(next_params, next_state) State.set_state_context_to(self, false) do - next_params = native_next_props.clone # rubocop:disable Style/DoubleNegation # we must return true/false to js land if respond_to?(:needs_update?) - !!call_needs_update(next_params, native_next_state) + !!call_needs_update(next_params, next_state) else - !!(props_changed?(next_params) || native_state_changed?(native_next_state)) + !!(props_changed?(next_params) || native_state_changed?(next_state)) end # rubocop:enable Style/DoubleNegation end @@ -39,14 +38,13 @@ def should_component_update?(native_next_props, native_next_state) # create opal hashes for next params and state, and attach # the changed? method to each hash - def call_needs_update(next_params, native_next_state) + def call_needs_update(next_params, next_state) component = self next_params.define_singleton_method(:changed?) do component.props_changed?(self) end - next_state = Hash.new(native_next_state) next_state.define_singleton_method(:changed?) do - component.native_state_changed?(native_next_state) + component.native_state_changed?(next_state) end needs_update?(next_params, next_state) end @@ -64,7 +62,7 @@ def call_needs_update(next_params, native_next_state) # Otherwise we check time stamps # rubocop:disable Metrics/MethodLength # for effeciency we want this to be one method - def native_state_changed?(next_state) + def native_state_changed?(next_state_hash) next_state = next_state_hash.to_n %x{ var current_state = #{@native}.state From 5d41dfeb94a27e4231ff8b7653ee6f4f5bc4c296 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Wed, 15 Nov 2017 18:59:04 +0100 Subject: [PATCH 055/313] remove emptynes --- lib/react/component/tags.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/react/component/tags.rb b/lib/react/component/tags.rb index 0569beb..d00f554 100644 --- a/lib/react/component/tags.rb +++ b/lib/react/component/tags.rb @@ -35,9 +35,6 @@ def present(component, *params, &children) # define each predefined tag as an instance method - - - HTML_TAGS.each do |tag| if tag == 'p' define_method(tag) do |*params, &children| From a0b4093daf61da69c80ac711bcee7d72741d81b8 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Wed, 15 Nov 2017 18:59:38 +0100 Subject: [PATCH 056/313] revert Opal.hash to Hash.new --- lib/react/api.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/react/api.rb b/lib/react/api.rb index 3c31315..73ee608 100644 --- a/lib/react/api.rb +++ b/lib/react/api.rb @@ -73,7 +73,7 @@ class extends React.Component { } shouldComponentUpdate(next_props, next_state) { var instance = this._getOpalInstance.apply(this); - return #{`instance`.should_component_update?(`Opal.hash(next_props !== null ? next_props : {})`, `Opal.hash(next_state !== null ? next_state : {})`) if type.method_defined? :should_component_update?}; + return #{`instance`.should_component_update?(Hash.new(`next_props`), Hash.new(`next_state`)) if type.method_defined? :should_component_update?}; } componentWillUpdate(next_props, next_state) { var instance = this._getOpalInstance.apply(this); @@ -126,9 +126,12 @@ def self.create_element(type, properties = {}, &block) # Children Nodes if block_given? - [yield].flatten.each do |ele| - params << ele.to_n - end + a = [yield].flatten + %x{ + for(var i=0, l=a.length; i Date: Wed, 15 Nov 2017 19:25:38 +0100 Subject: [PATCH 057/313] prerendering is off by default --- DOCS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DOCS.md b/DOCS.md index 4fbc3c2..a55dce7 100644 --- a/DOCS.md +++ b/DOCS.md @@ -1468,7 +1468,7 @@ There are also good tutorials on integrating Webpack with existing rails apps a ```ruby Hyperloop.configuration do |config| - config.prerendering = :off # :on by default + config.prerendering = :on # :off by default end ``` From d3a64878486d70658738a8b9347117ead50d2c9b Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 24 Nov 2017 07:37:54 +0100 Subject: [PATCH 058/313] semis --- spec/react/component_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/react/component_spec.rb b/spec/react/component_spec.rb index 567b266..9433589 100644 --- a/spec/react/component_spec.rb +++ b/spec/react/component_spec.rb @@ -456,7 +456,7 @@ def render; div; end %x{ var log = []; var org_warn_console = window.console.warn; - var org_error_console = window.console.error + var org_error_console = window.console.error; window.console.warn = window.console.error = function(str){log.push(str)} } renderToDocument(Foo, foo: 10, bar: '10', lorem: Lorem.new) @@ -496,7 +496,7 @@ def render; "hello" end %x{ var log = []; var org_warn_console = window.console.warn; - var org_error_console = window.console.error + var org_error_console = window.console.error; window.console.warn = window.console.error = function(str){log.push(str)} } renderToDocument(foo) @@ -510,7 +510,7 @@ def render; "hello" end %x{ window.test_log = []; window.org_warn_console = window.console.warn; - window.org_error_console = window.console.error + window.org_error_console = window.console.error; window.console.warn = window.console.error = function(str){window.test_log.push(str)} } end From f5d7137bb8dc6d791d777cbd0bdced20283a31a2 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 24 Nov 2017 07:38:23 +0100 Subject: [PATCH 059/313] update es5-shim --- spec/vendor/es5-shim.min.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spec/vendor/es5-shim.min.js b/spec/vendor/es5-shim.min.js index 2ab5ebc..14b24f1 100644 --- a/spec/vendor/es5-shim.min.js +++ b/spec/vendor/es5-shim.min.js @@ -1,6 +1,7 @@ /*! * https://github.com/es-shims/es5-shim - * @license es5-shim Copyright 2009-2014 by contributors, MIT License - * see https://github.com/es-shims/es5-shim/blob/v4.1.0/LICENSE + * @license es5-shim Copyright 2009-2015 by contributors, MIT License + * see https://github.com/es-shims/es5-shim/blob/v4.5.9/LICENSE */ -(function(t,e){"use strict";if(typeof define==="function"&&define.amd){define(e)}else if(typeof exports==="object"){module.exports=e()}else{t.returnExports=e()}})(this,function(){var t=Array.prototype;var e=Object.prototype;var r=Function.prototype;var n=String.prototype;var i=Number.prototype;var a=t.slice;var o=t.splice;var u=t.push;var l=t.unshift;var f=r.call;var s=e.toString;var c=Array.isArray||function ye(t){return s.call(t)==="[object Array]"};var p=typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol";var h;var v=Function.prototype.toString,g=function de(t){try{v.call(t);return true}catch(e){return false}},y="[object Function]",d="[object GeneratorFunction]";h=function me(t){if(typeof t!=="function"){return false}if(p){return g(t)}var e=s.call(t);return e===y||e===d};var m;var b=RegExp.prototype.exec,w=function be(t){try{b.call(t);return true}catch(e){return false}},T="[object RegExp]";m=function we(t){if(typeof t!=="object"){return false}return p?w(t):s.call(t)===T};var x;var O=String.prototype.valueOf,j=function Te(t){try{O.call(t);return true}catch(e){return false}},S="[object String]";x=function xe(t){if(typeof t==="string"){return true}if(typeof t!=="object"){return false}return p?j(t):s.call(t)===S};var E=function Oe(t){var e=s.call(t);var r=e==="[object Arguments]";if(!r){r=!c(t)&&t!==null&&typeof t==="object"&&typeof t.length==="number"&&t.length>=0&&h(t.callee)}return r};var N=function(t){var e=Object.defineProperty&&function(){try{Object.defineProperty({},"x",{});return true}catch(t){return false}}();var r;if(e){r=function(t,e,r,n){if(!n&&e in t){return}Object.defineProperty(t,e,{configurable:true,enumerable:false,writable:true,value:r})}}else{r=function(t,e,r,n){if(!n&&e in t){return}t[e]=r}}return function n(e,i,a){for(var o in i){if(t.call(i,o)){r(e,o,i[o],a)}}}}(e.hasOwnProperty);function I(t){var e=typeof t;return t===null||e==="undefined"||e==="boolean"||e==="number"||e==="string"}var D={ToInteger:function je(t){var e=+t;if(e!==e){e=0}else if(e!==0&&e!==1/0&&e!==-(1/0)){e=(e>0||-1)*Math.floor(Math.abs(e))}return e},ToPrimitive:function Se(t){var e,r,n;if(I(t)){return t}r=t.valueOf;if(h(r)){e=r.call(t);if(I(e)){return e}}n=t.toString;if(h(n)){e=n.call(t);if(I(e)){return e}}throw new TypeError},ToObject:function(t){if(t==null){throw new TypeError("can't convert "+t+" to object")}return Object(t)},ToUint32:function Ee(t){return t>>>0}};var M=function Ne(){};N(r,{bind:function Ie(t){var e=this;if(!h(e)){throw new TypeError("Function.prototype.bind called on incompatible "+e)}var r=a.call(arguments,1);var n;var i=function(){if(this instanceof n){var i=e.apply(this,r.concat(a.call(arguments)));if(Object(i)===i){return i}return this}else{return e.apply(t,r.concat(a.call(arguments)))}};var o=Math.max(0,e.length-r.length);var u=[];for(var l=0;l0&&typeof e!=="number"){r=a.call(arguments);if(r.length<2){r.push(this.length-t)}else{r[1]=D.ToInteger(e)}}return o.apply(this,r)}},!U);var k=[].unshift(0)!==1;N(t,{unshift:function(){l.apply(this,arguments);return this.length}},k);N(Array,{isArray:c});var A=Object("a");var C=A[0]!=="a"||!(0 in A);var P=function Fe(t){var e=true;var r=true;if(t){t.call("foo",function(t,r,n){if(typeof n!=="object"){e=false}});t.call([1],function(){"use strict";r=typeof this==="string"},"x")}return!!t&&e&&r};N(t,{forEach:function Re(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=arguments[1],i=-1,a=r.length>>>0;if(!h(t)){throw new TypeError}while(++i>>0,i=Array(n),a=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var o=0;o>>0,i=[],a,o=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var u=0;u>>0,i=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var a=0;a>>0,i=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var a=0;a>>0;if(!h(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var i=0;var a;if(arguments.length>=2){a=arguments[1]}else{do{if(i in r){a=r[i++];break}if(++i>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;i>>0;if(!h(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var i,a=n-1;if(arguments.length>=2){i=arguments[1]}else{do{if(a in r){i=r[a--];break}if(--a<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(a<0){return i}do{if(a in r){i=t.call(void 0,i,r[a],a,e)}}while(a--);return i}},!J);var z=Array.prototype.indexOf&&[0,1].indexOf(1,2)!==-1;N(t,{indexOf:function Je(t){var e=C&&x(this)?this.split(""):D.ToObject(this),r=e.length>>>0;if(!r){return-1}var n=0;if(arguments.length>1){n=D.ToInteger(arguments[1])}n=n>=0?n:Math.max(0,r+n);for(;n>>0;if(!r){return-1}var n=r-1;if(arguments.length>1){n=Math.min(n,D.ToInteger(arguments[1]))}n=n>=0?n:r-Math.abs(n);for(;n>=0;n--){if(n in e&&t===e[n]){return n}}return-1}},$);var B=!{toString:null}.propertyIsEnumerable("toString"),G=function(){}.propertyIsEnumerable("prototype"),H=!F("x","0"),L=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],X=L.length;N(Object,{keys:function $e(t){var e=h(t),r=E(t),n=t!==null&&typeof t==="object",i=n&&x(t);if(!n&&!e&&!r){throw new TypeError("Object.keys called on a non-object")}var a=[];var o=G&&e;if(i&&H||r){for(var u=0;u9999?"+":"")+("00000"+Math.abs(n)).slice(0<=n&&n<=9999?-4:-6);e=t.length;while(e--){r=t[e];if(r<10){t[e]="0"+r}}return n+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"}},V);var W=false;try{W=Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(K).toJSON().indexOf(Q)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(_){}if(!W){Date.prototype.toJSON=function He(t){var e=Object(this),r=D.ToPrimitive(e),n;if(typeof r==="number"&&!isFinite(r)){return null}n=e.toISOString;if(typeof n!=="function"){throw new TypeError("toISOString property is not callable")}return n.call(e)}}var te=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var ee=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"));var re=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(!Date.parse||re||ee||!te){Date=function(t){function e(r,n,i,a,o,u,l){var f=arguments.length;if(this instanceof t){var s=f===1&&String(r)===r?new t(e.parse(r)):f>=7?new t(r,n,i,a,o,u,l):f>=6?new t(r,n,i,a,o,u):f>=5?new t(r,n,i,a,o):f>=4?new t(r,n,i,a):f>=3?new t(r,n,i):f>=2?new t(r,n):f>=1?new t(r):new t;s.constructor=e;return s}return t.apply(this,arguments)}var r=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];function i(t,e){var r=e>1?1:0;return n[e]+Math.floor((t-1969+r)/4)-Math.floor((t-1901+r)/100)+Math.floor((t-1601+r)/400)+365*(t-1970)}function a(e){return Number(new t(1970,0,1,0,0,0,e))}for(var o in t){e[o]=t[o]}e.now=t.now;e.UTC=t.UTC;e.prototype=t.prototype;e.prototype.constructor=e;e.parse=function u(e){var n=r.exec(e);if(n){var o=Number(n[1]),u=Number(n[2]||1)-1,l=Number(n[3]||1)-1,f=Number(n[4]||0),s=Number(n[5]||0),c=Number(n[6]||0),p=Math.floor(Number(n[7]||0)*1e3),h=Boolean(n[4]&&!n[8]),v=n[9]==="-"?1:-1,g=Number(n[10]||0),y=Number(n[11]||0),d;if(f<(s>0||c>0||p>0?24:25)&&s<60&&c<60&&p<1e3&&u>-1&&u<12&&g<24&&y<60&&l>-1&&l=0){r+=ie.data[e];ie.data[e]=Math.floor(r/t);r=r%t*ie.base}},numToString:function qe(){var t=ie.size;var e="";while(--t>=0){if(e!==""||t===0||ie.data[t]!==0){var r=String(ie.data[t]);if(e===""){e=r}else{e+="0000000".slice(0,7-r.length)+r}}}return e},pow:function Ke(t,e,r){return e===0?r:e%2===1?Ke(t,e-1,r*t):Ke(t*t,e/2,r)},log:function Qe(t){var e=0;while(t>=4096){e+=12;t/=4096}while(t>=2){e+=1;t/=2}return e}};N(i,{toFixed:function Ve(t){var e,r,n,i,a,o,u,l;e=Number(t);e=e!==e?0:Math.floor(e);if(e<0||e>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}r=Number(this);if(r!==r){return"NaN"}if(r<=-1e21||r>=1e21){return String(r)}n="";if(r<0){n="-";r=-r}i="0";if(r>1e-21){a=ie.log(r*ie.pow(2,69,1))-69;o=a<0?r*ie.pow(2,-a,1):r/ie.pow(2,a,1);o*=4503599627370496;a=52-a;if(a>0){ie.multiply(0,o);u=e;while(u>=7){ie.multiply(1e7,0);u-=7}ie.multiply(ie.pow(10,u,1),0);u=a-1;while(u>=23){ie.divide(1<<23);u-=23}ie.divide(1<0){l=i.length;if(l<=e){i=n+"0.0000000000000000000".slice(0,e-l+2)+i}else{i=n+i.slice(0,l-e)+"."+i.slice(l-e)}}else{i=n+i}return i}},ne);var ae=n.split;if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var t=typeof/()??/.exec("")[1]==="undefined";n.split=function(e,r){var n=this;if(typeof e==="undefined"&&r===0){return[]}if(!m(e)){return ae.call(this,e,r)}var i=[],a=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":""),o=0,l,f,s,c;e=new RegExp(e.source,a+"g");n+="";if(!t){l=new RegExp("^"+e.source+"$(?!\\s)",a)}r=typeof r==="undefined"?-1>>>0:D.ToUint32(r);f=e.exec(n);while(f){s=f.index+f[0].length;if(s>o){i.push(n.slice(o,f.index));if(!t&&f.length>1){f[0].replace(l,function(){for(var t=1;t1&&f.index=r){break}}if(e.lastIndex===f.index){e.lastIndex++}f=e.exec(n)}if(o===n.length){if(c||!e.test("")){i.push("")}}else{i.push(n.slice(o))}return i.length>r?i.slice(0,r):i}})()}else if("0".split(void 0,0).length){n.split=function We(t,e){if(typeof t==="undefined"&&e===0){return[]}return ae.call(this,t,e)}}var oe=n.replace;var ue=function(){var t=[];"x".replace(/x(.)?/g,function(e,r){t.push(r)});return t.length===1&&typeof t[0]==="undefined"}();if(!ue){n.replace=function _e(t,e){var r=h(e);var n=m(t)&&/\)[*?]/.test(t.source);if(!r||!n){return oe.call(this,t,e)}else{var i=function(r){var n=arguments.length;var i=t.lastIndex;t.lastIndex=0;var a=t.exec(r)||[];t.lastIndex=i;a.push(arguments[n-2],arguments[n-1]);return e.apply(this,a)};return oe.call(this,t,i)}}}var le=n.substr;var fe="".substr&&"0b".substr(-1)!=="b";N(n,{substr:function tr(t,e){return le.call(this,t<0?(t=this.length+t)<0?0:t:t,e)}},fe);var se=" \n \f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var ce="\u200b";var pe="["+se+"]";var he=new RegExp("^"+pe+pe+"*");var ve=new RegExp(pe+pe+"*$");var ge=n.trim&&(se.trim()||!ce.trim());N(n,{trim:function er(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}return String(this).replace(he,"").replace(ve,"")}},ge);if(parseInt(se+"08")!==8||parseInt(se+"0x16")!==22){parseInt=function(t){var e=/^0[xX]/;return function r(n,i){n=String(n).trim();if(!Number(i)){i=e.test(n)?16:10}return t(n,i)}}(parseInt)}}); +(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toString;var m=typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol";var D;var S=Function.prototype.toString,x=/^\s*class /,O=function isES6ClassFn(t){try{var r=S.call(t);var e=r.replace(/\/\/.*\n/g,"");var n=e.replace(/\/\*[.\s\S]*\*\//g,"");var i=n.replace(/\n/gm," ").replace(/ {2}/g," ");return x.test(i)}catch(a){return false}},j=function tryFunctionObject(t){try{if(O(t)){return false}S.call(t);return true}catch(r){return false}},E="[object Function]",I="[object GeneratorFunction]",D=function isCallable(t){if(!t){return false}if(typeof t!=="function"&&typeof t!=="object"){return false}if(m){return j(t)}if(O(t)){return false}var r=T.call(t);return r===E||r===I};var M;var U=RegExp.prototype.exec,F=function tryRegexExec(t){try{U.call(t);return true}catch(r){return false}},N="[object RegExp]";M=function isRegex(t){if(typeof t!=="object"){return false}return m?F(t):T.call(t)===N};var C;var k=String.prototype.valueOf,A=function tryStringObject(t){try{k.call(t);return true}catch(r){return false}},R="[object String]";C=function isString(t){if(typeof t==="string"){return true}if(typeof t!=="object"){return false}return m?A(t):T.call(t)===R};var P=e.defineProperty&&function(){try{var t={};e.defineProperty(t,"x",{enumerable:false,value:t});for(var r in t){return false}return t.x===t}catch(n){return false}}();var $=function(t){var r;if(P){r=function(t,r,n,i){if(!i&&r in t){return}e.defineProperty(t,r,{configurable:true,enumerable:false,writable:true,value:n})}}else{r=function(t,r,e,n){if(!n&&r in t){return}t[r]=e}}return function defineProperties(e,n,i){for(var a in n){if(t.call(n,a)){r(e,a,n[a],i)}}}}(n.hasOwnProperty);var J=function isPrimitive(t){var r=typeof t;return t===null||r!=="object"&&r!=="function"};var Y=u.isNaN||function isActualNaN(t){return t!==t};var Z={ToInteger:function ToInteger(t){var r=+t;if(Y(r)){r=0}else if(r!==0&&r!==1/0&&r!==-(1/0)){r=(r>0||-1)*Math.floor(Math.abs(r))}return r},ToPrimitive:function ToPrimitive(t){var r,e,n;if(J(t)){return t}e=t.valueOf;if(D(e)){r=e.call(t);if(J(r)){return r}}n=t.toString;if(D(n)){r=n.call(t);if(J(r)){return r}}throw new TypeError},ToObject:function(t){if(t==null){throw new TypeError("can't convert "+t+" to object")}return e(t)},ToUint32:function ToUint32(t){return t>>>0}};var z=function Empty(){};$(a,{bind:function bind(t){var r=this;if(!D(r)){throw new TypeError("Function.prototype.bind called on incompatible "+r)}var n=s.call(arguments,1);var a;var o=function(){if(this instanceof a){var i=g.call(r,this,p.call(n,s.call(arguments)));if(e(i)===i){return i}return this}else{return g.call(r,t,p.call(n,s.call(arguments)))}};var f=w(0,r.length-n.length);var u=[];for(var l=0;l1){a=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.forEach callback must be a function")}while(++n1){o=arguments[1]}if(!D(r)){throw new TypeError("Array.prototype.map callback must be a function")}for(var f=0;f1){o=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.filter callback must be a function")}for(var f=0;f1){i=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.every callback must be a function")}for(var a=0;a1){i=arguments[1]}if(!D(t)){throw new TypeError("Array.prototype.some callback must be a function")}for(var a=0;a=2){a=arguments[1]}else{do{if(i in e){a=e[i++];break}if(++i>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;i=2){i=arguments[1]}else{do{if(a in e){i=e[a--];break}if(--a<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(a<0){return i}do{if(a in e){i=t(i,e[a],a,r)}}while(a--);return i}},!at);var ot=r.indexOf&&[0,1].indexOf(1,2)!==-1;$(r,{indexOf:function indexOf(t){var r=et&&C(this)?X(this,""):Z.ToObject(this);var e=Z.ToUint32(r.length);if(e===0){return-1}var n=0;if(arguments.length>1){n=Z.ToInteger(arguments[1])}n=n>=0?n:w(0,e+n);for(;n1){n=b(n,Z.ToInteger(arguments[1]))}n=n>=0?n:e-Math.abs(n);for(;n>=0;n--){if(n in r&&t===r[n]){return n}}return-1}},ft);var ut=function(){var t=[1,2];var r=t.splice();return t.length===2&&_(r)&&r.length===0}();$(r,{splice:function splice(t,r){if(arguments.length===0){return[]}else{return c.apply(this,arguments)}}},!ut);var lt=function(){var t={};r.splice.call(t,0,0,1);return t.length===1}();$(r,{splice:function splice(t,r){if(arguments.length===0){return[]}var e=arguments;this.length=w(Z.ToInteger(this.length),0);if(arguments.length>0&&typeof r!=="number"){e=H(arguments);if(e.length<2){K(e,this.length-t)}else{e[1]=Z.ToInteger(r)}}return c.apply(this,e)}},!lt);var st=function(){var r=new t(1e5);r[8]="x";r.splice(1,1);return r.indexOf("x")===7}();var ct=function(){var t=256;var r=[];r[t]="a";r.splice(t+1,0,"b");return r[t]==="a"}();$(r,{splice:function splice(t,r){var e=Z.ToObject(this);var n=[];var i=Z.ToUint32(e.length);var a=Z.ToInteger(t);var f=a<0?w(i+a,0):b(a,i);var u=b(w(Z.ToInteger(r),0),i-f);var l=0;var s;while(ly){delete e[l-1];l-=1}}else if(v>u){l=i-u;while(l>f){s=o(l+u-1);h=o(l+v-1);if(G(e,s)){e[h]=e[s]}else{delete e[h]}l-=1}}l=f;for(var d=0;d=0&&!_(t)&&D(t.callee)};var Ct=Ft(arguments)?Ft:Nt;$(e,{keys:function keys(t){var r=D(t);var e=Ct(t);var n=t!==null&&typeof t==="object";var i=n&&C(t);if(!n&&!r&&!e){throw new TypeError("Object.keys called on a non-object")}var a=[];var f=St&&r;if(i&&xt||e){for(var u=0;u11){return t+1}return t},getMonth:function getMonth(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Bt(this);var r=Ht(this);if(t<0&&r>11){return 0}return r},getDate:function getDate(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Bt(this);var r=Ht(this);var e=Wt(this);if(t<0&&r>11){if(r===12){return e}var n=nr(0,t+1);return n-e+1}return e},getUTCFullYear:function getUTCFullYear(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Lt(this);if(t<0&&Xt(this)>11){return t+1}return t},getUTCMonth:function getUTCMonth(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Lt(this);var r=Xt(this);if(t<0&&r>11){return 0}return r},getUTCDate:function getUTCDate(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Lt(this);var r=Xt(this);var e=qt(this);if(t<0&&r>11){if(r===12){return e}var n=nr(0,t+1);return n-e+1}return e}},Pt);$(Date.prototype,{toUTCString:function toUTCString(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=Kt(this);var r=qt(this);var e=Xt(this);var n=Lt(this);var i=Qt(this);var a=Vt(this);var o=_t(this);return rr[t]+", "+(r<10?"0"+r:r)+" "+er[e]+" "+n+" "+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)+":"+(o<10?"0"+o:o)+" GMT"}},Pt||Yt);$(Date.prototype,{toDateString:function toDateString(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=this.getDay();var r=this.getDate();var e=this.getMonth();var n=this.getFullYear();return rr[t]+" "+er[e]+" "+(r<10?"0"+r:r)+" "+n}},Pt||Zt);if(Pt||zt){Date.prototype.toString=function toString(){if(!this||!(this instanceof Date)){throw new TypeError("this is not a Date object.")}var t=this.getDay();var r=this.getDate();var e=this.getMonth();var n=this.getFullYear();var i=this.getHours();var a=this.getMinutes();var o=this.getSeconds();var f=this.getTimezoneOffset();var u=Math.floor(Math.abs(f)/60);var l=Math.floor(Math.abs(f)%60);return rr[t]+" "+er[e]+" "+(r<10?"0"+r:r)+" "+n+" "+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)+":"+(o<10?"0"+o:o)+" GMT"+(f>0?"-":"+")+(u<10?"0"+u:u)+(l<10?"0"+l:l)};if(P){e.defineProperty(Date.prototype,"toString",{configurable:true,enumerable:false,writable:true})}}var ir=-621987552e5;var ar="-000001";var or=Date.prototype.toISOString&&new Date(ir).toISOString().indexOf(ar)===-1;var fr=Date.prototype.toISOString&&new Date(-1).toISOString()!=="1969-12-31T23:59:59.999Z";var ur=d.bind(Date.prototype.getTime);$(Date.prototype,{toISOString:function toISOString(){if(!isFinite(this)||!isFinite(ur(this))){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}var t=Lt(this);var r=Xt(this);t+=Math.floor(r/12);r=(r%12+12)%12;var e=[r+1,qt(this),Qt(this),Vt(this),_t(this)];t=(t<0?"-":t>9999?"+":"")+L("00000"+Math.abs(t),0<=t&&t<=9999?-4:-6);for(var n=0;n=7&&l>hr){var p=Math.floor(l/hr)*hr;var y=Math.floor(p/1e3);v+=y;h-=y*1e3}c=s===1&&o(e)===e?new t(r.parse(e)):s>=7?new t(e,n,i,a,f,v,h):s>=6?new t(e,n,i,a,f,v):s>=5?new t(e,n,i,a,f):s>=4?new t(e,n,i,a):s>=3?new t(e,n,i):s>=2?new t(e,n):s>=1?new t(e instanceof t?+e:e):new t}else{c=t.apply(this,arguments)}if(!J(c)){$(c,{constructor:r},true)}return c};var e=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];var i=function dayFromMonth(t,r){var e=r>1?1:0;return n[r]+Math.floor((t-1969+e)/4)-Math.floor((t-1901+e)/100)+Math.floor((t-1601+e)/400)+365*(t-1970)};var a=function toUTC(r){var e=0;var n=r;if(pr&&n>hr){var i=Math.floor(n/hr)*hr;var a=Math.floor(i/1e3);e+=a;n-=a*1e3}return u(new t(1970,0,1,0,0,e,n))};for(var f in t){if(G(t,f)){r[f]=t[f]}}$(r,{now:t.now,UTC:t.UTC},true);r.prototype=t.prototype;$(r.prototype,{constructor:r},true);var l=function parse(r){var n=e.exec(r);if(n){var o=u(n[1]),f=u(n[2]||1)-1,l=u(n[3]||1)-1,s=u(n[4]||0),c=u(n[5]||0),v=u(n[6]||0),h=Math.floor(u(n[7]||0)*1e3),p=Boolean(n[4]&&!n[8]),y=n[9]==="-"?1:-1,d=u(n[10]||0),g=u(n[11]||0),w;var b=c>0||v>0||h>0;if(s<(b?24:25)&&c<60&&v<60&&h<1e3&&f>-1&&f<12&&d<24&&g<60&&l>-1&&l=0){e+=dr.data[r];dr.data[r]=Math.floor(e/t);e=e%t*dr.base}},numToString:function numToString(){var t=dr.size;var r="";while(--t>=0){if(r!==""||t===0||dr.data[t]!==0){var e=o(dr.data[t]);if(r===""){r=e}else{r+=L("0000000",0,7-e.length)+e}}}return r},pow:function pow(t,r,e){return r===0?e:r%2===1?pow(t,r-1,e*t):pow(t*t,r/2,e)},log:function log(t){var r=0;var e=t;while(e>=4096){r+=12;e/=4096}while(e>=2){r+=1;e/=2}return r}};var gr=function toFixed(t){var r,e,n,i,a,f,l,s;r=u(t);r=Y(r)?0:Math.floor(r);if(r<0||r>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}e=u(this);if(Y(e)){return"NaN"}if(e<=-1e21||e>=1e21){return o(e)}n="";if(e<0){n="-";e=-e}i="0";if(e>1e-21){a=dr.log(e*dr.pow(2,69,1))-69;f=a<0?e*dr.pow(2,-a,1):e/dr.pow(2,a,1);f*=4503599627370496;a=52-a;if(a>0){dr.multiply(0,f);l=r;while(l>=7){dr.multiply(1e7,0);l-=7}dr.multiply(dr.pow(10,l,1),0);l=a-1;while(l>=23){dr.divide(1<<23);l-=23}dr.divide(1<0){s=i.length;if(s<=r){i=n+L("0.0000000000000000000",0,r-s+2)+i}else{i=n+L(i,0,s-r)+"."+L(i,s-r)}}else{i=n+i}return i};$(l,{toFixed:gr},yr);var wr=function(){try{return 1..toPrecision(undefined)==="1"}catch(t){return true}}();var br=l.toPrecision;$(l,{toPrecision:function toPrecision(t){return typeof t==="undefined"?br.call(this):br.call(this,t)}},wr);if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var t=typeof/()??/.exec("")[1]==="undefined";var r=Math.pow(2,32)-1;f.split=function(e,n){var i=String(this);if(typeof e==="undefined"&&n===0){return[]}if(!M(e)){return X(this,e,n)}var a=[];var o=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,u,l,s,c;var h=new RegExp(e.source,o+"g");if(!t){u=new RegExp("^"+h.source+"$(?!\\s)",o)}var p=typeof n==="undefined"?r:Z.ToUint32(n);l=h.exec(i);while(l){s=l.index+l[0].length;if(s>f){K(a,L(i,f,l.index));if(!t&&l.length>1){l[0].replace(u,function(){for(var t=1;t1&&l.index=p){break}}if(h.lastIndex===l.index){h.lastIndex++}l=h.exec(i)}if(f===i.length){if(c||!h.test("")){K(a,"")}}else{K(a,L(i,f))}return a.length>p?H(a,0,p):a}})()}else if("0".split(void 0,0).length){f.split=function split(t,r){if(typeof t==="undefined"&&r===0){return[]}return X(this,t,r)}}var Tr=f.replace;var mr=function(){var t=[];"x".replace(/x(.)?/g,function(r,e){K(t,e)});return t.length===1&&typeof t[0]==="undefined"}();if(!mr){f.replace=function replace(t,r){var e=D(r);var n=M(t)&&/\)[*?]/.test(t.source);if(!e||!n){return Tr.call(this,t,r)}else{var i=function(e){var n=arguments.length;var i=t.lastIndex;t.lastIndex=0;var a=t.exec(e)||[];t.lastIndex=i;K(a,arguments[n-2],arguments[n-1]);return r.apply(this,a)};return Tr.call(this,t,i)}}}var Dr=f.substr;var Sr="".substr&&"0b".substr(-1)!=="b";$(f,{substr:function substr(t,r){var e=t;if(t<0){e=w(this.length+t,0)}return Dr.call(this,e,r)}},Sr);var xr=" \n\x0B\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var Or="\u200b";var jr="["+xr+"]";var Er=new RegExp("^"+jr+jr+"*");var Ir=new RegExp(jr+jr+"*$");var Mr=f.trim&&(xr.trim()||!Or.trim());$(f,{trim:function trim(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}return o(this).replace(Er,"").replace(Ir,"")}},Mr);var Ur=d.bind(String.prototype.trim);var Fr=f.lastIndexOf&&"abc\u3042\u3044".lastIndexOf("\u3042\u3044",2)!==-1;$(f,{lastIndexOf:function lastIndexOf(t){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}var r=o(this);var e=o(t);var n=arguments.length>1?u(arguments[1]):NaN;var i=Y(n)?Infinity:Z.ToInteger(n);var a=b(w(i,0),r.length);var f=e.length;var l=a+f;while(l>0){l=w(0,l-f);var s=q(L(r,l,a+f),e);if(s!==-1){return l+s}}return-1}},Fr);var Nr=f.lastIndexOf;$(f,{lastIndexOf:function lastIndexOf(t){return Nr.apply(this,arguments)}},f.lastIndexOf.length!==1);if(parseInt(xr+"08")!==8||parseInt(xr+"0x16")!==22){parseInt=function(t){var r=/^[\-+]?0[xX]/;return function parseInt(e,n){var i=Ur(String(e));var a=u(n)||(r.test(i)?16:10);return t(i,a)}}(parseInt)}if(1/parseFloat("-0")!==-Infinity){parseFloat=function(t){return function parseFloat(r){var e=Ur(String(r));var n=t(e);return n===0&&L(e,0,1)==="-"?-0:n}}(parseFloat)}if(String(new RangeError("test"))!=="RangeError: test"){var Cr=function toString(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}var t=this.name;if(typeof t==="undefined"){t="Error"}else if(typeof t!=="string"){t=o(t)}var r=this.message;if(typeof r==="undefined"){r=""}else if(typeof r!=="string"){r=o(r)}if(!t){return r}if(!r){return t}return t+": "+r};Error.prototype.toString=Cr}if(P){var kr=function(t,r){if(Q(t,r)){var e=Object.getOwnPropertyDescriptor(t,r);if(e.configurable){e.enumerable=false;Object.defineProperty(t,r,e)}}};kr(Error.prototype,"message");if(Error.prototype.message!==""){Error.prototype.message=""}kr(Error.prototype,"name")}if(String(/a/gim)!=="/a/gim"){var Ar=function toString(){var t="/"+this.source+"/";if(this.global){t+="g"}if(this.ignoreCase){t+="i"}if(this.multiline){t+="m"}return t};RegExp.prototype.toString=Ar}}); +//# sourceMappingURL=es5-shim.map From a41aeaded41fda67f33186b0658ef31dde110c07 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 24 Nov 2017 07:38:45 +0100 Subject: [PATCH 060/313] update version --- hyper-react.gemspec | 14 +++++++------- lib/reactive-ruby/version.rb | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hyper-react.gemspec b/hyper-react.gemspec index 30b8f79..c8c40e9 100644 --- a/hyper-react.gemspec +++ b/hyper-react.gemspec @@ -18,21 +18,21 @@ Gem::Specification.new do |s| s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.require_paths = ['lib'] - s.add_dependency 'hyper-store', '0.15.0-sachsenring-lap2' - s.add_dependency 'opal' - s.add_dependency 'opal-activesupport' + s.add_dependency 'hyper-store', '0.15.0-sachsenring-lap5' + s.add_dependency 'opal', '~> 0.10.5' + s.add_dependency 'opal-activesupport', '~> 0.3.0' s.add_development_dependency 'listen' s.add_development_dependency 'mime-types' s.add_development_dependency 'nokogiri' - s.add_development_dependency 'opal-rails', '>= 0.9.3' + s.add_development_dependency 'opal-rails', '~> 0.9.3' s.add_development_dependency 'opal-rspec' - s.add_development_dependency 'rails', '>= 5.1.4' + s.add_development_dependency 'rails', '~> 5.1.4' s.add_development_dependency 'rails-controller-testing' s.add_development_dependency 'rake' - s.add_development_dependency 'react-rails', '~> 2.4.0' + s.add_development_dependency 'react-rails', '>= 2.3.0', '< 2.5.0' s.add_development_dependency 'rspec-rails' - s.add_development_dependency 'rubocop' + s.add_development_dependency 'rubocop', '~> 0.51.0' s.add_development_dependency 'sqlite3' s.add_development_dependency 'mini_racer', '~> 0.1.14' s.add_development_dependency 'timecop', '~> 0.8.1' diff --git a/lib/reactive-ruby/version.rb b/lib/reactive-ruby/version.rb index 0dad3fe..e412d53 100644 --- a/lib/reactive-ruby/version.rb +++ b/lib/reactive-ruby/version.rb @@ -1,3 +1,3 @@ module React - VERSION = '0.15.0-sachsenring-lap2' + VERSION = '0.15.0-sachsenring-lap5' end From 9243bc2660b1a5df8f5cf73ac8dd15b3830f422d Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 1 Dec 2017 19:05:17 +0100 Subject: [PATCH 061/313] try using node as taskrunner for tests --- Rakefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Rakefile b/Rakefile index 1e2c349..ef36e41 100644 --- a/Rakefile +++ b/Rakefile @@ -14,6 +14,7 @@ RSpec::Core::RakeTask.new('ruby:rspec') Opal::RSpec::RakeTask.new('opal:rspec') do |s, task| s.append_path 'spec/vendor' s.index_path = 'spec/index.html.erb' + task.runner = :node task.timeout = 80000 if task end From 890a206c6a47239eec61601bc1de9f952bd0b5e4 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 1 Dec 2017 19:05:39 +0100 Subject: [PATCH 062/313] remove support for old react --- spec/support/react/spec_helpers.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/support/react/spec_helpers.rb b/spec/support/react/spec_helpers.rb index 7282c64..f6aa2a8 100644 --- a/spec/support/react/spec_helpers.rb +++ b/spec/support/react/spec_helpers.rb @@ -11,11 +11,7 @@ def renderToDocument(type, options = {}) def build_element(type, options) component = React.create_element(type, options) element = `ReactTestUtils.renderIntoDocument(#{component.to_n})` - if `typeof React.findDOMNode === 'undefined'` - `$(element.getDOMNode())` # v0.12 - else - `$(React.findDOMNode(element))` # v0.13 - end + `$(React.findDOMNode(element))` # v0.13 end def expect_component_to_eventually(component_class, opts = {}, &block) From c91ea7f2b9d9e02c77141f52cb2da69d59e80416 Mon Sep 17 00:00:00 2001 From: Jan Biedermann Date: Fri, 1 Dec 2017 19:06:11 +0100 Subject: [PATCH 063/313] use Hyperloop.prerendering config option --- lib/reactive-ruby/rails/component_mount.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/reactive-ruby/rails/component_mount.rb b/lib/reactive-ruby/rails/component_mount.rb index 8b29755..91463b4 100644 --- a/lib/reactive-ruby/rails/component_mount.rb +++ b/lib/reactive-ruby/rails/component_mount.rb @@ -8,7 +8,9 @@ def setup(controller) end def react_component(name, props = {}, options = {}, &block) - options = context_initializer_options(options, name) if options[:prerender] + if options[:prerender] || [:on, 'on', true].include?(Hyperloop.prerendering) + options = context_initializer_options(options, name) + end props = serialized_props(props, name, controller) super(top_level_name, props, options, &block).gsub("\n","") .gsub(/(