59 lines
1.9 KiB
Ruby
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
|