Sha256: f309cd40ad803da84671ea209f699d627c1aa2174c35f3cf28092afa81cd4b02
Contents?: true
Size: 1.88 KB
Versions: 2
Compression:
Stored size: 1.88 KB
Contents
# frozen_string_literal: true require "active_support/descendants_tracker" module ViewComponent # :nodoc: class Preview extend ActiveSupport::DescendantsTracker def render(component, **args, &block) { component: component, args: args, block: block } end class << self # Returns all component preview classes. def all load_previews if descendants.empty? descendants end # Returns the arguments for rendering of the component in its layout def render_args(example) new.public_send(example).merge(layout: @layout) end # Returns the component object class associated to the preview. def component name.chomp("Preview").constantize end # Returns all of the available examples for the component preview. def examples public_instance_methods(false).map(&:to_s).sort end # Returns +true+ if the example of the component preview exists. def example_exists?(example) examples.include?(example) end # Returns +true+ if the preview exists. def exists?(preview) all.any? { |p| p.preview_name == preview } end # Find a component preview by its underscored class name. def find(preview) all.find { |p| p.preview_name == preview } end # Returns the underscored name of the component preview without the suffix. def preview_name name.chomp("Preview").underscore end # Setter for layout name. def layout(layout_name) @layout = layout_name end private def load_previews if preview_path Dir["#{preview_path}/**/*_preview.rb"].sort.each { |file| require_dependency file } end end def preview_path Base.preview_path end def show_previews Base.show_previews end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
actionview-component-1.14.1 | lib/view_component/preview.rb |
actionview-component-1.14.0 | lib/view_component/preview.rb |