lib/isomorfeus/react/config.rb in isomorfeus-react-16.13.11 vs lib/isomorfeus/react/config.rb in isomorfeus-react-16.13.12

- old
+ new

@@ -1,189 +1,189 @@ -module Isomorfeus - if RUBY_ENGINE == 'opal' - class << self - attr_accessor :current_user_sid - attr_accessor :initial_state_fetched - attr_accessor :top_component - attr_accessor :ssr_response_status - attr_reader :initialized - attr_reader :env - attr_accessor :zeitwerk - - def init - return if initialized - @initialized = true - Isomorfeus.init_store - execute_init_classes - end - - def force_init! - unless Isomorfeus.initial_state_fetched - Isomorfeus.initial_state_fetched = true - Redux::Store.preloaded_state = Isomorfeus.store.get_state - end - Isomorfeus.force_init_store! - execute_init_classes - end - - def add_client_init_class_name(init_class_name) - client_init_class_names << init_class_name - end - - def add_client_init_after_store_class_name(init_class_name) - client_init_after_store_class_names << init_class_name - end - - def add_client_option(key, value = nil) - self.class.attr_accessor(key) - self.send("#{key}=", value) - end - - # only used for SSR - def cached_component_classes - @cached_component_classes ||= {} - end - - # only used for SSR - def cached_component_class(class_name) - return cached_component_classes[class_name] if cached_component_classes.key?(class_name) - cached_component_classes[class_name] = "::#{class_name}".constantize - end - - def execute_init_classes - client_init_class_names.each do |constant| - constant.constantize.send(:init) - end - end - - def execute_init_after_store_classes - client_init_after_store_class_names.each do |constant| - constant.constantize.send(:init) - end - end - - def env=(env_string) - @env = env_string ? env_string : 'development' - @development = (@env == 'development') ? true : false - @production = (@env == 'production') ? true : false - @test = (@env == 'test') ? true : false - end - - def development? - @development - end - - def production? - @production - end - - def test? - @test - end - - def start_app! - Isomorfeus.zeitwerk.setup - Isomorfeus::TopLevel.mount! - end - - def force_render - begin - if Isomorfeus.top_component - ReactDOM.find_dom_node(Isomorfeus.top_component) if on_browser? || on_desktop? # if not mounted will raise - if `typeof Opal.global.deepForceUpdate === 'undefined'` - Isomorfeus.top_component.JS.forceUpdate() - else - `Opal.global.deepForceUpdate(#{Isomorfeus.top_component})` - end - end - rescue Exception => e - # TODO try mount first - # if it fails - `console.error("force_render failed'! Error: " + #{e.message} + "! Reloading page.")` - `location.reload()` if on_browser? - end - nil - end - end - - self.add_client_option(:client_init_class_names, []) - self.add_client_option(:client_init_after_store_class_names, []) - else - class << self - attr_reader :component_cache_init_block - attr_accessor :server_side_rendering - attr_accessor :ssr_hot_asset_url - attr_reader :env - attr_accessor :zeitwerk - attr_accessor :zeitwerk_lock - - def component_cache_init(&block) - @component_cache_init_block = block - end - - def configuration(&block) - block.call(self) - end - - def env=(env_string) - @env = env_string ? env_string.to_s : 'development' - @development = (@env == 'development') ? true : false - @production = (@env == 'production') ? true : false - @test = (@env == 'test') ? true : false - end - - def development? - @development - end - - def production? - @production - end - - def test? - @test - end - - def ssr_contexts - @ssr_contexts ||= {} - end - - def version - Isomorfeus::VERSION - end - - def load_configuration(directory) - Dir.glob(File.join(directory, '*.rb')).sort.each do |file| - require File.expand_path(file) - end - end - end - end - - class << self - def raise_error(error_class: nil, message: nil, stack: nil) - error_class = RuntimeError unless error_class - execution_environment = if on_browser? then 'on Browser' - elsif on_ssr? then 'in Server Side Rendering' - elsif on_server? then 'on Server' - elsif on_mobile? then 'on Mobile' - elsif on_database? then 'on Database' - else - 'on Client' - end - error = error_class.new("Isomorfeus in #{env} #{execution_environment}:\n#{message}") - error.set_backtrace(stack) if stack - - if Isomorfeus.development? - if RUBY_ENGINE == 'opal' - ecn = error_class ? error_class.name : '' - m = message ? message : '' - s = stack ? stack : '' - `console.error(ecn, m, s)` - else - STDERR.puts "#{ecn}: #{m}\n #{s}" - end - end - raise error - end - end -end +module Isomorfeus + if RUBY_ENGINE == 'opal' + class << self + attr_accessor :current_user_sid + attr_accessor :initial_state_fetched + attr_accessor :top_component + attr_accessor :ssr_response_status + attr_reader :initialized + attr_reader :env + attr_accessor :zeitwerk + + def init + return if initialized + @initialized = true + Isomorfeus.init_store + execute_init_classes + end + + def force_init! + unless Isomorfeus.initial_state_fetched + Isomorfeus.initial_state_fetched = true + Redux::Store.preloaded_state = Isomorfeus.store.get_state + end + Isomorfeus.force_init_store! + execute_init_classes + end + + def add_client_init_class_name(init_class_name) + client_init_class_names << init_class_name + end + + def add_client_init_after_store_class_name(init_class_name) + client_init_after_store_class_names << init_class_name + end + + def add_client_option(key, value = nil) + self.class.attr_accessor(key) + self.send("#{key}=", value) + end + + # only used for SSR + def cached_component_classes + @cached_component_classes ||= {} + end + + # only used for SSR + def cached_component_class(class_name) + return cached_component_classes[class_name] if cached_component_classes.key?(class_name) + cached_component_classes[class_name] = "::#{class_name}".constantize + end + + def execute_init_classes + client_init_class_names.each do |constant| + constant.constantize.send(:init) + end + end + + def execute_init_after_store_classes + client_init_after_store_class_names.each do |constant| + constant.constantize.send(:init) + end + end + + def env=(env_string) + @env = env_string ? env_string : 'development' + @development = (@env == 'development') ? true : false + @production = (@env == 'production') ? true : false + @test = (@env == 'test') ? true : false + end + + def development? + @development + end + + def production? + @production + end + + def test? + @test + end + + def start_app! + Isomorfeus.zeitwerk.setup + Isomorfeus::TopLevel.mount! + end + + def force_render + begin + if Isomorfeus.top_component + ReactDOM.find_dom_node(Isomorfeus.top_component) if on_browser? || on_desktop? # if not mounted will raise + if `typeof Opal.global.deepForceUpdate === 'undefined'` + Isomorfeus.top_component.JS.forceUpdate() + else + `Opal.global.deepForceUpdate(#{Isomorfeus.top_component})` + end + end + rescue Exception => e + # TODO try mount first + # if it fails + `console.error("force_render failed'! Error: " + #{e.message} + "! Reloading page.")` + `location.reload()` if on_browser? + end + nil + end + end + + self.add_client_option(:client_init_class_names, []) + self.add_client_option(:client_init_after_store_class_names, []) + else + class << self + attr_reader :component_cache_init_block + attr_accessor :server_side_rendering + attr_accessor :ssr_hot_asset_url + attr_reader :env + attr_accessor :zeitwerk + attr_accessor :zeitwerk_lock + + def component_cache_init(&block) + @component_cache_init_block = block + end + + def configuration(&block) + block.call(self) + end + + def env=(env_string) + @env = env_string ? env_string.to_s : 'development' + @development = (@env == 'development') ? true : false + @production = (@env == 'production') ? true : false + @test = (@env == 'test') ? true : false + end + + def development? + @development + end + + def production? + @production + end + + def test? + @test + end + + def ssr_contexts + @ssr_contexts ||= {} + end + + def version + Isomorfeus::VERSION + end + + def load_configuration(directory) + Dir.glob(File.join(directory, '*.rb')).sort.each do |file| + require File.expand_path(file) + end + end + end + end + + class << self + def raise_error(error_class: nil, message: nil, stack: nil) + error_class = RuntimeError unless error_class + execution_environment = if on_browser? then 'on Browser' + elsif on_ssr? then 'in Server Side Rendering' + elsif on_server? then 'on Server' + elsif on_mobile? then 'on Mobile' + elsif on_database? then 'on Database' + else + 'on Client' + end + error = error_class.new("Isomorfeus in #{env} #{execution_environment}:\n#{message}") + error.set_backtrace(stack) if stack + + if Isomorfeus.development? + if RUBY_ENGINE == 'opal' + ecn = error_class ? error_class.name : '' + m = message ? message : '' + s = stack ? stack : '' + `console.error(ecn, m, s)` + else + STDERR.puts "#{ecn}: #{m}\n #{s}" + end + end + raise error + end + end +end