class Guard::Internals::Scope

def grouped_plugins(scope = { plugins: [], groups: [] })

TODO: refactor
def grouped_plugins(scope = { plugins: [], groups: [] })
  items = nil
  plugins = _find_non_empty_scope(:plugins, scope)
  if plugins
    items = Array(plugins).map { |plugin| _instantiate(:plugin, plugin) }
  end
  unless items
    # TODO: no coverage here!!
    found = _find_non_empty_scope(:groups, scope)
    found ||= Guard.state.session.groups.all
    groups = Array(found).map { |group| _instantiate(:group, group) }
    if groups.any? { |g| g.name == :common }
      items = groups
    else
      items = ([_instantiate(:group, :common)] + Array(found)).compact
    end
  end
  items.map do |plugin_or_group|
    group = nil
    plugins = [plugin_or_group]
    if plugin_or_group.is_a?(Group)
      # TODO: no coverage here!
      group = plugin_or_group
      plugins = Guard.state.session.plugins.all(group: group.name)
    end
    [group, plugins]
  end
end