class Gitomator::Task::Config::ReposConfig

Attributes

default_access_permission[R]
repo_properties[R]
source_repo[R]

Public Class Methods

new(config_obj) click to toggle source

@param config_obj [Hash] Configuration data (commonly loaded from a YAML file)

# File lib/gitomator/task/config/repos_config.rb, line 16
def initialize(config_obj)
  raise "Missing required key, repos" unless config_obj.has_key? 'repos'
  
  @default_access_permission = (config_obj['default_access_permission'] || :read).to_sym
  @source_repo = config_obj['source_repo']
  @repo_properties = config_obj['repo_properties'] || {}

  @repo2permissions = parse_repo2permissions(config_obj['repos'])
end

Public Instance Methods

permissions(repo) click to toggle source

@param repo [String] The name of a repository @return [Hash<String,Symbol>] Map name (user or team) to permission (:read/:write/:admin)

# File lib/gitomator/task/config/repos_config.rb, line 38
def permissions(repo)
  @repo2permissions[repo]
end
repos() click to toggle source

@return [Enumerable<Strings>] The names of the repos.

# File lib/gitomator/task/config/repos_config.rb, line 30
def repos
  @repo2permissions.keys
end

Protected Instance Methods

parse_permissions(permissions_config) click to toggle source

Parse the permissions configuration of a single repo into a hash that maps user/team names (Strings) to access-permissions (Symbols).

Various configuration formats are supported:

* String - Single name, with default permission
* Hash - Maps names to permissions
* Array<String/Hash> - An array mixing both of the previous options.

@param permissions_config [String/Hash/Array] @return [Hash<String,Symbol>]

# File lib/gitomator/task/config/repos_config.rb, line 95
def parse_permissions(permissions_config)
  if permissions_config.is_a? String
    return { permissions_config => default_access_permission }

  elsif permissions_config.is_a? Hash
    return permissions_config.map {|name,perm| [name, perm.to_sym] } .to_h

  elsif permissions_config.is_a? Array
    return permissions_config.map {|x| parse_permissions(x) } .reduce(:merge)

  else
    raise "Invalid permission configuration, #{permissions_config}"
  end
end
parse_repo2permissions(repos_config) click to toggle source

Helper function. @param repos_config [Array] Array of repo config items (various formats are supported)

# File lib/gitomator/task/config/repos_config.rb, line 52
def parse_repo2permissions(repos_config)
  repo2permissions = {}

  repos_config.each do |repo_config|
    repo_name   = nil
    permissions = {}

    # 1. Parse it ...
    if repo_config.is_a? String
      repo_name = repo_config
    elsif (repo_config.is_a? Hash) and (repo_config.length == 1)
      repo_name   = repo_config.keys.first.to_s
      permissions = parse_permissions(repo_config[repo_name])
    else
      raise Gitomator::Classroom::Exception::InvalidConfig.new(
          "Cannot parse #{repo_config} (expected String or a Hash with one entry)")
    end

    # 2. Check if there was an error ...
    if repo2permissions.has_key? repo_config
      raise Gitomator::Classroom::Exception::InvalidConfig.new("Duplicate property, #{repo_config}")
    end

    # 3. If no error, store the information
    repo2permissions[repo_name] = permissions
  end

  return repo2permissions
end