Module: Mimi::DB::Dictate::DSL

Defined in:
lib/mimi/db/dictate/dsl.rb

Instance Method Summary collapse

Instance Method Details

#field(name, opts = {}) ⇒ Object

Declares a field on a model

Examples:

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


17
18
19
20
21
22
23
24
25
26
27
# 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 = {}) ⇒ Object

Declares and index on one or several columns

Examples:

index :name
index [:customer_id, :account_id], unique: true, name: 'idx_txs_on_customer_account'

Parameters:

  • columns (Symbol, Array<Symbol>)

    one or several columns

  • opts (Hash) (defaults to: {})

    index options



38
39
40
# File 'lib/mimi/db/dictate/dsl.rb', line 38

def index(columns, opts = {})
  schema_definition.index(columns, opts)
end

#schema_definitionObject



42
43
44
45
46
47
48
# 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