Sha256: 786a3158db2c5a9b4986500acab17feab31d6dbc802db06afa406bcb734b8f49

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

module PublicId
  module ActiveRecord
    module InstanceMethods
      def to_param
        self.send(self.class.public_identifier_attribute)
      end
      def public_identifier_attribute
        self.class.public_identifier_attribute
      end
      def initialize_public_id
        self.send(public_identifier_attribute) or
        self.send("#{public_identifier_attribute}=", self.class.new_public_identifier)
      end
    end
    module PublicallyIdentifiedBy
      extend ActiveSupport::Concern
      included do
      end
      module ClassMethods
        def publically_identified_by(attribute_name, *args)
          return if respond_to?(:public_identifier_attribute)
          options = args.extract_options!
          class << self
            attr_accessor :public_identifier_attribute, :public_identifier_options
            # def public_identifier
            #   @public_identifier
            # end
            # def public_identifier=(attribute_name)
            #   @public_identifier = attribute_name
            # end
            def initialize_public_ids!
              self.where(self.public_identifier_attribute => nil).find_each do |obj|
                obj.update_attribute(self.public_identifier_attribute, self.new_public_identifier)
              end
            end
            def find_by_public_id(public_id)
              where(self.public_identifier_attribute => public_id).first
            end
            def new_public_identifier
              while(true)
                new_id = ::PublicId::Util.new_public_identifier(self, self.public_identifier_options)
                break unless where(self.public_identifier_attribute => new_id).exists?
              end
              return new_id
            end
          end
          self.public_identifier_attribute = attribute_name
          self.public_identifier_options = options
          include ::PublicId::ActiveRecord::InstanceMethods
          after_initialize :initialize_public_id
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
public_id-0.5.0 lib/public_id/activerecord/publically_identified_by.rb