class SchemaMonkey::Client
Public Class Methods
new(mod)
click to toggle source
# File lib/schema_monkey/client.rb, line 4 def initialize(mod) @root = mod @inserted = {} end
Public Instance Methods
insert(dbm: nil)
click to toggle source
# File lib/schema_monkey/client.rb, line 9 def insert(dbm: nil) insert_active_record(dbm: dbm) insert_middleware(dbm: dbm) end
Private Instance Methods
canonicalize_path(mod, base, dbm)
click to toggle source
# File lib/schema_monkey/client.rb, line 34 def canonicalize_path(mod, base, dbm) path = mod.to_s.sub(/^#{@root}::#{base}::/, '') if dbm path = path.split('::') if (i = path.find_index { |it| it =~ /\b#{dbm}\b/i }) # delete first occurence path.delete_at i end path = path.join('::').gsub(/#{dbm}/i, dbm.to_s) # canonicalize case for things like PostgreSQLAdapter end path end
find_modules(container, dbm: nil)
click to toggle source
# File lib/schema_monkey/client.rb, line 46 def find_modules(container, dbm: nil) return [] unless (container = Module.const_lookup @root, container) if dbm accept = /#{dbm}/i reject = nil else accept = nil reject = /\b(#{DBMS.join('|')})/i end modules = [] modules += Module.descendants(container, can_load: accept) modules.select! { |it| it.to_s =~ accept } if accept modules.reject! { |it| it.to_s =~ reject } if reject modules end
insert_active_record(dbm: nil)
click to toggle source
# File lib/schema_monkey/client.rb, line 16 def insert_active_record(dbm: nil) # Kernel.warn "--- inserting active_record for #{@root}, dbm=#{dbm.inspect}" find_modules(:ActiveRecord, dbm: dbm).each do |mod| next if @inserted[mod] relative_path = canonicalize_path(mod, :ActiveRecord, dbm) ActiveRecord.insert(relative_path, mod) end end
insert_middleware(dbm: nil)
click to toggle source
# File lib/schema_monkey/client.rb, line 25 def insert_middleware(dbm: nil) find_modules(:Middleware, dbm: dbm).each do |mod| next if @inserted[mod] relative_path = canonicalize_path(mod, :Middleware, dbm) Stack.insert(relative_path, mod) unless relative_path.empty? @inserted[mod] = true end end