class Ridgepole::DSLParser::TableDefinition
Constants
- ALIAS_TYPES
- DEFAULT_PRIMARY_KEY_TYPE
- TYPES
Attributes
__definition[R]
Public Class Methods
new(table_name, base)
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 8 def initialize(table_name, base) @__definition = {} @table_name = table_name @base = base end
Public Instance Methods
blob(*args)
click to toggle source
XXX:
# File lib/ridgepole/dsl_parser/table_definition.rb, line 118 def blob(*args) options = args.extract_options! options = { limit: 65_535 }.merge(options) column_names = args column_names.each do |name| column_type = (0..0xff).cover?(options[:limit]) ? :blob : :binary column(name, column_type, options) end end
check_constraint(expression, options = {})
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 179 def check_constraint(expression, options = {}) @base.add_check_constraint(@table_name, expression, options) end
column(name, type, options = {})
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 14 def column(name, type, options = {}) name = name.to_s index_options = options.key?(:index) ? options.delete(:index) : false @__definition[name] = { type: type, options: options, } index(name, index_options.is_a?(Hash) ? index_options : {}) if index_options end
exclusion_constraint(expression, options = {})
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 183 def exclusion_constraint(expression, options = {}) @base.add_exclusion_constraint(@table_name, expression, options) end
foreign_key(name, options = {})
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 142 def foreign_key(name, options = {}) @base.add_foreign_key(@table_name, name, options) end
index(name, options = {})
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 138 def index(name, options = {}) @base.add_index(@table_name, name, options) end
references(*args)
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 152 def references(*args) options = args.extract_options! polymorphic = options.delete(:polymorphic) polymorphic_options = polymorphic.is_a?(Hash) ? polymorphic : {} # https://github.com/rails/rails/blob/5-2-1/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L167 polymorphic_options.merge!(options.slice(:null, :first, :after)) index_options = options.key?(:index) ? options.delete(:index) : true type = options.delete(:type) || DEFAULT_PRIMARY_KEY_TYPE foreign_key_options = options.delete(:foreign_key) args.each do |col| column("#{col}_id", type, options) column("#{col}_type", :string, polymorphic_options) if polymorphic if index_options columns = polymorphic ? ["#{col}_type", "#{col}_id"] : ["#{col}_id"] index(columns, index_options.is_a?(Hash) ? index_options : {}) end if foreign_key_options # rubocop:disable Style/Next fk_opts = foreign_key_options.is_a?(Hash) ? foreign_key_options.dup : {} fk_opts.update(column: "#{col}_id") if col.to_s.singularize != col.to_s to_table = fk_opts.delete(:to_table) || col.to_s.pluralize @base.add_foreign_key(@table_name, to_table, fk_opts) end end end
Also aliased as: belongs_to
timestamps(*args)
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 146 def timestamps(*args) options = { null: false }.merge(args.extract_options!) column(:created_at, :datetime, options.dup) column(:updated_at, :datetime, options.dup) end
unique_constraint(column_name, options = {})
click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 187 def unique_constraint(column_name, options = {}) @base.add_unique_constraint(@table_name, column_name, options) end