ndr_support 5.10.4 → 5.10.5

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +3 -3
  5. data/lib/ndr_support/concerns/working_days.rb +12 -1
  6. data/lib/ndr_support/string/clean_methodable.rb +4 -4
  7. data/lib/ndr_support/version.rb +1 -1
  8. data/ndr_support.gemspec +8 -6
  9. metadata +10 -73
  10. data/.gitignore +0 -19
  11. data/.rubocop.yml +0 -1
  12. data/Gemfile +0 -4
  13. data/Guardfile +0 -24
  14. data/Rakefile +0 -12
  15. data/code_safety.yml +0 -294
  16. data/gemfiles/Gemfile.rails70 +0 -6
  17. data/gemfiles/Gemfile.rails71 +0 -6
  18. data/gemfiles/Gemfile.rails72 +0 -6
  19. data/gemfiles/Gemfile.rails80 +0 -6
  20. data/test/array_test.rb +0 -20
  21. data/test/concerns/working_days_test.rb +0 -148
  22. data/test/date_and_time_extensions_test.rb +0 -82
  23. data/test/daterange_test.rb +0 -303
  24. data/test/hash_test.rb +0 -84
  25. data/test/integer/calculations_test.rb +0 -28
  26. data/test/integer/rounding_test.rb +0 -14
  27. data/test/integer/working_days_test.rb +0 -14
  28. data/test/nil_test.rb +0 -40
  29. data/test/obfuscator_test.rb +0 -26
  30. data/test/ourdate_test.rb +0 -26
  31. data/test/ourtime_test.rb +0 -45
  32. data/test/password_test.rb +0 -129
  33. data/test/regexp_range_test.rb +0 -136
  34. data/test/resources/filesystem_paths.yml +0 -37
  35. data/test/safe_file_test.rb +0 -670
  36. data/test/safe_path_test.rb +0 -168
  37. data/test/string/cleaning_test.rb +0 -247
  38. data/test/string/conversions_test.rb +0 -371
  39. data/test/test_helper.rb +0 -42
  40. data/test/threat_scanner_test.rb +0 -77
  41. data/test/utf8_encoding/control_characters_test.rb +0 -84
  42. data/test/utf8_encoding/force_binary_test.rb +0 -64
  43. data/test/utf8_encoding_test.rb +0 -170
  44. data/test/yaml/serialization_test.rb +0 -200
@@ -1,14 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests our rounding extension
4
- class Integer::RoundingTest < Minitest::Test
5
- def test_rounding
6
- assert_equal 124_000, 123_221.round_up_to(3)
7
- assert_equal 123_300, 123_221.round_up_to(4)
8
- assert_equal 760, 758.round_up_to(2)
9
- assert_equal 3453, 3452.round_up_to(4)
10
- assert_nil 1.round_up_to(2)
11
- refute_nil 10.round_up_to(2)
12
- assert_nil 12.round_up_to(-45)
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests our Integer working days extension
4
- class Integer::WorkingDaysTest < Minitest::Test
5
- test 'Integer should be extended with #working_days_since' do
6
- assert 1.respond_to?(:working_days_since)
7
- end
8
-
9
- test 'Integer#working_days_since should behave correctly' do
10
- assert_equal Date.new(2019, 12, 23), 1.working_days_since(Date.new(2019, 12, 20))
11
- assert_equal Date.new(2019, 12, 27), 3.working_days_since(Date.new(2019, 12, 20))
12
- assert_equal Date.new(2019, 12, 30), 4.working_days_since(Date.new(2019, 12, 20))
13
- end
14
- end
data/test/nil_test.rb DELETED
@@ -1,40 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests our Nil extension
4
- class NilTest < Minitest::Test
5
- test 'to_date' do
6
- assert_nil nil.to_date
7
- end
8
-
9
- test 'titleize' do
10
- assert_nil nil.titleize
11
- end
12
-
13
- test 'surnameize' do
14
- assert_nil nil.surnameize
15
- end
16
-
17
- test 'postcodeize' do
18
- assert_nil nil.postcodeize
19
- end
20
-
21
- test 'upcase' do
22
- assert_nil nil.upcase
23
- end
24
-
25
- test 'clean' do
26
- assert_nil nil.clean(:tnmcategory)
27
- end
28
-
29
- test 'squash' do
30
- assert_nil nil.squash
31
- end
32
-
33
- test 'gsub' do
34
- assert_equal '', nil.gsub(/.*/)
35
- end
36
-
37
- test 'strip' do
38
- assert_nil nil.strip
39
- end
40
- end
@@ -1,26 +0,0 @@
1
- require 'test_helper'
2
-
3
- # Tests obfuscation library
4
- class ObfuscatorTest < Minitest::Test
5
- test 'deterministic seed should give consistent obfuscation' do
6
- seed1 = 1383023878118423080153274094615300156
7
- assert_equal 'CE PSEQQH', NdrSupport::Obfuscator.obfuscate('JO BLOGGS', seed1)
8
- assert_equal 'CE PSEQQH', NdrSupport::Obfuscator.obfuscate('JO BLOGGS', seed1),
9
- 'consistent re-obfuscation'
10
- assert_equal 'CE PSEQQH', NdrSupport::Obfuscator.obfuscate('Jo Bloggs', seed1),
11
- 'case insensitive'
12
- assert_equal 'CEZG PTIQQH', NdrSupport::Obfuscator.obfuscate('JOHN BRIGGS', seed1)
13
- end
14
-
15
- test 'different seeds should obfuscate differently' do
16
- seed2 = 33333285080880515415022777373811069493
17
- assert_equal 'VI RQICCZ', NdrSupport::Obfuscator.obfuscate('JO BLOGGS', seed2)
18
- end
19
-
20
- test 'test seed setup' do
21
- seed3 = 24978785977027615655244702873942606627
22
- assert_equal '781 RACO RXHOOX', NdrSupport::Obfuscator.obfuscate('369 Some Street', seed3)
23
- NdrSupport::Obfuscator.setup(seed3)
24
- assert_equal '781 RACO RXHOOX', NdrSupport::Obfuscator.obfuscate('369 Some Street')
25
- end
26
- end
data/test/ourdate_test.rb DELETED
@@ -1,26 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests our Ourdate class
4
- class OurdateTest < Minitest::Test
5
- def test_date_and_time
6
- d = Ourdate.build_datetime(2003, 11, 30)
7
- assert_equal '2003-11-30', d.to_iso
8
- assert_equal '30.11.2003', d.to_formatted_s
9
- assert_equal '30.11.2003', d.to_s
10
- end
11
-
12
- def test_ourdate
13
- # Creating an Ourdate from a String
14
- od = Ourdate.new('01.02.2000')
15
- assert_equal Date.new(2000, 2, 1).to_formatted_s(:ui), od.to_s
16
- assert_kind_of Date, od.thedate
17
- assert_equal '01.02.2000', od.thedate.to_s
18
- # Creating an Ourdate from a Date
19
- od = Ourdate.new(Date.new(2000, 3, 1))
20
- assert_equal '01.03.2000', od.to_s
21
- end
22
-
23
- def test_blank
24
- assert Ourdate.new.blank? # delegates to empty?
25
- end
26
- end
data/test/ourtime_test.rb DELETED
@@ -1,45 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests our Ourtime class
4
- class OurtimeTest < Minitest::Test
5
- def test_initialize_with_local_format_string_gmt
6
- # Creating an Ourtime from a local-format String (with seconds)
7
- ot = Ourtime.new('01.02.1993 04:05:06')
8
- assert_equal '1993-02-01 04:05:06', ot.thetime.strftime('%Y-%m-%d %H:%M:%S')
9
- assert_kind_of Time, ot.thetime
10
- assert_equal 0.hours, ot.thetime.gmt_offset
11
- end
12
-
13
- def test_initialize_with_local_format_string_bst
14
- # Creating an Ourtime from a local-format String (with seconds)
15
- ot = Ourtime.new('01.08.1993 04:05:06')
16
- assert_equal '1993-08-01 04:05:06', ot.thetime.strftime('%Y-%m-%d %H:%M:%S')
17
- assert_kind_of Time, ot.thetime
18
- assert_equal 1.hours, ot.thetime.gmt_offset
19
- end
20
-
21
- def test_initialize_with_time
22
- # Creating an Ourtime from a Time
23
- ot = Ourtime.new(Time.mktime(1993, 2, 1, 4, 5))
24
- assert_equal '01.02.1993 04:05', ot.to_s
25
- assert_equal 0.hours, ot.thetime.gmt_offset
26
- end
27
-
28
- def test_initialize_with_no_parameters
29
- assert Ourtime.new.blank? # delegates to empty?
30
- end
31
-
32
- def test_initialize_with_iso_string_bst
33
- # Parsing an ISO datetime
34
- ot = Ourtime.new('1993-05-05 06:07:08')
35
- assert_equal '1993-05-05 06:07:08', ot.thetime.strftime('%Y-%m-%d %H:%M:%S')
36
- assert_equal 1.hours, ot.thetime.gmt_offset
37
- end
38
-
39
- def test_initialize_with_iso_string_gmt
40
- # Parsing an ISO datetime
41
- ot = Ourtime.new('1993-01-05 06:07:08')
42
- assert_equal '1993-01-05 06:07:08', ot.thetime.strftime('%Y-%m-%d %H:%M:%S')
43
- assert_equal 0.hours, ot.thetime.gmt_offset
44
- end
45
- end
@@ -1,129 +0,0 @@
1
- require 'test_helper'
2
-
3
- # Tests password generation and checking library
4
- class PasswordTest < Minitest::Test
5
- test 'checking length requirement' do
6
- refute NdrSupport::Password.valid?('acegi')
7
- assert NdrSupport::Password.valid?('acegik')
8
- end
9
-
10
- test 'checking character uniqueness requirement' do
11
- refute NdrSupport::Password.valid?('acegacegacegacegacegacegaceg')
12
- assert NdrSupport::Password.valid?('acefhacefhacefhacefhacefhace')
13
- end
14
-
15
- test 'when checking, dictionary words are considered' do
16
- refute NdrSupport::Password.valid?('google password')
17
- assert NdrSupport::Password.valid?('google the password')
18
- end
19
-
20
- test 'when checking, custom dictionary words are considered' do
21
- refute NdrSupport::Password.valid?('google passphrase', word_list: ['passphrase'])
22
- assert NdrSupport::Password.valid?('google the passphrase', word_list: ['passphrase'])
23
- end
24
-
25
- test 'when checking, custom dictionary words that are also sequences are not over-counted' do
26
- refute NdrSupport::Password.valid?('hijkl a ', word_list: %w(hijkl hijklm))
27
- refute NdrSupport::Password.valid?('hijklm a ', word_list: %w(hijkl hijklm))
28
- end
29
-
30
- test 'when checking, custom dictionary words substrings of others should not intefere' do
31
- refute NdrSupport::Password.valid?('acegik a', word_list: %w(cegi acegik))
32
- refute NdrSupport::Password.valid?('acegik a', word_list: %w(acegik cegi))
33
- end
34
-
35
- test 'checking blank input' do
36
- refute NdrSupport::Password.valid?(nil)
37
- refute NdrSupport::Password.valid?('')
38
- refute NdrSupport::Password.valid?(' ')
39
- end
40
-
41
- test 'checking with increasing sequences' do
42
- refute NdrSupport::Password.valid?('12345678')
43
- refute NdrSupport::Password.valid?('1234 5678')
44
- refute NdrSupport::Password.valid?('456789')
45
- refute NdrSupport::Password.valid?('456 789')
46
- refute NdrSupport::Password.valid?('abcdefghijk')
47
- refute NdrSupport::Password.valid?('abcde fghijk')
48
- refute NdrSupport::Password.valid?('BCDEFGHIJKL')
49
- refute NdrSupport::Password.valid?('BCDEFG HIJKL')
50
-
51
- assert NdrSupport::Password.valid?('more 1234 5678')
52
- assert NdrSupport::Password.valid?('1234 more 5678')
53
- assert NdrSupport::Password.valid?('1234 5678 more')
54
- end
55
-
56
- test 'checking with decreasing sequences' do
57
- refute NdrSupport::Password.valid?('87654321')
58
- refute NdrSupport::Password.valid?('8765 4321')
59
- refute NdrSupport::Password.valid?('987654')
60
- refute NdrSupport::Password.valid?('987 654')
61
- refute NdrSupport::Password.valid?('kjihgfedcba')
62
- refute NdrSupport::Password.valid?('kjihg fedcba')
63
- refute NdrSupport::Password.valid?('LKJIHGFEDCB')
64
- refute NdrSupport::Password.valid?('LKJIHG FEDCB')
65
-
66
- assert NdrSupport::Password.valid?('more 8765 4321')
67
- assert NdrSupport::Password.valid?('8765 more 4321')
68
- assert NdrSupport::Password.valid?('8765 4321 more')
69
- end
70
-
71
- test 'checking with increasing then decreasing sequences' do
72
- refute NdrSupport::Password.valid?('123456787654321')
73
- refute NdrSupport::Password.valid?('aBcDeFgFeDcBa')
74
-
75
- assert NdrSupport::Password.valid?('something 123456787654321')
76
- assert NdrSupport::Password.valid?('something aBcDeFgFeDcBa')
77
- end
78
-
79
- test 'checking with decreasing then increasing sequences' do
80
- refute NdrSupport::Password.valid?('876543212345678')
81
- refute NdrSupport::Password.valid?('gFeDcBaBcDeFg')
82
-
83
- assert NdrSupport::Password.valid?('something 876543212345678')
84
- assert NdrSupport::Password.valid?('something gFeDcBaBcDeFg')
85
- end
86
-
87
- test 'checking with repeating characters' do
88
- refute NdrSupport::Password.valid?('happen')
89
- assert NdrSupport::Password.valid?('happens')
90
- assert NdrSupport::Password.valid?('hapqren')
91
- assert NdrSupport::Password.valid?('hapqsen')
92
-
93
- refute NdrSupport::Password.valid?('balloon')
94
- refute NdrSupport::Password.valid?('ballllLLLllLLLllllooooOOooOOoooon')
95
- assert NdrSupport::Password.valid?('baileon')
96
- end
97
-
98
- test 'generating' do
99
- password = NdrSupport::Password.generate
100
-
101
- assert NdrSupport::Password.valid?(password)
102
- assert_equal 4, password.split(/\s/).length
103
-
104
- password.scan(/\w+/) { |wd| assert NdrSupport::Password::RFC1751_WORDS.include?(wd.upcase) }
105
- end
106
-
107
- test 'generating with custom length' do
108
- password = NdrSupport::Password.generate(number_of_words: 6)
109
-
110
- assert NdrSupport::Password.valid?(password)
111
- assert_equal 6, password.split(/\s/).length
112
-
113
- password.scan(/\w+/) { |wd| assert NdrSupport::Password::RFC1751_WORDS.include?(wd.upcase) }
114
- end
115
-
116
- test 'generating with custom separator' do
117
- password = NdrSupport::Password.generate(separator: '-')
118
-
119
- assert NdrSupport::Password.valid?(password)
120
- assert_equal 4, password.split(/-/).length
121
-
122
- password.scan(/\w+/) { |wd| assert NdrSupport::Password::RFC1751_WORDS.include?(wd.upcase) }
123
- end
124
-
125
- test 'generating unrealistically' do
126
- exception = assert_raises(RuntimeError) { NdrSupport::Password.generate(number_of_words: 1) }
127
- assert_match(/failed to generate/i, exception.message)
128
- end
129
- end
@@ -1,136 +0,0 @@
1
- require 'test_helper'
2
-
3
- # This tests our RegexpRange class
4
- class RegexpRangeTest < Minitest::Test
5
- def setup
6
- @lines = [
7
- '0Lorem ipsum dolor sit amet',
8
- '1consectetur adipisicing elit',
9
- '2sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
10
- '3Ut enim ad minim veniam, quis nostrud exercitation ullamco',
11
- '4laboris nisi ut aliquip ex ea commodo consequat'
12
- ]
13
- end
14
-
15
- test 'to_yaml' do
16
- regexp_range = RegexpRange.new(0, /^3Ut/)
17
-
18
- # Don't test YAML serialisation directly, but make it can be loaded:
19
- deserialized_regexp_range = YAML.safe_load(regexp_range.to_yaml,
20
- permitted_classes: [RegexpRange, Regexp])
21
- assert_instance_of RegexpRange, deserialized_regexp_range
22
- assert_equal regexp_range.begin, deserialized_regexp_range.begin
23
- assert_equal regexp_range.end, deserialized_regexp_range.end
24
- assert_equal regexp_range.excl, deserialized_regexp_range.excl
25
- end
26
-
27
- test 'to_range with number and number' do
28
- assert_equal Range.new(2, 3, true), RegexpRange.new(2, 3, true).to_range(@lines)
29
- assert_equal Range.new(2, 3, false), RegexpRange.new(2, 3, false).to_range(@lines)
30
- assert_equal Range.new(0, -1, true), RegexpRange.new(0, -1, true).to_range(@lines)
31
- assert_equal Range.new(0, -1, false), RegexpRange.new(0, -1, false).to_range(@lines)
32
-
33
- assert_equal @lines[Range.new(2, 3, true)],
34
- @lines[RegexpRange.new(2, 3, true).to_range(@lines)]
35
- assert_equal @lines[Range.new(2, 3, false)],
36
- @lines[RegexpRange.new(2, 3, false).to_range(@lines)]
37
- end
38
-
39
- test 'to_range with number and regexp' do
40
- assert_equal Range.new(2, 3, true), RegexpRange.new(2, /^3Ut/, true).to_range(@lines)
41
- assert_equal Range.new(2, 3, false), RegexpRange.new(2, /^3Ut/, false).to_range(@lines)
42
-
43
- assert_equal @lines[Range.new(2, 3, true)],
44
- @lines[RegexpRange.new(2, /^3Ut/, true).to_range(@lines)]
45
- assert_equal @lines[Range.new(2, 3, false)],
46
- @lines[RegexpRange.new(2, /^3Ut/, false).to_range(@lines)]
47
-
48
- assert_raises RegexpRange::PatternMatchError do
49
- RegexpRange.new(2, /^NO_MATCH$/, true).to_range(@lines)
50
- end
51
- assert_raises RegexpRange::PatternMatchError do
52
- RegexpRange.new(2, /^NO_MATCH$/, false).to_range(@lines)
53
- end
54
- end
55
-
56
- test 'to_range with regexp and number' do
57
- assert_equal Range.new(1, -1, true), RegexpRange.new(/^1consec/, -1, true).to_range(@lines)
58
- assert_equal Range.new(1, -1, false), RegexpRange.new(/^1consec/, -1, false).to_range(@lines)
59
- assert_equal Range.new(1, 5, true), RegexpRange.new(/^1consec/, 5, true).to_range(@lines)
60
- assert_equal Range.new(1, 5, false), RegexpRange.new(/^1consec/, 5, false).to_range(@lines)
61
-
62
- assert_equal @lines[Range.new(1, -1, true)],
63
- @lines[RegexpRange.new(/^1consec/, -1, true).to_range(@lines)]
64
- assert_equal @lines[Range.new(1, -1, false)],
65
- @lines[RegexpRange.new(/^1consec/, -1, false).to_range(@lines)]
66
-
67
- assert_raises RegexpRange::PatternMatchError do
68
- RegexpRange.new(/^NO_MATCH$/, 5, true).to_range(@lines)
69
- end
70
- assert_raises RegexpRange::PatternMatchError do
71
- RegexpRange.new(/^NO_MATCH$/, 5, false).to_range(@lines)
72
- end
73
- end
74
-
75
- test 'to_range with regexp and regexp' do
76
- assert_equal Range.new(1, 3, true),
77
- RegexpRange.new(/^1consec/, /^3Ut/, true).to_range(@lines)
78
- assert_equal Range.new(1, 3, false),
79
- RegexpRange.new(/^1consec/, /^3Ut/, false).to_range(@lines)
80
-
81
- assert_equal @lines[Range.new(1, 3, true)],
82
- @lines[RegexpRange.new(/^1consec/, /^3Ut/, true).to_range(@lines)]
83
- assert_equal @lines[Range.new(1, 3, false)],
84
- @lines[RegexpRange.new(/^1consec/, /^3Ut/, false).to_range(@lines)]
85
-
86
- assert_raises RegexpRange::PatternMatchError do
87
- RegexpRange.new(/^NO_MATCH$/, /^NO_MATCH$/, true).to_range(@lines)
88
- end
89
- assert_raises RegexpRange::PatternMatchError do
90
- RegexpRange.new(/^NO_MATCH$/, /^NO_MATCH$/, false).to_range(@lines)
91
- end
92
- end
93
-
94
- test 'comparison to self' do
95
- rr1 = RegexpRange.new(/start/, /end/, false)
96
- assert_equal rr1, rr1
97
- end
98
-
99
- test 'comparison to identical regexprange' do
100
- rr1 = RegexpRange.new(/start/, /end/, false)
101
- rr2 = RegexpRange.new(/start/, /end/, false)
102
- assert_equal rr1, rr2
103
- end
104
-
105
- test 'comparison to different regexprange' do
106
- rr1 = RegexpRange.new(/start/, /end/, false)
107
- rr2 = RegexpRange.new(/start/, /end/, true)
108
- refute_equal rr1, rr2
109
-
110
- rr3 = RegexpRange.new(/start/, /end/, false)
111
- rr4 = RegexpRange.new(/start/, /finish/, false)
112
- refute_equal rr3, rr4
113
-
114
- rr5 = RegexpRange.new(/start/, /end/, true)
115
- rr6 = RegexpRange.new(/begin/, /end/, true)
116
- refute_equal rr5, rr6
117
- end
118
-
119
- test 'hash key comparison' do
120
- rr1 = RegexpRange.new(/start/, /end/, false)
121
- rr2 = RegexpRange.new(/start/, /end/, false)
122
- rr3 = RegexpRange.new(/start/, /end/, true)
123
-
124
- hash = Hash.new { |h, k| h[k] = 0 }
125
-
126
- hash[rr1] += 1
127
- hash[rr2] += 1
128
- hash[rr3] += 1
129
-
130
- assert_equal 2, hash.keys.length
131
-
132
- assert_equal 2, hash[rr1]
133
- assert_equal 2, hash[rr2]
134
- assert_equal 1, hash[rr3]
135
- end
136
- end
@@ -1,37 +0,0 @@
1
- # This allows us different filesystem paths for different platforms
2
- ---
3
- test_files: &test_files
4
- root: <%= Dir.mktmpdir %>
5
-
6
- ? !ruby/regexp /.*/
7
- :
8
- dbs_outbox:
9
- root: "/mounts/ron/dbs_outbox"
10
- prms:
11
- - r
12
- - w
13
- - x
14
- broken_space:
15
- root: "potato"
16
- prms:
17
- - r
18
- - w
19
- - x
20
- test_space_r:
21
- <<: *test_files
22
- prms:
23
- - r
24
- test_space_w:
25
- <<: *test_files
26
- prms:
27
- - w
28
- test_space_rw:
29
- <<: *test_files
30
- prms:
31
- - r
32
- - w
33
- permanent_test_files:
34
- root: <%#= Rails.root.join("test","unit","files") %>
35
- prms:
36
- - r
37
- - w