Class: ActiveRecord::Instant
- Inherits:
-
Object
- Object
- ActiveRecord::Instant
show all
- Defined in:
- lib/active_record/instant.rb,
lib/active_record/instant/version.rb
Defined Under Namespace
Classes: TemporaryTableNotExist
Constant Summary
collapse
- VERSION =
"0.1.0"
Instance Method Summary
collapse
Constructor Details
#initialize(basename, baseclass: ActiveRecord::Base, extensions: []) ⇒ Instant
Returns a new instance of Instant.
8
9
10
11
12
13
|
# File 'lib/active_record/instant.rb', line 8
def initialize(basename, baseclass: ActiveRecord::Base, extensions: [])
@basename = basename
@baseclass = baseclass
@extensions = extensions
@conn = @baseclass.connection
end
|
Instance Method Details
#create_table!(temporary: false, force: false) ⇒ Object
27
28
29
30
31
|
# File 'lib/active_record/instant.rb', line 27
def create_table!(temporary: false, force: false)
@conn.create_table(table_name(temporary: temporary), force: force) do |t|
yield(t) if block_given?
end
end
|
#drop_tables! ⇒ Object
55
56
57
58
59
60
61
|
# File 'lib/active_record/instant.rb', line 55
def drop_tables!
@baseclass.transaction do
execute "DROP TABLE IF EXISTS #{@conn.quote_table_name table_name(temporary: true)}"
execute "DROP TABLE IF EXISTS #{@conn.quote_table_name table_name}"
execute "DROP TABLE IF EXISTS #{@conn.quote_table_name stale_table_name}"
end
end
|
#model(temporary: false) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/active_record/instant.rb', line 33
def model(temporary: false)
table_name = table_name(temporary: temporary)
model_name = table_name.classify
if Object.const_defined?(model_name)
Object.const_get(model_name).tap(&:reset_column_information)
else
klass = Class.new(@baseclass) { |c| c.table_name = table_name }
klass.send(:include, *@extensions) if @extensions.present?
Object.const_set(model_name, klass)
end
end
|
45
46
47
48
49
50
51
52
53
|
# File 'lib/active_record/instant.rb', line 45
def promote_temporary_table!
fail TemporaryTableNotExist unless table_exists?(temporary: true)
@baseclass.transaction do
execute "DROP TABLE IF EXISTS #{@conn.quote_table_name stale_table_name}"
execute "ALTER TABLE #{model.quoted_table_name} RENAME TO #{@conn.quote_table_name stale_table_name}" if table_exists?
execute "ALTER TABLE #{model(temporary: true).quoted_table_name} RENAME TO #{model.quoted_table_name}"
end
end
|
#stale_table_name ⇒ Object
23
24
25
|
# File 'lib/active_record/instant.rb', line 23
def stale_table_name
"stale_#{table_name}"
end
|
#table_exists?(temporary: false) ⇒ Boolean
19
20
21
|
# File 'lib/active_record/instant.rb', line 19
def table_exists?(temporary: false)
@conn.data_source_exists?(table_name(temporary: temporary))
end
|
#table_name(temporary: false) ⇒ Object
15
16
17
|
# File 'lib/active_record/instant.rb', line 15
def table_name(temporary: false)
temporary ? "temporary_#{@basename}" : @basename
end
|