module InfinumId
  module Users
    class Updater
      def initialize(params, user)
        @user_params = params.slice(*user_column_names).deep_symbolize_keys
        @user = user
      end

      def self.call(params, user)
        new(params, user).call
      end

      def call
        update_user
        InfinumId::AfterUserUpdate.call(user)
      end

      private

      attr_reader :user_params, :user

      def update_user
        user.update(user_params)
      end

      def user_column_names
        User.column_names
      end
    end
  end
end