my_obfuscate 0.3.0 → 0.3.7

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.
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe MyObfuscate::Mysql do
4
+ describe "#parse_insert_statement" do
5
+ it "should return nil for other SQL syntaxes (MS SQL Server)" do
6
+ subject.parse_insert_statement("INSERT [dbo].[TASKS] ([TaskID], [TaskName]) VALUES (61, N'Report Thing')").should be_nil
7
+ end
8
+
9
+ it "should return nil for MySQL non-insert statements" do
10
+ subject.parse_insert_statement("CREATE TABLE `some_table`;").should be_nil
11
+ end
12
+
13
+ it "should return a hash of table name, column names for MySQL insert statements" do
14
+ hash = subject.parse_insert_statement("INSERT INTO `some_table` (`email`, `name`, `something`, `age`) VALUES ('bob@honk.com','bob', 'some\\'thin,ge())lse1', 25),('joe@joe.com','joe', 'somethingelse2', 54);")
15
+ hash.should == {:table_name => :some_table, :column_names => [:email, :name, :something, :age]}
16
+ end
17
+ end
18
+
19
+ describe "#rows_to_be_inserted" do
20
+ it "should split a mysql string into fields" do
21
+ string = "INSERT INTO `some_table` (thing1,thing2) VALUES ('bob@bob.com','bob', 'somethingelse1', 25, '2', 10, 'hi') ; "
22
+ fields = [['bob@bob.com', 'bob', 'somethingelse1', '25', '2', '10', "hi"]]
23
+ subject.rows_to_be_inserted(string).should == fields
24
+ end
25
+
26
+ it "should work ok with escaped characters" do
27
+ string = "INSERT INTO `some_table` (thing1,thing2) VALUES ('bob,@bob.c , om', 'bo\\', b', 'some\"thin\\gel\\\\\\'se1', 25, '2', 10, 'hi', 5) ; "
28
+ fields = [['bob,@bob.c , om', 'bo\\\', b', 'some"thin\\gel\\\\\\\'se1', '25', '2', '10', "hi", "5"]]
29
+ subject.rows_to_be_inserted(string).should == fields
30
+ end
31
+
32
+ it "should work with multiple subinserts" do
33
+ string = "INSERT INTO `some_table` (thing1,thing2) VALUES (1,2,3, '((m))(oo()s,e'), ('bob,@bob.c , om', 'bo\\', b', 'some\"thin\\gel\\\\\\'se1', 25, '2', 10, 'hi', 5) ;"
34
+ fields = [["1", "2", "3", "((m))(oo()s,e"], ['bob,@bob.c , om', 'bo\\\', b', 'some"thin\\gel\\\\\\\'se1', '25', '2', '10', "hi", "5"]]
35
+ subject.rows_to_be_inserted(string).should == fields
36
+ end
37
+
38
+ it "should work ok with NULL values" do
39
+ string = "INSERT INTO `some_table` (thing1,thing2) VALUES (NULL , 'bob@bob.com','bob', NULL, 25, '2', NULL, 'hi', NULL ); "
40
+ fields = [[nil, 'bob@bob.com', 'bob', nil, '25', '2', nil, "hi", nil]]
41
+ subject.rows_to_be_inserted(string).should == fields
42
+ end
43
+
44
+ it "should work with empty strings" do
45
+ string = "INSERT INTO `some_table` (thing1,thing2) VALUES (NULL , '', '' , '', 25, '2','', 'hi','') ;"
46
+ fields = [[nil, '', '', '', '25', '2', '', "hi", '']]
47
+ subject.rows_to_be_inserted(string).should == fields
48
+ end
49
+
50
+ it "should work with hex encoded blobs" do
51
+ string = "INSERT INTO `some_table` (thing1,thing2) VALUES ('bla' , 'blobdata', 'blubb' , 0xACED00057372001F6A6176612E7574696C2E436F6C6C656) ;"
52
+ fields = [['bla', 'blobdata', 'blubb', '0xACED00057372001F6A6176612E7574696C2E436F6C6C656']]
53
+ subject.rows_to_be_inserted(string).should == fields
54
+ end
55
+ end
56
+
57
+ describe "#make_valid_value_string" do
58
+ it "should work with nil values" do
59
+ value = nil
60
+ subject.make_valid_value_string(value).should == 'NULL'
61
+ end
62
+
63
+ it "should work with hex-encoded blob data" do
64
+ value = "0xACED00057372001F6A6176612E7574696C2E436F6C6C656"
65
+ subject.make_valid_value_string(value).should == '0xACED00057372001F6A6176612E7574696C2E436F6C6C656'
66
+ end
67
+
68
+ it "should quote hex-encoded ALIKE data" do
69
+ value = "40x17x7"
70
+ subject.make_valid_value_string(value).should == "'40x17x7'"
71
+ end
72
+
73
+ it "should quote all other values" do
74
+ value = "hello world"
75
+ subject.make_valid_value_string(value).should == "'hello world'"
76
+ end
77
+ end
78
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,10 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.require(:default, :development)
1
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'rubygems'
4
6
  require 'my_obfuscate'
5
- require 'spec'
6
- require 'spec/autorun'
7
7
 
8
- Spec::Runner.configure do |config|
9
-
8
+ RSpec.configure do |config|
9
+ # config.mock_with :rr
10
10
  end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe MyObfuscate::SqlServer do
4
+ describe "#parse_insert_statement" do
5
+ it "should return a hash of table_name, column_names for SQL Server input statements" do
6
+ hash = subject.parse_insert_statement("INSERT [dbo].[TASKS] ([TaskID], [TaskName]) VALUES (61, N'Report Thing')")
7
+ hash.should == { :table_name => :TASKS, :column_names => [:TaskID, :TaskName] }
8
+ end
9
+
10
+ it "should return nil for SQL Server non-insert statements" do
11
+ subject.parse_insert_statement("CREATE TABLE [dbo].[WORKFLOW](").should be_nil
12
+ end
13
+
14
+ it "should return nil for non-SQL Server insert statements (MySQL)" do
15
+ subject.parse_insert_statement("INSERT INTO `some_table` (`email`, `name`, `something`, `age`) VALUES ('bob@honk.com','bob', 'some\\'thin,ge())lse1', 25),('joe@joe.com','joe', 'somethingelse2', 54);").should be_nil
16
+ end
17
+ end
18
+
19
+ describe "#rows_to_be_inserted" do
20
+ it "should split a SQL Server string into fields" do
21
+ string = "INSERT [dbo].[some_table] ([thing1],[thing2]) VALUES (N'bob@bob.com',N'bob', N'somethingelse1',25, '2', 10, 'hi', CAST(0x00009E1A00000000 AS DATETIME)) ; "
22
+ fields = [['bob@bob.com', 'bob', 'somethingelse1', '25', '2', '10', "hi", "CAST(0x00009E1A00000000 AS DATETIME)"]]
23
+ subject.rows_to_be_inserted(string).should == fields
24
+ end
25
+
26
+ it "should work ok with single quote escape" do
27
+ string = "INSERT [dbo].[some_table] ([thing1],[thing2]) VALUES (N'bob,@bob.c , om', 'bo'', b', N'some\"thingel''se1', 25, '2', 10, 'hi', 5) ; "
28
+ fields = [['bob,@bob.c , om', "bo'', b", "some\"thingel''se1", '25', '2', '10', "hi", "5"]]
29
+ subject.rows_to_be_inserted(string).should == fields
30
+ end
31
+
32
+ it "should work ok with NULL values" do
33
+ string = "INSERT [dbo].[some_table] ([thing1],[thing2]) VALUES (NULL , N'bob@bob.com','bob', NULL, 25, N'2', NULL, 'hi', NULL ); "
34
+ fields = [[nil, 'bob@bob.com', 'bob', nil, '25', '2', nil, "hi", nil]]
35
+ subject.rows_to_be_inserted(string).should == fields
36
+ end
37
+
38
+ it "should work with empty strings" do
39
+ string = "INSERT [dbo].[some_table] ([thing1],[thing2]) VALUES (NULL , N'', '' , '', 25, '2','', N'hi','') ;"
40
+ fields = [[nil, '', '','', '25', '2', '', "hi", '']]
41
+ subject.rows_to_be_inserted(string).should == fields
42
+ end
43
+ end
44
+
45
+ describe "#make_valid_value_string" do
46
+ it "should output 'NULL' when the value is nil" do
47
+ subject.make_valid_value_string(nil).should == "NULL"
48
+ end
49
+
50
+ it "should enclose the value in quotes if it's a string" do
51
+ subject.make_valid_value_string("something").should == "N'something'"
52
+ end
53
+
54
+ it "should not enclose the value in quotes if it is a method call" do
55
+ subject.make_valid_value_string("CAST(0x00009E1A00000000 AS DATETIME)").should == "CAST(0x00009E1A00000000 AS DATETIME)"
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,78 +1,97 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: my_obfuscate
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.7
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Andrew Cantino
8
9
  - Dave Willett
9
10
  - Mike Grafton
10
11
  - Mason Glaves
12
+ - Greg Bell
13
+ - Mavenlink
11
14
  autorequire:
12
15
  bindir: bin
13
16
  cert_chain: []
14
-
15
- date: 2009-10-09 00:00:00 -07:00
16
- default_executable:
17
- dependencies:
18
- - !ruby/object:Gem::Dependency
17
+ date: 2012-07-27 00:00:00.000000000 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
19
20
  name: rspec
21
+ requirement: !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
20
27
  type: :development
21
- version_requirement:
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: "0"
27
- version:
28
- description: Standalone Ruby code for the selective rewriting of MySQL dumps in order to protect user privacy.
29
- email: andrew@pivotallabs.com
28
+ prerelease: false
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ - !ruby/object:Gem::Dependency
36
+ name: faker
37
+ requirement: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: 1.0.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: 1.0.1
51
+ description: Standalone Ruby code for the selective rewriting of MySQL dumps in order
52
+ to protect user privacy.
53
+ email: andrew@iterationlabs.com
30
54
  executables: []
31
-
32
55
  extensions: []
33
-
34
- extra_rdoc_files:
35
- - LICENSE
36
- - README.rdoc
37
- files:
38
- - .document
56
+ extra_rdoc_files: []
57
+ files:
39
58
  - .gitignore
59
+ - Gemfile
40
60
  - LICENSE
41
61
  - README.rdoc
42
62
  - Rakefile
43
- - VERSION
44
63
  - lib/my_obfuscate.rb
64
+ - lib/my_obfuscate/mysql.rb
65
+ - lib/my_obfuscate/sql_server.rb
66
+ - lib/my_obfuscate/version.rb
45
67
  - my_obfuscate.gemspec
46
68
  - spec/my_obfuscate_spec.rb
69
+ - spec/mysql_spec.rb
47
70
  - spec/spec_helper.rb
48
- has_rdoc: true
49
- homepage: http://github.com/honkster/myobfuscate
71
+ - spec/sql_server_spec.rb
72
+ homepage: http://github.com/iterationlabs/my_obfuscate
50
73
  licenses: []
51
-
52
74
  post_install_message:
53
- rdoc_options:
54
- - --charset=UTF-8
55
- require_paths:
75
+ rdoc_options: []
76
+ require_paths:
56
77
  - lib
57
- required_ruby_version: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: "0"
62
- version:
63
- required_rubygems_version: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
68
- version:
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
69
90
  requirements: []
70
-
71
- rubyforge_project: my-obfuscate
72
- rubygems_version: 1.3.5
91
+ rubyforge_project:
92
+ rubygems_version: 1.8.19
73
93
  signing_key:
74
94
  specification_version: 3
75
- summary: Standalone Ruby code for the selective rewriting of MySQL dumps in order to protect user privacy.
76
- test_files:
77
- - spec/my_obfuscate_spec.rb
78
- - spec/spec_helper.rb
95
+ summary: Standalone Ruby code for the selective rewriting of MySQL dumps in order
96
+ to protect user privacy.
97
+ test_files: []
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.3.0