Group
last analyzed

Complexity

Total Complexity 0

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 29
wmc 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A Privilege.process() 0 4 2
A Privilege.plan() 0 7 2
A Privilege.ns() 0 3 1
1
# frozen_string_literal: true
2
3
# rubocop:disable Metrics/LineLength
4
5
require_relative '../../action/group/privilege/grant'
6
require_relative '../../action/group/privilege/revoke'
7
require_relative '../../action/group/privilege/purge'
8
9
module AMA
10
  module Chef
11
    module User
12
      class Planner
13
        class Group
14
          # Planner for group privileges
15
          class Privilege
16
            # @param [AMA::Chef::User::Model::Group] group
17
            # @param [Hash{Symbol, AMA::Chef::User::Model::Privilege}] current_state
18
            # @param [Hash{Symbol, AMA::Chef::User::Model::Privilege}] desired_state
19
            def plan(group, current_state, desired_state)
20
              actions = (current_state.keys | desired_state.keys).map do |type|
21
                process(group, current_state[type], desired_state[type])
22
              end
23
              actions.push(ns::Purge.new(group)) if desired_state.empty?
24
              actions
25
            end
26
27
            private
28
29
            # @param [AMA::Chef::User::Model::Group] group
30
            # @param [AMA::Chef::User::Model::Privilege] current_state
31
            # @param [AMA::Chef::User::Model::Privilege] desired_state
32
            def process(group, current_state, desired_state)
33
              return ns::Revoke.new(group, current_state) if desired_state.nil?
34
              ns::Grant.new(group, desired_state)
35
            end
36
37
            def ns
38
              ::AMA::Chef::User::Action::Group::Privilege
39
            end
40
          end
41
        end
42
      end
43
    end
44
  end
45
end
46