MYSQLSafe 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 @host && @database && @user && @password
18
+ if options["host"] && options["database"] && options["user"] && options["password"]
24
19
  begin
25
- @cxtn = Mysql.new(@host, @db, @user, @password)
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
- mysql_object.each { |row| mysql_array.push(row) }
45
-
46
- return mysql_array
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 'MYSQLSafe error: Host, Database, User and Password must be set to run a query'
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!("#{@encoding}", "#{@encoding}", :invalid => :replace)
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
@@ -1,3 +1,3 @@
1
1
  module MYSQLSafe
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -2,37 +2,50 @@ require_relative '../../test_helper.rb'
2
2
 
3
3
  describe MYSQLSafe::Base do
4
4
 
5
- obj { MYSQLSafe::Base }
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
- enconding_name = 'utf-8'
9
- obj.enconding = enconding_name
10
- obj.enconding.should_equal enconding_name
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.should_equal username
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.should_equal hostname
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.should_equal database_name
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, but not read" do
29
- password_key = $MYSQLPASSWORD
30
- obj.password = password_key
31
- obj.password.must_be_kind_of Exception
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
- obj.connect_safe("SELECT * FROM test LIMIT 1")
36
- obj.database.should_be_type_of Array
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: MYSQLSafe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: