activerecord-dbslayer-adapter 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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