simple_validate 1.2.2 → 2.0.0

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
- SHA1:
3
- metadata.gz: '088622398860ce0640092a27f1f6a20cf1c6888f'
4
- data.tar.gz: 97156629872295a0d1b1134a0d27467b74568a12
2
+ SHA256:
3
+ metadata.gz: 1f7051ee7f5fc5cec9a9f1f7e4859b6145172302ba667b71d11710b7ca34ad1e
4
+ data.tar.gz: bfbbc3767ffee4d622411b1fd1673e32710ceeb611d588e7fa34799e23aa092e
5
5
  SHA512:
6
- metadata.gz: bbd5436dee6f843d1c1759fe509271204ed4bd87f7c268a90c6930f345c41d6c8c8cbde5604d3d903fa33958fcecda0169007223e378a3cb1fee4bec43b0db3b
7
- data.tar.gz: 0f863a046f6dbec9e8c311b3feb2a1019b4945f607743e3755dfba02c570bfb0c93d2c9cc619d7c8ad9f607943abc4ec188bb647e15ec8c59b6efb5205c6f327
6
+ metadata.gz: 8721e31ba42d72dc48e2690284676930b50c6a9ad6765105e36d51a6c9d068ea8804e1bbfe83424a3d0b725b9a39b19a7cd65f0afe14fe8129da0e66d97d44e6
7
+ data.tar.gz: 6e0c1805d7e4027ecb6fec0b4d727a99ef02c0fbe33e9c0e54c2f0f92843de516d63dcf095c31c6b3bfc396f4b7f6258285df8522a056cc531e38cce09343b21
data/.rspec_status ADDED
@@ -0,0 +1,4 @@
1
+ example_id | status | run_time |
2
+ ------------------------------------- | ------ | --------------- |
3
+ ./spec/simple_validate_spec.rb[1:1:1] | passed | 0.00136 seconds |
4
+ ./spec/simple_validate_spec.rb[1:2:1] | passed | 0.00034 seconds |
data/.rubocop.yml CHANGED
@@ -1,3 +1,10 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.1
3
+
4
+ Style/StringLiterals:
5
+ Enabled: true
6
+ EnforcedStyle: double_quotes
7
+
1
8
  Metrics/BlockLength:
2
9
  Enabled: false
3
10
 
@@ -9,3 +16,6 @@ Metrics/AbcSize:
9
16
 
10
17
  Style/DoubleNegation:
11
18
  Enabled: false
19
+
20
+ Lint/ConstantDefinitionInBlock:
21
+ Enabled: false
data/Gemfile CHANGED
@@ -1,14 +1,16 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
2
 
3
- gem 'rake'
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
4
6
 
5
7
  group :development do
6
- gem 'pry'
8
+ gem "pry"
7
9
  end
8
10
 
9
11
  group :test do
10
- gem 'rspec'
11
- gem 'rubocop'
12
+ gem "rspec"
13
+ gem "rubocop"
12
14
  end
13
15
 
14
16
  gemspec
data/README.md CHANGED
@@ -1,29 +1,15 @@
1
1
  # Simple Validate
2
2
 
3
- [![Build Status](https://travis-ci.org/nikkypx/simple_validate.svg?branch=master)](https://travis-ci.org/nikkypx/simple_validate)
4
-
5
- > Borrowing ideas from [validatable](https://github.com/jnunemaker/validatable) and Rails validations, this is a library for validations for any ruby object.
3
+ > PORO validation mixin with no deps
6
4
 
7
5
  ## Installation
8
6
 
9
- Add this line to your application's Gemfile:
10
-
11
7
  ```ruby
12
8
  gem 'simple_validate'
13
9
  ```
14
10
 
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install simple_validate
22
-
23
11
  ## Usage
24
12
 
25
- ### Example
26
-
27
13
  ```ruby
28
14
  require 'simple_validate'
29
15
 
@@ -54,10 +40,10 @@ end
54
40
  validates_presence_of :attribute
55
41
  ```
56
42
 
57
- ### Numericality
43
+ ### Type
58
44
 
59
45
  ```ruby
60
- validates_numericality_of :attribute
46
+ validates_type_of :attribute, as: :string
61
47
  ```
62
48
 
63
49
  ### Format
@@ -101,18 +87,6 @@ end
101
87
  validates_presence_of :attribute, if: Proc.new { true }
102
88
  ```
103
89
 
104
-
105
- ## Development
106
-
107
- `$ rake` to run the specs
108
-
109
-
110
- ## Contributing
111
-
112
- Bug reports and pull requests are welcome on GitHub at https://github.com/nikkypx/simple_validate.
113
-
114
-
115
90
  ## License
116
91
 
117
92
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
118
-
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "rubocop/rake_task"
4
6
 
5
7
  RSpec::Core::RakeTask.new(:spec)
6
8
  RuboCop::RakeTask.new
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "simple_validate"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ require "irb"
11
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class Errors
3
5
  attr_reader :messages
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleValidate
4
+ module Utils
5
+ def self.camelize(input) = input.to_s.split("_").map(&:capitalize).join
6
+ def self.extract_options!(args) = args.last.is_a?(Hash) ? args.pop : {}
7
+ def self.classify(input) = Object.const_get(camelize(input))
8
+
9
+ def self.article(input)
10
+ vowels = %w[a e i o u]
11
+ vowels.include?(input[0]) ? "an" : "a"
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class ValidatesBase
3
5
  attr_accessor :message, :attribute, :condition
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class ValidatesExclusionOf < ValidatesSetBase
3
5
  def valid?(instance)
4
6
  raise ArgumentError if set.empty? || !options.fetch(:in).is_a?(Array)
7
+
5
8
  !set.include?(instance.send(attribute).to_s)
6
9
  end
7
10
  end
@@ -1,15 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class ValidatesFormatOf < ValidatesBase
3
5
  attr_accessor :regex
4
6
 
5
7
  def initialize(attribute, options)
6
- self.regex = options[:with]
8
+ @regex = options[:with]
7
9
  super(attribute, options[:message] ||
8
- 'is incorrect format', options[:if] || proc { true })
10
+ "is incorrect format", options[:if] || proc { true })
9
11
  end
10
12
 
11
13
  def valid?(instance)
12
14
  raise ArgumentError if regex.nil? || !regex.is_a?(Regexp)
15
+
13
16
  !!(instance.send(attribute) =~ regex)
14
17
  end
15
18
  end
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class ValidatesInclusionOf < ValidatesSetBase
3
5
  def valid?(instance)
4
6
  raise ArgumentError if set.empty? || !options.fetch(:in).is_a?(Array)
7
+
5
8
  set.include?(instance.send(attribute).to_s)
6
9
  end
7
10
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class ValidatesLengthOf < ValidatesBase
3
5
  class InvalidLengthOption < ArgumentError; end
@@ -13,15 +15,13 @@ module SimpleValidate
13
15
  end
14
16
 
15
17
  def message
16
- @message ||= begin
17
- case validator
18
- when :minimum
19
- 'is too short'
20
- when :maximum
21
- 'is too long'
22
- else
23
- 'is not the correct length'
24
- end
18
+ @message ||= case validator
19
+ when :minimum
20
+ "is too short"
21
+ when :maximum
22
+ "is too long"
23
+ else
24
+ "is not the correct length"
25
25
  end
26
26
  end
27
27
 
@@ -47,9 +47,7 @@ module SimpleValidate
47
47
  end
48
48
 
49
49
  def valid?(instance)
50
- if options.keys.size > 1
51
- raise ArgumentError, 'Only one length argument can be provided'
52
- end
50
+ raise ArgumentError, "Only one length argument can be provided" if options.keys.size > 1
53
51
 
54
52
  unless VALID_LENGTH_OPTIONS.include?(options.keys.first)
55
53
  raise InvalidLengthOption, "Invalid length option given #{options.keys}"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
4
  class ValidatesPresenceOf < ValidatesBase
3
5
  def initialize(attribute, options)
@@ -1,4 +1,4 @@
1
- require 'set'
1
+ # frozen_string_literal: true
2
2
 
3
3
  module SimpleValidate
4
4
  class ValidatesSetBase < ValidatesBase
@@ -8,7 +8,7 @@ module SimpleValidate
8
8
  self.options = options
9
9
  self.set = Set.new(Array(options[:in]).map(&:to_s))
10
10
  super(attribute, options[:message] ||
11
- 'breaks inclusion/exclusion rules', options[:if] || proc { true })
11
+ "breaks inclusion/exclusion rules", options[:if] || proc { true })
12
12
  end
13
13
  end
14
14
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleValidate
4
+ class ValidatesTypeOf < ValidatesBase
5
+ SUPPORTED_TYPES = %i[string integer float].freeze
6
+
7
+ def initialize(attribute, options)
8
+ @type = options[:as]
9
+
10
+ raise ArgumentError unless @type && SUPPORTED_TYPES.include?(@type)
11
+
12
+ @klass = Utils.classify(options[:as])
13
+
14
+ super(attribute, options[:message] ||
15
+ "must be #{Utils.article(@type)} #{@type}", options[:if] || proc { true })
16
+ end
17
+
18
+ def valid?(instance)
19
+ instance.send(attribute).is_a?(@klass)
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SimpleValidate
2
- VERSION = '1.2.2'.freeze
4
+ VERSION = "2.0.0"
3
5
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  %w[base
2
4
  presence_of
3
5
  format_of
4
- numericality_of
6
+ type_of
5
7
  length_of
6
8
  set_base
7
9
  inclusion_of
@@ -9,9 +11,9 @@
9
11
  require "simple_validate/validates_#{validation}"
10
12
  end
11
13
 
12
- require 'simple_validate/errors'
13
- require 'simple_validate/version'
14
- require 'active_support/all'
14
+ require "simple_validate/errors"
15
+ require "simple_validate/version"
16
+ require "simple_validate/utils"
15
17
 
16
18
  module SimpleValidate
17
19
  def self.included(klass)
@@ -36,7 +38,7 @@ module SimpleValidate
36
38
  module ClassMethods
37
39
  def method_missing(method, *args, &block)
38
40
  if respond_to?(method)
39
- add_validations(args, const_get(method.to_s.classify))
41
+ add_validations(args, const_get(Utils.camelize(method)))
40
42
  else
41
43
  super
42
44
  end
@@ -46,7 +48,7 @@ module SimpleValidate
46
48
  method.to_s =~ /(validates_
47
49
  (format|
48
50
  presence|
49
- numericality|
51
+ type|
50
52
  inclusion|
51
53
  exclusion|
52
54
  length)_of)
@@ -54,7 +56,7 @@ module SimpleValidate
54
56
  end
55
57
 
56
58
  def add_validations(args, klass)
57
- options = args.extract_options!
59
+ options = Utils.extract_options! args
58
60
  args.each do |attr|
59
61
  validations << klass.new(attr, options)
60
62
  end
@@ -1,23 +1,24 @@
1
- lib = File.expand_path('lib', __dir__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'simple_validate/version'
5
+ require "simple_validate/version"
4
6
 
5
7
  Gem::Specification.new do |spec|
6
- spec.name = 'simple_validate'
8
+ spec.name = "simple_validate"
7
9
  spec.version = SimpleValidate::VERSION
8
- spec.authors = ['Nick Palaniuk']
9
- spec.email = ['npalaniuk@gmail.com']
10
+ spec.authors = ["Nick Palaniuk"]
11
+ spec.email = ["npalaniuk@gmail.com"]
10
12
 
11
- spec.summary = 'Validations for any plain old ruby object'
12
- spec.description = 'Validations for any ruby object'
13
- spec.homepage = 'https://github.com/nikkypx/simple_validate'
14
- spec.license = 'MIT'
13
+ spec.summary = "PORO validation mixin with no deps"
14
+ spec.description = "PORO validation mixin with no deps"
15
+ spec.homepage = "https://github.com/nikkypx/simple_validate"
16
+ spec.license = "MIT"
17
+ spec.required_ruby_version = ">= 3.1"
15
18
 
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
20
  f.match(%r{^(test|spec|features)/})
18
21
  end
19
22
 
20
- spec.require_paths = ['lib']
21
- spec.add_dependency 'activesupport', '~> 5.0'
22
- spec.add_development_dependency 'bundler'
23
+ spec.require_paths = ["lib"]
23
24
  end
metadata CHANGED
@@ -1,44 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_validate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Palaniuk
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-01 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '5.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '5.0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
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
- description: Validations for any ruby object
11
+ date: 2023-08-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: PORO validation mixin with no deps
42
14
  email:
43
15
  - npalaniuk@gmail.com
44
16
  executables: []
@@ -47,29 +19,32 @@ extra_rdoc_files: []
47
19
  files:
48
20
  - ".gitignore"
49
21
  - ".rspec"
22
+ - ".rspec_status"
50
23
  - ".rubocop.yml"
51
- - ".travis.yml"
52
24
  - Gemfile
53
25
  - LICENSE.txt
54
26
  - README.md
55
27
  - Rakefile
28
+ - bin/console
29
+ - bin/setup
56
30
  - lib/simple_validate.rb
57
31
  - lib/simple_validate/errors.rb
32
+ - lib/simple_validate/utils.rb
58
33
  - lib/simple_validate/validates_base.rb
59
34
  - lib/simple_validate/validates_exclusion_of.rb
60
35
  - lib/simple_validate/validates_format_of.rb
61
36
  - lib/simple_validate/validates_inclusion_of.rb
62
37
  - lib/simple_validate/validates_length_of.rb
63
- - lib/simple_validate/validates_numericality_of.rb
64
38
  - lib/simple_validate/validates_presence_of.rb
65
39
  - lib/simple_validate/validates_set_base.rb
40
+ - lib/simple_validate/validates_type_of.rb
66
41
  - lib/simple_validate/version.rb
67
42
  - simple_validate.gemspec
68
43
  homepage: https://github.com/nikkypx/simple_validate
69
44
  licenses:
70
45
  - MIT
71
46
  metadata: {}
72
- post_install_message:
47
+ post_install_message:
73
48
  rdoc_options: []
74
49
  require_paths:
75
50
  - lib
@@ -77,16 +52,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
52
  requirements:
78
53
  - - ">="
79
54
  - !ruby/object:Gem::Version
80
- version: '0'
55
+ version: '3.1'
81
56
  required_rubygems_version: !ruby/object:Gem::Requirement
82
57
  requirements:
83
58
  - - ">="
84
59
  - !ruby/object:Gem::Version
85
60
  version: '0'
86
61
  requirements: []
87
- rubyforge_project:
88
- rubygems_version: 2.6.13
89
- signing_key:
62
+ rubygems_version: 3.4.19
63
+ signing_key:
90
64
  specification_version: 4
91
- summary: Validations for any plain old ruby object
65
+ summary: PORO validation mixin with no deps
92
66
  test_files: []
data/.travis.yml DELETED
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.2
@@ -1,12 +0,0 @@
1
- module SimpleValidate
2
- class ValidatesNumericalityOf < ValidatesBase
3
- def initialize(attribute, options)
4
- super(attribute, options[:message] ||
5
- 'must be a number', options[:if] || proc { true })
6
- end
7
-
8
- def valid?(instance)
9
- instance.send(attribute).is_a?(Numeric)
10
- end
11
- end
12
- end