dohruby 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +15 -0
- data/lib/doh/core/date.rb +14 -0
- data/lib/doh/logger/{notify_acceptor.rb → email_acceptor.rb} +12 -4
- data/lib/doh/logger/formatter.rb +1 -1
- data/lib/doh/logger/null_interface.rb +1 -0
- data/lib/doh/logger/severity.rb +4 -3
- data/lib/doh/logger/standard_interface.rb +8 -4
- data/lib/doh/mysql/cache_connector.rb +5 -5
- data/lib/doh/mysql/connector_util.rb +1 -1
- data/lib/doh/mysql/current_date.rb +14 -0
- data/lib/doh/mysql/database_creator.rb +49 -27
- data/lib/doh/mysql/db_date.rb +28 -0
- data/lib/doh/mysql/db_null.rb +24 -0
- data/lib/doh/mysql/handle.rb +18 -10
- data/lib/doh/mysql/load_sql.rb +22 -0
- data/lib/doh/mysql/parse.rb +1 -0
- data/lib/doh/mysql/readonly_row.rb +6 -0
- data/lib/doh/mysql.rb +0 -1
- data/test/logger/sample.rb +6 -3
- data/test/logger/tc_acceptor.rb +6 -0
- data/test/logger/tc_formatter.rb +1 -1
- data/test/logger/tc_interface.rb +9 -6
- data/test/mysql/tc_cache_connector.rb +1 -1
- data/test/mysql/tc_hash_util.rb +23 -0
- data/test/mysql/tc_parse.rb +3 -0
- metadata +9 -4
- data/lib/doh/mysql/unquoted.rb +0 -12
data/CHANGELOG
CHANGED
@@ -41,3 +41,18 @@
|
|
41
41
|
* add new random_array_element for nested array cases
|
42
42
|
*0.1.14* (May 10th, 2008)
|
43
43
|
* add BigDecimal.to_dig
|
44
|
+
*0.1.15* (May 21st, 2008)
|
45
|
+
* improved logging format of exceptions
|
46
|
+
* added DohDb::NULL object to represent a database NULL value
|
47
|
+
* added DohDb::today, DohDb::now to represent database functions CURDATE() and NOW()
|
48
|
+
* deleted old Unquoted versions of CURDATE() and NOW()
|
49
|
+
* return & trace affected rows in DohDb::Handle::query
|
50
|
+
* fix typo in doh/mysql/connector_util
|
51
|
+
* added database versions of Doh::current_date & Doh::current_datetime
|
52
|
+
* added unit tests for DohDb::select_as_hash
|
53
|
+
* split out sql file loading from DatabaseCreator to DohDb::load_sql function
|
54
|
+
* added new Date functions: days_in_month, weekday?, and date_only
|
55
|
+
* added view, insert_sql script support to DatabaseCreator
|
56
|
+
* added create_tables function to DatabaseCreator
|
57
|
+
* added notify to logger interface
|
58
|
+
* add DohDb::ReadOnlyRow::each_pair
|
data/lib/doh/core/date.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
require 'date'
|
2
2
|
|
3
|
+
class Date
|
4
|
+
def self.days_in_month(year, month)
|
5
|
+
civil(year, month, -1).mday
|
6
|
+
end
|
7
|
+
|
8
|
+
def weekday?
|
9
|
+
(wday > 0) && (wday < 6)
|
10
|
+
end
|
11
|
+
|
12
|
+
def date_only
|
13
|
+
self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
3
17
|
class DateTime
|
4
18
|
def date_only
|
5
19
|
Date.new(year, month, mday)
|
@@ -2,14 +2,22 @@ require 'net/smtp'
|
|
2
2
|
|
3
3
|
module DohLogger
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
def self.exception_email_format
|
6
|
+
"%severity: %msg\nlogfile_name: #@logfile_name\nsource_ip: %source_ip\nexception: %exception\nstack:\n%call_stack"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.exceptionless_email_format
|
10
|
+
"%severity: %msg\nlogfile_name: #@logfile_name\nsource_ip: %source_ip\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
class EmailAcceptor
|
14
|
+
def initialize(smtp_server, from_address, to_addresses, logfile_name, subject_format = nil, body_format = DohLogger::exception_email_format)
|
7
15
|
@smtp_server = smtp_server
|
8
16
|
@from_address = from_address
|
9
17
|
@to_addresses = to_addresses
|
10
18
|
@logfile_name = logfile_name
|
11
|
-
@subject_formatter = Formatter.new(subject_format || "
|
12
|
-
@body_formatter = Formatter.new(body_format
|
19
|
+
@subject_formatter = Formatter.new(subject_format || "%severity - %msg")
|
20
|
+
@body_formatter = Formatter.new(body_format)
|
13
21
|
end
|
14
22
|
|
15
23
|
def log(event)
|
data/lib/doh/logger/formatter.rb
CHANGED
@@ -8,7 +8,7 @@ class Formatter
|
|
8
8
|
@formats = {}
|
9
9
|
register_format('%severity') {|event| DohLogger::severity_string(event.severity)}
|
10
10
|
register_format('%msg') {|event| event.msg}
|
11
|
-
register_format('%exception') {|event| event.exception.to_s}
|
11
|
+
register_format('%exception') {|event| event.exception.class.to_s + ' -- ' + event.exception.to_s}
|
12
12
|
register_format('%time') {|event| event.time.strftime("%H:%M:%S.") << "%03d" % (event.time.usec / 1000)}
|
13
13
|
register_format('%datetime') {|event| event.time.strftime("%Y-%m-%d %H:%M:%S.") << "%03d" % (event.time.usec / 1000)}
|
14
14
|
register_format('%call_stack') {|event| event.call_stack.join("\n")}
|
data/lib/doh/logger/severity.rb
CHANGED
@@ -3,9 +3,10 @@ module DohLogger
|
|
3
3
|
DEBUG = 0
|
4
4
|
INFO = 1
|
5
5
|
WARN = 2
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
NOTIFY = 3
|
7
|
+
ERROR = 4
|
8
|
+
FATAL = 5
|
9
|
+
SEVERITY_OPTIONS = %w(debug info warning NOTIFY ERROR ***FATAL***)
|
9
10
|
|
10
11
|
def self.severity_string(numeric_level)
|
11
12
|
SEVERITY_OPTIONS[numeric_level]
|
@@ -17,6 +17,10 @@ class StandardInterface
|
|
17
17
|
add(ERROR, msg, excpt)
|
18
18
|
end
|
19
19
|
|
20
|
+
def notify(msg)
|
21
|
+
add(NOTIFY, msg)
|
22
|
+
end
|
23
|
+
|
20
24
|
def warn(msg)
|
21
25
|
add(WARN, msg)
|
22
26
|
end
|
@@ -29,14 +33,14 @@ class StandardInterface
|
|
29
33
|
add(DEBUG, msg)
|
30
34
|
end
|
31
35
|
|
32
|
-
def add_acceptor(severity_threshold, acceptor)
|
33
|
-
@acceptors.push([severity_threshold, acceptor])
|
36
|
+
def add_acceptor(severity_threshold, acceptor, exact_severity_only = nil)
|
37
|
+
@acceptors.push([severity_threshold, acceptor, exact_severity_only])
|
34
38
|
end
|
35
|
-
|
39
|
+
|
36
40
|
private
|
37
41
|
def add(severity, msg, excpt = nil)
|
38
42
|
included = []
|
39
|
-
@acceptors.each {|
|
43
|
+
@acceptors.each {|elem| included.push(elem[1]) if (severity >= elem[0] && !elem[2]) || severity == elem[0]}
|
40
44
|
@scheduler.push(included, Event.new(severity, msg, excpt))
|
41
45
|
end
|
42
46
|
end
|
@@ -5,11 +5,11 @@ require 'doh/mysql/raw_row_builder'
|
|
5
5
|
module DohDb
|
6
6
|
|
7
7
|
class CacheConnector
|
8
|
-
attr_accessor :host, :
|
8
|
+
attr_accessor :host, :username, :password, :database, :row_builder, :timeout
|
9
9
|
|
10
|
-
def initialize(host = nil,
|
10
|
+
def initialize(host = nil, username = nil, password = nil, database = nil, row_builder = nil)
|
11
11
|
@host = host
|
12
|
-
@
|
12
|
+
@username = username
|
13
13
|
@password = password
|
14
14
|
@database = database
|
15
15
|
@timeout = 14400
|
@@ -37,9 +37,9 @@ private
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def get_new_handle(database = nil)
|
40
|
-
Doh::log.info("mysql CacheConnector: connecting to #@host as
|
40
|
+
Doh::log.info("mysql CacheConnector: connecting to #@host as username #@username, database #@database")
|
41
41
|
@last_used = Time.now
|
42
|
-
Handle.new(Mysql.connect(@host, @
|
42
|
+
Handle.new(Mysql.connect(@host, @username, @password, database || @database), @row_builder)
|
43
43
|
end
|
44
44
|
|
45
45
|
def passed_timeout?
|
@@ -3,7 +3,7 @@ module DohDb
|
|
3
3
|
def self.create_and_connect(connector, new_default_database = nil, drop_first = true)
|
4
4
|
connector.reset
|
5
5
|
connector.database = new_default_database if new_default_database
|
6
|
-
dbh =
|
6
|
+
dbh = connector.request_handle('')
|
7
7
|
dbh.query("DROP DATABASE IF EXISTS #{connector.database}") if drop_first
|
8
8
|
dbh.query("CREATE DATABASE IF NOT EXISTS #{connector.database}")
|
9
9
|
dbh.query("USE #{connector.database}")
|
@@ -1,25 +1,34 @@
|
|
1
1
|
require 'doh/core/dir'
|
2
2
|
require 'doh/mysql/handle'
|
3
|
+
require 'doh/mysql/load_sql'
|
4
|
+
require 'doh/mysql/connector_instance'
|
5
|
+
require 'yaml'
|
3
6
|
|
4
7
|
module DohDb
|
5
8
|
|
6
9
|
class DatabaseCreator
|
7
|
-
def initialize(
|
8
|
-
@connector = connector
|
10
|
+
def initialize(data_directory, connector = nil)
|
9
11
|
@data_directory = data_directory
|
12
|
+
@connector = connector || DohDb::connector_instance
|
10
13
|
end
|
11
14
|
|
12
|
-
def
|
15
|
+
def create_database(dbname, drop_first = false)
|
13
16
|
create_one_database(get_nodb_handle, dbname, dbname, drop_first)
|
14
17
|
end
|
15
18
|
|
16
|
-
def
|
19
|
+
def create_database_copy(dest_db, source_db, drop_first = false)
|
17
20
|
create_one_database(get_nodb_handle, dest_db, source_db, drop_first)
|
18
21
|
end
|
19
22
|
|
20
|
-
def
|
23
|
+
def create_all_databases(drop_first = false)
|
21
24
|
dbh = get_nodb_handle
|
22
|
-
Dir.directories(@data_directory).each {|
|
25
|
+
Dir.directories(@data_directory).each {|elem| create_one_database(dbh, elem, elem, drop_first)}
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_tables(database, drop_first, *table_and_view_names)
|
29
|
+
views, tables = table_and_view_names.flatten.sort.partition {|name| File.exist?(sql_filename(database, 'views', name))}
|
30
|
+
tables.each {|name| create_base_table(database, name, drop_first)}
|
31
|
+
views.each {|name| create_view(database, name, drop_first)}
|
23
32
|
end
|
24
33
|
|
25
34
|
private
|
@@ -29,34 +38,47 @@ private
|
|
29
38
|
@connector.request_handle
|
30
39
|
end
|
31
40
|
|
32
|
-
def
|
33
|
-
|
34
|
-
dbh.query("DROP DATABASE IF EXISTS " + dest_db) if drop_first
|
35
|
-
|
36
|
-
dbh.query("CREATE DATABASE " + dest_db)
|
37
|
-
load_sql_files('tables', source_db, dest_db)
|
38
|
-
load_sql_files('insert_sql', source_db, dest_db)
|
39
|
-
|
40
|
-
@connector.database = dest_db
|
41
|
-
dbh.query("USE " + dest_db)
|
41
|
+
def sql_filename(database, subdir, name)
|
42
|
+
File.join(@data_directory, database, subdir, name) + '.sql'
|
42
43
|
end
|
43
44
|
|
44
|
-
def
|
45
|
+
def find_files(source_db, subdir, ext = '.sql')
|
45
46
|
path = File.join(@data_directory, source_db, subdir)
|
46
47
|
return [] unless File.exist?(path)
|
47
|
-
|
48
|
+
Dir.entries(path).find_all {|entry| entry.ends_with(ext)}.sort.collect {|elem| File.join(path, elem)}
|
49
|
+
end
|
50
|
+
|
51
|
+
def view_files(source_db)
|
52
|
+
path = File.join(@data_directory, source_db, 'views')
|
53
|
+
return [] unless File.exist?(path)
|
54
|
+
ordered_filenames = YAML.load_file(File.join(path, 'order.yml')).collect {|uqfn| File.join(path, uqfn) + '.sql'}
|
55
|
+
ordered_filenames + (find_files(source_db, 'views') - ordered_filenames)
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_base_table(database, table_name, drop_first)
|
59
|
+
DohDb::query("DROP TABLE IF EXISTS #{table_name}") if drop_first
|
60
|
+
files = [sql_filename(database, 'tables', table_name)]
|
61
|
+
inserts_file = sql_filename(database, 'insert_sql', table_name)
|
62
|
+
files.push(inserts_file) if File.exist?(inserts_file)
|
63
|
+
DohDb::load_sql_connector(files, DohDb::connector_instance)
|
64
|
+
end
|
48
65
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
open(flnm) {|file| io << file.read}
|
53
|
-
end
|
54
|
-
io.close
|
66
|
+
def create_view(database, view_name, drop_first)
|
67
|
+
DohDb::query("DROP VIEW IF EXISTS #{view_name}") if drop_first
|
68
|
+
DohDb::load_sql_connector([sql_filename(database, 'views', view_name)], DohDb::connector_instance)
|
55
69
|
end
|
56
70
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
71
|
+
def create_one_database(dbh, dest_db, source_db, drop_first)
|
72
|
+
Doh::log.info("DohDb::DatabaseCreator - creating source database " + source_db + " inside " + dest_db)
|
73
|
+
dbh.query("DROP DATABASE IF EXISTS " + dest_db) if drop_first
|
74
|
+
|
75
|
+
dbh.query("CREATE DATABASE " + dest_db)
|
76
|
+
dbh.query("USE " + dest_db)
|
77
|
+
@connector.database = dest_db
|
78
|
+
|
79
|
+
files = find_files(source_db, 'tables') + find_files(source_db, 'insert_sql') + view_files(source_db)
|
80
|
+
DohDb::load_sql_connector(files, @connector, dest_db)
|
81
|
+
find_files(source_db, 'insert_scripts', '.rb').each {|filename| load(filename)}
|
60
82
|
end
|
61
83
|
end
|
62
84
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'doh/mysql/to_sql'
|
3
|
+
|
4
|
+
module DohDb
|
5
|
+
|
6
|
+
class DateToday < Date
|
7
|
+
def to_sql
|
8
|
+
'CURDATE()'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class DateTimeNow < DateTime
|
13
|
+
def to_sql
|
14
|
+
'NOW()'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.today
|
19
|
+
day = Date.today
|
20
|
+
DateToday.new(day.year, day.month, day.mday)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.now
|
24
|
+
dt = DateTime.now
|
25
|
+
DateTimeNow.new(dt.year, dt.month, dt.mday, dt.hour, dt.min, dt.sec)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'doh/mysql/to_sql'
|
2
|
+
require 'singleton'
|
3
|
+
|
4
|
+
module DohDb
|
5
|
+
|
6
|
+
class NullDatabaseValue
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
def empty?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
''
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_sql
|
18
|
+
'NULL'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
NULL = NullDatabaseValue.instance
|
23
|
+
|
24
|
+
end
|
data/lib/doh/mysql/handle.rb
CHANGED
@@ -23,32 +23,30 @@ class Handle
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def query(statement)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
Doh::log.error("caught exception during query: #{sqlstr}", excpt)
|
31
|
-
raise
|
26
|
+
generic_query(statement)
|
27
|
+
retval = @mysqlh.affected_rows
|
28
|
+
Doh::log.info("affected #{retval} rows")
|
29
|
+
retval
|
32
30
|
end
|
33
31
|
|
34
32
|
def update(statement)
|
35
|
-
|
33
|
+
generic_query(statement)
|
36
34
|
retval = @mysqlh.affected_rows
|
37
35
|
Doh::log.info("updated #{retval} rows")
|
38
36
|
retval
|
39
37
|
end
|
40
38
|
|
41
39
|
def insert(statement)
|
42
|
-
|
40
|
+
generic_query(statement)
|
43
41
|
retval = @mysqlh.insert_id
|
44
42
|
Doh::log.info("insert_id was #{retval}")
|
45
43
|
retval
|
46
44
|
end
|
47
45
|
|
48
46
|
def select(statement, row_builder = nil)
|
49
|
-
result_set =
|
47
|
+
result_set = generic_query(statement)
|
50
48
|
Doh::log.info("selected #{result_set.num_rows} rows")
|
51
|
-
rows = (row_builder || @row_builder
|
49
|
+
rows = (row_builder || @row_builder.new).build_rows(result_set)
|
52
50
|
result_set.free
|
53
51
|
rows
|
54
52
|
end
|
@@ -79,6 +77,16 @@ class Handle
|
|
79
77
|
row = select_optional_row(statement, row_builder)
|
80
78
|
row && row.at(0)
|
81
79
|
end
|
80
|
+
|
81
|
+
private
|
82
|
+
def generic_query(statement)
|
83
|
+
sqlstr = statement.to_s
|
84
|
+
Doh::log.info(sqlstr)
|
85
|
+
@mysqlh.query(sqlstr)
|
86
|
+
rescue Exception => excpt
|
87
|
+
Doh::log.error("caught exception during query: #{sqlstr}", excpt)
|
88
|
+
raise
|
89
|
+
end
|
82
90
|
end
|
83
91
|
|
84
92
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module DohDb
|
2
|
+
|
3
|
+
def self.mysql_arg(value, option_specifier)
|
4
|
+
return '' if value.to_s.strip.empty?
|
5
|
+
' -' + option_specifier + value
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.load_sql(filenames, host, username, password, database)
|
9
|
+
mysqlcmd = 'mysql' + mysql_arg(host, 'h') + mysql_arg(username, 'u') + mysql_arg(password, 'p') + ' ' + database
|
10
|
+
io = IO::popen(mysqlcmd, 'r+')
|
11
|
+
filenames.each do |elem|
|
12
|
+
open(elem) {|file| io << file.read}
|
13
|
+
end
|
14
|
+
io.close
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.load_sql_connector(filenames, connector, alternate_database = nil)
|
18
|
+
load_sql(filenames, connector.host, connector.username, connector.password, alternate_database || connector.database)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
data/lib/doh/mysql/parse.rb
CHANGED
data/lib/doh/mysql.rb
CHANGED
data/test/logger/sample.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'doh/logger_app'
|
2
|
-
require 'doh/logger/
|
2
|
+
require 'doh/logger/email_acceptor'
|
3
3
|
|
4
4
|
scheduler = DohLogger::DirectScheduler.new
|
5
5
|
console_acceptor = DohLogger::IOStreamAcceptor.new
|
6
6
|
logfile_name = "logger_sample_app.log"
|
7
7
|
file_acceptor = DohLogger::IOStreamAcceptor.new(File.new(logfile_name, "wb"))
|
8
|
-
|
8
|
+
error_acceptor = DohLogger::EmailAcceptor.new('localhost', 'from@somebody.com', ['bulbous@gmail.com'], logfile_name)
|
9
|
+
notify_acceptor = DohLogger::EmailAcceptor.new('localhost', 'from@somebody.com', ['bulbous@gmail.com'], logfile_name, nil, DohLogger::exceptionless_email_format)
|
9
10
|
intrfc = DohLogger::StandardInterface.new(scheduler)
|
10
11
|
intrfc.add_acceptor(DohLogger::DEBUG, console_acceptor)
|
11
|
-
intrfc.add_acceptor(DohLogger::ERROR,
|
12
|
+
intrfc.add_acceptor(DohLogger::ERROR, error_acceptor)
|
13
|
+
intrfc.add_acceptor(DohLogger::NOTIFY, notify_acceptor, true)
|
12
14
|
intrfc.add_acceptor(DohLogger::DEBUG, file_acceptor)
|
13
15
|
Doh::set_logger_interface(intrfc)
|
14
16
|
|
@@ -16,3 +18,4 @@ Doh::log.debug("hello")
|
|
16
18
|
Doh::log.info("hello\nagain")
|
17
19
|
Doh::log.info("something else")
|
18
20
|
Doh::log.error("uh oh badness!")
|
21
|
+
Doh::log.notify("let me know about this")
|
data/test/logger/tc_acceptor.rb
CHANGED
@@ -10,10 +10,13 @@ module Doh
|
|
10
10
|
class TC_Acceptor < Test::Unit::TestCase
|
11
11
|
def setup
|
12
12
|
@ios = StringIO.new
|
13
|
+
@ios2 = StringIO.new
|
13
14
|
@sched = DohLogger::DirectScheduler.new
|
14
15
|
@acceptor = DohLogger::IOStreamAcceptor.new(@ios, '%msg', '%msg error')
|
16
|
+
@acceptor2 = DohLogger::IOStreamAcceptor.new(@ios2, '%msg', '%msg error')
|
15
17
|
@interface = DohLogger::StandardInterface.new(@sched)
|
16
18
|
@interface.add_acceptor(DohLogger::DEBUG, @acceptor)
|
19
|
+
@interface.add_acceptor(DohLogger::WARN, @acceptor2, true)
|
17
20
|
end
|
18
21
|
|
19
22
|
def test_log
|
@@ -26,6 +29,9 @@ class TC_Acceptor < Test::Unit::TestCase
|
|
26
29
|
assert_equal('warn1', events[1])
|
27
30
|
assert_equal('error1 error', events[2])
|
28
31
|
assert_equal('fatal1 error', events[3])
|
32
|
+
events2 = @ios2.string.split("\n")
|
33
|
+
assert_equal('warn1', events2[0])
|
34
|
+
assert_equal(1, events2.size)
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
data/test/logger/tc_formatter.rb
CHANGED
@@ -29,7 +29,7 @@ class TC_Formatter < Test::Unit::TestCase
|
|
29
29
|
hsh = format_output_to_hash(@formatter.replace(@event))
|
30
30
|
assert_equal('debug', hsh['severity'])
|
31
31
|
assert_equal('testmessage', hsh['msg'])
|
32
|
-
assert_equal('', hsh['exception'])
|
32
|
+
assert_equal('NilClass -- ', hsh['exception'])
|
33
33
|
assert_equal(@time + '.000', hsh['time'])
|
34
34
|
assert_equal(@datetime + '.000', hsh['datetime'])
|
35
35
|
assert_equal('formatter', hsh['call_stack'].split("\n")[0].before('.rb:').rafter('/'))
|
data/test/logger/tc_interface.rb
CHANGED
@@ -20,20 +20,23 @@ class TC_Interface < Test::Unit::TestCase
|
|
20
20
|
@interface.debug("debug1")
|
21
21
|
@interface.info("info1")
|
22
22
|
@interface.warn("warn1")
|
23
|
+
@interface.notify("notify1")
|
23
24
|
@interface.error("error1")
|
24
25
|
@interface.fatal("fatal1")
|
25
26
|
@interface.error("error2_with_exception", RuntimeError.new("test runtime"))
|
26
27
|
assert_equal('debug1', @all_acceptor.events[0].msg)
|
27
28
|
assert_equal('info1', @all_acceptor.events[1].msg)
|
28
29
|
assert_equal('warn1', @all_acceptor.events[2].msg)
|
29
|
-
assert_equal('
|
30
|
-
assert_equal('
|
31
|
-
assert_equal('
|
32
|
-
assert_equal('
|
30
|
+
assert_equal('notify1', @all_acceptor.events[3].msg)
|
31
|
+
assert_equal('error1', @all_acceptor.events[4].msg)
|
32
|
+
assert_equal('fatal1', @all_acceptor.events[5].msg)
|
33
|
+
assert_equal('error2_with_exception', @all_acceptor.events[6].msg)
|
34
|
+
assert_equal('test runtime', @all_acceptor.events[6].exception.to_s)
|
33
35
|
|
34
36
|
assert_equal('warn1', @warn_acceptor.events[0].msg)
|
35
|
-
assert_equal('
|
36
|
-
assert_equal('
|
37
|
+
assert_equal('notify1', @warn_acceptor.events[1].msg)
|
38
|
+
assert_equal('error1', @warn_acceptor.events[2].msg)
|
39
|
+
assert_equal('fatal1', @warn_acceptor.events[3].msg)
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
@@ -13,7 +13,7 @@ class TC_CacheConnector < Test::Unit::TestCase
|
|
13
13
|
|
14
14
|
def test_stuff
|
15
15
|
sharedcc = DohDb::connector_instance
|
16
|
-
@cc = DohDb::CacheConnector.new(sharedcc.host, sharedcc.
|
16
|
+
@cc = DohDb::CacheConnector.new(sharedcc.host, sharedcc.username, sharedcc.password, sharedcc.database, sharedcc.row_builder)
|
17
17
|
@tbl = 'doh_mysql_cache_connector_stuff_test'
|
18
18
|
|
19
19
|
create_table
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'db_unit_test')
|
2
|
+
require 'doh/mysql/hash_util'
|
3
|
+
|
4
|
+
module DohDb
|
5
|
+
|
6
|
+
class TC_HashUtil < Test::Unit::TestCase
|
7
|
+
def test_stuff
|
8
|
+
dbh = DohDb::request_handle
|
9
|
+
tbl = "doh_mysql_hashutil_stuff_test"
|
10
|
+
DohDb::query("CREATE TEMPORARY TABLE #{tbl} (field CHAR(30) NOT NULL, value CHAR(30) NOT NULL)")
|
11
|
+
DohDb::query("INSERT INTO #{tbl} SET field = 'some_name', value = 'some_value'")
|
12
|
+
DohDb::query("INSERT INTO #{tbl} SET field = 'other_name', value = 'matching_other_value'")
|
13
|
+
DohDb::query("INSERT INTO #{tbl} SET field = 'yet_another_name', value = 'strange_value'")
|
14
|
+
hash = DohDb::select_as_hash("SELECT field, value FROM #{tbl}")
|
15
|
+
DohDb::query("DROP TABLE #{tbl}")
|
16
|
+
assert_equal(hash['some_name'], 'some_value')
|
17
|
+
assert_equal(hash['other_name'], 'matching_other_value')
|
18
|
+
assert_equal(hash['yet_another_name'], 'strange_value')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
data/test/mysql/tc_parse.rb
CHANGED
@@ -11,12 +11,15 @@ class TC_Convert < Test::Unit::TestCase
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_date
|
14
|
+
assert_raise(ArgumentError) {DohDb::parse_date('blah')}
|
14
15
|
assert_equal(Date.new(2008,2,14), DohDb::parse_date('2008-02-14'))
|
15
16
|
assert_raise(ArgumentError) {DohDb::parse_date('20080214')}
|
16
17
|
assert_not_equal(Date.new(2008,2,14), DohDb::parse_date('2008-02-15'))
|
17
18
|
end
|
18
19
|
|
19
20
|
def test_datetime
|
21
|
+
assert_raise(ArgumentError) {DohDb::parse_date('blah')}
|
22
|
+
assert_raise(ArgumentError) {DohDb::parse_datetime('zzzzzzzzzzzzzzzzzzz')}
|
20
23
|
assert_equal(DateTime.new(2008,2,14,10,20,30), DohDb::parse_datetime('2008-02-14 10:20:30'))
|
21
24
|
assert_not_equal(DateTime.new(2008,2,14,10,20,30), DohDb::parse_datetime('2008-02-14 10:20:31'))
|
22
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dohruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Makani & Kem Mason
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-05-
|
12
|
+
date: 2008-05-21 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -49,12 +49,12 @@ files:
|
|
49
49
|
- lib/doh/data.rb
|
50
50
|
- lib/doh/logger
|
51
51
|
- lib/doh/logger/direct_scheduler.rb
|
52
|
+
- lib/doh/logger/email_acceptor.rb
|
52
53
|
- lib/doh/logger/event.rb
|
53
54
|
- lib/doh/logger/formatter.rb
|
54
55
|
- lib/doh/logger/interface.rb
|
55
56
|
- lib/doh/logger/iostream_acceptor.rb
|
56
57
|
- lib/doh/logger/memory_acceptor.rb
|
57
|
-
- lib/doh/logger/notify_acceptor.rb
|
58
58
|
- lib/doh/logger/null_interface.rb
|
59
59
|
- lib/doh/logger/severity.rb
|
60
60
|
- lib/doh/logger/standard_interface.rb
|
@@ -65,17 +65,20 @@ files:
|
|
65
65
|
- lib/doh/mysql/cache_connector.rb
|
66
66
|
- lib/doh/mysql/connector_instance.rb
|
67
67
|
- lib/doh/mysql/connector_util.rb
|
68
|
+
- lib/doh/mysql/current_date.rb
|
68
69
|
- lib/doh/mysql/database_creator.rb
|
70
|
+
- lib/doh/mysql/db_date.rb
|
71
|
+
- lib/doh/mysql/db_null.rb
|
69
72
|
- lib/doh/mysql/default_type_guesser.rb
|
70
73
|
- lib/doh/mysql/error.rb
|
71
74
|
- lib/doh/mysql/handle.rb
|
72
75
|
- lib/doh/mysql/hash_util.rb
|
76
|
+
- lib/doh/mysql/load_sql.rb
|
73
77
|
- lib/doh/mysql/parse.rb
|
74
78
|
- lib/doh/mysql/raw_row_builder.rb
|
75
79
|
- lib/doh/mysql/readonly_row.rb
|
76
80
|
- lib/doh/mysql/to_sql.rb
|
77
81
|
- lib/doh/mysql/typed_row_builder.rb
|
78
|
-
- lib/doh/mysql/unquoted.rb
|
79
82
|
- lib/doh/mysql.rb
|
80
83
|
- lib/doh/unit_test.rb
|
81
84
|
- lib/doh/util
|
@@ -103,6 +106,7 @@ files:
|
|
103
106
|
- test/mysql/tc_cache_connector.rb
|
104
107
|
- test/mysql/tc_connector_instance.rb
|
105
108
|
- test/mysql/tc_handle.rb
|
109
|
+
- test/mysql/tc_hash_util.rb
|
106
110
|
- test/mysql/tc_parse.rb
|
107
111
|
- test/mysql/tc_readonly_row.rb
|
108
112
|
- README
|
@@ -146,5 +150,6 @@ test_files:
|
|
146
150
|
- test/mysql/tc_cache_connector.rb
|
147
151
|
- test/mysql/tc_connector_instance.rb
|
148
152
|
- test/mysql/tc_handle.rb
|
153
|
+
- test/mysql/tc_hash_util.rb
|
149
154
|
- test/mysql/tc_parse.rb
|
150
155
|
- test/mysql/tc_readonly_row.rb
|