my_obfuscate 0.5.3 → 0.5.4

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