password_schema_validator 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b6a050876c9e52b3c0d1e004c7ff566d20255454
4
+ data.tar.gz: 9bc70bad18ed320458c073ca8dfa62ae5360855a
5
+ SHA512:
6
+ metadata.gz: daf377779da1568b33d9cfd1ea26ba429e12a7fdd5f05e3049cc0cff7ce89c650c575c3bff7f80e0eb95788b8a5dd72e85a42eaa18199ab40fe45bc1ed3869e3
7
+ data.tar.gz: 9e2cb762ba6374522d8cd29849dbcb426f6d0e520c768523abe81acd5ad7916c673c72dc455dd332e4e44e73c810aa611c889ff9fb75e4356b2933c49b8a98c8
@@ -0,0 +1,5 @@
1
+
2
+ require 'active_record'
3
+ require 'password_schema_validator/with_schema_validator'
4
+ require 'password_schema_validator/schema_helper_methods'
5
+ require 'password_schema_validator/class_specifier'
@@ -0,0 +1,15 @@
1
+ module ClassSpecifier
2
+
3
+ def integer
4
+ [Fixnum]
5
+ end
6
+
7
+ def boolean
8
+ [true.class, false.class]
9
+ end
10
+
11
+ def array
12
+ [Array]
13
+ end
14
+
15
+ end
@@ -0,0 +1,83 @@
1
+ require_relative 'class_specifier'
2
+
3
+ module SchemaHelperMethods
4
+ include ClassSpecifier
5
+
6
+ RESERVED_OPTIONS = {
7
+ min_len: :integer,
8
+ max_len: :integer,
9
+ lower_case: :boolean,
10
+ upper_case: :boolean,
11
+ digits: :boolean,
12
+ special_charecters: :boolean,
13
+ allowed_special_chareters: :array,
14
+ discarded_words: :array,
15
+ dictionary: :boolean
16
+ }
17
+
18
+ def match_against_schema(record, attr_name, string)
19
+ options.each do |attribute|
20
+ key, value = attribute
21
+ error_msg = send(key, value, string)
22
+ record.errors.add(attr_name, error_msg, options) if error_msg
23
+ end
24
+ end
25
+
26
+ def min_len(minValue, string)
27
+ return "must be minimum " + minValue.to_s + " charecter long" if string.length < minValue.to_i
28
+ end
29
+
30
+ def max_len(maxValue, string)
31
+ return "must be maximum " + maxValue.to_s + " charecter long" if string.length > maxValue.to_i
32
+ end
33
+
34
+ def lower_case(validate, string)
35
+ return "must contain lower-case letters" if validate && !(/[a-z]+/ =~ string)
36
+ end
37
+
38
+ def upper_case(validate, string)
39
+ return "must contain upper-case letters" if validate && !(/[A-Z]+/ =~ string)
40
+ end
41
+
42
+ def digits(validate, string)
43
+ return "must contain digits" if validate && !(/\d+/ =~ string)
44
+ end
45
+
46
+ def special_charecters(validate, string)
47
+ return "must contain special charecters" if validate && !(/[`~\!@#\$%\^\&\*\(\)\-_\=\+\[\{\}\]\\\|;:'",<.>\/\?]+/ =~ string)
48
+ end
49
+
50
+ def allowed_special_chareters
51
+ end
52
+
53
+ def discarded_words(black_listed_words, string)
54
+ return "must not be in the discarded words" if black_listed_words.map(&:downcase).include?(string.downcase)
55
+ end
56
+
57
+ def dictionary
58
+ end
59
+
60
+ def validate_schema(options)
61
+ options.each do |attribute|
62
+ validate_attribute(attribute)
63
+ end
64
+ end
65
+
66
+ def validate_attribute(attribute)
67
+ key, value = attribute
68
+ if RESERVED_OPTIONS[key.to_sym].nil?
69
+ raise ArgumentError, invalid_key_error(key)
70
+ elsif !send(RESERVED_OPTIONS[key.to_sym]).include?(value.class)
71
+ raise ArgumentError, invalid_value_type(key, RESERVED_OPTIONS[key.to_sym])
72
+ end
73
+ end
74
+
75
+ def invalid_key_error(key)
76
+ "Invalid key - '" + key.to_s + "' passed to the schema. Provide a valid permitted key."
77
+ end
78
+
79
+ def invalid_value_type(key, expected_type)
80
+ "'" + key.to_s + "' must be of type " + expected_type.to_s
81
+ end
82
+
83
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'schema_helper_methods'
2
+
3
+ module ActiveModel
4
+ module Validations
5
+ class WithSchemaValidator < EachValidator
6
+ include SchemaHelperMethods
7
+
8
+ def initialize(options)
9
+ filtered_options = filter_options(options)
10
+ validate_schema(filtered_options)
11
+
12
+ super
13
+ end
14
+
15
+ def validate_each(record, attr_name, value)
16
+ match_against_schema(record, attr_name, value)
17
+ end
18
+
19
+ def filter_options(options)
20
+ options.except(:attributes, :class)
21
+ end
22
+
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: password_schema_validator
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Utkarsh Rai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-23 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: 1.0.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 4.0.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 4.0.0
69
+ description:
70
+ email:
71
+ - utkarshrai003@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/password_schema_validator.rb
77
+ - lib/password_schema_validator/class_specifier.rb
78
+ - lib/password_schema_validator/schema_helper_methods.rb
79
+ - lib/password_schema_validator/with_schema_validator.rb
80
+ homepage: https://github.com/utkarshrai003/password_schema_validator
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.6.11
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: An activeModel Validator that provides a quick and easy way to validate a
104
+ password against a user defined schema
105
+ test_files: []