Class: Lookbook::Engine

Inherits:
Rails::Engine
  • Object
show all
Defined in:
lib/lookbook/engine.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.auto_refresh?Boolean

Returns:

  • (Boolean)


110
111
112
113
114
115
# File 'lib/lookbook/engine.rb', line 110

def auto_refresh?
  opts.live_updates == true &&
    reloading? &&
    runtime_context.web? &&
    FileWatcher.evented?
end

.component_pathsObject



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

def component_paths
  @_component_paths ||= begin
    paths = [*opts.component_paths, *view_paths, host_app_path]
    PathUtils.normalize_paths(paths)
  end
end

.files_changed(modified, added, removed) ⇒ Object



234
235
236
237
238
# File 'lib/lookbook/engine.rb', line 234

def files_changed(modified, added, removed)
  changes = {modified: modified, added: added, removed: removed}
  reloaders.register_changes(changes)
  notify_clients(changes)
end

.hooksObject



145
146
147
# File 'lib/lookbook/engine.rb', line 145

def hooks
  @_hooks ||= HookStore.new
end

.host_app_pathObject



155
156
157
# File 'lib/lookbook/engine.rb', line 155

def host_app_path
  Rails.application.root.join("app")
end

.host_configObject



159
160
161
# File 'lib/lookbook/engine.rb', line 159

def host_config
  Rails.application.config
end

.inputsObject



137
138
139
# File 'lib/lookbook/engine.rb', line 137

def inputs
  @_inputs ||= InputStore.init_from_config
end

.load_pages(changes = nil) ⇒ Object



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

def load_pages(changes = nil)
  pages.load(Engine.page_paths, changes)
rescue => e
  Lookbook.logger.error(e)
  raise e
end

.load_previews(changes = nil) ⇒ Object



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

def load_previews(changes = nil)
  changed_files = [*changes[:added], *changes[:modified]] if changes
  parser.parse(changed_files) do |code_objects|
    previews.load(code_objects.all(:class), changes)
  end
rescue => e
  Lookbook.logger.error(e)
  raise e
end

.mount_pathObject



98
99
100
# File 'lib/lookbook/engine.rb', line 98

def mount_path
  routes.find_script_name({})
end

.mounted?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'lib/lookbook/engine.rb', line 102

def mounted?
  mount_path.present?
end

.notify_clients(changes = nil) ⇒ Object



227
228
229
230
231
232
# File 'lib/lookbook/engine.rb', line 227

def notify_clients(changes = nil)
  return unless changes.present?

  websocket.broadcast(:reload)
  run_hooks(:after_change, changes.to_h)
end

.page_pathsObject Also known as: page_watch_paths



180
181
182
# File 'lib/lookbook/engine.rb', line 180

def page_paths
  @_page_paths ||= PathUtils.normalize_paths(opts.page_paths)
end

.pagesObject



197
198
199
# File 'lib/lookbook/engine.rb', line 197

def pages
  @_pages ||= PageCollection.new
end

.panelsObject



133
134
135
# File 'lib/lookbook/engine.rb', line 133

def panels
  @_panels ||= PanelStore.init_from_config
end

.preview_controllerObject



205
206
207
208
# File 'lib/lookbook/engine.rb', line 205

def preview_controller
  @_preview_controller = opts.preview_controller.constantize
  @_preview_controller.include PreviewControllerActions
end

.preview_embeds_allowed?Boolean

Returns:

  • (Boolean)


117
118
119
# File 'lib/lookbook/engine.rb', line 117

def preview_embeds_allowed?
  opts.preview_embeds.enabled == true && opts.preview_embeds.policy != "DENY"
end

.preview_pathsObject



186
187
188
# File 'lib/lookbook/engine.rb', line 186

def preview_paths
  @_preview_paths ||= PathUtils.normalize_paths(opts.preview_paths)
end

.preview_watch_pathsObject



190
191
192
193
194
195
# File 'lib/lookbook/engine.rb', line 190

def preview_watch_paths
  @_preview_watch_paths ||= begin
    paths = [*opts.preview_paths, *opts.component_paths, *opts.listen_paths, *view_paths].uniq
    PathUtils.normalize_paths(paths)
  end
end

.previewsObject



201
202
203
# File 'lib/lookbook/engine.rb', line 201

def previews
  @_previews ||= PreviewCollection.new
end

.reloading?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'lib/lookbook/engine.rb', line 106

def reloading?
  opts.reload_on_change
end

.run_hooks(event_name, *args) ⇒ Object



149
150
151
152
153
# File 'lib/lookbook/engine.rb', line 149

def run_hooks(event_name, *args)
  hooks.for_event(event_name).each do |hook|
    hook.call(Lookbook, *args)
  end
end

.runtime_contextObject



125
126
127
# File 'lib/lookbook/engine.rb', line 125

def runtime_context
  @_runtime_context ||= RuntimeContext.new(env: Rails.env)
end

.tagsObject



141
142
143
# File 'lib/lookbook/engine.rb', line 141

def tags
  @_tags ||= TagStore.init_from_config
end

.themeObject



129
130
131
# File 'lib/lookbook/engine.rb', line 129

def theme
  @_theme ||= Lookbook::Theme.new(opts.ui_theme, opts.ui_theme_overrides)
end

.view_pathsObject



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

def view_paths
  # handle view path registry changes in Rails 7.1
  paths = if defined?(ActionView::PathRegistry)
    ActionView::PathRegistry.all_file_system_resolvers.map(&:path)
  else
    ActionView::ViewPaths.all_view_paths.flat_map(&paths)
  end
  paths.map { |path| Pathname(path.to_s) }
end

.websocketObject



121
122
123
# File 'lib/lookbook/engine.rb', line 121

def websocket
  @_websocket ||= auto_refresh? ? Websocket.new(mount_path, logger: Lookbook.logger) : NullWebsocket.new
end

Instance Method Details

#optsObject



83
84
85
# File 'lib/lookbook/engine.rb', line 83

def opts
  Lookbook.config
end

#parserObject



87
88
89
# File 'lib/lookbook/engine.rb', line 87

def parser
  @_parser ||= PreviewParser.new(opts.preview_paths, Engine.tags)
end

#reloadersObject



91
92
93
# File 'lib/lookbook/engine.rb', line 91

def reloaders
  @_reloaders ||= Reloaders.new
end