mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.9 KiB
1.9 KiB
Declarative
DSL for nested schemas.
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
- Copyright (c) 2015 Nick Sutterer apotonick@gmail.com