Skip to content
DSL for nested schemas.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
test
.gitignore
.travis.yml
CHANGES.md
Gemfile
LICENSE.txt
README.md
Rakefile
declarative.gemspec

README.md

Declarative

DSL for nested schemas.

Gem Version

Overview

Declarative allows declaring nested schemas.

Installation

Add this line to your application's Gemfile:

gem 'declarative'

Declarative::Schema

Include this into a class or module to allow defining nested schemas using the popular ::property DSL.

Normally, an abstract base class will define essential configuration.

class Model
 extend Declarative::Schema

  def self.default_nested_class
    Model
  end
end

Concrete schema-users simply derive from the base class.

class Song < Model
  property :id

  property :artist do
    property :id
    property :name
  end
end

This won't do anything but populate the ::definitions graph.

Song.definitions #=>

<Definition "id">
<Definition "artist" nested=..>
  <Definition "id">
  <Definition "name">

The nested schema will be a subclass of Model.

Song.definitions.get(:artist) #=> <Anonymous:Model definitions=..>

Overriding Nested Building

When declaring nested schemas, per default, Declarative will use its own Schema::NestedBuilder to create the nested schema composer.

Override ::nested_builder to define your own way of doing that.

class Model
  extend Declarative::Schema

  def self.default_nested_class
    Model
  end

  def self.nested_builder
    ->(options) do
      Class.new(Model) do
        class_eval &options[:_block] # executes `property :name` etc. on nested, fresh class.
      end
    end
  end
end

Features

You can automatically include modules into all nested schemas by using ::feature.

class Model
  extend Declarative::Schema
  feature Bla

Defaults

class Model
  extend Declarative::Schema
  defaults visible: true

Copyright

You can’t perform that action at this time.