my_obfuscate 0.5.3 → 0.5.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e7f50293f88ff7eea7bdce3905110af4602229c
4
- data.tar.gz: 4008d4d1bb153fde2125dabcf2afdcbef334fbdc
3
+ metadata.gz: c81cc9453a733909c1a906c2369cce0999e8c627
4
+ data.tar.gz: f218ca6b9c443c1046dafa4877b279346258101c
5
5
  SHA512:
6
- metadata.gz: 77a9e4325cabd6434e89928d6c1939f914cad6bfe0289618c4a91f67a4c6d237c27a81e98ae43a5b4913b75b1504a1723cebd0f9f1829a938bcea249dd36270c
7
- data.tar.gz: b55e7c9b10453a22b77c8231a2f9665393aff73bc1fbcda9bf48959ad3a1846042943dc27d7d4a96cf8c9cb991589139d5caa4323ae753a44cc1163b0b47ed3e
6
+ metadata.gz: fd82ab134257c31299a91e79d2363176e47ae545e0d7f88e3672a01a4f8fce2c92b4e52ee003d20c9bb82cc145840d9a15ee0fbc25d757c40127999945670cd7
7
+ data.tar.gz: e0698977563fc19685b32e78943cf9633aa476f92dbc25f9bbaf33987d302452bdc264774c5fa6f9900cd2a1998ebb798d229b95e56b6666d3674aa67e542d5b
@@ -1 +1 @@
1
- ruby-2.1.2
1
+ ruby-2.2.0
@@ -42,14 +42,14 @@ class MyObfuscate
42
42
  database_helper.parse(self, config, input_io, output_io)
43
43
  end
44
44
 
45
- def reassembling_each_insert(line, table_name, columns)
45
+ def reassembling_each_insert(line, table_name, columns, ignore = nil)
46
46
  output = database_helper.rows_to_be_inserted(line).map do |sub_insert|
47
47
  result = yield(sub_insert)
48
48
  result = result.map do |i|
49
49
  database_helper.make_valid_value_string(i)
50
50
  end
51
51
  end
52
- database_helper.make_insert_statement(table_name, columns, output)
52
+ database_helper.make_insert_statement(table_name, columns, output, ignore)
53
53
  end
54
54
 
55
55
  def check_for_defined_columns_not_in_table(table_name, columns)
@@ -63,8 +63,12 @@ class MyObfuscate
63
63
  end
64
64
  end
65
65
 
66
+ def missing_column_list(table_name, columns)
67
+ columns - (config[table_name].keys + (globally_kept_columns || []).map {|i| i.to_sym}).uniq
68
+ end
69
+
66
70
  def check_for_table_columns_not_in_definition(table_name, columns)
67
- missing_columns = columns - (config[table_name].keys + (globally_kept_columns || []).map {|i| i.to_sym}).uniq
71
+ missing_columns = missing_column_list(table_name, columns)
68
72
  unless missing_columns.length == 0
69
73
  error_message = missing_columns.map do |missing_column|
70
74
  "Column '#{missing_column}' defined in table '#{table_name}', but not found in table definition, please fix your obfuscator config."
@@ -73,7 +77,7 @@ class MyObfuscate
73
77
  end
74
78
  end
75
79
 
76
- def obfuscate_bulk_insert_line(line, table_name, columns)
80
+ def obfuscate_bulk_insert_line(line, table_name, columns, ignore = nil)
77
81
  table_config = config[table_name]
78
82
  if table_config == :truncate
79
83
  ""
@@ -83,7 +87,7 @@ class MyObfuscate
83
87
  check_for_defined_columns_not_in_table(table_name, columns)
84
88
  check_for_table_columns_not_in_definition(table_name, columns) if fail_on_unspecified_columns?
85
89
  # Note: Remember to SQL escape strings in what you pass back.
86
- reassembling_each_insert(line, table_name, columns) do |row|
90
+ reassembling_each_insert(line, table_name, columns, ignore) do |row|
87
91
  ConfigApplicator.apply_table_config(row, table_config, columns)
88
92
  end
89
93
  end
@@ -30,42 +30,42 @@ class MyObfuscate
30
30
  row[index.to_i] = case definition[:type]
31
31
  when :email
32
32
  md5 = Digest::MD5.hexdigest(rand.to_s)[0...5]
33
- clean_quotes("#{Faker::Internet.email}.#{md5}.example.com")
33
+ clean_quotes("#{FFaker::Internet.email}.#{md5}.example.com")
34
34
  when :string
35
35
  random_string(definition[:length] || 30, definition[:chars] || SENSIBLE_CHARS)
36
36
  when :lorem
37
- clean_bad_whitespace(clean_quotes(Faker::Lorem.sentences(definition[:number] || 1).join(". ")))
37
+ clean_bad_whitespace(clean_quotes(FFaker::Lorem.sentences(definition[:number] || 1).join(". ")))
38
38
  when :like_english
39
39
  clean_quotes random_english_sentences(definition[:number] || 1)
40
40
  when :name
41
- clean_quotes(Faker::Name.name)
41
+ clean_quotes(FFaker::Name.name)
42
42
  when :first_name
43
- clean_quotes(Faker::Name.first_name)
43
+ clean_quotes(FFaker::Name.first_name)
44
44
  when :last_name
45
- clean_quotes(Faker::Name.last_name)
45
+ clean_quotes(FFaker::Name.last_name)
46
46
  when :address
47
- clean_quotes("#{Faker::AddressUS.street_address}\\n#{Faker::AddressUS.city}, #{Faker::AddressUS.state_abbr} #{Faker::AddressUS.zip_code}")
47
+ clean_quotes("#{FFaker::AddressUS.street_address}\\n#{FFaker::AddressUS.city}, #{FFaker::AddressUS.state_abbr} #{FFaker::AddressUS.zip_code}")
48
48
  when :street_address
49
- clean_bad_whitespace(clean_quotes(Faker::AddressUS.street_address))
49
+ clean_bad_whitespace(clean_quotes(FFaker::AddressUS.street_address))
50
50
  when :city
51
- clean_quotes(Faker::AddressUS.city)
51
+ clean_quotes(FFaker::AddressUS.city)
52
52
  when :state
53
- clean_quotes Faker::AddressUS.state_abbr
53
+ clean_quotes FFaker::AddressUS.state_abbr
54
54
  when :zip_code
55
- Faker::AddressUS.zip_code
55
+ FFaker::AddressUS.zip_code
56
56
  when :phone
57
- clean_quotes Faker::PhoneNumber.phone_number
57
+ clean_quotes FFaker::PhoneNumber.phone_number
58
58
  when :company
59
- clean_bad_whitespace(clean_quotes(Faker::Company.name))
59
+ clean_bad_whitespace(clean_quotes(FFaker::Company.name))
60
60
  when :ipv4
61
- Faker::Internet.ip_v4_address
61
+ FFaker::Internet.ip_v4_address
62
62
  when :ipv6
63
- # Inlined from Faker because ffaker doesn't have ipv6.
63
+ # Inlined from FFaker because ffaker doesn't have ipv6.
64
64
  @@ip_v6_space ||= (0..65535).to_a
65
65
  container = (1..8).map{ |_| @@ip_v6_space.sample }
66
66
  container.map{ |n| n.to_s(16) }.join(':')
67
67
  when :url
68
- clean_bad_whitespace(Faker::Internet.http_url)
68
+ clean_bad_whitespace(FFaker::Internet.http_url)
69
69
  when :integer
70
70
  random_integer(definition[:between] || (0..1000)).to_s
71
71
  when :fixed
@@ -6,8 +6,9 @@ class MyObfuscate
6
6
  if table_data = parse_insert_statement(line)
7
7
  table_name = table_data[:table_name]
8
8
  columns = table_data[:column_names]
9
+ ignore = table_data[:ignore]
9
10
  if config[table_name]
10
- output_io.puts obfuscator.obfuscate_bulk_insert_line(line, table_name, columns)
11
+ output_io.puts obfuscator.obfuscate_bulk_insert_line(line, table_name, columns, ignore)
11
12
  else
12
13
  $stderr.puts "Deprecated: #{table_name} was not specified in the config. A future release will cause this to be an error. Please specify the table definition or set it to :keep."
13
14
  output_io.write line
@@ -20,3 +21,5 @@ class MyObfuscate
20
21
 
21
22
  end
22
23
  end
24
+
25
+
@@ -5,22 +5,23 @@ class MyObfuscate
5
5
  def parse_insert_statement(line)
6
6
  if regex_match = insert_regex.match(line)
7
7
  {
8
- :table_name => regex_match[1].to_sym,
9
- :column_names => regex_match[2].split(/`\s*,\s*`/).map { |col| col.gsub('`', "").to_sym }
8
+ :ignore => !regex_match[1].nil?,
9
+ :table_name => regex_match[2].to_sym,
10
+ :column_names => regex_match[3].split(/`\s*,\s*`/).map { |col| col.gsub('`', "").to_sym }
10
11
  }
11
12
  end
12
13
  end
13
14
 
14
- def make_insert_statement(table_name, column_names, values)
15
+ def make_insert_statement(table_name, column_names, values, ignore = nil)
15
16
  values_strings = values.collect do |values|
16
17
  "(" + values.join(",") + ")"
17
18
  end.join(",")
18
19
 
19
- "INSERT INTO `#{table_name}` (`#{column_names.join('`, `')}`) VALUES #{values_strings};"
20
+ "INSERT #{ignore ? 'IGNORE ' : '' }INTO `#{table_name}` (`#{column_names.join('`, `')}`) VALUES #{values_strings};"
20
21
  end
21
22
 
22
23
  def insert_regex
23
- /^\s*INSERT INTO `(.*?)` \((.*?)\) VALUES\s*/i
24
+ /^\s*INSERT\s*(IGNORE )?\s*INTO `(.*?)` \((.*?)\) VALUES\s*/i
24
25
  end
25
26
 
26
27
  def rows_to_be_inserted(line)
@@ -2,7 +2,7 @@ class MyObfuscate
2
2
  class Postgres
3
3
  include MyObfuscate::CopyStatementParser
4
4
 
5
- # Copy statements contain the column values tab seperated like so:
5
+ # Copy statements contain the column values tab separated like so:
6
6
  # blah blah blah blah
7
7
  # which we want to turn into:
8
8
  # [['blah','blah','blah','blah']]
@@ -33,7 +33,7 @@ class MyObfuscate
33
33
  end
34
34
  end
35
35
 
36
- def make_insert_statement(table_name, column_names, values)
36
+ def make_insert_statement(table_name, column_names, values, ignore = nil)
37
37
  values.join("\t")
38
38
  end
39
39
 
@@ -26,7 +26,7 @@ class MyObfuscate
26
26
  end
27
27
  end
28
28
 
29
- def make_insert_statement(table_name, column_names, values)
29
+ def make_insert_statement(table_name, column_names, values, ignore = nil)
30
30
  values_strings = values.collect do |values|
31
31
  "(" + values.join(",") + ")"
32
32
  end.join(",")
@@ -1,3 +1,3 @@
1
1
  class MyObfuscate
2
- VERSION = "0.5.3"
2
+ VERSION = "0.5.4"
3
3
  end
@@ -232,11 +232,11 @@ describe MyObfuscate::ConfigApplicator do
232
232
 
233
233
  describe "when faker generates values with quotes in them" do
234
234
  before do
235
- allow(Faker::Address).to receive(:city).and_return("O'ReillyTown")
236
- allow(Faker::Name).to receive(:name).and_return("Foo O'Reilly")
237
- allow(Faker::Name).to receive(:first_name).and_return("O'Foo")
238
- allow(Faker::Name).to receive(:last_name).and_return("O'Reilly")
239
- allow(Faker::Lorem).to receive(:sentences).with(any_args).and_return(["Foo bar O'Thingy"])
235
+ allow(FFaker::Address).to receive(:city).and_return("O'ReillyTown")
236
+ allow(FFaker::Name).to receive(:name).and_return("Foo O'Reilly")
237
+ allow(FFaker::Name).to receive(:first_name).and_return("O'Foo")
238
+ allow(FFaker::Name).to receive(:last_name).and_return("O'Reilly")
239
+ allow(FFaker::Lorem).to receive(:sentences).with(any_args).and_return(["Foo bar O'Thingy"])
240
240
  end
241
241
 
242
242
  it "should remove single quotes from the value" do
@@ -73,7 +73,14 @@ describe MyObfuscate::Mysql do
73
73
 
74
74
  it "should return a hash of table name, column names for MySQL insert statements" do
75
75
  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);")
76
- expect(hash).to eq({:table_name => :some_table, :column_names => [:email, :name, :something, :age]})
76
+ expect(hash).to eq({:ignore => false, :table_name => :some_table, :column_names => [:email, :name, :something, :age]})
77
+ end
78
+ end
79
+
80
+ describe "#parse_insert_ignore_statement" do
81
+ it "should return a hash of IGNORE, table name, column names for MySQL insert statements" do
82
+ hash = subject.parse_insert_statement("INSERT IGNORE INTO `some_table` (`email`, `name`, `something`, `age`) VALUES ('bob@honk.com','bob', 'some\\'thin,ge())lse1', 25),('joe@joe.com','joe', 'somethingelse2', 54);")
83
+ expect(hash).to eq({:ignore => true, :table_name => :some_table, :column_names => [:email, :name, :something, :age]})
77
84
  end
78
85
  end
79
86
 
@@ -6,5 +6,5 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
6
  require 'my_obfuscate'
7
7
 
8
8
  RSpec.configure do |config|
9
- # config.mock_with :rr
9
+ config.mock_with :rspec
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_obfuscate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Cantino
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-10-24 00:00:00.000000000 Z
16
+ date: 2015-05-07 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: ffaker