simple_blacklist 0.1.0 → 0.2.0

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: 952c9eb375890475241b17c599065628d921cc4f
4
- data.tar.gz: 771f98ef126b1f643196fc9427b19e95521facab
3
+ metadata.gz: bbdbf52e043433dc0d2ca2fadb094a43167cc9f6
4
+ data.tar.gz: 7ef374ce7af7a1056d4cbb6c5565092c14b67bb9
5
5
  SHA512:
6
- metadata.gz: 777e986e5e970bab4fa4bae4c73528c279a6bdc30f056d2ed5ad1427383631d51fbe311d8507669a2b526dfa39739d01f16dc0d7313a52ffb424322e7aa07bc8
7
- data.tar.gz: 50d524c7ca9717a825104c4d78684ff8cbaa6454560a88c74306f6323b592b9766eb04bccc4b9e5a79ad6bc30b4f473551d7bd6cc3b4acb8d09117d8a3ce8a07
6
+ metadata.gz: 7f21ebbf752aa71d750668dff2e4575e49243106a1ff901e6645b2141eb8576ec3c9adfa7f444758c421b3dec22a96ab49085eb790b3f481c8b5392ba783a96a
7
+ data.tar.gz: 73dced19be6e6791e53388469271703279acedb09b95c5526b9a05275fd053e7559d3934859d1a2db14bb3f5e5a64d5cd4abfe3971962e67937e98099a1caff6
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /.idea/*
data/README.md CHANGED
@@ -1,10 +1,8 @@
1
1
  # SimpleBlacklist
2
- ___
3
2
 
4
3
  This project is designed to make easy the task of sanitizing string that contains words not allowed.
5
4
 
6
5
  ## Installation
7
- ___
8
6
 
9
7
  Add this line to your application's Gemfile:
10
8
 
@@ -21,17 +19,15 @@ Or install it yourself as:
21
19
  $ gem install simple_blacklist
22
20
 
23
21
  ## Setup (Rails)
24
- ___
25
22
 
26
23
  $ simple_blacklist --configure
27
24
 
28
25
  Will be created:
29
26
 
30
- * *config/initializers/simple_blacklist.rb*
31
- * *config/blacklist.yml*
27
+ * **config/initializers/simple_blacklist.rb** (file where are defined some parameters to the gem)
28
+ * **config/blacklist.yml** (list where you must add words that you want deny)
32
29
 
33
30
  ## Usage
34
- ___
35
31
 
36
32
  In your code, do:
37
33
 
@@ -39,19 +35,18 @@ In your code, do:
39
35
  offensive_text = "Kiss my ass"
40
36
  SimpleBlacklist.sanitize(offensive_text)
41
37
 
42
- # "Kiss my xxxxx"
38
+ # "Kiss my ****"
43
39
  ```
44
40
 
45
- If configured *letters_variations* is also possible to sanitize texts written with special characters
41
+ If configured **letters_variations** is also possible to sanitize texts written with special characters
46
42
  ```ruby
47
43
  offensive_text = "Kiss my @$$"
48
44
  SimpleBlacklist.sanitize(offensive_text)
49
45
 
50
- # "Kiss my xxxxx"
46
+ # "Kiss my ****"
51
47
  ```
52
48
 
53
49
  ## Development
54
- ___
55
50
 
56
51
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
57
52
 
@@ -63,7 +58,6 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERN
63
58
 
64
59
 
65
60
  ## License
66
- ___
67
61
 
68
62
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
69
63
 
data/bin/simple_blacklist CHANGED
@@ -1,50 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
- require 'fileutils'
3
- require 'simple_blacklist/config'
2
+ require 'simple_blacklist/setup'
4
3
 
5
- base = BLACKLIST_BASE
6
- config_dir = File.join(base, BLACKLIST_CONFIG['config_path'])
7
- initializers_dir = File.join(config_dir, BLACKLIST_CONFIG['initializers_path'])
8
- FileUtils.mkdir_p(config_dir) unless File.directory?(config_dir)
9
- FileUtils.mkdir_p(initializers_dir) unless File.directory?(initializers_dir)
10
- initializer_file = File.join(initializers_dir, 'simple_blacklist.rb')
11
- blacklist_file = File.join(config_dir, 'blacklist.yml')
4
+ setup = SimpleBlacklist::Setup.new
12
5
 
13
6
  if ARGV.include? "--configure"
14
- initializer_file_content = <<-FILE
15
- # Define simple_blacklist file
16
- SimpleBlacklist.set_blacklist_file(File.join(BLACKLIST_BASE, "config", "blacklist.yml"))
17
-
18
- # Defines masks that will replace the words contained in the simple_blacklist
19
- SimpleBlacklist.set_mask_to_denied_words("xxxxx")
20
-
21
- # list of letters and characters that can replace the letters
22
- SimpleBlacklist.set_letters_variations({
23
- 'a' => ['@', '4', 'ª'],
24
- 'e' => ['3', '&'],
25
- 'i' => ['|', '1'],
26
- 'o' => ['0', 'º'],
27
- 's' => ['$', '5'],
28
- 't' => ['7'],
29
- 'g' => ['6'],
30
- 'b' => ['6', '8']
31
- })
32
- FILE
33
-
34
- blacklist_file_content = <<-FILE
35
- ass
36
- fuck
37
- bitch
38
- FILE
39
-
40
- File.open(initializer_file, 'wb') {|f| f.write(initializer_file_content) } unless File.exist?(initializer_file)
41
- File.open(blacklist_file, 'wb') {|f| f.write(blacklist_file_content) } unless File.exist?(blacklist_file)
42
-
7
+ setup.configure
43
8
  puts " ༼ つ ◕_◕ ༽つ OK... Gem has been set!!! "
44
9
  exit
45
10
  end
46
11
 
47
- unless File.exist?(initializer_file)
12
+ unless File.exist?(setup.initializer_file)
48
13
  puts " ༼ つ ◕_◕ ༽つ OOOPS... Gem has not yet been set. To set run 'simple_blacklist --configure' "
49
14
  exit
50
15
  end
@@ -1,28 +1,42 @@
1
- require "simple_blacklist/config"
1
+ require "simple_blacklist/setup"
2
2
  require "simple_blacklist/version"
3
3
 
4
4
  module SimpleBlacklist
5
- @@file ||= File.join(BLACKLIST_BASE, BLACKLIST_CONFIG['config_path'], 'blacklist.yml')
5
+ @@blacklist_file ||= File.join(BLACKLIST_BASE, BLACKLIST_CONFIG['config_path'], 'blacklist.yml')
6
6
  @@letters_variations ||= {}
7
+ @@mask_denied_words ||= "****"
7
8
  @@blacklist ||= []
8
- @@mask ||= "*****"
9
9
 
10
10
  module_function
11
- def set_blacklist_file(file)
12
- @@file = file
11
+ def blacklist_file=(file)
12
+ raise "Given blacklist_file is not a File" unless File.exist? file
13
+ @@blacklist_file = file
13
14
  end
14
15
 
15
- def set_mask_to_denied_words(mask)
16
- @@mask = mask
16
+ def blacklist_file
17
+ @@blacklist_file
17
18
  end
18
19
 
19
- def set_letters_variations(list)
20
- raise "Given object is not a hash" unless list.instance_of? Hash
20
+ def letters_variations=(list)
21
+ raise "Given letters_variations is not a Hash" unless list.instance_of? Hash
21
22
  @@letters_variations = list
22
23
  end
23
24
 
25
+ def letters_variations
26
+ @@letters_variations
27
+ end
28
+
29
+ def mask_denied_words=(mask)
30
+ raise "Given mask_denied_words is not a String" unless mask.instance_of? String
31
+ @@mask_denied_words = mask
32
+ end
33
+
34
+ def mask_denied_words
35
+ @@mask_denied_words
36
+ end
37
+
24
38
  def reload_blacklist
25
- f = File.open(@@file, 'rb')
39
+ f = File.open(@@blacklist_file, 'rb')
26
40
  content = f.read
27
41
  @@blacklist = content.split(/\W+/)
28
42
  @@blacklist.map!(&:downcase)
@@ -30,22 +44,35 @@ module SimpleBlacklist
30
44
 
31
45
  def sanitize(text)
32
46
  reload_blacklist
33
- words = text.split(/[\s,.]/)
47
+ words = text.split(/([[:space:]]|[.,;:]|[[:blank:]])/)
34
48
  words.each do |word|
35
- replaced = replace_letters(word)
36
- text.gsub!(/(#{word})+/i, @@mask) if @@blacklist.include? replaced.downcase
49
+ word_replaced = replace_letters(word)
50
+ if @@blacklist.include? word_replaced.downcase
51
+ if word_replaced.downcase == word.downcase
52
+ text.gsub!(/(\b([#{word.split('').join("][")}])\b)/i, @@mask_denied_words)
53
+ else
54
+ if text=~/(\B([#{word.split('').join("][")}])\B)/i
55
+ text.gsub!(/(\B([#{word.split('').join("][")}])\B)/i, @@mask_denied_words)
56
+ else
57
+ text.gsub!(/([#{word.split('').join("][")}])/i, @@mask_denied_words)
58
+ end
59
+ end
60
+ end
37
61
  end
38
62
  text
39
63
  end
40
64
 
41
65
  def replace_letters(word)
42
- replaced = word.clone
66
+ word_replaced = word.clone
43
67
  chars = word.split('')
44
68
  chars.each do |char|
45
69
  @@letters_variations.each do |(key,list_chars)|
46
- replaced.gsub!(/(#{char})+/i, "#{key}") if list_chars.include? char.downcase
70
+ if list_chars.include? char.downcase
71
+ word_replaced.gsub!(/[#{char}]/, "#{key}")
72
+ end
47
73
  end
48
74
  end
49
- replaced
75
+ word_replaced
50
76
  end
77
+
51
78
  end
@@ -0,0 +1,59 @@
1
+ require 'fileutils'
2
+ require 'simple_blacklist/config'
3
+
4
+ module SimpleBlacklist
5
+ class Setup
6
+
7
+ attr_accessor :base, :config_dir, :initializers_dir, :initializer_file, :blacklist_file
8
+
9
+ def initialize
10
+ @base = BLACKLIST_BASE
11
+ @config_dir = File.join(base, BLACKLIST_CONFIG['config_path'])
12
+ @initializers_dir = File.join(@config_dir, BLACKLIST_CONFIG['initializers_path'])
13
+ FileUtils.mkdir_p(@config_dir) unless File.directory?(@config_dir)
14
+ FileUtils.mkdir_p(@initializers_dir) unless File.directory?(@initializers_dir)
15
+ @initializer_file = File.join(initializers_dir, 'simple_blacklist.rb')
16
+ @blacklist_file = File.join(config_dir, 'blacklist.yml')
17
+ end
18
+
19
+ def configure
20
+ create_initializer
21
+ create_blacklist
22
+ end
23
+
24
+ def create_initializer
25
+ initializer_file_content = <<-FILE
26
+ # Define simple_blacklist file
27
+ SimpleBlacklist.blacklist_file = File.join(BLACKLIST_BASE, "config", "blacklist.yml")
28
+
29
+ # Defines masks that will replace the words contained in the simple_blacklist
30
+ SimpleBlacklist.mask_denied_words = "****"
31
+
32
+ # list of letters and characters that can replace the letters
33
+ SimpleBlacklist.letters_variations = {
34
+ 'a' => ['@', '4'],
35
+ 'e' => ['3'],
36
+ 'i' => ['1', '|', '!'],
37
+ 'o' => ['0'],
38
+ 's' => ['$', '5'],
39
+ 't' => ['7', '+'],
40
+ 'g' => ['6'],
41
+ 'b' => ['8']
42
+ }
43
+ FILE
44
+
45
+ File.open(@initializer_file, 'wb') {|f| f.write(initializer_file_content) } unless File.exist?(@initializer_file)
46
+ end
47
+
48
+ def create_blacklist
49
+ blacklist_file_content = <<-FILE
50
+ ass
51
+ fuck
52
+ bitch
53
+ FILE
54
+
55
+ File.open(@blacklist_file, 'wb') {|f| f.write(blacklist_file_content) } unless File.exist?(@blacklist_file)
56
+ end
57
+
58
+ end
59
+ end
@@ -1,3 +1,3 @@
1
1
  module SimpleBlacklist
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -16,12 +16,13 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = `git ls-files -- {test,spec}/*`.split("\n")
17
17
  spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  spec.require_paths = ["lib"]
19
- # spec.required_ruby_version = '>= 2.0.0'
19
+ spec.required_ruby_version = '>= 2.0.0'
20
20
 
21
21
  spec.summary = %q{Simple Blacklist to sanitize strings}
22
22
  spec.description = %q{This project is designed to make easy the task of sanitizing string that contains words not allowed. }
23
23
 
24
- spec.add_dependency "bundler", "~> 1.10"
25
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_dependency "bundler"
25
+
26
+ spec.add_development_dependency "rake"
26
27
  spec.add_development_dependency "rspec"
27
28
  end
@@ -1,11 +1,41 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SimpleBlacklist do
4
+ before(:all) do
5
+ @setup = SimpleBlacklist::Setup.new
6
+ @setup.configure
7
+ require @setup.initializer_file
8
+ end
9
+
10
+ after(:all) do
11
+ FileUtils.rm_rf @setup.config_dir
12
+ end
13
+
4
14
  it 'has a version number' do
5
15
  expect(SimpleBlacklist::VERSION).not_to be nil
6
16
  end
7
17
 
8
- it 'does something useful' do
9
- expect(true).to eq(true)
18
+ describe "#sanitize" do
19
+
20
+ subject(:text_simple) { 'kiss my ass' }
21
+ it 'a word contained in the blacklist is replaced' do
22
+ expect(SimpleBlacklist.sanitize(text_simple)).to eq('kiss my ****')
23
+ end
24
+
25
+ subject(:text_special_char) { 'kiss my @$$' }
26
+ it 'a word written with special characters is replaced' do
27
+ expect(SimpleBlacklist.sanitize(text_special_char)).to eq('kiss my ****')
28
+ end
29
+
30
+ subject(:text_with_word_like) { 'kiss my ass assassin' }
31
+ it 'a similar word (not contained in the blacklist) can not be replaced' do
32
+ expect(SimpleBlacklist.sanitize(text_with_word_like)).to eq('kiss my **** assassin')
33
+ end
34
+
35
+ subject(:text_special_char_with_word_like) { 'kiss my @$$ @$$assin' }
36
+ it 'a similar word with special characters (not contained in the blacklist) can not be replaced' do
37
+ expect(SimpleBlacklist.sanitize(text_special_char_with_word_like)).to eq('kiss my **** @$$assin')
38
+ end
39
+
10
40
  end
11
41
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_blacklist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Washington Silva
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-08 00:00:00.000000000 Z
11
+ date: 2016-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.10'
19
+ version: '0'
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: '1.10'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
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: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -76,6 +76,7 @@ files:
76
76
  - bin/simple_blacklist
77
77
  - lib/simple_blacklist.rb
78
78
  - lib/simple_blacklist/config.rb
79
+ - lib/simple_blacklist/setup.rb
79
80
  - lib/simple_blacklist/version.rb
80
81
  - simple_blacklist.gemspec
81
82
  - spec/simple_blacklist_spec.rb
@@ -92,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
93
  requirements:
93
94
  - - ">="
94
95
  - !ruby/object:Gem::Version
95
- version: '0'
96
+ version: 2.0.0
96
97
  required_rubygems_version: !ruby/object:Gem::Requirement
97
98
  requirements:
98
99
  - - ">="