Completed
Push — master ( fba2bd...c39945 )
by Fike
01:00
created

Account.process_public_keys()   B

Complexity

Conditions 5

Size

Total Lines 7

Duplication

Lines 7
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
c 1
b 0
f 0
dl 7
loc 7
rs 8.5454
1
# frozen_string_literal: true
2
3
require_relative 'account/public_key'
4
require_relative 'account/private_key'
5
require_relative 'account/privilege'
6
require_relative '../action/account/create'
7
require_relative '../action/account/remove'
8
9
module AMA
10
  module Chef
11
    module User
12
      class Planner
13
        # This planner creates actions altering account state
14
        class Account
15
          def initialize
16
            @public_keys = PublicKey.new
17
            @private_keys = PrivateKey.new
18
            @privileges = Privilege.new
19
          end
20
21
          # @param [Hash{Symbol, AMA::Chef::User::Model::Account}] current_state
22
          # @param [Hash{Symbol, AMA::Chef::User::Model::Account}] desired_state
23
          def plan(current_state, desired_state)
24
            (current_state.keys | desired_state.keys).flat_map do |id|
25
              process(current_state[id], desired_state[id])
26
            end
27
          end
28
29
          # @param [AMA::Chef::User::Model::Account] current_state
30
          # @param [AMA::Chef::User::Model::Account] desired_state
31
          def process(current_state, desired_state)
32
            actions = [
33
              *process_public_keys(current_state, desired_state),
34
              *process_private_keys(current_state, desired_state),
35
              *process_privileges(current_state, desired_state)
36
            ]
37
            if !desired_state.nil?
38
              actions.unshift(ns::Create.new(desired_state))
39
            elsif current_state.policy.remove?
40
              actions.push(ns::Remove.new(current_state))
41
            end
42
            actions
43
          end
44
45
          private
46
47
          def ns
48
            ::AMA::Chef::User::Action::Account
49
          end
50
51
          # @param [AMA::Chef::User::Model::Account] current_state
52
          # @param [AMA::Chef::User::Model::Account] desired_state
53 View Code Duplication
          def process_public_keys(current_state, desired_state)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
54
            return [] if desired_state.nil? && !current_state.policy.remove?
55
            account = desired_state || current_state
56
            current_keys = current_state ? current_state.public_keys : {}
57
            desired_keys = desired_state ? desired_state.public_keys : {}
58
            @public_keys.plan(account, current_keys, desired_keys)
59
          end
60
61
          # @param [AMA::Chef::User::Model::Account] current_state
62
          # @param [AMA::Chef::User::Model::Account] desired_state
63 View Code Duplication
          def process_private_keys(current_state, desired_state)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
64
            return [] if desired_state.nil? && !current_state.policy.remove?
65
            account = desired_state || current_state
66
            current_keys = current_state ? current_state.private_keys : {}
67
            desired_keys = desired_state ? desired_state.private_keys : {}
68
            @private_keys.plan(account, current_keys, desired_keys)
69
          end
70
71
          # @param [AMA::Chef::User::Model::Account] current_state
72
          # @param [AMA::Chef::User::Model::Account] desired_state
73 View Code Duplication
          def process_privileges(current_state, desired_state)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
74
            return [] if desired_state.nil? && !current_state.policy.remove?
75
            account = desired_state || current_state
76
            current_privileges = current_state ? current_state.privileges : {}
77
            desired_privileges = desired_state ? desired_state.privileges : {}
78
            @privileges.plan(account, current_privileges, desired_privileges)
79
          end
80
        end
81
      end
82
    end
83
  end
84
end
85