Privilege.process()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 7
rs 9.4285
1
# frozen_string_literal: true
2
3
# rubocop:disable Metrics/LineLength
4
5
require_relative '../../action/account/privilege/grant'
6
require_relative '../../action/account/privilege/revoke'
7
require_relative '../../action/account/privilege/purge'
8
9
module AMA
10
  module Chef
11
    module User
12
      class Planner
13
        class Account
14
          # This planner creates actions altering account state
15
          class Privilege
16
            # @param [AMA::Chef::User::Model::Account] account
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(account, current_state, desired_state)
20
              actions = (current_state.keys | desired_state.keys).map do |key|
21
                process(account, current_state[key], desired_state[key])
22
              end
23
              actions.push(ns::Purge.new(account)) if desired_state.empty?
24
              actions
25
            end
26
27
            # @param [AMA::Chef::User::Model::Account] account
28
            # @param [AMA::Chef::User::Model::Privilege] current_state
29
            # @param [AMA::Chef::User::Model::Privilege] desired_state
30
            def process(account, current_state, desired_state)
31
              if desired_state.nil?
32
                ns::Revoke.new(account, current_state)
33
              else
34
                ns::Grant.new(account, desired_state)
35
              end
36
            end
37
38
            def ns
39
              ::AMA::Chef::User::Action::Account::Privilege
40
            end
41
          end
42
        end
43
      end
44
    end
45
  end
46
end
47