Class: Dbsketch::Model::Table

Inherits:
Database_Object show all
Defined in:
lib/dbsketch/model/table.rb

Instance Attribute Summary collapse

Attributes inherited from Database_Object

#comment, #dependencies, #meaning, #name, #order

Instance Method Summary collapse

Methods inherited from Database_Object

#add_dependencies, #class_name, #compute_order!, #inspect, #reset_order!

Constructor Details

#initialize(name, meaning: nil, comment: nil, dependencies: [], columns: [], p_key_columns: []) ⇒ Table

Returns a new instance of Table.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dbsketch/model/table.rb', line 18

def initialize name, meaning: nil, comment: nil, dependencies: [], columns: [], p_key_columns: []
	super name, :meaning => meaning, :comment => comment, :dependencies => dependencies
	columns = columns.is_a?(Array) ? columns.flatten : [columns]
	p_key_columns = p_key_columns.is_a?(Array) ? p_key_columns : [p_key_columns]
	### Preconditions
	columns.each_with_index do |column, index|
		raise ArgumentError, "columns[#{index}] is not a Dbsketch::Model::AbstractColumn" unless column.is_a? AbstractColumn
	end
	p_key_columns.each_with_index do |column, index|
		raise ArgumentError, "p_key_columns[#{index}] is not a String nor a Dbsketch::Model::AbstractColumn" unless column.is_a? String or column.is_a? AbstractColumn
	end
	###
	@columns = []
	columns.each { |c| add_column c }
	@primary_key = nil
	primary_key_columns = p_key_columns.map { |c| (c.is_a? AbstractColumn) ? c : self[c] }
	set_primary_key PrimaryKey.new "PK_#{@name}", primary_key_columns if not primary_key_columns.empty?
	@check_constraints = []
	@foreign_keys = []
	@unique_constraints = []
end

Instance Attribute Details

#check_constraintsObject (readonly)

Returns the value of attribute check_constraints.



40
41
42
# File 'lib/dbsketch/model/table.rb', line 40

def check_constraints
  @check_constraints
end

#columnsObject (readonly)

Returns the value of attribute columns.



40
41
42
# File 'lib/dbsketch/model/table.rb', line 40

def columns
  @columns
end

#foreign_keysObject (readonly)

Returns the value of attribute foreign_keys.



40
41
42
# File 'lib/dbsketch/model/table.rb', line 40

def foreign_keys
  @foreign_keys
end

#primary_keyObject (readonly)

Returns the value of attribute primary_key.



40
41
42
# File 'lib/dbsketch/model/table.rb', line 40

def primary_key
  @primary_key
end

#unique_constraintsObject (readonly)

Returns the value of attribute unique_constraints.



40
41
42
# File 'lib/dbsketch/model/table.rb', line 40

def unique_constraints
  @unique_constraints
end

Instance Method Details

#[](column_name) ⇒ Object

Raises:

  • (ArgumentError)


92
93
94
95
96
# File 'lib/dbsketch/model/table.rb', line 92

def [] column_name
	column = @columns.find { |c| c.name.downcase == column_name.downcase }
	raise ArgumentError, "column #{column_name} not found in table #{@name}" if nil == column
	column
end

#add(object) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/dbsketch/model/table.rb', line 42

def add object
	objects = object.is_a?(Array) ? object : [object]
	### Preconditions
	objects.each_with_index do |o, index|
		raise ArgumentError, "object n°#{index + 1} is not a valid Dbsketch::Model object" unless o.is_a? AbstractColumn or o.is_a? PrimaryKey or o.is_a? CheckConstraint or o.is_a? ForeignKey or o.is_a? UniqueConstraint
	end
	###
	objects.each do |o|
		if o.is_a? AbstractColumn
			add_column o
		elsif o.is_a? PrimaryKey
			set_primary_key o
		elsif o.is_a? CheckConstraint
			add_check_constraint o
		elsif o.is_a? ForeignKey
			add_foreign_key o
		elsif o.is_a? UniqueConstraint
			add_unique_constraint o
		end
	end
end

#check_constraint(constraint_name) ⇒ Object

Raises:

  • (ArgumentError)


98
99
100
101
102
# File 'lib/dbsketch/model/table.rb', line 98

def check_constraint constraint_name
	constraint = @check_constraints.find { |c| c.name.downcase == constraint_name.downcase }
	raise ArgumentError, "check constraint #{constraint_name} not found in table #{@name}" if nil == constraint
	constraint
end

#foreign_key(key_name) ⇒ Object

Raises:

  • (ArgumentError)


104
105
106
107
108
# File 'lib/dbsketch/model/table.rb', line 104

def foreign_key key_name
	key = @foreign_keys.find { |c| c.name.downcase == key_name.downcase }
	raise ArgumentError, "foreign key #{key_name} not found in table #{@name}" if nil == key
	key
end

#has_check_constraint?(constraint_name) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


71
72
73
74
75
76
# File 'lib/dbsketch/model/table.rb', line 71

def has_check_constraint? constraint_name
	### Preconditions
	raise ArgumentError, "constraint_name is not a String" unless constraint_name.is_a? String
	###
	nil != @check_constraints.find { |c| c.name.downcase == constraint_name.downcase }
end

#has_column?(column_name) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


64
65
66
67
68
69
# File 'lib/dbsketch/model/table.rb', line 64

def has_column? column_name
	### Preconditions
	raise ArgumentError, "column_name is not a String" unless column_name.is_a? String
	###
	nil != @columns.find { |c| c.name.downcase == column_name.downcase }
end

#has_foreign_key?(key_name) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


78
79
80
81
82
83
# File 'lib/dbsketch/model/table.rb', line 78

def has_foreign_key? key_name
	### Preconditions
	raise ArgumentError, "key_name is not a String" unless key_name.is_a? String
	###
	nil != @foreign_keys.find { |c| c.name.downcase == key_name.downcase }
end

#has_unique_constraint?(constraint_name) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


85
86
87
88
89
90
# File 'lib/dbsketch/model/table.rb', line 85

def has_unique_constraint? constraint_name
	### Preconditions
	raise ArgumentError, "constraint_name is not a String" unless constraint_name.is_a? String
	###
	nil != @unique_constraints.find { |c| c.name.downcase == constraint_name.downcase }
end

#unique_constraint(constraint_name) ⇒ Object

Raises:

  • (ArgumentError)


110
111
112
113
114
# File 'lib/dbsketch/model/table.rb', line 110

def unique_constraint constraint_name
	constraint = @unique_constraints.find { |c| c.name.downcase == constraint_name.downcase }
	raise ArgumentError, "unique constraint #{constraint_name} not found in table #{@name}" if nil == constraint
	constraint
end