Class: Linterbot::RunnerConfiguration

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

Defined Under Namespace

Classes: InvalidGitHubCredentials, 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.



100
101
102
103
104
105
106
107
# File 'lib/linterbot/runner_configuration.rb', line 100

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.



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

def approver_class
  @approver_class
end

#commenter_classObject

Returns the value of attribute commenter_class.



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

def commenter_class
  @commenter_class
end

#github_clientObject

Returns the value of attribute github_client.



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

def github_client
  @github_client
end

#linter_report_fileObject

Returns the value of attribute linter_report_file.



34
35
36
# File 'lib/linterbot/runner_configuration.rb', line 34

def linter_report_file
  @linter_report_file
end

#project_base_pathObject

Returns the value of attribute project_base_path.



33
34
35
# File 'lib/linterbot/runner_configuration.rb', line 33

def project_base_path
  @project_base_path
end

Class Method Details

.configuration!(options) ⇒ Object



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

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)
  validate_github_access!(github_client)

  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



59
60
61
62
63
64
65
66
# File 'lib/linterbot/runner_configuration.rb', line 59

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

.full_repo_access?(github_client) ⇒ Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/linterbot/runner_configuration.rb', line 94

def full_repo_access?(github_client)
  github_client.scopes.include?("repo")
end

.load_config_file(config_file_path) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/linterbot/runner_configuration.rb', line 44

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



38
39
40
41
42
# File 'lib/linterbot/runner_configuration.rb', line 38

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

.validate_github_access!(github_client) ⇒ Object



90
91
92
# File 'lib/linterbot/runner_configuration.rb', line 90

def validate_github_access!(github_client)
  raise InvalidGitHubCredentials.new unless full_repo_access?(github_client)
end