Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

About

DSL for nested schemas.

Resources

License

Packages

No packages published

Languages