Sha256: 19fece20b51533ae3469d502c06fa4eff922f69691b46e29486c0e1c62a51983

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

module Lookbook
  module Utils
    include Lookbook::Engine.routes.url_helpers

    POSITION_PREFIX_REGEX = /^(\d+?)[-_]/
    FRONTMATTER_REGEX = /\A---(.|\n)*?---/

    protected

    def generate_id(*args)
      parts = args.map { |arg| arg.to_s.parameterize.underscore }
      parts.join("-").tr("/_", "-").delete_prefix("-").delete_suffix("-").gsub("--", "-")
    end

    def preview_class_basename(klass)
      class_name(klass).to_s.chomp("ComponentPreview").chomp("Component::Preview").chomp("::Preview").chomp("Component").chomp("Preview").chomp("::")
    end

    def preview_class_name(klass)
      preview_class_basename(klass).underscore
    end

    def class_name(klass)
      klass.is_a?(Class) ? klass.name : klass
    end

    def normalize_matchers(*matchers)
      matchers.flatten.map { |m| m.gsub(/\s/, "").downcase }
    end

    def get_position_prefix(str)
      parse_position_prefix(str).first
    end

    def remove_position_prefix(str)
      parse_position_prefix(str).last
    end

    def get_frontmatter(str)
      parse_frontmatter(str).first
    end

    def strip_frontmatter(str)
      parse_frontmatter(str).last
    end

    def to_lookup_path(path)
      path.split("/").map { |segment| remove_position_prefix(segment) }.join("/")
    end

    def to_preview_path(*args)
      args.flatten.map { |arg| preview_class_name(arg) }.join("/")
    end

    protected

    def default_url_options
      {}
    end

    private

    def parse_frontmatter(content)
      frontmatter = content.match(FRONTMATTER_REGEX)
      if frontmatter.nil?
        [{}, content]
      else
        [YAML.safe_load(frontmatter[0]), content.gsub(FRONTMATTER_REGEX, "")]
      end
    end

    def parse_position_prefix(str)
      pos = str.match(POSITION_PREFIX_REGEX)
      if pos.nil?
        [10000, str]
      else
        cleaned_str = str.gsub(POSITION_PREFIX_REGEX, "")
        [pos[1].to_i, cleaned_str]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lookbook-1.0.0.beta.0 lib/lookbook/utils.rb