Sha256: 1c0f2232b1f1cc88e9b72503d0abdbd3011973c37c7d6a05df2fbee163448bb0

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

require 'rom/support/options'

require 'rom/repository/ext/relation'

require 'rom/repository/mapper_builder'
require 'rom/repository/loading_proxy'

module ROM
  class Repository < Gateway
    # Abstract repository class to inherit from
    #
    # TODO: rename this to Repository once deprecated Repository from rom core is gone
    #
    # @api public
    class Base # :trollface:
      include Options

      option :mapper_builder, reader: true, default: proc { MapperBuilder.new }

      # Define which relations your repository is going to use
      #
      # @example
      #   class MyRepo < ROM::Repository::Base
      #     relations :users, :tasks
      #   end
      #
      #   my_repo = MyRepo.new(rom_env)
      #
      #   my_repo.users
      #   my_repo.tasks
      #
      # @return [Array<Symbol>]
      #
      # @api public
      def self.relations(*names)
        if names.any?
          attr_reader(*names)
          @relations = names
        else
          @relations
        end
      end

      # @api private
      def initialize(env, options = {})
        super
        self.class.relations.each do |name|
          proxy = LoadingProxy.new(
            env.relation(name), name: name, mapper_builder: mapper_builder
          )
          instance_variable_set("@#{name}", proxy)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rom-repository-0.1.0 lib/rom/repository/base.rb
rom-repository-0.0.2 lib/rom/repository/base.rb
rom-repository-0.0.1 lib/rom/repository/base.rb