Module: DbSchema

Defined in:
lib/db_schema.rb,
lib/db_schema/dsl.rb,
lib/db_schema/utils.rb,
lib/db_schema/reader.rb,
lib/db_schema/runner.rb,
lib/db_schema/changes.rb,
lib/db_schema/version.rb,
lib/db_schema/validator.rb,
lib/db_schema/normalizer.rb,
lib/db_schema/definitions.rb,
lib/db_schema/configuration.rb,
lib/db_schema/definitions/field.rb,
lib/db_schema/definitions/field/base.rb,
lib/db_schema/definitions/field/json.rb,
lib/db_schema/definitions/field/uuid.rb,
lib/db_schema/definitions/field/array.rb,
lib/db_schema/definitions/field/range.rb,
lib/db_schema/definitions/field/binary.rb,
lib/db_schema/definitions/field/custom.rb,
lib/db_schema/definitions/field/boolean.rb,
lib/db_schema/definitions/field/network.rb,
lib/db_schema/definitions/field/numeric.rb,
lib/db_schema/definitions/field/datetime.rb,
lib/db_schema/definitions/field/monetary.rb,
lib/db_schema/definitions/field/character.rb,
lib/db_schema/definitions/field/geometric.rb,
lib/db_schema/definitions/field/bit_string.rb,
lib/db_schema/definitions/field/text_search.rb,
lib/db_schema/definitions/field/extensions/isn.rb,
lib/db_schema/definitions/field/extensions/seg.rb,
lib/db_schema/definitions/field/extensions/cube.rb,
lib/db_schema/definitions/field/extensions/ltree.rb,
lib/db_schema/definitions/field/extensions/citext.rb,
lib/db_schema/definitions/field/extensions/hstore.rb,
lib/db_schema/definitions/field/extensions/chkpass.rb

Defined Under Namespace

Modules: Changes, Definitions, Reader, Utils, Validator Classes: Configuration, DSL, InvalidSchemaError, Normalizer, Runner, SchemaMismatch, UnsupportedOperation

Constant Summary collapse

VERSION =
'0.2.3'

Class Method Summary collapse

Class Method Details

.configurationObject



67
68
69
70
71
# File 'lib/db_schema.rb', line 67

def configuration
  raise 'You must call DbSchema.configure in order to connect to the database.' if @configuration.nil?

  @configuration
end

.configure(connection_parameters) ⇒ Object



51
52
53
54
# File 'lib/db_schema.rb', line 51

def configure(connection_parameters)
  @configuration = Configuration.new(connection_parameters)
  @connection    = nil
end

.configure_from_yaml(yaml_path, environment, **other_options) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/db_schema.rb', line 56

def configure_from_yaml(yaml_path, environment, **other_options)
  data = Utils.symbolize_keys(YAML.load_file(yaml_path))
  filtered_data = Utils.filter_by_keys(
    data[environment.to_sym],
    *%i(adapter host port database username password)
  )
  renamed_data = Utils.rename_keys(filtered_data, username: :user)

  configure(renamed_data.merge(other_options))
end

.connectionObject



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/db_schema.rb', line 37

def connection
  @connection ||= Sequel.connect(
    adapter:  configuration.adapter,
    host:     configuration.host,
    port:     configuration.port,
    database: configuration.database,
    user:     configuration.user,
    password: configuration.password
  ).tap do |db|
    db.extension :pg_enum
    db.extension :pg_array
  end
end

.describe(&block) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/db_schema.rb', line 18

def describe(&block)
  desired_schema = DSL.new(block).schema
  validate(desired_schema)
  Normalizer.normalize_tables(desired_schema)

  actual_schema = Reader.read_schema
  changes = Changes.between(desired_schema, actual_schema)
  return if changes.empty?

  log_changes(changes) if configuration.log_changes?
  return if configuration.dry_run?

  Runner.new(changes).run!

  if configuration.post_check_enabled?
    perform_post_check(desired_schema)
  end
end

.reset!Object



73
74
75
76
# File 'lib/db_schema.rb', line 73

def reset!
  @configuration = nil
  @connection    = nil
end