Sha256: 7a7e4cd2cf5f83616d6ae82c6620020102e644a1608374814caaaa0ea05cba7b

Contents?: true

Size: 1.93 KB

Versions: 47

Compression:

Stored size: 1.93 KB

Contents

module Vedeu

  module Repositories

    # 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::Repositories::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 # Repositories

end # Vedeu

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
vedeu-0.6.37 lib/vedeu/repositories/registerable.rb
vedeu-0.6.36 lib/vedeu/repositories/registerable.rb
vedeu-0.6.35 lib/vedeu/repositories/registerable.rb
vedeu-0.6.34 lib/vedeu/repositories/registerable.rb
vedeu-0.6.33 lib/vedeu/repositories/registerable.rb
vedeu-0.6.32 lib/vedeu/repositories/registerable.rb
vedeu-0.6.31 lib/vedeu/repositories/registerable.rb
vedeu-0.6.30 lib/vedeu/repositories/registerable.rb
vedeu-0.6.29 lib/vedeu/repositories/registerable.rb
vedeu-0.6.28 lib/vedeu/repositories/registerable.rb
vedeu-0.6.27 lib/vedeu/repositories/registerable.rb
vedeu-0.6.26 lib/vedeu/repositories/registerable.rb
vedeu-0.6.25 lib/vedeu/repositories/registerable.rb
vedeu-0.6.24 lib/vedeu/repositories/registerable.rb
vedeu-0.6.23 lib/vedeu/repositories/registerable.rb
vedeu-0.6.22 lib/vedeu/repositories/registerable.rb
vedeu-0.6.21 lib/vedeu/repositories/registerable.rb
vedeu-0.6.20 lib/vedeu/repositories/registerable.rb
vedeu-0.6.19 lib/vedeu/repositories/registerable.rb
vedeu-0.6.18 lib/vedeu/repositories/registerable.rb