Sha256: 5cc191ababc6599c1dc43a4f313d324979ff9a1c662f9268274c151bb736e654

Contents?: true

Size: 1.75 KB

Versions: 17

Compression:

Stored size: 1.75 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(:model) { instance_variable_set('@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

      # Returns the repositories registered.
      #
      # @note
      #   If the repository is 'Geometries', for example, then @models will be
      #   either an empty Geometries repository or the collection of stored
      #   models.
      #
      # @return [void]
      def repository
        @models ||= reset!
      end

      # Remove all stored models from the repository.
      #
      # @return [void]
      def reset!
        @models = register
      end
      alias_method :reset, :reset!

    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

17 entries across 17 versions & 1 rubygems

Version Path
vedeu-0.6.9 lib/vedeu/repositories/registerable.rb
vedeu-0.6.8 lib/vedeu/repositories/registerable.rb
vedeu-0.6.7 lib/vedeu/repositories/registerable.rb
vedeu-0.6.6 lib/vedeu/repositories/registerable.rb
vedeu-0.6.5 lib/vedeu/repositories/registerable.rb
vedeu-0.6.4 lib/vedeu/repositories/registerable.rb
vedeu-0.6.3 lib/vedeu/repositories/registerable.rb
vedeu-0.6.2 lib/vedeu/repositories/registerable.rb
vedeu-0.6.1 lib/vedeu/repositories/registerable.rb
vedeu-0.6.0 lib/vedeu/repositories/registerable.rb
vedeu-0.5.13 lib/vedeu/repositories/registerable.rb
vedeu-0.5.12 lib/vedeu/repositories/registerable.rb
vedeu-0.5.11 lib/vedeu/repositories/registerable.rb
vedeu-0.5.10 lib/vedeu/repositories/registerable.rb
vedeu-0.5.9 lib/vedeu/repositories/registerable.rb
vedeu-0.5.8 lib/vedeu/repositories/registerable.rb
vedeu-0.5.7 lib/vedeu/repositories/registerable.rb