Module: DatabaseResetHelpers

Included in:
StoryTeller::Persistence
Defined in:
lib/story_teller/persistence.rb

Overview

module DatabaseResetHelpers

Instance Method Summary collapse

Instance Method Details

#concrete_world_model?(db, model) ⇒ Boolean

Returns:

  • (Boolean)


139
140
141
142
143
144
# File 'lib/story_teller/persistence.rb', line 139

def concrete_world_model?(db, model)
  table_name = model.table_name
  table_name && db.table_exists?(table_name)
rescue Sequel::Error
  false
end

#reset!Object



116
117
118
119
120
121
122
# File 'lib/story_teller/persistence.rb', line 116

def reset!
  db = Sequel::Model.db
  tables = world_tables(db)
  return if tables.empty?

  db.from(*tables).truncate(cascade: true, restart: true)
end

#without_committing!(&block) ⇒ Object



146
147
148
# File 'lib/story_teller/persistence.rb', line 146

def without_committing!(&block)
  Sequel::Model.db.transaction(rollback: :always, auto_savepoint: true, &block)
end

#world_object_idsObject



150
151
152
153
154
155
156
# File 'lib/story_teller/persistence.rb', line 150

def world_object_ids
  return Set.new unless Sequel::Model.db.table_exists?(:object)

  Inform::Object.select_map(:id).to_set
rescue Sequel::Error
  Set.new
end

#world_tables(db) ⇒ Object



133
134
135
136
137
# File 'lib/story_teller/persistence.rb', line 133

def world_tables(db)
  model_classes = Sequel::Model.descendants
  tables = model_classes.filter { |model| concrete_world_model?(db, model) }
  tables.map(&:table_name).uniq
end

#world_tree?Boolean

Returns:

  • (Boolean)


124
125
126
127
128
129
130
131
# File 'lib/story_teller/persistence.rb', line 124

def world_tree?
  db = Sequel::Model.db
  return false unless db.table_exists?(:object)

  Inform::Object.dataset.any?
rescue Sequel::Error
  false
end