default_limit_attributes 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bbbab848a0e2dcb63b12de0b200b9855b9b45c5efee75b1ec5e295b85a6d4b0b
4
+ data.tar.gz: 9b5dd42748c853b58acd78cbaebe0b50d722fe5d3846e61dab7f22182a8db2cf
5
+ SHA512:
6
+ metadata.gz: 33aef3a8fc8511503296b608d22f890af133e74f902c034a511c93d778178c933b97cc2296fca74f7893eca14074ef17872e3342d17e64376a146ce0e8562cff
7
+ data.tar.gz: c791f6cc8894145c1ddf0b073727e17eee3432260765c9b95f32000fdf178ba9296b36b5be7e957cc5ed22f35f562a9db821580ba80300698e142e8228dc0d3d
@@ -0,0 +1,3 @@
1
+ ## 0.0.1
2
+
3
+ - Initial version
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 NamNV609
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,59 @@
1
+ # Default Limit Attributes
2
+
3
+ ## Giới thiệu
4
+
5
+ Thông thường, chúng ta thường chỉ quan tâm đến một số validates nhất định cho các attributes như `presence`, `uniqueness`, ... Hay đơn giản chỉ là xác định max length cho một số attributes như Số điện thoại kiểu:
6
+
7
+ ```ruby
8
+ validates :phone_number, length: {in: 10..11}
9
+ ```
10
+
11
+ Không ít trong chúng ta không để ý tới việc viết validate max length cho các attributes khác như name, email, ... dẫn đến việc khi tester test nhập quá số lượng ký tự mà MySQL (hoặc RDMS nào đó) cho phép trên field type nó sẽ dẫn đến lỗi 500 (Internal server error - ảnh hưởng đến trải nghiệm của người dùng và làm rối log khi chúng ta muốn điều tra). Mà việc viết toàn bộ cho các attributes của project cũng không phải vui vẻ gì cả :D! Nên mình mới viết một gem đơn giản này.
12
+
13
+ Mục đích của gem này rất đơn giản. Là trước khi model thực hiện validate, nó sẽ lấy toàn bộ attributes mà model này có. Rồi kiểm tra xem attribute nào có kiểu dữ liệu là string (trong MySQL) và không có một trong các validates sau: `maximum`, `in`, `is`, `within` (tức là các attributes bị bỏ quên, dễ dẫn đến quả lỗi nhập quá ký tự) thì thực hiện thêm validate `maximum` bằng đúng giới hạn của field type đó trong MySQL.
14
+
15
+ ## Cài đặt và sử dụng
16
+
17
+ Bạn thêm đoạn sau vào `Gemfile`
18
+
19
+ ```ruby
20
+ gem 'default_limit_attributes'
21
+ ```
22
+
23
+ Rồi thực hiện lệnh
24
+
25
+ ```
26
+ bundle install
27
+ ```
28
+
29
+ Để thực hiện cài đặt gem. Sau khi cài đặt hoàn thành, bạn có thể sử dụng theo hai cách dưới đây:
30
+
31
+ ### Cho toàn bộ models trong project
32
+
33
+ Bạn thêm dòng sau vào file `app/models/application_record.rb`
34
+
35
+ ```ruby
36
+ class ApplicationRecord < ActiveRecord::Base
37
+ # ...
38
+ default_limit_attributes
39
+ # ...
40
+ end
41
+
42
+ ```
43
+
44
+ ### Cho từng model mà bạn muốn
45
+
46
+ Bạn thêm dòng sau vào các models mà bạn muốn:
47
+
48
+ ```ruby
49
+ # app/models/model_name.rb
50
+ class ModelName < ApplicationRecord
51
+ # ...
52
+ default_limit_attributes
53
+ # ...
54
+ end
55
+ ```
56
+
57
+ ## Báo lỗi và Đóng góp
58
+
59
+ Trong quá trình sử dụng gem có phát sinh bug hay có ý tưởng đóng góp thêm hoặc để cải thiện gem thì mọi người vui lòng tạo [Issue](https://github.com/namnv609/default_limit_attributes/issues) giúp mình nhé :smiley:!
@@ -0,0 +1,31 @@
1
+ require "active_model"
2
+
3
+ module ActiveModel::Validations::HelperMethods
4
+ def default_limit_attributes
5
+ before_validation do
6
+ validate_field_types = %i(string)
7
+ except_length_opts = %i(maximum in is within)
8
+ except_validator_kinds = %i(integrity)
9
+ self_class = self.class
10
+
11
+ self_class.columns_hash.each do |field, field_opts|
12
+ next unless validate_field_types.include?(field_opts.type)
13
+
14
+ is_need_limit = true
15
+ self_class.validators_on(field).each do |validator|
16
+ validator_type = validator.kind
17
+
18
+ next is_need_limit = false if except_validator_kinds.include?(validator_type)
19
+ is_has_except = except_length_opts.any?{|len_opt| validator.options.key?(len_opt)}
20
+
21
+ if validator_type == :length && is_has_except
22
+ is_need_limit = false
23
+ break
24
+ end
25
+ end
26
+
27
+ self_class.validates_length_of field, maximum: field_opts.limit if is_need_limit
28
+ end
29
+ end
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: default_limit_attributes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - NamNV609
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-12-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemodel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7.0'
33
+ description: DefaultLimitAttributes class will add validation of max length for all
34
+ ActiveRecord model attributes automatically which base on size of fields in database
35
+ email:
36
+ - namnv609@gmail.com
37
+ executables: []
38
+ extensions: []
39
+ extra_rdoc_files: []
40
+ files:
41
+ - CHANGELOG.md
42
+ - LICENSE
43
+ - README.md
44
+ - lib/default_limit_attributes.rb
45
+ homepage: https://github.com/namnv609/default_limit_attributes
46
+ licenses:
47
+ - MIT
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 1.9.3
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 2.7.6
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Add validation of max length for all ActiveRecord attributes
69
+ test_files: []