docs.rb 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. require 'bundler/setup'
  2. Bundler.require :docs
  3. require 'active_support'
  4. require 'active_support/core_ext'
  5. I18n.enforce_available_locales = true
  6. module Docs
  7. require 'docs/core/autoload_helper'
  8. extend AutoloadHelper
  9. mattr_reader :root_path
  10. @@root_path = File.expand_path '..', __FILE__
  11. autoload :URL, 'docs/core/url'
  12. autoload_all 'docs/core'
  13. autoload_all 'docs/filters/core', 'filter'
  14. autoload_all 'docs/scrapers'
  15. autoload_all 'docs/storage'
  16. autoload_all 'docs/subscribers'
  17. mattr_accessor :store_class
  18. self.store_class = FileStore
  19. mattr_accessor :store_path
  20. self.store_path = File.expand_path '../public/docs', @@root_path
  21. class DocNotFound < NameError; end
  22. def self.all
  23. Dir["#{root_path}/docs/scrapers/**/*.rb"].
  24. map { |file| File.basename(file, '.rb') }.
  25. sort!.
  26. map { |name| const_get(name.camelize) }.
  27. reject(&:abstract)
  28. end
  29. def self.all_versions
  30. all.flat_map(&:versions)
  31. end
  32. def self.find(name, version)
  33. const = name.camelize
  34. doc = const_get(const)
  35. if version.present?
  36. doc = doc.versions.find { |klass| klass.version == version }
  37. raise DocNotFound.new(%(could not find version "#{version}" for doc "#{name}"), name) unless doc
  38. else
  39. doc = doc.versions.first
  40. end
  41. doc
  42. rescue NameError => error
  43. if error.name.to_s == const
  44. raise DocNotFound.new(%(could not find doc "#{name}"), name)
  45. else
  46. raise error
  47. end
  48. end
  49. def self.generate_page(name, version, page_id)
  50. find(name, version).store_page(store, page_id)
  51. end
  52. def self.generate(name, version)
  53. find(name, version).store_pages(store)
  54. end
  55. def self.generate_manifest
  56. Manifest.new(store, all_versions).store
  57. end
  58. def self.store
  59. store_class.new(store_path)
  60. end
  61. extend Instrumentable
  62. def self.install_report(*names)
  63. names.each do |name|
  64. const_get("#{name}_subscriber".camelize).subscribe_to(self)
  65. end
  66. end
  67. end