anon 0.0.1 → 0.0.2

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: b58dd8e96a5488b0ae05d43be7b9a9cc2162db34
4
- data.tar.gz: e8ae73279bd357ab92e6aa258426d63206db3734
3
+ metadata.gz: 03b2f17f2051079e45100d331e070bd5b22be37f
4
+ data.tar.gz: 973464a56e3a81b49a90d5f5af2b4b2b23577331
5
5
  SHA512:
6
- metadata.gz: 162ebe61b83c353976ff81da3d2882d32cbf9b0b464a3b6b8a67e3ad9bdce20abdaa7cadbdcd91ce0b3ac7838f1f72ef98dfe21b38ed6b104c7605e105f0c046
7
- data.tar.gz: ab5a70456e30880db8e2a238454ddc003813c339218ccbd152ee3e7d5dac656cfd5a215948dab083d02bbad08b9552695641afb9f162b1402ea5245a784438c3
6
+ metadata.gz: 79e57175215f6cfd7d35d202a04d3ac3ca54e2e5b1fdd5728f0256195678f541999801d9d2cb306aeaf1398788796ab0e56658936b353fcf719c2f569da26866
7
+ data.tar.gz: 02bc47de8761b52b902e3996e00ab3890c1b56f999f71579e2ef3ca868e69aa5dbb040d4b66183abac1cf690e188c17d5eb921433c7e24861b2cd5f9e0acd1b9
@@ -1,3 +1,8 @@
1
1
  require 'anon/base'
2
2
  require 'anon/csv'
3
3
  require 'anon/text'
4
+
5
+ # Anon can be used to replace personal e-mail addresses with anonymous (fake) ones.
6
+ # This is useful when transferring personally sensitive data.
7
+ module Anon
8
+ end
@@ -3,12 +3,15 @@
3
3
  require 'time_difference'
4
4
 
5
5
  module Anon
6
- # Anonymiser base class
6
+ # Anonymiser base class anonymiser implimentations should inherit from
7
7
  class Base
8
8
 
9
9
  # Performs anonymisation
10
- def self.anonymise!(*args)
11
- new(*args).anonymise!
10
+ # @param input [IO, gets] the input stream
11
+ # @param output [IO, puts] the output stream
12
+ # @param args [*] class specific options
13
+ def self.anonymise!(input, output, *args)
14
+ new(input, output, *args).anonymise!
12
15
  end
13
16
 
14
17
  protected
@@ -18,6 +21,8 @@ module Anon
18
21
  #
19
22
  # The same personal e-mail will be replaced
20
23
  # with the same anonymous e-mail.
24
+ # @param personal_email [String]
25
+ # @return [String] anonomised email
21
26
  def anonymous_email(personal_email)
22
27
  @anonymised_emails ||= {}
23
28
 
@@ -24,6 +24,10 @@ e.g. 0,1,5 or email-address,other_email, guesses based on header if ommited'
24
24
  default: true,
25
25
  desc: 'if the csv file to be processed has a header row'
26
26
 
27
+ # The cli command to launch the CSV anonymiser
28
+ # Input and output may be set to filepaths, or default to stdin and out
29
+ # The columns to be anonymised can be set, or we default to a detection stratergy if there is a header row
30
+ # Optionly we can choose to process files without a header row, but then columns must be set
27
31
  def csv
28
32
  require 'anon/csv'
29
33
  Anon::CSV.anonymise!(input, output, options[:columns], options[:header])
@@ -39,6 +43,8 @@ e.g. 0,1,5 or email-address,other_email, guesses based on header if ommited'
39
43
  aliases: [:o],
40
44
  desc: 'output filename write to, writes to STDOUT if ommited'
41
45
 
46
+ # The cli command to launch the Text anonymiser
47
+ # Input and output may be set to filepaths, or default to stdin and out
42
48
  def text
43
49
  require 'anon/text'
44
50
  Anon::Text.anonymise!(input, output)
@@ -5,8 +5,13 @@ require 'anon/csv/columns'
5
5
  require 'csv'
6
6
 
7
7
  module Anon
8
- # Replaces the contents of a set of columns with anonymous e-mails.
8
+ # Replaces the contents of a set of columns in a CSV stream with anonymous e-mails.
9
9
  class CSV < Base
10
+ # Returns a new instance of the CSV anonymiser
11
+ # @param input [IO, #gets] the stream to read from
12
+ # @param output [IO, #puts] the stream to write to
13
+ # @param columns_to_anonymise [String] a comma seperated list of columns to anonymise, if nil we guess
14
+ # @param has_header [Boolean] defaults to true
10
15
  def initialize(input, output, columns_to_anonymise, has_header = true)
11
16
  @input = input
12
17
  @output = output
@@ -2,11 +2,19 @@ require 'anon/base'
2
2
 
3
3
  module Anon
4
4
  class CSV < Base
5
+ # Encapsulates the logic required to choose and format the list
6
+ # of columns to be anonomised
5
7
  class Columns
8
+ # Initialzes a new instance of Columns
9
+ # @param columns [String] the columns to be anonomised, comma seperated may be names or indexes
10
+ # @param headers [Array<String>] the full list of headers
6
11
  def initialize(columns, headers)
7
12
  @columns, @headers = columns, headers
8
13
  end
9
14
 
15
+ # Returns the columns that should be anonomised, if the object was initialized without a
16
+ # predefined list of columns then returns a guess based on the list of headers.
17
+ # @return [Array<String,Integer>] the columns to be anonomised, indexes are returned as Integer
10
18
  def to_anonymise
11
19
  @_to_anonymise ||= indexes || columns || best_guess
12
20
  end
@@ -3,15 +3,18 @@
3
3
  require 'anon/base'
4
4
 
5
5
  module Anon
6
- # Anonymises any detected e-mail address in a text file.
6
+ # Anonymises any detected e-mail address in a text stream
7
7
  class Text < Base
8
8
  # From the email regex research: http://fightingforalostcause.net/misc/2006/compare-email-regex.php
9
9
  # Authors: James Watts and Francisco Jose Martin Moreno
10
10
  EMAIL_REGEX = /([\w\!\#\z\%\&\'\*\+\-\/\=\?\\A\`{\|\}\~]+\.)*[\w\+-]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)/i # rubocop:disable Metrics/LineLength
11
11
 
12
- def initialize(incoming_filename, outgoing_filename)
13
- @input = incoming_filename
14
- @output = outgoing_filename
12
+ # Returns a new instance of the Text anonymiser
13
+ # @param input [IO, #gets] the stream to read from
14
+ # @param output [IO, #puts] the stream to write to
15
+ def initialize(input, output)
16
+ @input = input
17
+ @output = output
15
18
  end
16
19
 
17
20
  # Anonymises any e-mail addresses found in the text
@@ -1,5 +1,5 @@
1
- require 'simplecov'
2
- SimpleCov.start
1
+ require 'codeclimate-test-reporter'
2
+ CodeClimate::TestReporter.start
3
3
 
4
4
  def capture_stdout
5
5
  real_stdout = $stdout
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reevoo Engineering
@@ -14,86 +14,100 @@ dependencies:
14
14
  name: time_difference
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '0.19'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '0.19'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3'
47
+ version: '3.2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3'
54
+ version: '3.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.9'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '0.9'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: reevoocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '0.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '0.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '10.4'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '10.4'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.4'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.4'
97
111
  description: Replaces personal data with fake data
98
112
  email: developers@reevoo.com
99
113
  executables:
@@ -126,7 +140,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
140
  requirements:
127
141
  - - ">="
128
142
  - !ruby/object:Gem::Version
129
- version: '0'
143
+ version: '1.9'
144
+ - - "<"
145
+ - !ruby/object:Gem::Version
146
+ version: '3.0'
130
147
  required_rubygems_version: !ruby/object:Gem::Requirement
131
148
  requirements:
132
149
  - - ">="