module Mimi::DB::Dictate::DSL
Public Instance Methods
field(name, opts = {})
click to toggle source
Declares a field on a model
@example
field :id, as: :integer, limit: 8, primary_key: true, default: 'random_uid()' field :name # default type is :string field :value, as: :decimal, precision: 10, scale: 3 field :ref_code, as: :string, default: -> { random_ref_code() } # application default
# File lib/mimi/db/dictate/dsl.rb, line 17 def field(name, opts = {}) opts = opts.dup # alter model behaviour based on field properties if opts[:default].is_a?(Proc) field_setup_default(name, opts[:default]) opts.delete(:default) end # register field in the schema schema_definition.field(name, opts) end
index(columns, opts = {})
click to toggle source
Declares and index on one or several columns
@param columns [Symbol,Array<Symbol>] one or several columns @param opts [Hash] index options
@example
index :name index [:customer_id, :account_id], unique: true, name: 'idx_txs_on_customer_account'
# File lib/mimi/db/dictate/dsl.rb, line 38 def index(columns, opts = {}) schema_definition.index(columns, opts) end
schema_definition()
click to toggle source
# File lib/mimi/db/dictate/dsl.rb, line 42 def schema_definition unless self.respond_to?(:table_name) raise 'Mimi::DB::Dictate.schema_definition() expects .table_name, not invoked on a Model?' end Mimi::DB::Dictate.schema_definitions[table_name] ||= Mimi::DB::Dictate::SchemaDefinition.new(table_name) end
Private Instance Methods
field_setup_default(name, block)
click to toggle source
Sets up a default as a block/Proc
# File lib/mimi/db/dictate/dsl.rb, line 54 def field_setup_default(name, block) self.before_validation do send :"#{name}=", instance_exec(&block) unless send(name.to_sym) end end