tidus 1.0.3 → 1.0.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: 7ab60caab05fd3272ef551a3ef6268a98dcc5858
4
- data.tar.gz: d0086aa189be407f46628569cd9dd7dc46b57d89
3
+ metadata.gz: 982c186ae247f2768f5836f664786d27e0746267
4
+ data.tar.gz: 47adfce0419345aa46db2da66954a22a13eeb706
5
5
  SHA512:
6
- metadata.gz: 3e3377bd211a50ada2550c3d0aa27e020fb38b62f029e04aa0a99ec9e8c217550956c076142505d1628945a4a2eb30929c564d4e1a8a1796af7376e2246c5957
7
- data.tar.gz: 1050fd7c7e127e3ea01c73dbeba0ae2a5be207c78510dc9d27a0ea4506e1e574b11a9e86b7816794b50396d05cc08012084cb339f283a47f27ecc8e7cb5eba14
6
+ metadata.gz: e64fd16e2f06d5238ef075e215a1eb97976c0153677f3ab96aa4cf3c7cefd5af86855d893bc4fbe08e398db5d3c5b13af3a30d8c53209c72f9df8bcb45c2c275
7
+ data.tar.gz: 7f77bbd00064728512bf6b999cf29b08817e7f74900582cd139592fc06800bae3f83b29df725cd3c6ae15866ea604773250b5682014319f8934017b3f37ea288
@@ -4,8 +4,14 @@ module Tidus
4
4
  def self.anonymize(table_name, column_name, options = {})
5
5
  name = "#{table_name}.#{column_name}"
6
6
 
7
- type = options[:result_type] || "text"
8
- default = options[:default].nil? ? "#{name}::#{type}" : "'#{options[:default]}'::#{type}"
7
+ # If options is edited on a deeper level .dup has to be replaced by marshal dump/load
8
+ options = options.dup
9
+ options[:result_type] ||= "text"
10
+ type = options[:result_type]
11
+
12
+ if options[:default] && options[:default_strategy]
13
+ raise "CondAnonymizer: Only one of default and default_strategy can be used"
14
+ end
9
15
 
10
16
  if options[:conditions].blank?
11
17
  raise "Missing option :conditions for CondAnonymizer on #{name}"
@@ -31,10 +37,31 @@ module Tidus
31
37
  "'#{cond_value}'::#{cond_type}) THEN '#{cond_result}'::#{type} "
32
38
  end
33
39
 
34
- command += "ELSE #{default} END"
40
+ command += "ELSE #{self.default(table_name, column_name, options)} END"
35
41
 
36
42
  return command
37
43
  end
44
+
45
+ def self.default(table_name, column_name, options)
46
+ type = options[:result_type]
47
+
48
+ value = if options[:default_strategy]
49
+ klass = self.anonymizer(options[:default_strategy])
50
+ klass.anonymize(table_name, column_name, {})
51
+ elsif options[:default]
52
+ "'#{options[:default]}'::#{type}"
53
+ else
54
+ "#{table_name}.#{column_name}::#{type}"
55
+ end
56
+ end
57
+
58
+ def self.anonymizer(name)
59
+ begin
60
+ klass = Kernel.const_get("Tidus::Postgresql::#{name.to_s.camelize}Anonymizer")
61
+ rescue NameError
62
+ raise "default_strategy '#{name}' not implemented for Postgresql"
63
+ end
64
+ end
38
65
  end
39
66
  end
40
- end
67
+ end
@@ -2,18 +2,18 @@ module Tidus
2
2
  module Postgresql
3
3
  class TextAnonymizer
4
4
  def self.anonymize(table_name, column_name, options = {})
5
- base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZCßüäöÜÄÖ"
5
+ base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZCßüäöÜÄÖ0123456789"
6
6
  return "translate((#{table_name}.#{column_name})::text, " +
7
7
  "'#{base}'::text, '#{generate_mapping(base)}'::text)"
8
8
  end
9
9
 
10
10
  private
11
11
  def self.generate_mapping(base)
12
- upper = ("A".."Z").to_a
12
+ upper_and_nums = ("A".."Z").to_a + ('0'..'9').to_a
13
13
  lower = ("a".."z").to_a
14
14
  result = base.split("").map do |letter|
15
15
  if letter == letter.upcase
16
- upper.sample
16
+ upper_and_nums.sample
17
17
  else
18
18
  lower.sample
19
19
  end
@@ -22,4 +22,4 @@ module Tidus
22
22
  end
23
23
  end
24
24
  end
25
- end
25
+ end
data/lib/tidus/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tidus
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tidus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schoknecht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  requirements: []
113
113
  rubyforge_project:
114
- rubygems_version: 2.4.6
114
+ rubygems_version: 2.2.2
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: Gem for creating anonymization views.