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 return unless config.lookbook.listen == true Listen.logger = Lookbook.logger Lookbook.logger.info "Initializing listeners" preview_listener = Listen.to( *config.lookbook.listen_paths, only: /\.(#{config.lookbook.listen_extensions.join("|")})$/, force_polling: config.lookbook.listen_use_polling ) do |modified, added, removed| changes = {modified: modified, added: added, removed: removed} begin Lookbook::Engine.parser.parse rescue end Lookbook::Preview.clear_cache Lookbook::Engine.reload_ui(changes) Lookbook::Engine.run_hooks(:after_change, changes) end Lookbook::Engine.register_listener(preview_listener) page_listener = Listen.to( *config.lookbook.page_paths, only: /\.(html.*|md.*)$/, force_polling: config.lookbook.listen_use_polling ) do |modified, added, removed| changes = {modified: modified, added: added, removed: removed} Lookbook::Engine.reload_ui(changes) Lookbook::Engine.run_hooks(:after_change, changes) end Lookbook::Engine.register_listener(page_listener) 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, config.lookbook.parser_registry_path) end
def register_listener(listener)
def register_listener(listener) listener.start listeners << listener end
def reload_ui(changed = {})
def reload_ui(changed = {}) websocket&.broadcast("reload", changed) 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 websocket
def websocket return @websocket unless @websocket.nil? if config.lookbook.auto_refresh cable = ActionCable::Server::Configuration.new cable.cable = {adapter: "async"}.with_indifferent_access cable.mount_path = config.lookbook.cable_mount_path cable.connection_class = -> { Lookbook::Connection } cable.logger = config.lookbook.cable_logger @websocket ||= if Rails.version.to_f >= 6.0 ActionCable::Server::Base.new(config: cable) else ws = ActionCable::Server::Base.new ws.config = cable ws end end end
def websocket_mount_path
def websocket_mount_path "#{mounted_path}#{config.lookbook.cable_mount_path}" if websocket end