Sha256: 30e203403ff01b706a815cabb264d1f4019da6271fb0ddd5c6d626d422a835a1

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

module Vedeu

  # Repositories contain registerables, this module provides convenience methods
  # for them.
  module Registerable

    # These class methods are mixed into the repository.
    module ClassMethods

      # The null model is used when the repository cannot be found.
      #
      # @param klass [Class]
      # @return [Symbol]
      def null(klass)
        define_method(:null_model) { klass }
      end

      # The real model is the usual model to use for a given repository.
      #
      # @param klass [Class]
      # @return [Symbol]
      def real(klass)
        define_method(:real_model) { klass }
      end

      # Register a repository for storing models.
      #
      # @param model [Class]
      # @param storage [Class|Hash]
      # @return [Vedeu::Repository]
      def register(model = nil, storage = {})
        new(model, storage).tap do |klass|
          Vedeu::Repositories.register(klass.repository)
        end
      end

    end # ClassMethods

    # When this module is included in a class, provide ClassMethods as class
    # methods for the class.
    #
    # @param klass [Class]
    # @return [void]
    def self.included(klass)
      klass.send :extend, ClassMethods
    end

  end # Registerable

end # Vedeu

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vedeu-0.4.25 lib/vedeu/repositories/registerable.rb
vedeu-0.4.24 lib/vedeu/repositories/registerable.rb