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 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
- class NotifyAcceptor
6
- def initialize(smtp_server, from_address, to_addresses, logfile_name, subject_format = nil, body_format = nil)
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 || "notify - %msg")
12
- @body_formatter = Formatter.new(body_format || "notify: %msg\nlogfile_name: #@logfile_name\nsource_ip: %source_ip\nexception: %exception\nstack:\n%call_stack")
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)
@@ -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")}
@@ -3,6 +3,7 @@ module DohLogger
3
3
  class NullInterface
4
4
  def fatal(*ignore) end
5
5
  def error(*ignore) end
6
+ def notify(*ignore) end
6
7
  def warn(*ignore) end
7
8
  def info(*ignore) end
8
9
  def debug(*ignore) end
@@ -3,9 +3,10 @@ module DohLogger
3
3
  DEBUG = 0
4
4
  INFO = 1
5
5
  WARN = 2
6
- ERROR = 3
7
- FATAL = 4
8
- SEVERITY_OPTIONS = %w(debug info warning ERROR ***FATAL***)
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 {|one| included.push(one[1]) if severity >= one[0]}
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, :user, :password, :database, :row_builder, :timeout
8
+ attr_accessor :host, :username, :password, :database, :row_builder, :timeout
9
9
 
10
- def initialize(host = nil, user = nil, password = nil, database = nil, row_builder = nil)
10
+ def initialize(host = nil, username = nil, password = nil, database = nil, row_builder = nil)
11
11
  @host = host
12
- @user = user
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 user #@user, database #@database")
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, @user, @password, database || @database), @row_builder)
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 = conn.request_handle('')
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}")
@@ -0,0 +1,14 @@
1
+ require 'doh/util/current_date'
2
+ require 'doh/mysql/db_date'
3
+
4
+ module DohDb
5
+
6
+ def self.current_date_db
7
+ Doh::current_date(DohDb::today)
8
+ end
9
+
10
+ def self.current_datetime_db
11
+ Doh::current_datetime(DohDb::now)
12
+ end
13
+
14
+ end
@@ -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(connector, data_directory)
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 create(dbname, drop_first = false)
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 create_copy(dest_db, source_db, drop_first = false)
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 create_all(drop_first = false)
23
+ def create_all_databases(drop_first = false)
21
24
  dbh = get_nodb_handle
22
- Dir.directories(@data_directory).each {|entry| create_one_database(dbh, entry, entry, drop_first)}
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 create_one_database(dbh, dest_db, source_db, drop_first)
33
- Doh::log.info("DohDb::DatabaseCreator - creating source database " + source_db + " inside " + dest_db)
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 load_sql_files(subdir, source_db, dest_db)
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
- filenames = Dir.entries(path).find_all {|entry| entry.size > 4 && entry[-4..-1] == '.sql'}.sort.collect {|one| File.join(path, one)}
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
- mysqlcmd = 'mysql' + mysql_arg(@connector.host, 'h') + mysql_arg(@connector.user, 'u') + mysql_arg(@connector.password, 'p') + ' ' + dest_db
50
- io = IO::popen(mysqlcmd, 'r+')
51
- filenames.each do |flnm|
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 mysql_arg(value, optkey)
58
- return '' if value.nil? || value.empty?
59
- ' -' + optkey + value
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
@@ -23,32 +23,30 @@ class Handle
23
23
  end
24
24
 
25
25
  def query(statement)
26
- sqlstr = statement.to_s
27
- Doh::log.info(sqlstr)
28
- @mysqlh.query(sqlstr)
29
- rescue Exception => excpt
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
- query(statement)
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
- query(statement)
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 = query(statement)
47
+ result_set = generic_query(statement)
50
48
  Doh::log.info("selected #{result_set.num_rows} rows")
51
- rows = (row_builder || @row_builder).new.build_rows(result_set)
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
+
@@ -14,6 +14,7 @@ def self.parse_bool(str)
14
14
  end
15
15
 
16
16
  def self.parse_datetime(str)
17
+ raise ArgumentError.new("unexpected value: " + str) unless str.size == 19
17
18
  DateTime.parse(str)
18
19
  end
19
20
 
@@ -42,6 +42,12 @@ class ReadOnlyRow
42
42
  to_h.inspect
43
43
  end
44
44
 
45
+ def each_pair
46
+ @keys.size.times do |index|
47
+ yield(@keys.at(index), @values.at(index))
48
+ end
49
+ end
50
+
45
51
  undef id
46
52
  def method_missing(sym, *ignore)
47
53
  key = sym.to_s
data/lib/doh/mysql.rb CHANGED
@@ -2,4 +2,3 @@ require 'doh/mysql/cache_connector'
2
2
  require 'doh/mysql/connector_instance'
3
3
  require 'doh/mysql/handle'
4
4
  require 'doh/mysql/to_sql'
5
- require 'doh/mysql/unquoted'
@@ -1,14 +1,16 @@
1
1
  require 'doh/logger_app'
2
- require 'doh/logger/notify_acceptor'
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
- notify_acceptor = DohLogger::NotifyAcceptor.new('mail.server.com', 'from@somebody.com', ['recipient_address@gmail.com'], logfile_name)
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, notify_acceptor)
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")
@@ -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
 
@@ -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('/'))
@@ -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('error1', @all_acceptor.events[3].msg)
30
- assert_equal('fatal1', @all_acceptor.events[4].msg)
31
- assert_equal('error2_with_exception', @all_acceptor.events[5].msg)
32
- assert_equal('test runtime', @all_acceptor.events[5].exception.to_s)
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('error1', @warn_acceptor.events[1].msg)
36
- assert_equal('fatal1', @warn_acceptor.events[2].msg)
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.user, sharedcc.password, sharedcc.database, sharedcc.row_builder)
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
+
@@ -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.14
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-10 00:00:00 -06:00
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
@@ -1,12 +0,0 @@
1
- module DohDb
2
-
3
- class Unquoted < String
4
- def to_sql
5
- to_s
6
- end
7
- end
8
-
9
- NOW = Unquoted.new('NOW()')
10
- CURDATE = Unquoted.new('CURDATE()')
11
- TODAY = CURDATE
12
- end