Class: Linterbot::RunnerConfiguration

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/linterbot/runner_configuration.rb

Defined Under Namespace

Classes: MissingAttribute

Constant Summary collapse

DEFAULT_PROJECT_BASE_PATH =
'./'
DEFAULT_CONFIG_FILE_PATH =
'./.linterbot.yml'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(github_client, options) ⇒ RunnerConfiguration

Returns a new instance of RunnerConfiguration.



88
89
90
91
92
93
94
95
# File 'lib/linterbot/runner_configuration.rb', line 88

def initialize(github_client, options)
  @github_client = github_client
  @options = options
  @commenter_class = options[:commenter_class]
  @approver_class = options[:approver_class]
  @project_base_path = options[:project_base_path]
  @linter_report_file = options[:linter_report_file]
end

Instance Attribute Details

#approver_classObject

Returns the value of attribute approver_class.



29
30
31
# File 'lib/linterbot/runner_configuration.rb', line 29

def approver_class
  @approver_class
end

#commenter_classObject

Returns the value of attribute commenter_class.



28
29
30
# File 'lib/linterbot/runner_configuration.rb', line 28

def commenter_class
  @commenter_class
end

#github_clientObject

Returns the value of attribute github_client.



27
28
29
# File 'lib/linterbot/runner_configuration.rb', line 27

def github_client
  @github_client
end

#linter_report_fileObject

Returns the value of attribute linter_report_file.



31
32
33
# File 'lib/linterbot/runner_configuration.rb', line 31

def linter_report_file
  @linter_report_file
end

#project_base_pathObject

Returns the value of attribute project_base_path.



30
31
32
# File 'lib/linterbot/runner_configuration.rb', line 30

def project_base_path
  @project_base_path
end

Class Method Details

.configuration!(options) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/linterbot/runner_configuration.rb', line 65

def configuration!(options)
  config_file_path = options.config_file_path || File.expand_path(DEFAULT_CONFIG_FILE_PATH)
  loaded_config = load_config_file(config_file_path)
  base_config = default_configuration.merge(loaded_config)

  github_access_token = ENV["GITHUB_ACCESS_TOKEN"] || base_config[:github_access_token]
  raise missing_github_access_token unless github_access_token
  github_client = Octokit::Client.new(access_token: github_access_token)

  configuration = new(github_client, base_config)
  configuration.project_base_path = options.project_base_path if options.project_base_path
  configuration.linter_report_file = options.linter_report_file_path if options.linter_report_file_path

  if options.dry_run
    configuration.commenter_class = TTYPullRequestCommenter
    configuration.approver_class = TTYApprover
  end

  configuration
end

.default_configurationObject



56
57
58
59
60
61
62
63
# File 'lib/linterbot/runner_configuration.rb', line 56

def default_configuration
  {
    project_base_path: File.expand_path(DEFAULT_PROJECT_BASE_PATH),
    linter_report_file: STDIN,
    commenter_class: GitHubPullRequestCommenter,
    approver_class: CommitApprover
  }
end

.load_config_file(config_file_path) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/linterbot/runner_configuration.rb', line 41

def load_config_file(config_file_path)
  return {} unless File.exist?(config_file_path)
  file_content = File.read(config_file_path)
  config = YAML.load(file_content)
  # YAML.load retunrs false if file could not be parsed
  # for example in the case of an empty file.
  if config
    Hash[config.each.map { |key, value| [key.to_sym, value] }]
  else
    STDERR.puts "WARNING: Linterbot configuration file '#{config_file_path}' " \
                "has been ignored because is not a valid YAML file."
    return {}
  end
end

.missing_github_access_tokenObject



35
36
37
38
39
# File 'lib/linterbot/runner_configuration.rb', line 35

def missing_github_access_token
  fix_description = "You must either define the enviromental variable 'GITHUB_ACCESS_TOKEN " +
    "or the attribute 'github_access_token' in the configuration file.'"
  MissingAttribute.new("GitHub access token", fix_description)
end