Module: SchemaMonkey

Extended by:
ModuleSupport
Defined in:
lib/schema_monkey.rb,
lib/schema_monkey/railtie.rb,
lib/schema_monkey/version.rb,
lib/schema_monkey/middleware.rb,
lib/schema_monkey/module_support.rb,
lib/schema_monkey/active_record/base.rb,
lib/schema_monkey/active_record/schema_dumper.rb,
lib/schema_monkey/active_record/migration/command_recorder.rb,
lib/schema_monkey/active_record/connection_adapters/mysql_adapter.rb,
lib/schema_monkey/active_record/connection_adapters/sqlite3_adapter.rb,
lib/schema_monkey/active_record/connection_adapters/abstract_adapter.rb,
lib/schema_monkey/active_record/connection_adapters/table_definition.rb,
lib/schema_monkey/active_record/connection_adapters/schema_statements.rb,
lib/schema_monkey/active_record/connection_adapters/postgresql_adapter.rb

Defined Under Namespace

Modules: ActiveRecord, Middleware, ModuleSupport Classes: Railtie

Constant Summary collapse

DBMS =
[:Postgresql, :Mysql, :Sqlite3]
VERSION =
"0.1.1"

Class Method Summary collapse

Methods included from ModuleSupport

get_const, get_modules, include_if_defined, include_once, patch

Class Method Details

.include_adapters(base, dbm) ⇒ Object



44
45
46
47
48
# File 'lib/schema_monkey.rb', line 44

def self.include_adapters(base, dbm)
  registered_modules.each do |mod|
    include_if_defined(base, mod, "ActiveRecord::ConnectionAdapters::#{dbm}Adapter")
  end
end

.insertObject



30
31
32
33
34
# File 'lib/schema_monkey.rb', line 30

def self.insert
  insert_modules
  include_adapters(::ActiveRecord::ConnectionAdapters::AbstractAdapter, :Abstract)
  insert_middleware
end

.insert_middleware(dbm = nil) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/schema_monkey.rb', line 62

def self.insert_middleware(dbm=nil)
  @inserted ||= {}

  if dbm
    match = /\b#{dbm}\b/
    reject = nil
  else
    match = nil
    reject = /\b(#{DBMS.join('|')})\b/
  end

  registered_modules.each do |mod|
    get_modules(mod, prefix: 'Middleware', and_self: true, match: match, reject: reject, recursive: true, respond_to: :insert).each do |middleware|
      next if @inserted[middleware]
      middleware.insert
      @inserted[middleware] = true
    end
  end
end

.insert_modulesObject



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/schema_monkey.rb', line 50

def self.insert_modules
  registered_modules.each do |mod|
    get_modules(mod, prefix: 'ActiveRecord', match: /\bActiveRecord\b/, recursive: true).each do |candidate|
      next if candidate.is_a?(Class)
      if (base = get_const(::ActiveRecord, candidate.to_s.sub(/^#{mod}::ActiveRecord::/, '')))
        patch base, mod
      end
    end
    mod.insert if mod.respond_to?(:insert) and mod != self
  end
end

.register(mod) ⇒ Object



36
37
38
# File 'lib/schema_monkey.rb', line 36

def self.register(mod)
  registered_modules << mod
end

.registered_modulesObject



40
41
42
# File 'lib/schema_monkey.rb', line 40

def self.registered_modules
  @registered_modules ||= [self]
end