Sha256: c36572c0384b69d22247bd99b0a4c0f2d9fa8263e1b2fea54b73a8acdf5ead03

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

# encoding: utf-8

require 'rom/schema'
require 'rom/schema/definition'

module ROM
  class Schema

    # Schema builder DSL
    #
    class Builder
      include Concord.new(:definition), Adamantium::Flat

      # Build a relation schema
      #
      # @example
      #
      #   Schema.build do
      #     base_relation :users do
      #       repository :test
      #       attribute :id, :name
      #     end
      #   end
      #
      # @return [Schema]
      #
      # @api public
      def self.build(repositories, &block)
        new(Definition.new(repositories, &block))
      end

      # Return defined relation identified by name
      #
      # @example
      #
      #   schema[:users] # => #<Axiom::Relation::Base ..>
      #
      # @return [Axiom::Relation, Axiom::Relation::Base]
      #
      # @api public
      def [](name)
        definition[name]
      end

      # @api private
      def call(&block)
        definition.instance_eval(&block)
        self
      end

      # @api private
      def finalize
        Schema.new(definition.relations)
      end

    end # Builder

  end # Schema
end # ROM

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-0.2.0 lib/rom/schema/builder.rb