Module: MetricFu::Io::FileSystem

Defined in:
lib/metric_fu/io.rb

Overview

TODO: Move this module / functionality elsewhere and make less verbose

Class Method Summary collapse

Class Method Details

.artifact_dirObject



11
12
13
# File 'lib/metric_fu/io.rb', line 11

def self.artifact_dir
  (ENV["CC_BUILD_ARTIFACTS"] || @artifact_dir)
end

.artifact_dir=(artifact_dir) ⇒ Object



14
15
16
# File 'lib/metric_fu/io.rb', line 14

def self.artifact_dir=(artifact_dir)
  @artifact_dir = artifact_dir
end

.create_directories(*dirs) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/metric_fu/io.rb', line 52

def create_directories(*dirs)
  # due to behavior differences between ruby 1.8.7 and 1.9.3
  # this is good enough for now
  Array(*dirs).each do |dir|
    MetricFu::Utility.mkdir_p dir
  end
end

.default_artifact_dirObject



8
9
10
# File 'lib/metric_fu/io.rb', line 8

def self.default_artifact_dir
  @default_artifact_dir
end

.directoriesObject



21
22
23
# File 'lib/metric_fu/io.rb', line 21

def directories
  @directories ||= {}
end

.directory(name) ⇒ Object



25
26
27
# File 'lib/metric_fu/io.rb', line 25

def directory(name)
  directories.fetch(name) { raise "No such directory configured: #{name}" }
end

.file_globs_to_ignoreObject



33
34
35
# File 'lib/metric_fu/io.rb', line 33

def file_globs_to_ignore
  @file_globs_to_ignore ||= []
end

.scratch_directory(name) ⇒ Object



29
30
31
# File 'lib/metric_fu/io.rb', line 29

def scratch_directory(name)
  File.join(directory("scratch_directory"), name.to_s)
end

.set_code_dirsObject

Add the ‘app’ directory if we’re running within rails.



61
62
63
# File 'lib/metric_fu/io.rb', line 61

def set_code_dirs
  @directories["code_dirs"] = %w(app lib).select { |dir| Dir.exist?(dir) }
end

.set_directoriesObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/metric_fu/io.rb', line 37

def set_directories
  @directories = {}
  @directories["base_directory"]    = MetricFu.artifact_dir
  @directories["scratch_directory"] = MetricFu.scratch_dir
  @directories["output_directory"]  = MetricFu.output_dir
  @directories["data_directory"]    = MetricFu.data_dir
  create_directories @directories.values

  @directories["root_directory"]    = MetricFu.root_dir
  # TODO Though this is true of the general AwesomeTemplate, it is not necessarily true of templates within each Metric.  Each metric should probably know how to use AwesomeTemplate (or whatever)
  @directories["template_directory"] = File.join(@directories.fetch("root_directory"), "lib", "templates")
  @file_globs_to_ignore = []
  set_code_dirs
end