tidus 1.0.3 → 1.0.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: 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.