class Lookbook::ParamTag

def description

def description
  tag_args[:description]
end

def extract_name(text)

def extract_name(text)
  parts = text.to_s.split(" ")
  [parts.shift, parts.join(" ")]
end

def initialize(text)

def initialize(text)
  @name, text_without_name = extract_name(text)
  @tag_args = parse_tag_body(text_without_name)
  super("param", tag_args[:rest], nil, @name)
end

def input

def input
  tag_args[:input]&.downcase&.tr("_", "-")
end

def parse_tag_body(text)

def parse_tag_body(text)
  value_type = nil
  description = nil
  text.match(VALUE_TYPE_MATCHER) do |match_data|
    value_type = match_data[2]
    text.gsub!(VALUE_TYPE_MATCHER, "").strip!
  end
  text.match(DESCRIPTION_MATCHER) do |match_data|
    description = match_data[1]
    text.gsub!(DESCRIPTION_MATCHER, "").strip!
  end
  input, rest = text.split(" ", 2)
  {input: input, value_type: value_type, description: description, rest: rest}
end

def value_default

def value_default
  default_value_parts = object.parameters.find { |parts| parts[0].chomp(":") == name }
  if default_value_parts
    object.instance_eval(default_value_parts[1])
  else
    raise ParserError.new "Unknown method parameter '#{name}'"
  end
end

def value_type

def value_type
  tag_args[:value_type]&.downcase
end