class ExampleRegistry
class << self
def instance
@instance ||= new
end
def reload!
@instance = new
end
delegate :all, :find_by_slug, :filter_by_tag, :tags, to: :instance
end
def initialize
@entries = load_entries
end
def all
@entries.sort_by(&:position)
end
def find_by_slug(slug)
@entries.detect { |e| e.slug == slug }
end
def filter_by_tag(tag)
@entries.select { |e| e.tags.include?(tag) }.sort_by(&:position)
end
def tags
@entries.flat_map(&:tags).uniq.sort
end
private
def load_entries
examples_root = Rails.root.join("app", "examples")
return [] unless examples_root.directory?
Dir[examples_root.join("*", "example.yml")].map do |yml_path|
base_path = File.dirname(yml_path)
slug = File.basename(base_path)
data = YAML.safe_load_file(yml_path, permitted_classes: [Symbol])
ExampleEntry.new(slug: slug, data: data, base_path: base_path)
end
end
end