summaryrefslogtreecommitdiff
path: root/lib/bulk_imports/common/transformers/user_reference_transformer.rb
blob: ca077b4ef43710a0134b09f0c2a85ebdd716cf7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# frozen_string_literal: true

# UserReferenceTransformer replaces specified user
# reference key with a user id being either:
#   - A user id found by `public_email` in the group
#   - Current user id
# under a new key `"#{@reference}_id"`.
module BulkImports
  module Common
    module Transformers
      class UserReferenceTransformer
        DEFAULT_REFERENCE = 'user'

        def initialize(options = {})
          @reference = options[:reference] || DEFAULT_REFERENCE
          @suffixed_reference = "#{@reference}_id"
        end

        def transform(context, data)
          return unless data

          user = find_user(context, data&.dig(@reference, 'public_email')) || context.current_user

          data
            .except(@reference)
            .merge(@suffixed_reference => user.id)
        end

        private

        def find_user(context, email)
          return if email.blank?

          context.group.users.find_by_any_email(email, confirmed: true) # rubocop: disable CodeReuse/ActiveRecord
        end
      end
    end
  end
end