class Lookbook::Engine
def app_name
def app_name name = if Gem::Version.new(Rails.version) >= Gem::Version.new("6.1") Rails.application.class.module_parent_name else Rails.application.class.parent_name end name.underscore end
def init_listeners
def init_listeners config = Lookbook.config return unless config.listen == true Listen.logger = Lookbook.logger listen_paths = config.listen_paths.uniq if listen_paths.any? preview_listener = Listen.to(*listen_paths, only: /\.(#{config.listen_extensions.join("|")})$/, force_polling: config.listen_use_polling) do |modified, added, removed| parser.parse do run_hooks(:after_change, {modified: modified, added: added, removed: removed}) end end register_listener(preview_listener) end page_paths = config.page_paths.uniq if page_paths.any? page_listener = Listen.to(*page_paths, only: /\.(html.*|md.*)$/, force_polling: config.listen_use_polling) do |modified, added, removed| changes = {modified: modified, added: added, removed: removed} reload_ui run_hooks(:after_change, changes) end register_listener(page_listener) end end
def listeners
def listeners @listeners ||= [] end
def log_level
def log_level Lookbook.logger.level end
def mounted_path
def mounted_path Lookbook::Engine.routes.find_script_name({}) end
def parser
def parser @parser ||= Lookbook::Parser.new(config.lookbook.preview_paths) end
def prevent_listening?
def prevent_listening? Rails.env.test? || running_in_rake_task? end
def register_listener(listener)
def register_listener(listener) listener.start listeners << listener end
def reload_ui
def reload_ui websocket&.broadcast("reload", {}) end
def run_hooks(event_name, *args)
def run_hooks(event_name, *args) config.lookbook.hooks[event_name].each do |hook| hook.call(Lookbook, *args) end end
def running_in_rake_task?
def running_in_rake_task? if defined?(Rake) && Rake.respond_to?(:application) File.basename($0) == "rake" || Rake.application.top_level_tasks.any? else false end end
def stop_listeners
def stop_listeners listeners.each { |listener| listener.stop } end
def websocket
def websocket config = Lookbook.config return @websocket unless @websocket.nil? return unless config.auto_refresh == true && config.listen == true && !Rails.env.test? Lookbook.logger.info "Initializing websocket" cable = ActionCable::Server::Configuration.new cable.cable = {adapter: "async"}.with_indifferent_access cable.mount_path = nil cable.connection_class = -> { Lookbook::Connection } cable.logger = config.cable_logger @websocket ||= if Gem::Version.new(Rails.version) >= Gem::Version.new(6.0) ActionCable::Server::Base.new(config: cable) else ws = ActionCable::Server::Base.new ws.config = cable ws end end
def websocket?
def websocket? websocket.present? end
def websocket_mount_path
def websocket_mount_path "#{mounted_path}#{config.lookbook.cable_mount_path}" if websocket? end