docs.rb 1.5 KB

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