class Inspec::Resources::EtcGroup

def gids(filter = nil)

def gids(filter = nil)
  (filter || @entries)&.map { |x| x['gid'] }
end

def groups(filter = nil)

def groups(filter = nil)
  (filter || @entries)&.map { |x| x['name'] }
end

def initialize(path = nil)

def initialize(path = nil)
  @path = path || '/etc/group'
  @entries = parse_group(@path)
end

def parse_group(path)

def parse_group(path)
  @content = read_file_content(path, allow_empty: true)
  # iterate over each line and filter comments
  @content.split("\n").each_with_object([]) do |line, lines|
    grp_info = parse_group_line(line)
    lines.push(grp_info) if !grp_info.nil? && !grp_info.empty?
  end
end

def parse_group_line(line)

def parse_group_line(line)
  opts = {
    comment_char: '#',
    standalone_comments: false,
  }
  line, _idx_nl = parse_comment_line(line, opts)
  x = line.split(':')
  # abort if we have an empty or comment line
  return nil if x.empty?
  # map data
  {
    'name' => x.at(0), # Name of the group.
    'password' => x.at(1), # Group's encrypted password.
    'gid' => convert_to_i(x.at(2)), # The group's decimal ID.
    'members' => x.at(3), # Group members.
  }
end

def to_s

def to_s
  '/etc/group'
end

def users(filter = nil)

def users(filter = nil)
  entries = filter || @entries
  return nil if entries.nil?
  # filter the user entry
  res = entries.map { |x|
    x['members'].split(',') if !x.nil? && !x['members'].nil?
  }.flatten
  # filter nil elements
  res.reject { |x| x.nil? || x.empty? }
end

def where(conditions = {})

def where(conditions = {})
  return if conditions.empty?
  fields = {
    name: 'name',
    group_name: 'name',
    password: 'password',
    gid: 'gid',
    group_id: 'gid',
    users: 'members',
    members: 'members',
  }
  res = entries
  unless res.nil?
    conditions.each do |k, v|
      idx = fields[k.to_sym]
      next if idx.nil?
      res = res.select { |x| x[idx].to_s == v.to_s }
    end
  end
  EtcGroupView.new(self, res)
end