| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- require 'bundler/setup'
- Bundler.require :default, :docs
- require 'active_support'
- require 'active_support/core_ext'
- I18n.enforce_available_locales = true
- 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
- class DocNotFound < NameError; end
- class SetupError < StandardError; end
- def self.all
- Dir["#{root_path}/docs/scrapers/**/*.rb"].
- map { |file| File.basename(file, '.rb') }.
- map { |name| const_get(name.camelize) }.
- sort { |a, b| a.name.casecmp(b.name) }.
- reject(&:abstract)
- end
- def self.all_versions
- all.flat_map(&:versions)
- end
- def self.defaults
- %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)
- const = name.camelize
- doc = const_get(const)
- if version.present?
- doc = doc.versions.find { |klass| klass.version == version || klass.version_slug == version }
- raise DocNotFound.new(%(could not find version "#{version}" for doc "#{name}"), name) unless doc
- elsif version != false
- doc = doc.versions.first
- end
- doc
- rescue NameError => error
- if error.name.to_s == const
- raise DocNotFound.new(%(could not find doc "#{name}"), name)
- 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
- def self.generate_page(name, version, page_id)
- find(name, version).store_page(store, page_id)
- end
- def self.generate(doc, version = nil)
- doc = find(doc, version) unless doc.respond_to?(:store_pages)
- doc.store_pages(store)
- end
- def self.generate_manifest
- Manifest.new(store, all_versions).store
- end
- def self.store
- store_class.new(store_path)
- end
- def self.aliases
- {
- 'angular' => 'ng',
- 'angular.js' => 'ng',
- 'backbone' => 'bb',
- 'cpp' => 'c++',
- 'coffeescript' => 'cs',
- 'crystal' => 'cr',
- 'elixir' => 'ex',
- 'javascript' => 'js',
- 'julia' => 'jl',
- 'jquery' => '$',
- 'knockout' => 'ko',
- 'kubernetes' => 'k8s',
- 'less' => 'ls',
- 'lodash' => '_',
- 'love' => 'löve',
- 'marionette' => 'mn',
- 'markdown' => 'md',
- 'matplotlib' => 'mpl',
- 'modernizr' => 'mdr',
- 'moment' => 'mt',
- 'openjdk' => 'java',
- 'nginx' => 'ngx',
- 'numpy' => 'np',
- 'pandas' => 'pd',
- 'postgresql' => 'pg',
- 'python' => 'py',
- 'rails' => 'ror',
- 'ruby' => 'rb',
- 'rust' => 'rs',
- 'sass' => 'scss',
- 'tensorflow' => 'tf',
- 'typescript' => 'ts',
- 'underscore.js' => '_',
- }
- end
- extend Instrumentable
- def self.install_report(*names)
- names.each do |name|
- const_get("#{name}_subscriber".camelize).subscribe_to(self)
- end
- end
- end
|