# File lib/mimi/db/dictate/schema_definition.rb, line 66 def primary_key pk = columns.values.find { |c| c.params[:primary_key] } # raise "Primary key is not defined on '#{table_name}'" unless pk pk end
class Mimi::DB::Dictate::SchemaDefinition
Attributes
columns[R]
indexes[R]
table_name[R]
Public Class Methods
new(table_name)
click to toggle source
# File lib/mimi/db/dictate/schema_definition.rb, line 9 def initialize(table_name) @table_name = table_name @columns = {} @indexes = [] end
Public Instance Methods
field(name, opts)
click to toggle source
Declares a field
Example:
field :s1, as: :string field :s2, type: :string, size: 64 field :v1, as: :decimal, size: 10 # precision: 10 field :v2, as: :decimal, size: [10, 3] # precision: 10, scale: 3
# File lib/mimi/db/dictate/schema_definition.rb, line 24 def field(name, opts) name = name.to_sym raise "Cannot redefine field :#{name}" if @columns[name] opts_type = opts[:type] || opts[:as] if primary_key && (opts[:primary_key] || opts_type == :primary_key) raise "Cannot redefine primary key (:#{primary_key.name}) with :#{name}" end @columns[name] = Column.new(name, opts) end
index(columns, opts)
click to toggle source
Declares an index
Example:
index :name index [:first_name, :last_name] index :ref_code, unique: true
@param columns [String,Symbol,Array<String,Symbol>] columns to index on @param opts [Hash] index parameters (:unique, :name etc)
# File lib/mimi/db/dictate/schema_definition.rb, line 44 def index(columns, opts) case columns when String, Symbol columns = [columns.to_sym] when Array unless columns.all? { |c| c.is_a?(String) || c.is_a?(Symbol) } raise "Invalid column reference in index definition [#{columns}]" end columns = columns.map(&:to_sym) else raise 'Invalid columns argument to .index' end if columns == [primary_key.name] # TODO: warn the primary key index is ignored end @indexes << Index.new(columns, opts) end
primary_key()
click to toggle source
Returns primary key column
@return [Mimi::DB::Dictate::SchemaDefinition::Column]
to_h()
click to toggle source
# File lib/mimi/db/dictate/schema_definition.rb, line 72 def to_h { table_name: table_name, columns: columns.values.map(&:to_h), indexes: indexes.map(&:to_h) } end