Farmbot-Web-App/db/migrate/20181208035706_add_initial_...

59 lines
1.9 KiB
Ruby

class AddInitialFragmentTables < ActiveRecord::Migration[5.2]
def change
# A tree of CeleryScript. Could be attached to a FarmEvent, Sequence, Etc...
create_table :fragments do |t|
t.timestamps
t.references :device
t.references :owner, polymorphic: true, null: false
end
# A constant declaration. Ex: if the node references `tool_id: 6`, then you need a primitive with a value of 6.
create_table :primitives do |t|
t.references :fragment, null: false
t.string :value, null: false
end
# If `node.args` in celery script contains key/value pairs, this is a key name.
create_table :arg_names do |t|
t.string :value, null: false, unique: true
end
# The `node.kind` for a CS node. "sequence", "move_rel", etc...
create_table :kinds do |t|
t.string :value, null: false, unique: true
end
# A node, linked to its neighboring node + kind + all that good stuff.
create_table :nodes do |t|
t.references :fragment, null: false
t.references :kind, null: false
t.integer :body_id
t.integer :next_id
t.integer :parent_id
end
# A collection of key/value pairs.
create_table :arg_sets do |t|
t.references :fragment, null: false
t.references :node, null: false
end
# K/V Pairs that are not CeleryScript nodes. Eg: `tool_id: 6`
create_table :primitive_pairs do |t|
t.references :fragment, null: false
t.references :arg_name, null: false
t.references :arg_set, null: false
t.references :primitive, null: false
end
# A key/value pair that nests deeper in the tree. Ex: `location` arg in
# `move_abs`
create_table :standard_pairs do |t|
t.references :fragment, null: false
t.references :arg_name, null: false
t.references :arg_set, null: false
t.references :node, null: false
end
end
end