Module: DBCode
- Extended by:
- DBCode
- Includes:
- ActiveRecord
- Included in:
- DBCode
- Defined in:
- lib/dbcode.rb,
lib/dbcode/graph.rb,
lib/dbcode/schema.rb,
lib/dbcode/railtie.rb,
lib/dbcode/version.rb,
lib/dbcode/sql_file.rb
Defined Under Namespace
Classes: Graph, Railtie, SQLFile, Schema, SearchPath
Constant Summary
collapse
- LoadError =
Class.new RuntimeError
- VERSION =
'0.0.2'
Instance Attribute Summary collapse
Instance Method Summary
collapse
Instance Attribute Details
#code_schema_name ⇒ Object
12
13
14
|
# File 'lib/dbcode.rb', line 12
def code_schema_name
@code_schema_name || 'code'
end
|
#env ⇒ Object
30
31
32
|
# File 'lib/dbcode.rb', line 30
def env
@env ||= 'development'
end
|
#logger ⇒ Object
24
25
26
|
# File 'lib/dbcode.rb', line 24
def logger
@logger ||= Logger.new(STDOUT)
end
|
#sql_file_path ⇒ Object
18
19
20
|
# File 'lib/dbcode.rb', line 18
def sql_file_path
@sql_file_path or raise "Configure sql file path. eg: #{self}.#{__method__} = Rails.root"
end
|
Instance Method Details
#build_graph ⇒ Object
59
60
61
|
# File 'lib/dbcode.rb', line 59
def build_graph
Graph.new files.map &SQLFile.method(:new)
end
|
#files ⇒ Object
63
64
65
66
67
68
69
70
71
|
# File 'lib/dbcode.rb', line 63
def files
Dir[sql_file_path.join('**/*.sql').expand_path].sort.map do |file_name|
path = Pathname(file_name)
{
name: path.relative_path_from(sql_file_path).sub(/.sql$/,'').to_s,
contents: path.read
}
end
end
|
#prepare ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/dbcode.rb', line 36
def prepare
code = Schema.new connection: Base.connection, name: code_schema_name
code.append_path!(Base.connection_config)
return if Migrator.needs_migration?
code.within_schema do
graph = build_graph
if code.digest != graph.digest
if env == 'production'
return logger.error "[dbcode] out of date, but refusing to reset #{code.name} in production."
end
logger.warn "[dbcode] Resetting schema #{code.name}"
code.reset!
code.execute graph.to_sql
code.digest = graph.digest
else
logger.info "[dbcode] Schema #{code.name} is up to date"
end
end
end
|