Class: Definition

Inherits:
Change show all
Defined in:
lib/tern.rb

Constant Summary

Constants inherited from Change

Change::SPLIT_MARKER

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Change

parse

Constructor Details

#initialize(id, sequence, create_sql, drop_sql) ⇒ Definition

Returns a new instance of Definition.



56
57
58
59
60
61
# File 'lib/tern.rb', line 56

def initialize(id, sequence, create_sql, drop_sql)
  @id = id
  @sequence = sequence
  @create_sql = create_sql
  @drop_sql = drop_sql
end

Class Attribute Details

.table_nameObject

Returns the value of attribute table_name.



15
16
17
# File 'lib/tern.rb', line 15

def table_name
  @table_name
end

Instance Attribute Details

#create_sqlObject (readonly)

Returns the value of attribute create_sql.



53
54
55
# File 'lib/tern.rb', line 53

def create_sql
  @create_sql
end

#drop_sqlObject (readonly)

Returns the value of attribute drop_sql.



54
55
56
# File 'lib/tern.rb', line 54

def drop_sql
  @drop_sql
end

#idObject (readonly)

Returns the value of attribute id.



51
52
53
# File 'lib/tern.rb', line 51

def id
  @id
end

#sequenceObject (readonly)

Returns the value of attribute sequence.



52
53
54
# File 'lib/tern.rb', line 52

def sequence
  @sequence
end

Class Method Details

.ensure_table_existsObject



21
22
23
24
25
26
27
28
# File 'lib/tern.rb', line 21

def ensure_table_exists
  DB.create_table? table_name do
    primary_key :id
    column :sequence, :text, :null => false
    column :create_sql, :text, :null => false
    column :drop_sql, :text, :null => false
  end
end

.load_existingObject



30
31
32
33
34
# File 'lib/tern.rb', line 30

def load_existing
  table.order(:id).all.map do |row|
    new row[:id], row[:sequence], row[:create_sql], row[:drop_sql]
  end.group_by { |d| d.sequence }
end

.load_targets(sequence_yml_path) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/tern.rb', line 36

def load_targets(sequence_yml_path)
  definition_sequences = YAML.load(File.read(sequence_yml_path))
  sequence_dir = File.dirname(sequence_yml_path)

  definition_sequences.keys.each do |sequence|
    definition_sequences[sequence] = definition_sequences[sequence].map do |f|
      create_sql, drop_sql = parse File.read(File.join(sequence_dir, f))
      Definition.new nil, sequence, create_sql, drop_sql
    end
  end

  definition_sequences
end

.tableObject



17
18
19
# File 'lib/tern.rb', line 17

def table
  DB[table_name]
end

Instance Method Details

#createObject



63
64
65
66
# File 'lib/tern.rb', line 63

def create
  DB.run create_sql
  table.insert :sequence => sequence, :create_sql => create_sql, :drop_sql => drop_sql
end

#dropObject



68
69
70
71
# File 'lib/tern.rb', line 68

def drop
  DB.run drop_sql
  table.filter(:id => id).delete
end

#tableObject



73
74
75
# File 'lib/tern.rb', line 73

def table
  self.class.table
end