Class: Lookbook::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/lookbook/config.rb

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/lookbook/config.rb', line 7

def initialize
  @options = Store.new({}, true)

  @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_srcdoc: nil,
    preview_tags: {},
    preview_disable_action_view_annotations: true,
    sort_examples: false,

    listen: Rails.env.development?,
    listen_paths: [],
    listen_extensions: ["rb", "html.*"],
    listen_use_polling: false,

    cable_mount_path: "/cable",
    cable_logger: Lookbook.logger,

    parser_registry_path: "tmp/storage/.yardoc",

    ui_theme: "indigo",
    ui_theme_overrides: {},
    ui_favicon: true,

    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,
        system: true
      },
      output: {
        pane: :main,
        position: 2,
        partial: "lookbook/previews/panels/output",
        label: "HTML",
        hotkey: "h",
        padded: false,
        system: true
      },
      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,
        system: true
      },
      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,
        system: true
      },
      params: {
        pane: :drawer,
        position: 3,
        partial: "lookbook/previews/panels/params",
        label: "Params",
        hotkey: "p",
        disabled: ->(data) { data.preview.params.none? },
        padded: false,
        system: true
      }
    }
  })
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object (protected)



259
260
261
# File 'lib/lookbook/config.rb', line 259

def method_missing(name, *args)
  @options.send(name, *args)
end

Instance Method Details

#[](key) ⇒ Object



220
221
222
223
224
225
226
# File 'lib/lookbook/config.rb', line 220

def [](key)
  if respond_to? key.to_sym
    public_send(key.to_sym)
  else
    @options[key.to_sym]
  end
end

#[]=(key, value) ⇒ Object



228
229
230
231
232
233
234
235
# File 'lib/lookbook/config.rb', line 228

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

#amend_inspector_panel(name, opts = {}) ⇒ Object



173
174
175
176
177
178
179
# File 'lib/lookbook/config.rb', line 173

def amend_inspector_panel(name, opts = {})
  if opts == false
    @options.inspector_panels[name] = false
  else
    @options.inspector_panels[name].merge!(opts)
  end
end

#components_pathObject



115
116
117
# File 'lib/lookbook/config.rb', line 115

def components_path
  absolute_path(@options.components_path)
end

#define_inspector_panel(name, opts = {}) ⇒ Object



161
162
163
164
165
166
167
168
169
170
171
# File 'lib/lookbook/config.rb', line 161

def define_inspector_panel(name, opts = {})
  pane = opts[:pane].presence || :drawer
  siblings = inspector_panels.select { |key, panel| panel.pane == pane }
  opts[:position] ||= siblings.size + 1
  @options.inspector_panels[name] = opts
  siblings.each do |key, panel|
    if panel.position >= opts[:position]
      panel.position += 1
    end
  end
end

#inspector_panel_defaultsObject



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/lookbook/config.rb', line 185

def 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: {},
    system: false
  }
end

#inspector_panels(&block) ⇒ Object



152
153
154
155
156
157
158
159
# File 'lib/lookbook/config.rb', line 152

def inspector_panels(&block)
  panels = Store.new(@options.inspector_panels.select { |key, panel| panel != false })
  if block
    yield panels
  else
    panels
  end
end

#listen_extensions=(extensions = []) ⇒ Object



143
144
145
146
# File 'lib/lookbook/config.rb', line 143

def listen_extensions=(extensions = [])
  @options.listen_extensions += extensions if extensions.is_a? Array
  @options.listen_extensions.uniq!
end

#listen_pathsObject



139
140
141
# File 'lib/lookbook/config.rb', line 139

def listen_paths
  normalize_paths(@options.listen_paths)
end

#page_pathsObject



123
124
125
# File 'lib/lookbook/config.rb', line 123

def page_paths
  normalize_paths(@options.page_paths)
end

#page_paths=(paths = []) ⇒ Object



119
120
121
# File 'lib/lookbook/config.rb', line 119

def page_paths=(paths = [])
  @options.page_paths += paths if paths.is_a? Array
end

#parser_registry_pathObject



148
149
150
# File 'lib/lookbook/config.rb', line 148

def parser_registry_path
  absolute_path(@options.parser_registry_path)
end

#preview_pathsObject



131
132
133
# File 'lib/lookbook/config.rb', line 131

def preview_paths
  normalize_paths(@options.preview_paths)
end

#preview_paths=(paths = []) ⇒ Object



127
128
129
# File 'lib/lookbook/config.rb', line 127

def preview_paths=(paths = [])
  @options.preview_paths += paths if paths.is_a? Array
end

#preview_srcdoc=(enable) ⇒ Object



135
136
137
# File 'lib/lookbook/config.rb', line 135

def preview_srcdoc=(enable)
  Lookbook.logger.warn "The `preview_srcdoc` config option is deprecated and will be removed in v2.0"
end

#project_nameObject



111
112
113
# File 'lib/lookbook/config.rb', line 111

def project_name
  @options.project_name == false ? nil : @options.project_name
end

#remove_inspector_panel(name) ⇒ Object



181
182
183
# File 'lib/lookbook/config.rb', line 181

def remove_inspector_panel(name)
  amend_inspector_panel(name, false)
end

#runtime_parsing=(value) ⇒ Object



107
108
109
# File 'lib/lookbook/config.rb', line 107

def runtime_parsing=(value)
  Lookbook.logger.warn "The `runtime_parsing` config option has been deprecated and will be removed in v2.0"
end

#to_hObject



237
238
239
# File 'lib/lookbook/config.rb', line 237

def to_h
  @options.to_h
end

#to_json(*a) ⇒ Object



241
242
243
# File 'lib/lookbook/config.rb', line 241

def to_json(*a)
  to_h.to_json(*a)
end

#ui_theme=(name) ⇒ Object



203
204
205
206
207
208
209
210
# File 'lib/lookbook/config.rb', line 203

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

#ui_theme_overrides(&block) ⇒ Object



212
213
214
215
216
217
218
# File 'lib/lookbook/config.rb', line 212

def ui_theme_overrides(&block)
  if block
    yield @options.ui_theme_overrides
  else
    @options.ui_theme_overrides
  end
end