Class: CodespicuousConfigurator

Inherits:
Object
  • Object
show all
Defined in:
lib/codespicuous/codespicuousconfigurator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ CodespicuousConfigurator

Returns a new instance of CodespicuousConfigurator.



8
9
10
11
12
13
14
15
16
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 8

def initialize(config)

  @config = config

  @repositories = Repositories.new
  @repositories_to_check = Repositories.new

  @teams = Teams.new
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



6
7
8
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 6

def config
  @config
end

#repositoriesObject (readonly)

Returns the value of attribute repositories.



6
7
8
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 6

def repositories
  @repositories
end

#repositories_to_checkObject (readonly)

Returns the value of attribute repositories_to_check.



6
7
8
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 6

def repositories_to_check
  @repositories_to_check
end

#teamsObject (readonly)

Returns the value of attribute teams.



6
7
8
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 6

def teams
  @teams
end

Instance Method Details

#configure(argv) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 18

def configure(argv)

  parse_command_line_arguments(argv)

  yaml_content = configure_from_yaml
  postprocess_yaml_configuration(yaml_content)

  find_alternative_configuration_files

  validate_configuration
end

#configure_from_yamlObject



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

def configure_from_yaml
  return {} unless File.exist?(config.path_to_configuration_file)

  puts "** Configuring options with \"#{config.path_to_configuration_file}\""
  yaml_content = YAML::load(File.read(config.path_to_configuration_file))
  config.offline = yaml_content["offline"] if yaml_content["offline"]
  yaml_content
end

#find_alternative_configuration_filesObject



54
55
56
57
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 54

def find_alternative_configuration_files
  find_alternative_configuration_files_for_repositories
  find_alternative_configuration_files_for_committers
end

#find_alternative_configuration_files_for_committersObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 121

def find_alternative_configuration_files_for_committers
  return unless teams.empty?
  return unless File.exist?("committers.csv")

  puts '** Configuring committers with "committers.csv"'

  @teams = Teams.new

  CSV.parse(File.read("committers.csv"), headers: true) { |row|
    committer = Committer.create_committer(row["Login"], row["First Name"], row["Last Name"], row["Email"])

    team = @teams.team(row["Team"] || "")
    team.add_member(committer)
  }
end

#find_alternative_configuration_files_for_repositoriesObject



84
85
86
87
88
89
90
91
92
93
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 84

def find_alternative_configuration_files_for_repositories
  return unless repositories.empty?
  return unless File.exist?("repositories.csv")

  puts '** Configuring repositories with "repositories.csv"'

  CSV.parse(File.read("repositories.csv"), headers: true) { |row|
    @repositories.add(Repository.new(row["name"], row["url"]))
  }
end

#parse_command_line_arguments(argv) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 30

def parse_command_line_arguments(argv)

  parser = OptionParser.new do | opts |
    opts.on('-r', '--repositories', "List the repositories the team committed to") do
      @config.list_repositories = true
    end

    opts.on('-i', '--input-dir [dir]', String, "Directory location for input files such as configuration and cache") do |path|
      @config.input_path = path
    end

    opts.on('-o', '--output-dir [dir]', String, "Directory location for output files") do |path|
      @config.output_path = path
    end
  end

  parser.parse!(argv)
end

#postprocess_yaml_configuration(yaml_content) ⇒ Object



49
50
51
52
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 49

def postprocess_yaml_configuration(yaml_content)
  postprocess_yaml_configuration_repositories(yaml_content)
  postprocess_yaml_configuration_committers(yaml_content)
end

#postprocess_yaml_configuration_committers(yaml_content) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 103

def postprocess_yaml_configuration_committers(yaml_content)
  teams_yaml = yaml_content["teams"] || []

  teams_yaml.each do |team_name, team_members|

    committers = Committers.new
    team_members.each { |person|
      committers.add(Committer.create_committer(person["Login"], person["First Name"], person["Last Name"], person["Email"]))
    }

    unless committers.empty?
      new_team = Team.new(team_name)
      new_team.add_members(committers)
      @teams.add(new_team)
    end
  end
end

#postprocess_yaml_configuration_repositories(yaml_content) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 68

def postprocess_yaml_configuration_repositories(yaml_content)
  repositories_in_yaml = yaml_content["repositories"] || {}
  repositories_in_yaml.each { |name, url|
    @repositories.add(Repository.new(name, url))
  }

  names_of_repositories_to_check = yaml_content["repositories_to_check"]
  if (names_of_repositories_to_check)
    @repositories.each { |repository|
      @repositories_to_check.add(repository) if names_of_repositories_to_check.include?(repository.name)
    }
  else
    @repositories_to_check = @repositories
  end
end

#validate_configurationObject



95
96
97
98
99
100
101
# File 'lib/codespicuous/codespicuousconfigurator.rb', line 95

def validate_configuration
  if @repositories.empty?
    puts "** Error: No repositories configured in \"#{config.path_to_configuration_file}\""
    return false
  end
  true
end