Class: ActiveRecord::ConnectionAdapters::Elasticsearch::CreateTableDefinition

Inherits:
TableDefinition
  • Object
show all
Defined in:
lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb

Instance Method Summary collapse

Constructor Details

#initialize(conn, name, settings: nil, mappings: nil, aliases: nil, metas: nil, **opts) ⇒ CreateTableDefinition

Returns a new instance of CreateTableDefinition.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 9

def initialize(conn, name, settings: nil, mappings: nil, aliases: nil, metas: nil, **opts)
  super(conn, name, **opts)

  @settings = HashWithIndifferentAccess.new
  @mappings = HashWithIndifferentAccess.new
  @aliases  = HashWithIndifferentAccess.new
  @metas    = HashWithIndifferentAccess.new

  # HINT: Currently there is only one attribute, that cannot be assigned to any of the top hash kind, and also not opts:
  # * dynamic
  # This attribute must be assigned below the *mappings* node but as sibling to *properties*.
  # This can only be done to create a special kind of options (@flags ???) and assign & fetch them within the required arel.
  # Since this only setting can also be assigned to each individual mapping, there is currently no need to build this ...

  transform_settings!(settings) if settings.present?
  transform_mappings!(mappings) if mappings.present?
  transform_aliases!(aliases) if aliases.present?
  # PLEASE NOTE: metas are already provided through the mappings (['_meta']),
  # but this will support individually provided key<->values...
  transform_metas!(metas) if metas.present?
end

Instance Method Details

#[](name) ⇒ Object

Returns a MappingDefinition for the mapping with name name.



59
60
61
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 59

def [](name)
  @mappings[name]
end

#add_alias(name, if_not_exists: false, force: false, **options, &block) ⇒ Object

Raises:

  • (ArgumentError)


166
167
168
169
170
171
172
173
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 166

def add_alias(name, if_not_exists: false, force: false, **options, &block)
  return if if_not_exists && @aliases.key?(name)
  raise ArgumentError, "you cannot define an already defined alias '#{name}'." if @aliases.key?(name) && !force?(force)

  @aliases[name] = new_alias_definition(name, **options, &block)

  self
end

#aliasesArray

returns an array with all TableAliasDefinition.

Returns:

  • (Array)


54
55
56
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 54

def aliases
  @aliases.values
end

#change_alias(name, if_exists: false, **options, &block) ⇒ Object



175
176
177
178
179
180
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 175

def change_alias(name, if_exists: false, **options, &block)
  return if if_exists && !@aliases.key?(name)

  # simply force full overwrite
  add_alias(name, force: true, **options, &block)
end

#change_mapping(name, type, if_exists: false, **options, &block) ⇒ Object Also known as: change_column, change

Raises:

  • (ArgumentError)


107
108
109
110
111
112
113
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 107

def change_mapping(name, type, if_exists: false, **options, &block)
  return if if_exists && !@mappings.key?(name)

  raise ArgumentError, "you cannot change an unknown mapping '#{name}'" unless @mappings.key?(name)

  mapping(name, type, force: true, **options, &block)
end

#change_mapping_attributes(name, if_exists: false, **options, &block) ⇒ Object

Raises:

  • (ArgumentError)


128
129
130
131
132
133
134
135
136
137
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 128

def change_mapping_attributes(name, if_exists: false, **options, &block)
  return if if_exists && !@mappings.key?(name)

  raise ArgumentError, "you cannot change an unknown mapping '#{name}'" unless @mappings.key?(name)

  # merge mapping attributes
  opts = @mappings[name].attributes.merge(options)

  mapping(name, @mappings[name].type, force: true, **opts, &block)
end

#change_mapping_meta(name, **options) ⇒ Object

Raises:

  • (ArgumentError)


118
119
120
121
122
123
124
125
126
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 118

def change_mapping_meta(name, **options)
  raise ArgumentError, "you cannot change the 'meta' parameter for an unknown mapping '#{name}'" unless @mappings.key?(name)

  # merge mapping options
  opts = @mappings[name].attributes
  opts['meta'] = @mappings[name].meta.merge(options)

  mapping(name, @mappings[name].type, force: true, **opts)
end

#change_meta(name, value, **options) ⇒ Object



76
77
78
79
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 76

def change_meta(name, value, **options)
  # simply force full overwrite
  meta(name, value, force: true, **options)
end

#change_setting(name, value, if_exists: false, **options, &block) ⇒ Object



155
156
157
158
159
160
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 155

def change_setting(name, value, if_exists: false, **options, &block)
  return if if_exists && !@settings.key?(name)

  # simply force full overwrite
  setting(name, value, force: true, **options, &block)
end

#mapping(name, type, if_not_exists: false, force: false, **options, &block) ⇒ Object Also known as: column, add_mapping, add_column

adds a new mapping

Raises:

  • (ArgumentError)


86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 86

def mapping(name, type, if_not_exists: false, force: false, **options, &block)
  return if if_not_exists && @mappings.key?(name)
  raise ArgumentError, "you cannot define an already defined mapping '#{name}'!" if @mappings.key?(name) && !force?(force)

  mapping = new_mapping_definition(name, type, **options, &block)
  @mappings[name] = mapping

  # check if the mapping is assigned as primary_key
  if mapping.primary_key?
    meta :primary_key, mapping.name
    meta(:auto_increment, mapping.auto_increment) if mapping.auto_increment?
  end

  self
end

#mappingsArray Also known as: columns

returns an array with all TableMappingDefinition.

Returns:

  • (Array)


39
40
41
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 39

def mappings
  @mappings.values
end

#meta(name, value, force: false, **options) ⇒ Object

adds a new meta

Raises:

  • (ArgumentError)


68
69
70
71
72
73
74
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 68

def meta(name, value, force: false, **options)
  raise ArgumentError, "you cannot define an already defined meta '#{name}'!" if @metas.key?(name) && !force?(force)

  @metas[name] = new_meta_definition(name, value, **options)

  self
end

#metasArray

returns an array with all TableMetaDefinition.

Returns:

  • (Array)


45
46
47
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 45

def metas
  @metas.values
end

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

Adds a reference.

t.references(:user) t.belongs_to(:supplier)

See connection.add_reference for details of the options you can use.



192
193
194
195
196
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 192

def references(*args, **options)
  args.each do |ref_name|
    ActiveRecord::ConnectionAdapters::ReferenceDefinition.new(ref_name, **options).add_to(self)
  end
end

#remove_alias(name) ⇒ Object



182
183
184
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 182

def remove_alias(name)
  @aliases.delete name
end

#remove_mapping(name) ⇒ Object Also known as: remove_column



139
140
141
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 139

def remove_mapping(name)
  @mappings.delete(name)
end

#remove_meta(name) ⇒ Object



81
82
83
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 81

def remove_meta(name)
  @metas.delete(name)
end

#remove_setting(name) ⇒ Object



162
163
164
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 162

def remove_setting(name)
  @settings.delete name
end

#setting(name, value, if_not_exists: false, force: false, **options, &block) ⇒ Object

Raises:

  • (ArgumentError)


146
147
148
149
150
151
152
153
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 146

def setting(name, value, if_not_exists: false, force: false, **options, &block)
  return if if_not_exists && @settings.key?(name)
  raise ArgumentError, "you cannot define an already defined setting '#{name}'!" if @settings.key?(name) && !force?(force)

  @settings[name] = new_setting_definition(name, value, **options, &block)

  self
end

#settingsArray

returns an array with all TableSettingDefinition.

Returns:

  • (Array)


33
34
35
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 33

def settings
  @settings.values
end

#timestamps(**options) ⇒ Object

Appends :datetime columns :created_at and :updated_at to the table. See connection.add_timestamps

t.timestamps


204
205
206
207
# File 'lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb', line 204

def timestamps(**options)
  column(:created_at, :datetime, **options)
  column(:updated_at, :datetime, **options)
end