attributes_sanitizer 0.1.4 → 0.1.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.
- checksums.yaml +4 -4
- data/README.md +19 -1
- data/lib/attributes_sanitizer.rb +5 -13
- data/lib/attributes_sanitizer/bundle.rb +21 -0
- data/lib/attributes_sanitizer/predefined.rb +9 -3
- data/lib/attributes_sanitizer/sanitizer_proc.rb +17 -5
- data/lib/attributes_sanitizer/sanitizers.rb +16 -0
- data/lib/attributes_sanitizer/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57e17ee2d4e35426d5648e6fe5eead7ebe103efafaf1400be039882245a335c6
|
4
|
+
data.tar.gz: 33979410ba0b283121cc31dadae6bb8fe353c890882ccef6a12320fefa093e17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e52b0d8717f93d78be0fd3fd33c7ea7ecd03200bfc573f7cfe45dfdd65891cec59452b6491af2bc04ba01b172de9de500e20a309a34dad5b483421e9fea064a
|
7
|
+
data.tar.gz: b0eef6ee51606052915c3306215c24eb2249c743b9b521a677df99e4ba55c1789b82cb10dc245cb5cb424c28d305c32562f6300a143cdfd805acf8b67008c59e
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](http://codeclimate.com/github/andersondias/attributes_sanitizer/maintainability) [](http://codeclimate.com/github/andersondias/attributes_sanitizer/test_coverage)
|
1
|
+
[](http://codeclimate.com/github/andersondias/attributes_sanitizer/maintainability) [](http://codeclimate.com/github/andersondias/attributes_sanitizer/test_coverage) [](http://travis-ci.org/andersondias/attributes_sanitizer.svg?branch=master)
|
2
2
|
|
3
3
|
# AttributesSanitizer
|
4
4
|
|
@@ -35,6 +35,24 @@ AttributesSanitizer.define_sanitizer :reverse do |value|
|
|
35
35
|
end
|
36
36
|
```
|
37
37
|
|
38
|
+
It also comes with predefined bundles:
|
39
|
+
```ruby
|
40
|
+
class Product < ApplicationRecord
|
41
|
+
sanitize_attribute :title, with: -> (value) {
|
42
|
+
value.gsub(/[1-9]/, 'X')
|
43
|
+
}
|
44
|
+
|
45
|
+
sanitize_attributes :title, :description, with: :no_tags_emojis_or_extra_spaces
|
46
|
+
# same as: `with: %i(stringify strip_tags strip_emojis strip_spaces)
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
And, finally, you are able to define your own bundles:
|
51
|
+
```ruby
|
52
|
+
# config/initializers/attribute_sanitizers.rb
|
53
|
+
AttributesSanitizer.define_bundle(:my_bundle, %i(downcase strip_spaces))
|
54
|
+
```
|
55
|
+
|
38
56
|
## Installation
|
39
57
|
Add this line to your application's Gemfile:
|
40
58
|
|
data/lib/attributes_sanitizer.rb
CHANGED
@@ -3,20 +3,12 @@ require "attributes_sanitizer/railtie"
|
|
3
3
|
require "attributes_sanitizer/sanitizer_proc"
|
4
4
|
require "attributes_sanitizer/concern"
|
5
5
|
require "attributes_sanitizer/overrider"
|
6
|
+
require "attributes_sanitizer/bundle"
|
7
|
+
require "attributes_sanitizer/sanitizers"
|
6
8
|
require "attributes_sanitizer/predefined"
|
7
9
|
|
8
10
|
module AttributesSanitizer
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@sanitizers[sanitizer_name.to_sym] = block
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.find(sanitizer_name)
|
16
|
-
sanitizer = @sanitizers && @sanitizers[sanitizer_name.to_sym]
|
17
|
-
raise ArgumentError, "No sanitizer defined for #{sanitizer}" if sanitizer.nil?
|
18
|
-
sanitizer
|
19
|
-
end
|
20
|
-
|
21
|
-
include Predefined
|
11
|
+
extend Sanitizers, Bundle
|
12
|
+
# must to be called here in order to ensure extension of upper modules
|
13
|
+
extend Predefined
|
22
14
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module AttributesSanitizer
|
3
|
+
module Bundle
|
4
|
+
def define_bundle(bundle_name, keys)
|
5
|
+
raise ArgumentError, 'empty bundle name' if bundle_name.blank?
|
6
|
+
|
7
|
+
keys = Array(keys)
|
8
|
+
raise ArgumentError, 'empty keys' if keys.blank?
|
9
|
+
|
10
|
+
@bundles ||= {}
|
11
|
+
@bundles[bundle_name.to_sym] = keys
|
12
|
+
end
|
13
|
+
|
14
|
+
def bundle(bundle_name)
|
15
|
+
bundle = @bundles[bundle_name.to_sym]
|
16
|
+
bundle&.map do |sanitizer_name|
|
17
|
+
find(sanitizer_name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module AttributesSanitizer
|
3
3
|
module Predefined
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
4
|
EMOJI_REGEX = /[^\u0000-\u00FF]/
|
7
5
|
|
8
|
-
|
6
|
+
def setup_predefined_bundles
|
7
|
+
define_bundle(:predefined, @sanitizers.keys)
|
8
|
+
define_bundle(:no_tags_emojis_or_extra_spaces, %i(stringify strip_tags strip_emojis strip_spaces))
|
9
|
+
@predefined_bundles = @bundles.keys
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.extended(_)
|
9
13
|
AttributesSanitizer.define_sanitizer :stringify do |value|
|
10
14
|
value.to_s
|
11
15
|
end
|
@@ -29,6 +33,8 @@ module AttributesSanitizer
|
|
29
33
|
AttributesSanitizer.define_sanitizer :strip_spaces do |value|
|
30
34
|
value.strip
|
31
35
|
end
|
36
|
+
|
37
|
+
AttributesSanitizer.setup_predefined_bundles
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
@@ -9,11 +9,9 @@ module AttributesSanitizer
|
|
9
9
|
raise ArgumentError, "No sanitizer given" if sanitizer.nil?
|
10
10
|
|
11
11
|
if sanitizer.is_a?(Proc)
|
12
|
-
|
13
|
-
@id = sanitizer.object_id
|
12
|
+
setup_lambda_proc(sanitizer)
|
14
13
|
else
|
15
|
-
|
16
|
-
@id = sanitizer
|
14
|
+
setup_defined_proc(sanitizer)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
@@ -22,7 +20,21 @@ module AttributesSanitizer
|
|
22
20
|
end
|
23
21
|
|
24
22
|
def call(value)
|
25
|
-
@proc.
|
23
|
+
@proc.inject(value) do |value, proc|
|
24
|
+
proc.call(value)
|
25
|
+
end
|
26
26
|
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def setup_lambda_proc(sanitizer)
|
31
|
+
@proc = Array(sanitizer)
|
32
|
+
@id = sanitizer.object_id
|
33
|
+
end
|
34
|
+
|
35
|
+
def setup_defined_proc(sanitizer)
|
36
|
+
@id = sanitizer
|
37
|
+
@proc = AttributesSanitizer.bundle(sanitizer) || Array(AttributesSanitizer.find(sanitizer))
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module AttributesSanitizer
|
3
|
+
module Sanitizers
|
4
|
+
def define_sanitizer(sanitizer_name, &block)
|
5
|
+
@sanitizers ||= {}
|
6
|
+
raise ArgumentError, 'sanitizer needs a block' unless block_given?
|
7
|
+
@sanitizers[sanitizer_name.to_sym] = block
|
8
|
+
end
|
9
|
+
|
10
|
+
def find(sanitizer_name)
|
11
|
+
sanitizer = @sanitizers && @sanitizers[sanitizer_name.to_sym]
|
12
|
+
raise ArgumentError, "No sanitizer defined for #{sanitizer_name}" if sanitizer.nil?
|
13
|
+
sanitizer
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attributes_sanitizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anderson Dias
|
@@ -49,11 +49,13 @@ files:
|
|
49
49
|
- README.md
|
50
50
|
- Rakefile
|
51
51
|
- lib/attributes_sanitizer.rb
|
52
|
+
- lib/attributes_sanitizer/bundle.rb
|
52
53
|
- lib/attributes_sanitizer/concern.rb
|
53
54
|
- lib/attributes_sanitizer/overrider.rb
|
54
55
|
- lib/attributes_sanitizer/predefined.rb
|
55
56
|
- lib/attributes_sanitizer/railtie.rb
|
56
57
|
- lib/attributes_sanitizer/sanitizer_proc.rb
|
58
|
+
- lib/attributes_sanitizer/sanitizers.rb
|
57
59
|
- lib/attributes_sanitizer/version.rb
|
58
60
|
- lib/tasks/attributes_sanitizer_tasks.rake
|
59
61
|
homepage: http://github.com/andersondias/attributes_sanitizer
|