SIGN IN SIGN UP
2013-10-24 20:25:52 +02:00
require 'bundler/setup'
2018-11-04 08:54:19 -05:00
Bundler.require :default, :docs
2013-10-24 20:25:52 +02:00
require 'active_support'
2013-10-24 20:25:52 +02:00
require 'active_support/core_ext'
2013-12-07 10:46:07 +00:00
I18n.enforce_available_locales = true
2013-10-24 20:25:52 +02:00
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
mattr_accessor :rescue_errors
self.rescue_errors = false
2013-10-24 20:25:52 +02:00
class DocNotFound < NameError; end
class SetupError < StandardError; end
2013-10-24 20:25:52 +02:00
def self.all
Dir["#{root_path}/docs/scrapers/**/*.rb"].
map { |file| File.basename(file, '.rb') }.
2016-01-17 13:30:46 -05:00
map { |name| const_get(name.camelize) }.
sort { |a, b| a.name.casecmp(b.name) }.
2013-10-24 20:25:52 +02:00
reject(&:abstract)
end
2016-01-17 13:30:46 -05:00
def self.all_versions
all.flat_map(&:versions)
end
def self.defaults
2022-02-11 10:45:26 +01:00
%w(css dom html http javascript).map(&method(:find))
end
def self.installed
Dir["#{store_path}/**/index.json"].
map { |file| file[%r{/([^/]*)/index\.json\z}, 1] }.
sort!.
map { |path| all_versions.find { |doc| doc.path == path } }.
compact
end
def self.find(name, version = nil)
2013-10-24 20:25:52 +02:00
const = name.camelize
2016-01-17 13:30:46 -05:00
doc = const_get(const)
if version.present?
doc = doc.versions.find { |klass| klass.version == version || klass.version_slug == version }
2016-01-17 13:30:46 -05:00
raise DocNotFound.new(%(could not find version "#{version}" for doc "#{name}"), name) unless doc
2016-04-03 09:54:29 -04:00
elsif version != false
2016-01-17 13:30:46 -05:00
doc = doc.versions.first
end
doc
2013-10-24 20:25:52 +02:00
rescue NameError => error
if error.name.to_s == const
2016-01-17 13:30:46 -05:00
raise DocNotFound.new(%(could not find doc "#{name}"), name)
2013-10-24 20:25:52 +02:00
else
raise error
end
end
def self.find_by_slug(slug, version = nil)
doc = all.find { |klass| klass.slug == slug }
unless doc
raise DocNotFound.new(%(could not find doc with "#{slug}"), slug)
end
if version.present?
version = doc.versions.find { |klass| klass.version == version || klass.version_slug == version }
raise DocNotFound.new(%(could not find version "#{version}" for doc "#{doc.name}"), doc.name) unless version
doc = version
end
doc
end
2016-01-17 13:30:46 -05:00
def self.generate_page(name, version, page_id)
find(name, version).store_page(store, page_id)
2013-10-24 20:25:52 +02:00
end
def self.generate(doc, version = nil)
doc = find(doc, version) unless doc.respond_to?(:store_pages)
doc.store_pages(store)
2013-10-24 20:25:52 +02:00
end
def self.generate_manifest
2024-11-17 14:31:15 +01:00
Manifest.new(store, all_versions).store
2013-10-24 20:25:52 +02:00
end
def self.store
store_class.new(store_path)
end
2024-11-17 12:08:31 +01:00
def self.aliases
{
'angular' => 'ng',
'angular.js' => 'ng',
2025-03-10 20:57:00 +01:00
'backbone' => 'bb',
'cpp' => 'c++',
2024-11-17 12:08:31 +01:00
'coffeescript' => 'cs',
'crystal' => 'cr',
'elixir' => 'ex',
'javascript' => 'js',
'julia' => 'jl',
'jquery' => '$',
2025-03-10 20:57:00 +01:00
'knockout' => 'ko',
2024-11-17 12:08:31 +01:00
'kubernetes' => 'k8s',
'less' => 'ls',
'lodash' => '_',
2025-03-10 20:57:00 +01:00
'love' => 'löve',
2024-11-17 12:08:31 +01:00
'marionette' => 'mn',
'markdown' => 'md',
'matplotlib' => 'mpl',
'modernizr' => 'mdr',
2025-03-10 20:57:00 +01:00
'moment' => 'mt',
2024-11-17 12:08:31 +01:00
'openjdk' => 'java',
'nginx' => 'ngx',
'numpy' => 'np',
'pandas' => 'pd',
'postgresql' => 'pg',
'python' => 'py',
2025-03-10 20:57:00 +01:00
'rails' => 'ror',
2024-11-17 12:08:31 +01:00
'ruby' => 'rb',
'rust' => 'rs',
'sass' => 'scss',
'tensorflow' => 'tf',
'typescript' => 'ts',
'underscore.js' => '_',
}
end
2013-10-24 20:25:52 +02:00
extend Instrumentable
def self.install_report(*names)
names.each do |name|
const_get("#{name}_subscriber".camelize).subscribe_to(self)
end
end
end