lib/lookbook/entities/scenario_group_entity.rb in lookbook-2.0.0.beta.3 vs lib/lookbook/entities/scenario_group_entity.rb in lookbook-2.0.0.beta.4

- old
+ new

@@ -1,57 +1,130 @@ module Lookbook # Represents a group of preview scenarios within a preview class # - # @ignore methods # @api public class ScenarioGroupEntity < Entity include NavigableEntity - attr_reader :scenarios, :preview + # @!group Scenarios + # Returns all scenarios within the group. + # + # @return [Array<ScenarioEntity>] All scenarios + attr_reader :scenarios + + # @!endgroup + + # The preview that this scenario belongs to. + # + # @return [PreviewEntity] The parent preview entity + attr_reader :preview + + # @api private + alias_method :parent, :preview + + # @api private def initialize(name, scenarios, preview) @name = Utils.name(name) @scenarios = ScenarioCollection.new(scenarios) @preview = preview @lookup_path = "#{parent.lookup_path}/#{@name}" end + # @!group Display options + + # Display options hash. + # + # Contains all display options defined via the `@display` tag + # for each scenario in the group, merged with any globally-defined options. + # + # @return [Hash] The resolved display options def display_options merged = {} scenarios.to_a.reverse.map do |scenario| merged.merge!(scenario.display_options) end merged end + # @!endgroup + + # @!group Render Targets + + # Collection of render targets (components or partials) + # from each of the scenarios in the group. + # + # Render targets are guessed where possible (based on the preview class name) + # but can also be manually specified using the `@renders` tag. + # + # @example :ruby + # "This group renders: #{group.render_targets.map(&:label).join(", ")}" + # + # @return [Array<RenderableEntity>] Render target entities def render_targets @_render_targets ||= RenderTargetCollection.new(scenarios.flat_map(&:render_targets).uniq(&:lookup_path)) end - def search_terms - [parent.label, label] - end + alias_method :components, :render_targets + # @!endgroup + + # @!group Annotations + + # Collection of tags from each of the scenarios in the group. + # Can be filtered by tag name by providing the name as an argument. + # + # @example :ruby + # all_tags = group.tags + # display_tags = group.tags(:display) + # + # @param tag_name [Symbol] Optional tag type to filter by + # @return [Array<YardTag>] Array of tags def tags(tag_name = nil) scenarios.flat_map { |scenario| scenario.tags(tag_name) } end + # @api private def tag(tag_name = nil) tags(tag_name).first end - def url_path + # @!endgroup + + # @!group URLs + + # The inspector URL path for this scenario group + # + # @return [String] URL path + def inspect_path lookbook_inspect_path(lookup_path) end + # The standalone preview URL path for this scenario group + # + # @return [String] URL path def preview_path lookbook_preview_path(lookup_path) end + alias_method :url_path, :inspect_path + + # @!endgroup + + # @!group Identity + + # Entity type identifier. + # Returns `:scenario_group` for scenario groups. + # + # @return [Symbol] The entity type def type - :group + :scenario_group end - alias_method :parent, :preview - alias_method :components, :render_targets + # @!endgroup + + # @api private + def search_terms + [parent.label, label] + end end end