mirror of
https://github.com/freeCodeCamp/devdocs
synced 2024-11-16 19:48:10 +01:00
70 lines
1.5 KiB
Ruby
70 lines
1.5 KiB
Ruby
require 'bundler/setup'
|
|
Bundler.setup :docs
|
|
|
|
require 'active_support/core_ext'
|
|
|
|
module Docs
|
|
require 'docs/core/autoload_helper'
|
|
extend AutoloadHelper
|
|
|
|
mattr_reader :root_path
|
|
@@root_path = File.expand_path '..', __FILE__
|
|
|
|
autoload :URL, 'docs/core/url'
|
|
autoload_all 'docs/core'
|
|
autoload_all 'docs/filters/core', 'filter'
|
|
autoload_all 'docs/scrapers'
|
|
autoload_all 'docs/storage'
|
|
autoload_all 'docs/subscribers'
|
|
|
|
mattr_accessor :store_class
|
|
self.store_class = FileStore
|
|
|
|
mattr_accessor :store_path
|
|
self.store_path = File.expand_path '../public/docs', @@root_path
|
|
|
|
class DocNotFound < NameError; end
|
|
|
|
def self.all
|
|
Dir["#{root_path}/docs/scrapers/**/*.rb"].
|
|
map { |file| File.basename(file, '.rb') }.
|
|
sort!.
|
|
map(&method(:find)).
|
|
reject(&:abstract)
|
|
end
|
|
|
|
def self.find(name)
|
|
const = name.camelize
|
|
const_get(const)
|
|
rescue NameError => error
|
|
if error.name.to_s == const
|
|
raise DocNotFound.new("failed to locate doc class '#{name}'", name)
|
|
else
|
|
raise error
|
|
end
|
|
end
|
|
|
|
def self.generate_page(name, page_id)
|
|
find(name).store_page(store, page_id)
|
|
end
|
|
|
|
def self.generate(name)
|
|
find(name).store_pages(store)
|
|
end
|
|
|
|
def self.generate_manifest
|
|
Manifest.new(store, all).store
|
|
end
|
|
|
|
def self.store
|
|
store_class.new(store_path)
|
|
end
|
|
|
|
extend Instrumentable
|
|
|
|
def self.install_report(*names)
|
|
names.each do |name|
|
|
const_get("#{name}_subscriber".camelize).subscribe_to(self)
|
|
end
|
|
end
|
|
end
|