175 lines
3.9 KiB
Ruby
175 lines
3.9 KiB
Ruby
require "rdoc/task"
|
|
require_relative "generator"
|
|
|
|
module Rails
|
|
module API
|
|
class Task < RDoc::Task
|
|
RDOC_FILES = {
|
|
"activesupport" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/active_support/**/*.rb
|
|
)
|
|
},
|
|
|
|
"activerecord" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/active_record/**/*.rb
|
|
)
|
|
},
|
|
|
|
"activemodel" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/active_model/**/*.rb
|
|
)
|
|
},
|
|
|
|
"actionpack" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/abstract_controller/**/*.rb
|
|
lib/action_controller/**/*.rb
|
|
lib/action_dispatch/**/*.rb
|
|
)
|
|
},
|
|
|
|
"actionview" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/action_view/**/*.rb
|
|
),
|
|
exclude: "lib/action_view/vendor/*"
|
|
},
|
|
|
|
"actionmailer" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/action_mailer/**/*.rb
|
|
)
|
|
},
|
|
|
|
"activejob" => {
|
|
include: %w(
|
|
README.md
|
|
lib/active_job/**/*.rb
|
|
)
|
|
},
|
|
|
|
"actioncable" => {
|
|
include: %w(
|
|
README.md
|
|
lib/action_cable/**/*.rb
|
|
)
|
|
},
|
|
|
|
"railties" => {
|
|
include: %w(
|
|
README.rdoc
|
|
lib/**/*.rb
|
|
),
|
|
exclude: %w(
|
|
lib/rails/generators/**/templates/**/*.rb
|
|
lib/rails/test_unit/*
|
|
lib/rails/api/generator.rb
|
|
)
|
|
}
|
|
}
|
|
|
|
def initialize(name)
|
|
super
|
|
|
|
# Every time rake runs this task is instantiated as all the rest.
|
|
# Be lazy computing stuff to have as light impact as possible to
|
|
# the rest of tasks.
|
|
before_running_rdoc do
|
|
configure_sdoc
|
|
configure_rdoc_files
|
|
setup_horo_variables
|
|
end
|
|
end
|
|
|
|
# Hack, ignore the desc calls performed by the original initializer.
|
|
def desc(description)
|
|
# no-op
|
|
end
|
|
|
|
def configure_sdoc
|
|
self.title = "Ruby on Rails API"
|
|
self.rdoc_dir = api_dir
|
|
|
|
options << "-m" << api_main
|
|
options << "-e" << "UTF-8"
|
|
|
|
options << "-f" << "api"
|
|
options << "-T" << "rails"
|
|
end
|
|
|
|
def configure_rdoc_files
|
|
rdoc_files.include(api_main)
|
|
|
|
RDOC_FILES.each do |component, cfg|
|
|
cdr = component_root_dir(component)
|
|
|
|
Array(cfg[:include]).each do |pattern|
|
|
rdoc_files.include("#{cdr}/#{pattern}")
|
|
end
|
|
|
|
Array(cfg[:exclude]).each do |pattern|
|
|
rdoc_files.exclude("#{cdr}/#{pattern}")
|
|
end
|
|
end
|
|
|
|
# Only generate documentation for files that have been
|
|
# changed since the API was generated.
|
|
if Dir.exist?("doc/rdoc") && !ENV["ALL"]
|
|
last_generation = DateTime.rfc2822(File.open("doc/rdoc/created.rid", &:readline))
|
|
|
|
rdoc_files.keep_if do |file|
|
|
File.mtime(file).to_datetime > last_generation
|
|
end
|
|
|
|
# Nothing to do
|
|
exit(0) if rdoc_files.empty?
|
|
end
|
|
end
|
|
|
|
def setup_horo_variables
|
|
ENV["HORO_PROJECT_NAME"] = "Ruby on Rails"
|
|
ENV["HORO_PROJECT_VERSION"] = rails_version
|
|
end
|
|
|
|
def api_main
|
|
component_root_dir("railties") + "/RDOC_MAIN.rdoc"
|
|
end
|
|
end
|
|
|
|
class RepoTask < Task
|
|
def configure_sdoc
|
|
super
|
|
options << "-g" # link to GitHub, SDoc flag
|
|
end
|
|
|
|
def component_root_dir(component)
|
|
component
|
|
end
|
|
|
|
def api_dir
|
|
"doc/rdoc"
|
|
end
|
|
end
|
|
|
|
class EdgeTask < RepoTask
|
|
def rails_version
|
|
"master@#{`git rev-parse HEAD`[0, 7]}"
|
|
end
|
|
end
|
|
|
|
class StableTask < RepoTask
|
|
def rails_version
|
|
File.read("RAILS_VERSION").strip
|
|
end
|
|
end
|
|
end
|
|
end
|