activerecord-dbslayer-adapter 0.2.0 → 0.2.5

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/History.txt CHANGED
@@ -1,10 +1,17 @@
1
- == 0.0.2 2008-05-01
1
+ == 0.2.5 2008-05-06
2
+
3
+ * 3 minor enhancements:
4
+ * passes test for multiple results
5
+ * passes test for null results
6
+ * rcov rake task
7
+
8
+ == 0.2.0 2008-05-01
2
9
 
3
10
  * 2 major enhancments:
4
11
  * tests
5
12
  * it actually works!
6
13
 
7
- == 0.0.1 2008-04-15
14
+ == 0.1.0 2008-04-15
8
15
 
9
16
  * 1 major enhancement:
10
17
  * Initial release
data/Manifest.txt CHANGED
@@ -16,6 +16,7 @@ script/txt2html
16
16
  setup.rb
17
17
  tasks/deployment.rake
18
18
  tasks/environment.rake
19
+ tasks/rcov.rake
19
20
  tasks/website.rake
20
21
  test/helper.rb
21
22
  test/localtest.rb
@@ -70,16 +70,21 @@ module ActiveRecord
70
70
  def sql_query(sql)
71
71
  dbslay_results = cmd_execute(:db, 'SQL' => sql)
72
72
 
73
- case dbslay_results
74
- when Hash
75
- # check for an error
76
- if dbslay_results['MYSQL_ERROR']
77
- raise DbslayerException, "MySQL Error #{dbslay_results['MYSQL_ERRNO']}: #{dbslay_results['MYSQL_ERROR']}"
78
- else
79
- DbslayerResult.new(dbslay_results['RESULT'])
73
+ # check for an error
74
+ if dbslay_results['MYSQL_ERROR']
75
+ raise DbslayerException, "MySQL Error #{dbslay_results['MYSQL_ERRNO']}: #{dbslay_results['MYSQL_ERROR']}"
76
+ elsif dbslay_results['RESULT']
77
+ result = dbslay_results['RESULT']
78
+ case result
79
+ when Hash
80
+ DbslayerResult.new(result)
81
+ when Array
82
+ result.map {|r| DbslayerResult.new(r) }
83
+ else
84
+ raise DbslayerException, "Unknown format for SQL results from DBSlayer"
80
85
  end
81
- when Array
82
- dbslay_results.map { |r| DbslayerResult.new(r['RESULT']) }
86
+ elsif dbslay_results['SUCCESS']
87
+ return dbslay_results['SUCCESS']
83
88
  else
84
89
  raise DbslayerException, "Unknown format for SQL results from DBSlayer"
85
90
  end
@@ -106,14 +111,14 @@ module ActiveRecord
106
111
 
107
112
  def client_version_num
108
113
  if @client_version.nil?
109
- @client_version = cmd_execute(:db, 'CLIENT_VERSION' => true)["CLIENT_VERSION"]
114
+ @client_version = Integer(cmd_execute(:db, 'CLIENT_VERSION' => true)["CLIENT_VERSION"])
110
115
  end
111
116
  @client_version
112
117
  end
113
118
 
114
119
  def server_version_num
115
120
  if @server_version.nil?
116
- @server_version = cmd_execute(:db, 'SERVER_VERSION' => true)["SERVER_VERSION"]
121
+ @server_version = Integer(cmd_execute(:db, 'SERVER_VERSION' => true)["SERVER_VERSION"])
117
122
  end
118
123
  @server_version
119
124
  end
@@ -27,7 +27,7 @@ end
27
27
  module ActiveRecord
28
28
  module ConnectionAdapters
29
29
  class DbslayerAdapter
30
- VERSION = '0.2.0'
30
+ VERSION = '0.2.5'
31
31
  end
32
32
  end
33
33
  end
data/tasks/rcov.rake ADDED
@@ -0,0 +1,9 @@
1
+ desc 'Measures test coverage'
2
+ task :test_coverage do
3
+ rm_f "coverage"
4
+ rm_f "coverage.data"
5
+ rcov = "rcov --aggregate coverage.data --text-summary -Ilib"
6
+ system("#{rcov} --html test/test_*.rb")
7
+ system("open coverage/index.html") if PLATFORM['darwin']
8
+ end
9
+
data/test/helper.rb CHANGED
@@ -10,6 +10,10 @@ require 'active_record/connection_adapters/dbslayer_adapter'
10
10
 
11
11
  STAT_REPLY = {"STAT" => "STAT"}
12
12
 
13
+ CLIENT_INFO_REPLY = {"CLIENT_INFO" => "5.2.27"}
14
+
15
+ VERSION_NUM_REPLY = {"SERVER_VERSION" => "50037", "CLIENT_VERSION" => "50037"}
16
+
13
17
  # Let's mock out the DBSlayer reply
14
18
  CITY_ROWS = [[123, "Mumbai (Bombay)" , "India" , 10500000] ,
15
19
  [4112, "Seoul" , "South Korea" , 9981619] ,
@@ -23,7 +27,7 @@ CITY_ROWS = [[123, "Mumbai (Bombay)" , "India" , 10500000] ,
23
27
  [1, "New York" , "United States" , 8008278]
24
28
  ].freeze
25
29
 
26
- CITY_TYPES = ["MYSQL_TYPE_STRING", "MYSQL_TYPE_STRING" , "MYSQL_TYPE_LONG"].freeze
30
+ CITY_TYPES = ["MYSQL_TYPE_INTEGER", "MYSQL_TYPE_STRING", "MYSQL_TYPE_STRING" , "MYSQL_TYPE_LONG"].freeze
27
31
 
28
32
  CITY_HEADER = ["id", "city_name" , "country_name" , "population"].freeze
29
33
 
@@ -34,6 +38,27 @@ CITY_RESULTS = {
34
38
  }
35
39
  }.freeze
36
40
 
41
+ COUNTRY_ROWS = [[1, 'United States'], [2, 'Canada'], [3, 'India']].freeze
42
+
43
+ COUNTRY_TYPES = ["MYSQL_TYPE_INTEGER", "MYSQL_TYPE_STRING"]
44
+
45
+ COUNTRY_HEADER = ["id", "name"]
46
+
47
+ MULTIPLE_RESULTS = {
48
+ "RESULT" => [{"TYPES" => CITY_TYPES,
49
+ "HEADER" => CITY_HEADER,
50
+ "ROWS" => CITY_ROWS
51
+ },
52
+
53
+ {"TYPES" => COUNTRY_TYPES,
54
+ "HEADER" => COUNTRY_HEADER,
55
+ "ROWS" => COUNTRY_ROWS
56
+ }
57
+
58
+ ]
59
+ }.freeze
60
+
61
+ NULL_RESULT = {"SUCCESS" => true}
37
62
 
38
63
  SHOW_TABLES_REPLY = {"RESULT"=> {"HEADER"=> ["Tables_in_Test_Database"],
39
64
  "ROWS" => [["table1"], ["table2"]],
@@ -2,18 +2,28 @@ require File.dirname(__FILE__) + '/helper.rb'
2
2
 
3
3
  class TestDbslayerConnection < Test::Unit::TestCase
4
4
 
5
- STAT_REPLY = {
6
- "STAT" => "THIS IS A STAT REPLY"
7
- }.freeze
8
-
9
- CLIENT_INFO_REPLY = {
10
- "CLIENT_INFO" => "5.2.27"
11
- }.freeze
12
-
13
5
  def setup
14
6
  @slayer = ActiveRecord::ConnectionAdapters::DbslayerConnection.new
15
7
  end
16
8
 
9
+ def test_query_string
10
+ query = {"foo" => "bar"}
11
+ assert_equal URI.encode(query.to_json), @slayer.send('query_string', query)
12
+ end
13
+
14
+ # def cmd_execute(endpoint, commands)
15
+ # 147 url = "http://#{host}:#{port}/#{endpoint.to_s}?#{query_string(commands)}"
16
+ # 148 open(url) do |file|
17
+ # 149 JSON.parse(file.read)
18
+ # 150 end
19
+
20
+ # def test_cmd_execute_url
21
+ # query = {"SQL" => "select * from cities"}
22
+ # test = ActiveRecord::ConnectionAdapters::DbslayerConnection.new('localhost', 9090)
23
+ # URI.expects(:open).with("http://localhost:9090/db?#{test.send(:query_string, query)}")
24
+ # test.send :cmd_execute, :db, query
25
+ # end
26
+
17
27
  def test_sql_query
18
28
  sql_command = "select * from cities limit 10"
19
29
  @slayer.stubs(:cmd_execute).with(:db, {"SQL" => sql_command}).returns(CITY_RESULTS)
@@ -24,6 +34,26 @@ class TestDbslayerConnection < Test::Unit::TestCase
24
34
  assert_not_nil reply.rows
25
35
  end
26
36
 
37
+ def test_sql_null_return
38
+ sql_command = "update set posted = 1"
39
+ @slayer.stubs(:cmd_execute).with(:db, {"SQL" => sql_command}).returns(NULL_RESULT)
40
+
41
+ status = @slayer.sql_query(sql_command)
42
+ assert_equal true, status
43
+ end
44
+
45
+ def test_multiple_results
46
+ sql_command = "select * from cities limit 10; select * from countries limit 3"
47
+ @slayer.stubs(:cmd_execute).with(:db, {"SQL" => sql_command}).returns(MULTIPLE_RESULTS)
48
+
49
+ reply = @slayer.sql_query(sql_command)
50
+ assert_kind_of Array, reply
51
+ assert_equal 2, reply.size
52
+ reply.each {|i| assert_kind_of(ActiveRecord::ConnectionAdapters::DbslayerResult, i)}
53
+ assert_equal CITY_ROWS, reply[0].rows
54
+ assert_equal COUNTRY_ROWS, reply[1].rows
55
+ end
56
+
27
57
  def test_stat
28
58
  @slayer.stubs(:cmd_execute).with(:db, {"STAT" => true}).returns(STAT_REPLY)
29
59
  reply = @slayer.mysql_stats
@@ -40,6 +70,21 @@ class TestDbslayerConnection < Test::Unit::TestCase
40
70
 
41
71
  def test_server_error
42
72
  @slayer.stubs(:cmd_execute).returns(ERROR_REPLY)
43
- assert_raise(DbslayerException) { @slayer.sql_query("SELECT * FROM items") }
73
+ assert_raise(ActiveRecord::ConnectionAdapters::DbslayerException) { @slayer.sql_query("SELECT * FROM items") }
44
74
  end
75
+
76
+ def test_client_num
77
+ @slayer.stubs(:cmd_execute).with(:db, {"CLIENT_VERSION" => true}).returns(VERSION_NUM_REPLY)
78
+ reply = @slayer.client_version_num
79
+
80
+ assert_equal 50037, reply
81
+ end
82
+
83
+ def test_server_num
84
+ @slayer.stubs(:cmd_execute).with(:db, {"SERVER_VERSION" => true}).returns(VERSION_NUM_REPLY)
85
+ reply = @slayer.server_version_num
86
+
87
+ assert_equal 50037, reply
88
+ end
89
+
45
90
  end
data/website/index.txt CHANGED
@@ -21,8 +21,6 @@ h2. Forum
21
21
 
22
22
  "http://groups.google.com/group/activerecord_dbslayer_adapter":http://groups.google.com/group/activerecord_dbslayer_adapter
23
23
 
24
- TODO - create Google Group - activerecord_dbslayer_adapter
25
-
26
24
  h2. How to submit patches
27
25
 
28
26
  Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-dbslayer-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Harris
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-02 00:00:00 -04:00
12
+ date: 2008-05-08 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -45,6 +45,7 @@ files:
45
45
  - setup.rb
46
46
  - tasks/deployment.rake
47
47
  - tasks/environment.rake
48
+ - tasks/rcov.rake
48
49
  - tasks/website.rake
49
50
  - test/helper.rb
50
51
  - test/localtest.rb