Class: Ridgepole::DSLParser::Context::TableDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/ridgepole/dsl_parser.rb

Constant Summary collapse

TYPES =
[
  # https://github.com/rails/rails/blob/v4.2.1/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L274
  :string,
  :text,
  :integer,
  :bigint,
  :float,
  :decimal,
  :datetime,
  :timestamp,
  :time,
  :date,
  :binary,
  :boolean,

  # https://github.com/rails/rails/blob/v4.2.1/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L79
  :daterange,
  :numrange,
  :tsrange,
  :tstzrange,
  :int4range,
  :int8range,
  :binary,
  :boolean,
  :bigint,
  :xml,
  :tsvector,
  :hstore,
  :inet,
  :cidr,
  :macaddr,
  :uuid,
  :json,
  :jsonb,
  :ltree,
  :citext,
  :point,
  :bit,
  :bit_varying,
  :money,
].uniq
ALIAS_TYPES =
{
  # https://github.com/rails/rails/blob/v5.0.0.rc1/activerecord/lib/active_record/connection_adapters/mysql/schema_definitions.rb
  tinyblob: [:blob, {limit: 255}],
  mediumblob: [:binary, {limit: 16777215}],
  longblob: [:binary, {limit: 4294967295}],
  tinytext: [:text, {limit: 255}],
  mediumtext: [:text, {limit: 16777215}],
  longtext: [:text, {limit: 4294967295}],
  unsigned_integer: [:integer, {unsigned: true}],
  unsigned_bigint: [:bigint, {unsigned: true}],
  unsigned_float: [:float, {limit: 24, unsigned: true}],
  unsigned_decimal: [:decimal, {precision: 10, unsigned: true}],
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(table_name, base) ⇒ TableDefinition

Returns a new instance of TableDefinition.



6
7
8
9
10
# File 'lib/ridgepole/dsl_parser.rb', line 6

def initialize(table_name, base)
  @__definition = {}
  @table_name = table_name
  @base = base
end

Instance Attribute Details

#__definitionObject (readonly)

Returns the value of attribute __definition.



4
5
6
# File 'lib/ridgepole/dsl_parser.rb', line 4

def __definition
  @__definition
end

Instance Method Details

#blob(*args) ⇒ Object

XXX:



86
87
88
89
90
91
92
93
94
95
# File 'lib/ridgepole/dsl_parser.rb', line 86

def blob(*args)
  options = args.extract_options!
  options = {limit: 65535}.merge(options)
  column_names = args

  column_names.each do |name|
    column_type = (0..0xff).include?(options[:limit]) ? :blob : :binary
    column(name, column_type, options)
  end
end

#column(name, type, options = {}) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/ridgepole/dsl_parser.rb', line 12

def column(name, type, options = {})
  name = name.to_s

  @__definition[name] = {
    :type => type,
    :options => options,
  }
end

#index(name, options = {}) ⇒ Object



106
107
108
# File 'lib/ridgepole/dsl_parser.rb', line 106

def index(name, options = {})
  @base.add_index(@table_name, name, options)
end

#references(*args) ⇒ Object Also known as: belongs_to



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/ridgepole/dsl_parser.rb', line 116

def references(*args)
  options = args.extract_options!
  polymorphic = options.delete(:polymorphic)
  index_options = options.delete(:index)
  type = options.delete(:type) || :integer

  args.each do |col|
    column("#{col}_id", type, options)
    column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) if polymorphic
    if index_options
      index("#{col}_id", index_options.is_a?(Hash) ? index_options : {})
      index("#{col}_type", index_options.is_a?(Hash) ? index_options : {}) if polymorphic
    end
  end
end

#timestamps(*args) ⇒ Object



110
111
112
113
114
# File 'lib/ridgepole/dsl_parser.rb', line 110

def timestamps(*args)
  options = {:null => false}.merge(args.extract_options!)
  column(:created_at, :datetime, options)
  column(:updated_at, :datetime, options)
end