1 2 3 4 5 6 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
# frozen_string_literal: true
require "view_component/deprecation"
module ViewComponent
class Config
class << self
# `new` without any arguments initializes the default configuration, but
# it's important to differentiate in case that's no longer the case in
# future.
alias_method :default, :new
def defaults
ActiveSupport::OrderedOptions.new.merge!({
generate: ActiveSupport::OrderedOptions.new(false),
preview_controller: "ViewComponentsController",
preview_route: "/rails/view_components",
show_previews_source: false,
instrumentation_enabled: false,
render_monkey_patch_enabled: true,
view_component_path: "app/components",
component_parent_class: nil,
show_previews: Rails.env.development? || Rails.env.test?,
preview_paths: default_preview_paths,
test_controller: "ApplicationController",
default_preview_layout: nil
})
end
# @!attribute generate
# @return [ActiveSupport::OrderedOptions]
# The subset of configuration options relating to generators.
#
# All options under this namespace default to `false` unless otherwise
# stated.
#
# #### #sidecar
#
# Always generate a component with a sidecar directory:
#
# config.view_component.generate.sidecar = true
#
# #### #stimulus_controller
#
# Always generate a Stimulus controller alongside the component:
#
# config.view_component.generate.stimulus_controller = true
#
# #### #locale
#
# Always generate translations file alongside the component:
#
# config.view_component.generate.locale = true
#
# #### #distinct_locale_files
#
# Always generate as many translations files as available locales:
#
# config.view_component.generate.distinct_locale_files = true
#
# One file will be generated for each configured `I18n.available_locales`,
# falling back to `[:en]` when no `available_locales` is defined.
#
# #### #preview
#
# Always generate a preview alongside the component:
#
# config.view_component.generate.preview = true
# @!attribute preview_controller
# @return [String]
# The controller used for previewing components.
# Defaults to `ViewComponentsController`.
# @!attribute preview_route
# @return [String]
# The entry route for component previews.
# Defaults to `"/rails/view_components"`.
# @!attribute show_previews_source
# @return [Boolean]
# Whether to display source code previews in component previews.
# Defaults to `false`.
# @!attribute instrumentation_enabled
# @return [Boolean]
# Whether ActiveSupport notifications are enabled.
# Defaults to `false`.
# @!attribute render_monkey_patch_enabled
# @return [Boolean] Whether the #render method should be monkey patched.
# If this is disabled, use `#render_component` or
# `#render_component_to_string` instead.
# Defaults to `true`.
# @!attribute view_component_path
# @return [String]
# The path in which components, their templates, and their sidecars should
# be stored.
# Defaults to `"app/components"`.
# @!attribute component_parent_class
# @return [String]
# The parent class from which generated components will inherit.
# Defaults to `nil`. If this is falsy, generators will use
# `"ApplicationComponent"` if defined, `"ViewComponent::Base"` otherwise.
# @!attribute show_previews
# @return [Boolean]
# Whether component previews are enabled.
# Defaults to `true` in development and test environments.
# @!attribute preview_paths
# @return [Array<String>]
# The locations in which component previews will be looked up.
# Defaults to `['test/component/previews']` relative to your Rails root.
# @!attribute preview_path
# @deprecated Use #preview_paths instead. Will be removed in v3.0.0.
# @!attribute test_controller
# @return [String]
# The controller used for testing components.
# Can also be configured on a per-test basis using `#with_controller_class`.
# Defaults to `ApplicationController`.
# @!attribute default_preview_layout
# @return [String]
# A custom default layout used for the previews index page and individual
# previews.
# Defaults to `nil`. If this is falsy, `"component_preview"` is used.
def default_preview_paths
return [] unless defined?(Rails.root) && Dir.exist?("#{Rails.root}/test/components/previews")
["#{Rails.root}/test/components/previews"]
end
end
def initialize
@config = self.class.defaults
end
def preview_path
preview_paths
end
def preview_path=(new_value)
ViewComponent::Deprecation.warn("`preview_path` will be removed in v3.0.0. Use `preview_paths` instead.")
self.preview_paths = Array.wrap(new_value)
end
delegate_missing_to :config
private
attr_reader :config
end
end
|