class ActionView::Storybook::StoryConfig

Attributes

content_block[RW]
controls[RW]
id[R]
layout[RW]
name[R]
parameters[RW]
template[R]

Public Class Methods

configure(id, name, layout, template, &configuration) click to toggle source
# File lib/action_view/storybook/story_config.rb, line 49
def self.configure(id, name, layout, template, &configuration)
  config = new(id, name, layout, template)
  ActionView::Storybook::Dsl::StoryDsl.evaluate!(config, &configuration)
  config
end
new(id, name, layout, template) click to toggle source
# File lib/action_view/storybook/story_config.rb, line 13
def initialize(id, name, layout, template)
  @id = id
  @name = name
  @layout = layout
  @template = template
  @controls = []
end

Public Instance Methods

pretty_name(name) click to toggle source
# File lib/action_view/storybook/story_config.rb, line 55
def pretty_name(name)
  name.to_s.humanize.titlecase
end
to_csf_params() click to toggle source
# File lib/action_view/storybook/story_config.rb, line 21
def to_csf_params
  validate!
  csf_params = {
    name: pretty_name(name),
    parameters: {
      server: {
        id: id,
        params: {
          story_name: name
        }
      }
    }
  }
  csf_params.deep_merge!(parameters: parameters) if parameters.present?
  controls.each do |control|
    csf_params.deep_merge!(control.to_csf_params)
  end
  csf_params
end
values_from_params(params) click to toggle source
# File lib/action_view/storybook/story_config.rb, line 41
def values_from_params(params)
  controls.map do |control|
    value = control.value_from_param(params[control.param])
    value = control.value if value.nil? # nil only not falsey
    [control.param, value]
  end.to_h
end

Protected Instance Methods

valid_controls() click to toggle source
# File lib/action_view/storybook/story_config.rb, line 61
def valid_controls
  control_names = controls.map(&:name)
  duplicate_names = control_names.group_by(&:itself).map { |k, v| k if v.length > 1 }.compact
  return if duplicate_names.empty?

  errors.add(:controls, :invalid, message: "Control #{'names'.pluralize(duplicate_names.count)} #{duplicate_names.to_sentence} are repeated")
end