Sha256: 54e58b1cbf1131caf0fd203dbc260350d618c43a039d88fa724816342f9ed008

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

module CruLib
  module GlobalRegistryMasterPersonMethods
    extend ActiveSupport::Concern
    include CruLib::GlobalRegistryMethods

    included do
      after_commit :retrieve_gr_master_person_id, on: [:create, :update]
    end

    def retrieve_gr_master_person_id
      return unless respond_to?(:gr_master_person_id)
      async("async_retrieve_gr_master_person_id")
    end

    def async_retrieve_gr_master_person_id
      fail CruLib::NoGlobalRegistryIdError, "Person #{id} has no global_registry_id; will retry" unless global_registry_id
      begin
        person_entity = GlobalRegistry::Entity.find(global_registry_id, 'filters[owned_by]' => 'mdm')
      rescue RestClient::ResourceNotFound
        Rails.logger.info "GR entity #{global_registry_id} for Person #{id} does not exist; will _not_ retry"
        return
      end
      mdm_entity_id = Array.wrap(person_entity.dig('entity', 'person', 'master_person:relationship'))
                          .first # although there should not be more than one
                          .try(:[], 'master_person')
      fail CruLib::NoGlobalRegistryMasterPersonError, "GR entity #{global_registry_id} for Person #{id} has no master_person; will retry" unless mdm_entity_id
      update_columns(gr_master_person_id: mdm_entity_id)
    end

    module ClassMethods
      def skip_fields_for_gr
        super + %w(gr_master_person_id)
      end
    end
  end

  class NoGlobalRegistryIdError < StandardError; end

  class NoGlobalRegistryMasterPersonError < StandardError; end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cru_lib-0.1.2 lib/cru_lib/global_registry_master_person_methods.rb