obscenity-plus 1.0.1

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.
data/test/test_rack.rb ADDED
@@ -0,0 +1,207 @@
1
+ require 'helper'
2
+ require 'rack/mock'
3
+ require 'obscenity/rack'
4
+
5
+ class TestRack < Test::Unit::TestCase
6
+
7
+ context "Rack::Obscenity" do
8
+ setup do
9
+ @env = {}
10
+ @body = 'hello'
11
+ @status = 200
12
+ @headers = { 'Content-Type' => 'text/plain' }
13
+ @app = lambda { |env| [@status, @headers, [@body]] }
14
+ end
15
+
16
+ def mock_env(options = {})
17
+ @env = Rack::MockRequest.env_for('/', options)
18
+ end
19
+
20
+ def middleware(options = {})
21
+ Rack::Obscenity.new(@app, options)
22
+ end
23
+
24
+ def get(params = {})
25
+ { 'QUERY_STRING' => Rack::Utils.build_query(params) }
26
+ end
27
+
28
+ def get_response_params
29
+ Rack::Utils.parse_query(@env['QUERY_STRING'], "&")
30
+ end
31
+
32
+ def post(params = {})
33
+ { 'rack.input' => StringIO.new(Rack::Utils.build_query(params)) }
34
+ end
35
+
36
+ def post_response_params
37
+ Rack::Utils.parse_query(@env['rack.input'].read, "&")
38
+ end
39
+
40
+ def assert_success_response(status, headers, body)
41
+ assert_equal @status, status
42
+ assert_equal @headers, headers
43
+ assert_equal [@body], body
44
+ end
45
+
46
+ context "default configuration" do
47
+ should "not evaluate the profanity of parameters" do
48
+ app = middleware
49
+ status, headers, body = app.call(mock_env)
50
+ assert_success_response status, headers, body
51
+ end
52
+ end
53
+
54
+ context "rejecting requests" do
55
+ should "not reject if parameter values don't contain profanity" do
56
+ app = middleware(reject: true)
57
+ status, headers, body = app.call(mock_env(get(foo: 'bar')))
58
+ assert_success_response status, headers, body
59
+ end
60
+
61
+ should "reject if GET parameter values contain profanity" do
62
+ app = middleware(reject: true)
63
+ status, headers, body = app.call(mock_env(get(foo: 'bar', baz: 'shit')))
64
+ assert_equal 422, status
65
+ assert_equal [''], body
66
+ end
67
+
68
+ should "reject if POST parameter values contain profanity" do
69
+ app = middleware(reject: true)
70
+ status, headers, body = app.call(mock_env(post(foo: 'bar', baz: 'ass')))
71
+ assert_equal 422, status
72
+ assert_equal [''], body
73
+ end
74
+
75
+ should "reject if given parameter values contain profanity" do
76
+ app = middleware(reject: { params: [:foo] })
77
+ [ get(foo: 'ass', baz: 'shit'),
78
+ post(foo: 'ass').merge(get(foo: 'nice', baz: 'shit'))
79
+ ].each do |options|
80
+ status, headers, body = app.call(mock_env(options))
81
+ assert_equal 422, status
82
+ assert_equal [''], body
83
+ end
84
+ end
85
+
86
+ should "not reject if other parameter values contain profanity" do
87
+ app = middleware(reject: { params: [:foo] })
88
+ status, headers, body = app.call(mock_env(get(foo: 'nice', baz: 'shit')))
89
+ assert_success_response status, headers, body
90
+ end
91
+
92
+ should "reject if parameter values contain profanity" do
93
+ app = middleware(reject: { params: :all })
94
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
95
+ assert_equal 422, status
96
+ assert_equal [''], body
97
+ end
98
+
99
+ should "reject if parameter values contain profanity and display a custom message" do
100
+ app = middleware(reject: { message: "We don't accept profanity" })
101
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
102
+ assert_equal 422, status
103
+ assert_equal ["We don't accept profanity"], body
104
+ end
105
+
106
+ should "reject if parameter values contain profanity and render a custom file" do
107
+ app = middleware(reject: { path: "test/static/422.html" })
108
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
109
+ assert_equal 422, status
110
+ assert_equal ["We don't accept profanity"], body
111
+ end
112
+
113
+ should "reject parameter values when they're a hash and contain profanity" do
114
+ app = middleware(reject: true)
115
+ status, headers, body = app.call(mock_env(get(foo: 'clean', bar: {one: 'ass'})))
116
+ assert_equal 422, status
117
+ assert_equal [''], body
118
+ end
119
+ end
120
+
121
+ context "sanitizing requests" do
122
+ should "not sanitize if parameter values don't contain profanity" do
123
+ app = middleware(sanitize: true)
124
+ status, headers, body = app.call(mock_env(get(foo: 'bar')))
125
+ assert_success_response status, headers, body
126
+ request_params = get_response_params
127
+ assert_equal 'bar', request_params['foo']
128
+ end
129
+
130
+ should "sanitize if GET parameter values contain profanity" do
131
+ app = middleware(sanitize: true)
132
+ status, headers, body = app.call(mock_env(get(foo: 'bar', baz: 'shit')))
133
+ assert_success_response status, headers, body
134
+ request_params = get_response_params
135
+ assert_equal 'bar', request_params['foo']
136
+ assert_equal '$@!#%', request_params['baz']
137
+ end
138
+
139
+ should "sanitize if POST parameter values contain profanity" do
140
+ app = middleware(sanitize: true)
141
+ status, headers, body = app.call(mock_env(post(foo: 'bar', baz: 'ass')))
142
+ assert_success_response status, headers, body
143
+ request_params = post_response_params
144
+ assert_equal 'bar', request_params['foo']
145
+ assert_equal '$@!#%', request_params['baz']
146
+ end
147
+
148
+ should "not sanitize if other parameter values contain profanity" do
149
+ app = middleware(sanitize: { params: [:foo] })
150
+ status, headers, body = app.call(mock_env(get(foo: 'nice', baz: 'shit')))
151
+ assert_success_response status, headers, body
152
+ request_params = get_response_params
153
+ assert_equal 'nice', request_params['foo']
154
+ assert_equal 'shit', request_params['baz']
155
+ end
156
+
157
+ should "sanitize if parameter values contain profanity" do
158
+ app = middleware(sanitize: { params: :all })
159
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
160
+ assert_success_response status, headers, body
161
+ request_params = get_response_params
162
+ assert_equal '$@!#%', request_params['foo']
163
+ end
164
+
165
+ should "sanitize the title using the :garbled replacement" do
166
+ app = middleware(sanitize: { replacement: :garbled })
167
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
168
+ assert_success_response status, headers, body
169
+ request_params = get_response_params
170
+ assert_equal '$@!#%', request_params['foo']
171
+ end
172
+
173
+ should "sanitize the title using the :stars replacement" do
174
+ app = middleware(sanitize: { replacement: :stars })
175
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
176
+ assert_success_response status, headers, body
177
+ request_params = get_response_params
178
+ assert_equal '***', request_params['foo']
179
+ end
180
+
181
+ should "sanitize the title using the :vowels replacement" do
182
+ app = middleware(sanitize: { replacement: :vowels })
183
+ status, headers, body = app.call(mock_env(get(foo: 'ass')))
184
+ assert_success_response status, headers, body
185
+ request_params = get_response_params
186
+ assert_equal '*ss', request_params['foo']
187
+ end
188
+
189
+ should "sanitize the title using the :nonconsonants replacement" do
190
+ app = middleware(sanitize: { replacement: :nonconsonants })
191
+ status, headers, body = app.call(mock_env(get(foo: '5hit')))
192
+ assert_success_response status, headers, body
193
+ request_params = get_response_params
194
+ assert_equal '*h*t', request_params['foo']
195
+ end
196
+
197
+ should "sanitize the title using a custom replacement" do
198
+ app = middleware(sanitize: { replacement: "[censored]" })
199
+ status, headers, body = app.call(mock_env(get(foo: 'text with ass')))
200
+ assert_success_response status, headers, body
201
+ request_params = get_response_params
202
+ assert_equal 'text with [censored]', request_params['foo']
203
+ end
204
+ end
205
+ end
206
+
207
+ end
data/test/test_test.rb ADDED
@@ -0,0 +1,17 @@
1
+ #first test of the gem and rspec
2
+ require 'rails_helper'
3
+
4
+ RSpec.describe Dummy::BaseModel, type: :model do
5
+ before do
6
+ Obscenity.configure do |config|
7
+ config.blacklist = ["badword"]
8
+ config.replacement = :stars
9
+ end
10
+ end
11
+
12
+ it "validates profanity in the title" do
13
+ model = Dummy::BaseModel.new(title: "This is a badword")
14
+ expect(Obscenity.profane?(model.title)).to be true
15
+ expect(Obscenity.sanitize(model.title)).to eq "This is a *******"
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class TestVersion < Test::Unit::TestCase
4
+
5
+ should "return the correct product version" do
6
+ assert_equal '1.0.2', Obscenity::VERSION
7
+ end
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: obscenity-plus
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ropetow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '12.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '6.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '6.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activemodel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '6.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '6.0'
97
+ description: Obscenity is a profanity filter gem for Ruby, Rails (through ActiveModel),
98
+ and Rack middleware.
99
+ email: ropetow@outlook.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - LICENSE.txt
105
+ - README.md
106
+ - config/blacklist.yml
107
+ - config/international.yml
108
+ - lib/obscenity.rb
109
+ - lib/obscenity/active_model.rb
110
+ - lib/obscenity/base.rb
111
+ - lib/obscenity/config.rb
112
+ - lib/obscenity/error.rb
113
+ - lib/obscenity/rack.rb
114
+ - lib/obscenity/rspec_matcher.rb
115
+ - lib/obscenity/version.rb
116
+ - test/helper.rb
117
+ - test/static/422.html
118
+ - test/test_active_model.rb
119
+ - test/test_base.rb
120
+ - test/test_config.rb
121
+ - test/test_obscenity.rb
122
+ - test/test_rack.rb
123
+ - test/test_test.rb
124
+ - test/test_version.rb
125
+ homepage: http://github.com/ropetow/obscenity-plus
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '2.7'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubygems_version: 3.5.22
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: An updated profanity filter in Jan 2025. Forked from the Obscenity gem.
148
+ test_files: []