attributes_sanitizer 0.1.1 → 0.1.6
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 +20 -4
- data/Rakefile +1 -0
- data/lib/attributes_sanitizer.rb +6 -43
- data/lib/attributes_sanitizer/bundle.rb +21 -0
- data/lib/attributes_sanitizer/concern.rb +10 -10
- data/lib/attributes_sanitizer/overrider.rb +1 -0
- data/lib/attributes_sanitizer/predefined.rb +12 -3
- data/lib/attributes_sanitizer/railtie.rb +6 -0
- data/lib/attributes_sanitizer/sanitizer_proc.rb +18 -7
- data/lib/attributes_sanitizer/sanitizers.rb +16 -0
- data/lib/attributes_sanitizer/version.rb +2 -1
- metadata +34 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4030ede086e2e58277894650caddfcadaee14aea87f2ac5d81f14e2badc7d7e6
|
4
|
+
data.tar.gz: 4045b02167ee99755fdd30e08c15a5dbc6ace94f86b184a6c1d31497afa96749
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ca28038ddd63bafdd57664b322b04954acddbb2b74836d595e1073cdaeda9136eb9996ebb2ab19cd0d82d469595a0cadc97e1a285797617038190c067c8459d
|
7
|
+
data.tar.gz: c774f2613d8e935cda21af84db8983b1d5d95a8bd6af8a20ff0c76a697630085eae8e64b9620724d35fb9c635e2cfe94c8b73eded8bcee52c4ff957e517d743c
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://codeclimate.com/github/andersondias/attributes_sanitizer/maintainability) [](https://codeclimate.com/github/andersondias/attributes_sanitizer/test_coverage)
|
1
|
+
[](https://codeclimate.com/github/andersondias/attributes_sanitizer/maintainability) [](https://codeclimate.com/github/andersondias/attributes_sanitizer/test_coverage) [](https://travis-ci.org/andersondias/attributes_sanitizer.svg?branch=master)
|
2
2
|
|
3
3
|
# AttributesSanitizer
|
4
4
|
|
@@ -9,8 +9,6 @@ A simple way to append sanitizers to attributes on Rails.
|
|
9
9
|
|
10
10
|
```ruby
|
11
11
|
class Product < ApplicationRecord
|
12
|
-
extend AttributesSanitizer::Concern
|
13
|
-
|
14
12
|
sanitize_attribute :title, with: -> (value) {
|
15
13
|
value.gsub(/[1-9]/, 'X')
|
16
14
|
}
|
@@ -37,11 +35,29 @@ AttributesSanitizer.define_sanitizer :reverse do |value|
|
|
37
35
|
end
|
38
36
|
```
|
39
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
|
+
|
40
56
|
## Installation
|
41
57
|
Add this line to your application's Gemfile:
|
42
58
|
|
43
59
|
```ruby
|
44
|
-
gem 'attributes_sanitizer'
|
60
|
+
gem 'attributes_sanitizer'
|
45
61
|
```
|
46
62
|
|
47
63
|
And then execute:
|
data/Rakefile
CHANGED
data/lib/attributes_sanitizer.rb
CHANGED
@@ -1,51 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require "attributes_sanitizer/railtie"
|
2
3
|
require "attributes_sanitizer/sanitizer_proc"
|
3
4
|
require "attributes_sanitizer/concern"
|
4
5
|
require "attributes_sanitizer/overrider"
|
6
|
+
require "attributes_sanitizer/bundle"
|
7
|
+
require "attributes_sanitizer/sanitizers"
|
5
8
|
require "attributes_sanitizer/predefined"
|
6
9
|
|
7
|
-
#
|
8
|
-
# Attributes sanitizer for Rails
|
9
|
-
#
|
10
|
-
# A simple way to append sanitizers to attributes on Rails.
|
11
|
-
#
|
12
|
-
# ```ruby
|
13
|
-
# class Product < ApplicationRecord
|
14
|
-
# extend AttributesSanitizer::Concern
|
15
|
-
#
|
16
|
-
# sanitize_attribute :title, with: -> (value) {
|
17
|
-
# value.gsub(/[1-9]/, 'X')
|
18
|
-
# }
|
19
|
-
#
|
20
|
-
# sanitize_attributes :title, :description, with: [:downcase, :strip_tags]
|
21
|
-
# end
|
22
|
-
# ```
|
23
|
-
#
|
24
|
-
# It comes with pre-defined sanitizers:
|
25
|
-
# - `:downcase` which downcases a given attribute string
|
26
|
-
# - `:upcase` which upcases a given attribute string
|
27
|
-
# - `:strip_tags` which removes any tags from the given string based on Rails sanitize helper.
|
28
|
-
# - `:strip_emojis` which removes any emoji from the given string
|
29
|
-
# - `:strip_spaces` which removes any white spaces from the beginning and end of given attribute
|
30
|
-
#
|
31
|
-
# You might define your own sanitizers:
|
32
|
-
#
|
33
|
-
# ```ruby
|
34
|
-
# # config/initializers/attribute_sanitizers.rb
|
35
|
-
#
|
36
|
-
# AttributesSanitizer.define_sanitizer :reverse do |value|
|
37
|
-
# value.to_s.reverse
|
38
|
-
# end
|
39
|
-
# ```
|
40
10
|
module AttributesSanitizer
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
self.sanitizers = {}
|
45
|
-
|
46
|
-
def self.define_sanitizer(sanitizer_name, &block)
|
47
|
-
self.sanitizers[sanitizer_name.to_sym] = block
|
48
|
-
end
|
49
|
-
|
50
|
-
include Predefined
|
11
|
+
extend Sanitizers, Bundle
|
12
|
+
# must to be called here in order to ensure extension of upper modules
|
13
|
+
extend Predefined
|
51
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,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module AttributesSanitizer::Concern
|
2
|
-
|
3
|
-
klass.cattr_accessor :attributes_sanitize_map
|
4
|
-
klass.extend ClassMethods
|
5
|
-
end
|
3
|
+
extend ActiveSupport::Concern
|
6
4
|
|
7
|
-
|
8
|
-
def
|
9
|
-
|
5
|
+
class_methods do
|
6
|
+
def attributes_sanitize_map
|
7
|
+
@attributes_sanitize_map ||= {}
|
8
|
+
end
|
10
9
|
|
10
|
+
def sanitize_attributes(*attributes)
|
11
11
|
fetch_sanitizers_from_options(attributes).each do |sanitizer|
|
12
12
|
sanitizer = AttributesSanitizer::SanitizerProc.new(sanitizer)
|
13
13
|
|
@@ -21,7 +21,7 @@ module AttributesSanitizer::Concern
|
|
21
21
|
alias_method :sanitize_attribute, :sanitize_attributes
|
22
22
|
|
23
23
|
def execute_sanitizers_for(attribute, value)
|
24
|
-
return value if self.attributes_sanitize_map.blank? || value.nil?
|
24
|
+
return value if self.attributes_sanitize_map[attribute].blank? || value.nil?
|
25
25
|
|
26
26
|
self.attributes_sanitize_map[attribute].reduce(value) do |value, sanitizer|
|
27
27
|
sanitizer.call(value)
|
@@ -31,8 +31,8 @@ module AttributesSanitizer::Concern
|
|
31
31
|
private
|
32
32
|
|
33
33
|
def fetch_sanitizers_from_options(attributes)
|
34
|
-
|
35
|
-
sanitizers = Array(
|
34
|
+
options = attributes.extract_options!.dup
|
35
|
+
sanitizers = Array(options[:with])
|
36
36
|
|
37
37
|
raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
|
38
38
|
raise ArgumentError, "You need to supply at least one sanitize method" if sanitizers.empty?
|
@@ -1,8 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module AttributesSanitizer
|
2
3
|
module Predefined
|
3
|
-
|
4
|
+
EMOJI_REGEX = /[^\u0000-\u00FF]/
|
4
5
|
|
5
|
-
|
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(_)
|
6
13
|
AttributesSanitizer.define_sanitizer :stringify do |value|
|
7
14
|
value.to_s
|
8
15
|
end
|
@@ -20,12 +27,14 @@ module AttributesSanitizer
|
|
20
27
|
end
|
21
28
|
|
22
29
|
AttributesSanitizer.define_sanitizer :strip_emojis do |value|
|
23
|
-
value.gsub(AttributesSanitizer::EMOJI_REGEX, '')
|
30
|
+
value.gsub(AttributesSanitizer::Predefined::EMOJI_REGEX, '')
|
24
31
|
end
|
25
32
|
|
26
33
|
AttributesSanitizer.define_sanitizer :strip_spaces do |value|
|
27
34
|
value.strip
|
28
35
|
end
|
36
|
+
|
37
|
+
AttributesSanitizer.setup_predefined_bundles
|
29
38
|
end
|
30
39
|
end
|
31
40
|
end
|
@@ -1,4 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module AttributesSanitizer
|
2
3
|
class Railtie < ::Rails::Railtie
|
4
|
+
initializer 'attributes_sanitizer.insert_into_active_record' do
|
5
|
+
ActiveSupport.on_load :active_record do
|
6
|
+
ActiveRecord::Base.send(:include, AttributesSanitizer::Concern)
|
7
|
+
end
|
8
|
+
end
|
3
9
|
end
|
4
10
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module AttributesSanitizer
|
2
3
|
class SanitizerProc
|
3
4
|
include Comparable
|
@@ -8,13 +9,9 @@ module AttributesSanitizer
|
|
8
9
|
raise ArgumentError, "No sanitizer given" if sanitizer.nil?
|
9
10
|
|
10
11
|
if sanitizer.is_a?(Proc)
|
11
|
-
|
12
|
-
@id = sanitizer.object_id
|
12
|
+
setup_lambda_proc(sanitizer)
|
13
13
|
else
|
14
|
-
|
15
|
-
raise ArgumentError, "No attribute sanitizer defined for #{sanitizer}" if @proc.nil?
|
16
|
-
|
17
|
-
@id = sanitizer
|
14
|
+
setup_defined_proc(sanitizer)
|
18
15
|
end
|
19
16
|
end
|
20
17
|
|
@@ -23,7 +20,21 @@ module AttributesSanitizer
|
|
23
20
|
end
|
24
21
|
|
25
22
|
def call(value)
|
26
|
-
@proc.
|
23
|
+
@proc.inject(value) do |value, proc|
|
24
|
+
proc.call(value)
|
25
|
+
end
|
27
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
|
28
39
|
end
|
29
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,43 +1,63 @@
|
|
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anderson Dias
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '5'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">"
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '5'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bootsnap
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.7'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.7'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: sqlite3
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
30
50
|
requirements:
|
31
|
-
- - "
|
51
|
+
- - "~>"
|
32
52
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
53
|
+
version: '1.4'
|
34
54
|
type: :development
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
37
57
|
requirements:
|
38
|
-
- - "
|
58
|
+
- - "~>"
|
39
59
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
60
|
+
version: '1.4'
|
41
61
|
description: A simple way to append sanitizers to attributes on Rails.
|
42
62
|
email:
|
43
63
|
- andersondaraujo@gmail.com
|
@@ -49,11 +69,13 @@ files:
|
|
49
69
|
- README.md
|
50
70
|
- Rakefile
|
51
71
|
- lib/attributes_sanitizer.rb
|
72
|
+
- lib/attributes_sanitizer/bundle.rb
|
52
73
|
- lib/attributes_sanitizer/concern.rb
|
53
74
|
- lib/attributes_sanitizer/overrider.rb
|
54
75
|
- lib/attributes_sanitizer/predefined.rb
|
55
76
|
- lib/attributes_sanitizer/railtie.rb
|
56
77
|
- lib/attributes_sanitizer/sanitizer_proc.rb
|
78
|
+
- lib/attributes_sanitizer/sanitizers.rb
|
57
79
|
- lib/attributes_sanitizer/version.rb
|
58
80
|
- lib/tasks/attributes_sanitizer_tasks.rake
|
59
81
|
homepage: https://github.com/andersondias/attributes_sanitizer
|
@@ -63,7 +85,7 @@ metadata:
|
|
63
85
|
changelog_uri: https://github.com/andersondias/attributes_sanitizer/blob/master/CHANGELOG.md
|
64
86
|
homepage_uri: https://github.com/andersondias/attributes_sanitizer
|
65
87
|
source_code_uri: https://github.com/andersondias/attributes_sanitizer
|
66
|
-
post_install_message:
|
88
|
+
post_install_message:
|
67
89
|
rdoc_options: []
|
68
90
|
require_paths:
|
69
91
|
- lib
|
@@ -78,9 +100,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
100
|
- !ruby/object:Gem::Version
|
79
101
|
version: '0'
|
80
102
|
requirements: []
|
81
|
-
|
82
|
-
|
83
|
-
signing_key:
|
103
|
+
rubygems_version: 3.1.6
|
104
|
+
signing_key:
|
84
105
|
specification_version: 4
|
85
106
|
summary: Attributes sanitizer for Rails 5+.
|
86
107
|
test_files: []
|