class SdocAll::Base

Constants

BASE_PATH
DOCS_PATH
PUBLIC_PATH

Attributes

config[R]

Protected Class Methods

add_merge_task(options = {}) click to toggle source
# File lib/sdoc_all/base.rb, line 128
def add_merge_task(options = {})
  @@tasks << MergeTask.new(options)
end
add_task(options = {}) click to toggle source
# File lib/sdoc_all/base.rb, line 124
def add_task(options = {})
  @@tasks << Task.new(options)
end
base_path() click to toggle source
# File lib/sdoc_all/base.rb, line 51
def base_path
  BASE_PATH
end
chdir(path, &block) click to toggle source
# File lib/sdoc_all/base.rb, line 182
def chdir(path, &block)
  path = Pathname(path)
  dirs.push(path.expand_path)
  Dir.chdir(path, &block)
ensure
  dirs.pop
end
clear() click to toggle source
# File lib/sdoc_all/base.rb, line 89
def clear
  entries.clear
end
dirs() click to toggle source
# File lib/sdoc_all/base.rb, line 178
def dirs
  @@dirs ||= []
end
docs_path() click to toggle source
# File lib/sdoc_all/base.rb, line 55
def docs_path
  DOCS_PATH.tap(&:mkpath)
end
dry_run!() click to toggle source
# File lib/sdoc_all/base.rb, line 38
def dry_run!
  @@dry_run = true
end
dry_run?() click to toggle source
# File lib/sdoc_all/base.rb, line 41
def dry_run?
  defined?(@@dry_run) && @@dry_run
end
entries() click to toggle source
# File lib/sdoc_all/base.rb, line 85
def entries
  @entries ||= []
end
inherited(subclass) click to toggle source
# File lib/sdoc_all/base.rb, line 81
def inherited(subclass)
  subclasses[subclass.short_name] = subclass
end
output_for_verbose_level(n) { || ... } click to toggle source
# File lib/sdoc_all/base.rb, line 197
def output_for_verbose_level(n)
  if verbose_level >= n
    yield
  else
    old_stdout = $stdout
    old_stderr = $stderr
    dev_null = File.open('/dev/null', 'w')
    begin
      $stdout = dev_null
      $stderr = dev_null
      yield
    ensure
      $stdout = old_stdout
      $stderr = old_stderr
      dev_null.close
    end
  end
end
public_path() click to toggle source
# File lib/sdoc_all/base.rb, line 59
def public_path
  PUBLIC_PATH
end
remove_if_present(path) click to toggle source
# File lib/sdoc_all/base.rb, line 170
def remove_if_present(path)
  path = Pathname(path)
  if path.exist?
    puts "rm -r #{path.to_s.shellescape}".magenta
    FileUtils.remove_entry(path) unless dry_run?
  end
end
short_name() click to toggle source
# File lib/sdoc_all/base.rb, line 67
def short_name
  name.demodulize.underscore
end
sources_path() click to toggle source
# File lib/sdoc_all/base.rb, line 71
def sources_path
  Pathname.new("sources/#{short_name}").tap do |path|
    path.mkpath
  end
end
subclasses() click to toggle source
# File lib/sdoc_all/base.rb, line 63
def subclasses
  @subclasses ||= {}
end
system(*args) click to toggle source
# File lib/sdoc_all/base.rb, line 132
def system(*args)
  args = args.map(&:to_s)
  command = args.length == 1 ? args.first : args.shelljoin
  if verbose_level >= 1
    puts [dirs.last && "cd #{dirs.last}", command].compact.join('; ').shrink(250).blue
  end
  unless dry_run?
    if verbose_level >= 2
      Kernel.system(*args)
    else
      rd, wr = IO::pipe

      pid = fork{
        rd.close
        STDOUT.reopen(wr)
        STDERR.reopen(wr)
        wr.close
        exec(*args)
      }

      wr.close
      begin
        true while line = rd.gets
      ensure
        rd.close unless rd.closed?
        Process.wait(pid)
      end
    end
    unless $?.success?
      if $?.signaled?
        raise SignalException.new($?.termsig)
      else
        abort("failed: #{command}")
      end
    end
  end
end
tasks(options = {}) click to toggle source
# File lib/sdoc_all/base.rb, line 104
def tasks(options = {})
  @@tasks = []
  entries.with_progress('configuring').each do |entry|
    entry.add_tasks(options)
  end
  subclasses.values.each do |subclass|
    unless subclass.used_sources.empty?
      paths = FileList.new
      paths.include(subclass.sources_path + '*')
      subclass.used_sources.each do |path|
        paths.exclude(path)
      end
      paths.resolve.each do |path|
        remove_if_present(path)
      end
    end
  end
  @@tasks
end
to_document(type, config) click to toggle source
# File lib/sdoc_all/base.rb, line 93
def to_document(type, config)
  type = type.to_s
  config.symbolize_keys! if config.is_a?(Hash)
  subclass = subclasses[type] || subclasses[type.singularize] || subclasses[type.pluralize]
  if subclass
    entries << subclass.new(config)
  else
    raise ConfigError.new("don't know how to build \"#{type}\" => #{config.inspect}")
  end
end
used_sources() click to toggle source
# File lib/sdoc_all/base.rb, line 77
def used_sources
  @used_sources ||= []
end
verbose_level() click to toggle source
# File lib/sdoc_all/base.rb, line 47
def verbose_level
  defined?(@@verbose_level) ? @@verbose_level : 0
end
verbose_level=(val) click to toggle source
# File lib/sdoc_all/base.rb, line 44
def verbose_level=(val)
  @@verbose_level = val.to_i
end
with_env(key, value) { || ... } click to toggle source
# File lib/sdoc_all/base.rb, line 190
def with_env(key, value)
  old_value, ENV[key] = ENV[key], value
  yield
ensure
  ENV[key] = old_value
end

Protected Instance Methods

config_exclude_option(config) click to toggle source
# File lib/sdoc_all/base.rb, line 21
def config_exclude_option(config)
  if exclude = config.delete(:exclude)
    [exclude].flatten.map(&:to_s).map(&:downcase)
  else
    []
  end
end
config_only_option(config) click to toggle source
# File lib/sdoc_all/base.rb, line 15
def config_only_option(config)
  if only = config.delete(:only)
    [only].flatten.map(&:to_s).map(&:downcase)
  end
end
raise_unknown_options_if_not_blank!(config) click to toggle source
# File lib/sdoc_all/base.rb, line 9
def raise_unknown_options_if_not_blank!(config)
  unless config.blank?
    raise ConfigError.new("unknown options for \"#{self.class.short_name}\": #{config.inspect}")
  end
end
sources_path() click to toggle source
# File lib/sdoc_all/base.rb, line 29
def sources_path
  self.class.sources_path
end