docs.rb 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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(&method(:find)).
  27. reject(&:abstract)
  28. end
  29. def self.find(name)
  30. const = name.camelize
  31. const_get(const)
  32. rescue NameError => error
  33. if error.name.to_s == const
  34. raise DocNotFound.new("failed to locate doc class '#{name}'", name)
  35. else
  36. raise error
  37. end
  38. end
  39. def self.generate_page(name, page_id)
  40. find(name).store_page(store, page_id)
  41. end
  42. def self.generate(name)
  43. find(name).store_pages(store)
  44. end
  45. def self.generate_manifest
  46. Manifest.new(store, all).store
  47. end
  48. def self.store
  49. store_class.new(store_path)
  50. end
  51. extend Instrumentable
  52. def self.install_report(*names)
  53. names.each do |name|
  54. const_get("#{name}_subscriber".camelize).subscribe_to(self)
  55. end
  56. end
  57. end