lib/inch/config/codebase.rb
module Inch
class Config
# Stores the configuration for an individual single codebase
class Codebase
attr_accessor :language
attr_accessor :included_files
attr_accessor :excluded_files
attr_accessor :read_dump_file
YAML_FILE = '.inch.yml'
def initialize(language = :ruby, included = nil, excluded = nil)
@language = language
@included_files = included || []
@excluded_files = excluded || []
end
# Returns the contents of +dir+/.inch.yml, if present.
# Returns nil otherwise.
#
# @param dir [String]
# @return [Hash,nil]
def self.yaml(dir)
yaml_file = File.join(dir, YAML_FILE)
YAML.load(File.read(yaml_file)) if File.exist?(yaml_file)
end
# Update this Codebase config with the given block.
# @return [void]
def update(&block)
instance_eval(&block)
end
# Search the given +dir+ for YAML_FILE and
# update this Codebase config with the contents if the file is found.
#
# @param dir [String] directory to search for the file
# @return [void]
def update_via_yaml(dir)
if (yaml = self.class.yaml(dir))
Dir.chdir(dir) do
update_language yaml['language']
update_files yaml['files']
end
end
end
def include_files(*files)
@included_files.concat(files).flatten!
end
def exclude_files(*files)
@excluded_files.concat(files).flatten!
end
# Sets the object provider (e.g. :YARD)
#
# @param sym [Symbol] the object provider
# @return [Symbol] the object provider
def object_provider(sym = nil)
return @object_provider if sym.nil?
@object_provider = sym
end
private
def expand_files(files)
files.map do |f|
case f
when String
f =~ /[\*\{]/ ? Dir[f] : f
else
f
end
end.flatten
end
def update_files(files)
return if files.nil?
@included_files = expand_files(files['included']) if files['included']
@excluded_files = expand_files(files['excluded']) if files['excluded']
end
def update_language(language)
return if language.nil?
@language = language
end
end
end
end