class Lookbook::Config
def [](key)
def [](key) if respond_to? key.to_sym public_send(key.to_sym) else @options[key.to_sym] end end
def []=(key, value)
def []=(key, value) setter_key = "#{key}=".to_sym if respond_to? setter_key public_send(setter_key, value) else @options[key.to_sym] = value end end
def absolute_path(path)
def absolute_path(path) File.absolute_path(path.to_s, Rails.root) end
def amend_inspector_panel(name, opts = {})
def amend_inspector_panel(name, opts = {}) if opts == false @options.inspector_panels[name] = false else @options.inspector_panels[name].merge!(opts) end end
def components_path
def components_path absolute_path(@options.components_path) end
def define_inspector_panel(name, opts = {})
def define_inspector_panel(name, opts = {}) @options.inspector_panels[name] = opts if opts[:position].present? pane = inspector_panels[name].pane.presence || :drawer siblings = inspector_panels.select do |key, panel| panel.pane == pane && key != name.to_sym end siblings.each do |key, panel| if panel.position >= opts[:position] panel.position += 1 end end end end
def initialize
def initialize @options = Store.new @options.set({ project_name: "Lookbook", log_level: 2, auto_refresh: true, components_path: "app/components", page_controller: "Lookbook::PageController", page_route: "pages", page_paths: ["test/components/docs"], page_options: {}, markdown_options: Markdown::DEFAULT_OPTIONS, preview_paths: [], preview_display_params: {}, preview_options: {}, preview_srcdoc: false, sort_examples: true, listen: Rails.env.development?, listen_paths: [], listen_use_polling: false, cable_mount_path: "/lookbook-cable", cable_logger: Lookbook.logger, runtime_parsing: !Rails.env.production?, parser_registry_path: "tmp/storage/.yardoc", ui_theme: "indigo", ui_theme_overrides: {}, hooks: { after_initialize: [], before_exit: [], after_change: [], }, debug_menu: Rails.env.development?, experimental_features: false, inspector_panels: { preview: { pane: :main, position: 1, partial: "lookbook/previews/panels/preview", hotkey: "v", panel_classes: "overflow-hidden", padded: false }, output: { pane: :main, position: 2, partial: "lookbook/previews/panels/output", label: "HTML", hotkey: "h", padded: false }, source: { pane: :drawer, position: 1, partial: "lookbook/previews/panels/source", label: "Source", hotkey: "s", copy: ->(data) { data.examples.map { |e| e.source }.join("\n") }, padded: false }, notes: { pane: :drawer, position: 2, partial: "lookbook/previews/panels/notes", label: "Notes", hotkey: "n", disabled: ->(data) { data.examples.select { |e| e.notes.present? }.none? }, padded: false }, params: { pane: :drawer, position: 3, partial: "lookbook/previews/panels/params", label: "Params", hotkey: "p", disabled: ->(data) { data.preview.params.none? }, padded: false } }, inspector_panel_defaults: { id: ->(data) { "inspector-panel-#{data.name}" }, partial: "lookbook/previews/panels/content", content: nil, label: ->(data) { data.name.titleize }, pane: :drawer, position: ->(data) { data.index_position }, hotkey: nil, disabled: false, show: true, copy: nil, panel_classes: nil, locals: {}, padded: true }, }) end
def inspector_panels(&block)
def inspector_panels(&block) panels = Store.new(@options.inspector_panels.select { |key, panel| panel != false }) if block_given? yield panels else panels end end
def listen_paths
def listen_paths normalize_paths(@options.listen_paths) end
def method_missing(name, *args)
def method_missing(name, *args) @options.send(name, *args) end
def normalize_paths(paths)
def normalize_paths(paths) paths.map! { |path| absolute_path(path) } paths.select { |path| Dir.exist?(path) } end
def page_paths
def page_paths normalize_paths(@options.page_paths) end
def parser_registry_path
def parser_registry_path absolute_path(@options.parser_registry_path) end
def preview_paths
def preview_paths normalize_paths(@options.preview_paths) end
def project_name
def project_name @options.project_name == false ? nil : @options.project_name end
def remove_inspector_panel(name)
def remove_inspector_panel(name) amend_inspector_panel(name, false) end
def to_h
def to_h @options.to_h end
def to_json(*a)
def to_json(*a) to_h.to_json(*a) end
def ui_theme=(name)
def ui_theme=(name) name = name.to_s if Theme.valid_theme?(name) @options.ui_theme = name else Lookbook.logger.warn "'#{name}' is not a valid Lookbook theme. Theme setting not changed." end end
def ui_theme_overrides(&block)
def ui_theme_overrides(&block) if block_given? yield @options.ui_theme_overrides else @options.ui_theme_overrides end end