module Spectre::MySQL

Public Class Methods

mysql(name = nil, &block) click to toggle source
# File lib/spectre/mysql.rb, line 43
def mysql name = nil, &block
  query = {}

  if name != nil and @@mysql_cfg.key? name
    query.merge! @@mysql_cfg[name]
    raise "No `host' set for MySQL client '#{name}'. Check your MySQL config in your environment." if !query['host']
  elsif name != nil
    query['host'] = name
  elsif @@last_conn == nil
    raise 'No name given and there was no previous MySQL connection to use'
  end

  MySqlQuery.new(query).instance_eval(&block) if block_given?

  if name != nil
    @@last_conn = {
      host: query['host'],
      username: query['username'],
      password: query['password'],
      database: query['database']
    }
  end

  @@logger.info "Connecting to database #{query['username']}@#{query['host']}:#{query['database']}"

  client = ::Mysql2::Client.new(**@@last_conn)

  res = []

  query['query'].each do |statement|
    @@logger.info 'Executing statement "' + statement + '"'
    res = client.query(statement, cast_booleans: true)
  end if query['query']

  @@result = res.map { |row| OpenStruct.new row } if res

  client.close
end
result() click to toggle source
# File lib/spectre/mysql.rb, line 82
def result
  raise 'No MySQL query has been executed yet' unless @@result
  @@result
end