class Doc::Configurator::Rails

Public Instance Methods

configure(update) click to toggle source
# File lib/doc/configurator/rails.rb, line 8
def configure(update)
  config.check_options!([], [:version, :prerelease])

  search_versions = Array(config[:version] || [nil])
  @versions = search_versions.map do |search_version|
    requirement = Gem::Requirement.new(search_version.is_a?(Integer) ? "~> #{search_version}" : search_version)
    versions = Gem::Specification.find_all_by_name('rails', requirement).map(&:version)
    versions.reject!(&:prerelease?) unless config[:prerelease]
    unless version = versions.sort.last
      raise ConfigError.new(self, "can't find rails version matching: #{search_version}")
    end
    version
  end
end
tasks() click to toggle source
# File lib/doc/configurator/rails.rb, line 23
def tasks
  @versions.map do |version|
    builder({
      :title => "rails-#{version}",
      :dir_name => "rails-#{version}",
      :paths => paths_to_document_for_version(version),
    })
  end
end

Private Instance Methods

paths_to_document_for_version(version) click to toggle source
# File lib/doc/configurator/rails.rb, line 35
      def paths_to_document_for_version(version)
        code = case version.segments.first
        when 2
          <<-RUBY
            gem 'rails', ARGV.first
            require 'rdoc/task'

            Rake::FileList.class_eval do
              alias_method :original_include, :include
              def include(*paths, &block)
                original_include(*fix_paths(*paths), &block)
              end

              alias_method :original_exclude, :exclude
              def exclude(*paths, &block)
                original_exclude(*fix_paths(*paths), &block)
              end

              def fix_paths(*paths)
                paths.map do |path|
                  if path.is_a?(String)
                    path.sub(%r{^vendor\/rails\/([^\/]+)(?=\/)}) do
                      name = {'railties' => 'rails'}[$1] || $1
                      Gem.loaded_specs[name].full_gem_path
                    end
                  else
                    path
                  end
                end
              end
            end

            Rake::RDocTask.class_eval do
              def define
                puts rdoc_files if name == 'rails'
              end
            end

            load 'tasks/documentation.rake'
          RUBY
        when 3
          <<-RUBY
            gem 'rails', ARGV.first
            require 'rdoc/task'

            class RDocTaskWithoutDescriptions < Rake::RDocTask
              def initialize(name = :rdoc)
                super
                puts rdoc_files if name == 'rails'
              end
            end

            load 'rails/tasks/documentation.rake'
          RUBY
        else
          <<-RUBY
            gem 'rails', ARGV.first
            require 'rdoc/task'
            require 'rails/api/task'

            module Rails
              module API
                class InstalledTask < StableTask
                  def component_root_dir(component)
                    Gem::Specification.find_by_name(component).gem_dir
                  end
                end
              end
            end

            task = Rails::API::InstalledTask.new('rdoc')
            task.configure_rdoc_files
            puts task.rdoc_files
          RUBY
        end
        args = %W[ruby -r rubygems -e #{code} -- #{version}]
        IO.popen(args.shelljoin, &:readlines).map(&:strip)
      end