Sha256: a095da0ffb70fa60f2eb21b6c1ed92be0add8acdc7dd19edeb8f0157f9c2b558

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

module Sequel
  module Plugins
    module ExternalId
      def self.apply(model,*args,&block)
        @global_prefix = (args.first || {})[:global_prefix]
      end

      module ClassMethods
        attr_reader :global_prefix
        def has_external_id(prefix)
          global_prefix = find_global_prefix
          @external_id_prefix = RichString.new("#{global_prefix}#{prefix}").to_s_or_nil
        end

        def external_id_prefix = @external_id_prefix

        def find_global_prefix(receiver=self)
          if receiver.respond_to?(:global_prefix)
            if receiver.global_prefix.nil?
              receiver.ancestors.select { |ancestor| ancestor != receiver }.map { |ancestor|
                self.find_global_prefix(ancestor)
              }.compact.first
            else
              receiver.global_prefix
            end
          else
            nil
          end
        end
      end

      module InstanceMethods
        def before_save
          if self.class.external_id_prefix
            if self.external_id.nil?
              random_hex = SecureRandom.hex
              self.external_id = "#{self.class.external_id_prefix}_#{random_hex}"
            end
          end
          super
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
brut-0.0.1 lib/sequel/plugins/external_id.rb