Sha256: 5fa45ab07c46ffa9919bf9beef067069c1b2b075778e292eeda1acf2099e6e86

Contents?: true

Size: 1018 Bytes

Versions: 22

Compression:

Stored size: 1018 Bytes

Contents

module DataMapper
  module Types
    class Discriminator < DataMapper::Type
      primitive Class
      track :set
      default lambda { |r,p| p.model }
      nullable false

      def self.bind(property)
        model = property.model

        model.class_eval <<-EOS, __FILE__, __LINE__
          def self.descendants
            (@descendants ||= []).uniq!
            @descendants
          end

          after_class_method :inherited, :add_scope_for_discriminator

          def self.add_scope_for_discriminator(retval, target)
            target.descendants << target
            target.default_scope.update(#{property.name.inspect} => target.descendants)
            propagate_descendants(target)
          end

          def self.propagate_descendants(target)
            descendants << target
            superclass.propagate_descendants(target) if superclass.respond_to?(:propagate_descendants)
          end
        EOS
      end
    end # class Discriminator
  end # module Types
end # module DataMapper

Version data entries

22 entries across 22 versions & 6 rubygems

Version Path
datamapper-dm-core-0.9.11 lib/dm-core/types/discriminator.rb
joevandyk-dm-core-0.9.6 lib/dm-core/types/discriminator.rb
rpbertp13-dm-core-0.9.11.1 lib/dm-core/types/discriminator.rb
rpbertp13-dm-core-0.9.11.2 lib/dm-core/types/discriminator.rb
sam-dm-core-0.9.10 lib/dm-core/types/discriminator.rb
sam-dm-core-0.9.11 lib/dm-core/types/discriminator.rb
sam-dm-core-0.9.6 lib/dm-core/types/discriminator.rb
sam-dm-core-0.9.7 lib/dm-core/types/discriminator.rb
sam-dm-core-0.9.8 lib/dm-core/types/discriminator.rb
sam-dm-core-0.9.9 lib/dm-core/types/discriminator.rb
dm-core-0.9.11 lib/dm-core/types/discriminator.rb
dm-core-0.9.10 lib/dm-core/types/discriminator.rb
dm-core-0.9.6 lib/dm-core/types/discriminator.rb
dm-core-0.9.5 lib/dm-core/types/discriminator.rb
dm-core-0.9.7 lib/dm-core/types/discriminator.rb
dm-core-0.9.3 lib/dm-core/types/discriminator.rb
dm-core-0.9.4 lib/dm-core/types/discriminator.rb
dm-core-0.9.8 lib/dm-core/types/discriminator.rb
dm-core-0.9.9 lib/dm-core/types/discriminator.rb
mack-data_mapper-0.8.2 lib/gems/dm-core-0.9.7/lib/dm-core/types/discriminator.rb