Sha256: 1afc291b9b1f815c5def6ca5513280e5574093b99b45bcda6f5ac4e10ecc0586

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

module GovukPublishingComponents
  class ComponentDocResolver
    def get(id)
      component = fetch_component_doc(id)
      build(component)
    end

    def all
      fetch_component_docs.map { |component| build(component) }
    end

  private

    def build(component)
      examples = component[:examples].map { |id, example|
        example = example || {}
        ComponentExample.new(id.to_s, example["data"], example["context"], example["description"])
      }

      ComponentDoc.new(component[:id],
                       component[:name],
                       component[:description],
                       component[:body],
                       component[:accessibility_criteria],
                       examples)
    end

    def fetch_component_docs
      doc_files = Rails.root.join(documentation_directory, "*.yml")
      Dir[doc_files].sort.map { |file| parse_documentation(file) }
    end

    def fetch_component_doc(id)
      file = Rails.root.join(documentation_directory, "#{id}.yml")
      parse_documentation(file)
    end

    def parse_documentation(file)
      { id: File.basename(file, ".yml") }.merge(YAML::load_file(file)).with_indifferent_access
    end

    def documentation_directory
      Rails.root.join("app", "views", GovukPublishingComponents::Config.component_directory_name, "docs")
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
govuk_publishing_components-1.5.0 app/models/govuk_publishing_components/component_doc_resolver.rb
govuk_publishing_components-1.4.0 app/models/govuk_publishing_components/component_doc_resolver.rb
govuk_publishing_components-1.3.0 app/models/govuk_publishing_components/component_doc_resolver.rb