MYSQLSafe 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/MYSQLSafe/base.rb +25 -25
- data/lib/MYSQLSafe/version.rb +1 -1
- data/test/lib/MYSQLSafe/base_test.rb +31 -18
- metadata +1 -1
data/lib/MYSQLSafe/base.rb
CHANGED
@@ -2,27 +2,23 @@ require 'mysql'
|
|
2
2
|
|
3
3
|
module MYSQLSafe
|
4
4
|
class Base
|
5
|
-
attr_accessor :encoding
|
6
|
-
attr_reader :host, :database, :user
|
7
|
-
|
8
|
-
def host=(host_string)
|
9
|
-
@host = esc_enc_string(host_string)
|
10
|
-
end
|
11
|
-
def database=(database_string)
|
12
|
-
@database = esc_enc_string(database_string)
|
13
|
-
end
|
14
|
-
def user=(user_string)
|
15
|
-
@user = esc_enc_string(user_string)
|
16
|
-
end
|
17
|
-
def password=(password_string)
|
18
|
-
@password = esc_enc_string(password_string)
|
19
|
-
end
|
5
|
+
attr_accessor :host, :database, :user, :encoding, :password
|
20
6
|
|
21
7
|
def connect_safe(raw_sql)
|
8
|
+
@mysql_array = []
|
9
|
+
@encoding ||= 'utf-8'
|
10
|
+
options = {}
|
11
|
+
self.instance_variables.map{|name| options = options.merge({ name.to_s.delete("@") => self.instance_variable_get(name) }) }
|
12
|
+
options.each do |k,v|
|
13
|
+
options[k] = esc_enc_string(v)
|
14
|
+
end
|
15
|
+
|
16
|
+
|
22
17
|
sql = esc_enc_string(raw_sql)
|
23
|
-
if
|
18
|
+
if options["host"] && options["database"] && options["user"] && options["password"]
|
24
19
|
begin
|
25
|
-
|
20
|
+
options.each {|k,v| puts "#{k} => #{v}"}
|
21
|
+
@cxtn = Mysql.new(options[host], options[database], options[user], options[password])
|
26
22
|
table_names = get_table_names
|
27
23
|
table_match = match_name(table_names, sql)
|
28
24
|
|
@@ -40,16 +36,19 @@ module MYSQLSafe
|
|
40
36
|
end
|
41
37
|
|
42
38
|
mysql_object = cxtn.query(ticked_sql)
|
43
|
-
mysql_array
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
mysql_object.each { |row| @mysql_array.push(row) }
|
40
|
+
puts "After push: #{@mysql_array}"
|
41
|
+
rescue Mysql::Error => msqle
|
42
|
+
puts "Error! #{msqle}, #{@mysql_array}"
|
43
|
+
@mysql_array.push(["MYSQL Error: #{msqle}"])
|
47
44
|
ensure
|
48
|
-
@cxtn.close
|
45
|
+
@cxtn.close if @cxtn
|
49
46
|
end
|
50
47
|
else
|
51
|
-
raise
|
48
|
+
raise "MYSQLSafe error: Host, Database, User and Password must be set to run a query. You included #{options}"
|
52
49
|
end
|
50
|
+
puts "@mysql_array is #{@mysql_array} a #{@mysql_array.class}"
|
51
|
+
return @mysql_array
|
53
52
|
end
|
54
53
|
|
55
54
|
private
|
@@ -108,15 +107,16 @@ module MYSQLSafe
|
|
108
107
|
end
|
109
108
|
|
110
109
|
def esc_enc_string(string)
|
111
|
-
return esc_string(enc_string(string))
|
110
|
+
return esc_string(enc_string(string.to_s))
|
112
111
|
end
|
113
112
|
|
114
113
|
def enc_string(string)
|
115
|
-
return string.encode
|
114
|
+
return string.encode("#{@encoding}", "#{@encoding}", :invalid => :replace)
|
116
115
|
end
|
117
116
|
|
118
117
|
def esc_string(string)
|
119
118
|
return Mysql.escape_string(string)
|
120
119
|
end
|
120
|
+
|
121
121
|
end
|
122
122
|
end
|
data/lib/MYSQLSafe/version.rb
CHANGED
@@ -2,37 +2,50 @@ require_relative '../../test_helper.rb'
|
|
2
2
|
|
3
3
|
describe MYSQLSafe::Base do
|
4
4
|
|
5
|
-
|
5
|
+
before do
|
6
|
+
@obj = MYSQLSafe::Base.new
|
7
|
+
end
|
6
8
|
|
7
9
|
it "should allow enconding to be set and read" do
|
8
|
-
|
9
|
-
obj.
|
10
|
-
obj.
|
10
|
+
encoding_name = 'utf-8'
|
11
|
+
@obj.encoding = encoding_name
|
12
|
+
@obj.encoding.must_equal encoding_name
|
11
13
|
end
|
12
14
|
it "should allow username to be set and read" do
|
13
15
|
username = 'sam'
|
14
|
-
obj.user = username
|
15
|
-
obj.user.
|
16
|
+
@obj.user = username
|
17
|
+
@obj.user.must_equal username
|
16
18
|
end
|
17
19
|
it "should allow host to be set and read" do
|
18
20
|
hostname = 'localhost'
|
19
|
-
obj.host = hostname
|
20
|
-
obj.host.
|
21
|
+
@obj.host = hostname
|
22
|
+
@obj.host.must_equal hostname
|
21
23
|
end
|
22
24
|
it "should allow database to be set and read" do
|
23
25
|
database_name = 'test'
|
24
|
-
obj.database = database_name
|
25
|
-
obj.database.
|
26
|
+
@obj.database = database_name
|
27
|
+
@obj.database.must_equal database_name
|
26
28
|
end
|
27
29
|
|
28
|
-
it "must allow password to be set
|
29
|
-
password_key =
|
30
|
-
obj.password = password_key
|
31
|
-
obj.password.
|
30
|
+
it "must allow password to be set and read" do
|
31
|
+
password_key = ENV['MYSQLPASSWORD'] || "password"
|
32
|
+
@obj.password = password_key
|
33
|
+
@obj.password.must_equal password_key
|
32
34
|
end
|
33
35
|
|
34
|
-
it "should allow connections to be made" do
|
35
|
-
|
36
|
-
obj.
|
36
|
+
it "should allow connections to be made, and return an array" do
|
37
|
+
encoding_name = 'utf-8'
|
38
|
+
@obj.encoding = encoding_name
|
39
|
+
username = 'sam'
|
40
|
+
@obj.user = username
|
41
|
+
hostname = 'localhost'
|
42
|
+
@obj.host = hostname
|
43
|
+
database_name = 'test'
|
44
|
+
@obj.database = database_name
|
45
|
+
password_key = ENV['MYSQLPASSWORD'] || "password"
|
46
|
+
@obj.password = password_key
|
47
|
+
|
48
|
+
success = @obj.connect_safe("SELECT * FROM test LIMIT 1")
|
49
|
+
success.must_be_instance_of Array
|
37
50
|
end
|
38
|
-
end
|
51
|
+
end
|