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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12b4709383dbae4f0d6a6f345719ecffa47fe27e750d39cf00b14e788cf35536
4
- data.tar.gz: 56fdfa609e76e3870cda762b237e234d9bbafc1904875114970a56f41de0325d
3
+ metadata.gz: 4030ede086e2e58277894650caddfcadaee14aea87f2ac5d81f14e2badc7d7e6
4
+ data.tar.gz: 4045b02167ee99755fdd30e08c15a5dbc6ace94f86b184a6c1d31497afa96749
5
5
  SHA512:
6
- metadata.gz: a05d6ea506b2c4d77f5d9022ebde30514d5e1de50d6ac94a974ea378efc77c52a2a08463e665b5981f6df727d5b6d179e74d42ceda14c0c07a9ba583490efbf5
7
- data.tar.gz: 9ae866687f015fae0041fd60aee83ee96834b7033ab10c75d55366afe6a72172df9687cce35336bf9629744d3e280f91a5121110a4df6bf5c543b43d2a56bf57
6
+ metadata.gz: 8ca28038ddd63bafdd57664b322b04954acddbb2b74836d595e1073cdaeda9136eb9996ebb2ab19cd0d82d469595a0cadc97e1a285797617038190c067c8459d
7
+ data.tar.gz: c774f2613d8e935cda21af84db8983b1d5d95a8bd6af8a20ff0c76a697630085eae8e64b9620724d35fb9c635e2cfe94c8b73eded8bcee52c4ff957e517d743c
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Maintainability](https://api.codeclimate.com/v1/badges/29a55c3bd2dd9e5ed117/maintainability)](https://codeclimate.com/github/andersondias/attributes_sanitizer/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/29a55c3bd2dd9e5ed117/test_coverage)](https://codeclimate.com/github/andersondias/attributes_sanitizer/test_coverage)
1
+ [![Maintainability](https://api.codeclimate.com/v1/badges/29a55c3bd2dd9e5ed117/maintainability)](https://codeclimate.com/github/andersondias/attributes_sanitizer/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/29a55c3bd2dd9e5ed117/test_coverage)](https://codeclimate.com/github/andersondias/attributes_sanitizer/test_coverage) [![Build](https://travis-ci.org/andersondias/attributes_sanitizer.svg?branch=master)](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', git: 'https://github.com/andersondias/attributes_sanitizer.git'
60
+ gem 'attributes_sanitizer'
45
61
  ```
46
62
 
47
63
  And then execute:
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  begin
2
3
  require 'bundler/setup'
3
4
  rescue LoadError
@@ -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
- EMOJI_REGEX = /[^\u0000-\u00FF]/
42
-
43
- cattr_accessor :sanitizers
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
- def self.extended(klass)
3
- klass.cattr_accessor :attributes_sanitize_map
4
- klass.extend ClassMethods
5
- end
3
+ extend ActiveSupport::Concern
6
4
 
7
- module ClassMethods
8
- def sanitize_attributes(*attributes)
9
- self.attributes_sanitize_map ||= {}
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
- defaults = attributes.extract_options!.dup
35
- sanitizers = Array(defaults[:with])
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,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module AttributesSanitizer
2
3
  class Overrider
3
4
  attr_reader :klass
@@ -1,8 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  module AttributesSanitizer
2
3
  module Predefined
3
- extend ActiveSupport::Concern
4
+ EMOJI_REGEX = /[^\u0000-\u00FF]/
4
5
 
5
- included do
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
- @proc = sanitizer
12
- @id = sanitizer.object_id
12
+ setup_lambda_proc(sanitizer)
13
13
  else
14
- @proc = AttributesSanitizer.sanitizers[sanitizer]
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.call(value)
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module AttributesSanitizer
2
- VERSION = '0.1.1'
3
+ VERSION = '0.1.6'
3
4
  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.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: 2018-11-27 00:00:00.000000000 Z
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: '0'
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: '0'
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
- rubyforge_project:
82
- rubygems_version: 2.7.7
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: []