active_model_validates_intersection_of 0.1.0 → 3.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: 0ef8977cca2302df90c919bd3212ee38c004a503
4
- data.tar.gz: 21dab974646c8a4cfed5742a7ad6627316ea350d
2
+ SHA256:
3
+ metadata.gz: 9ed1bdf75c9a416f57b7bfbde026eaf31a2b9663386df953ff7ed828ce41b5b6
4
+ data.tar.gz: 835d965a9ffc3e2727271a7a2e35b1e936be77d7ae93b12896d0a1693bb52116
5
5
  SHA512:
6
- metadata.gz: 6452a2c54d3754d6a1947b5e30784bea2a899e0e4e47662dd51dcea9487c34ea801d80b264d1127aed41378ec114b912135c95065143bbaf2c1352b520d4d431
7
- data.tar.gz: ebdfcd71070d2e4132dfaed773684a9b8374917461ff6e6bd862242b62c5e46c034c18ab6c742c20adfd4e8788b5fe03f62646501d1442db3a57e0b6795f21e7
6
+ metadata.gz: 31a485ee38ce7e938530eb28bbef35b9be11a003b41c3cd12294c4b71bdabc4fc7ddbed461118445ac1ff9d798a79e54d9bce5c3628ef9feb1e5e4033a5ba29a
7
+ data.tar.gz: 2f0384c4a8f23d7554df00a1d5300d6c125109f1b334f317ba4105c1af558d1526f0bddd6cd75bd9e0f9590fc745979db497a98612fef70f0f80c155deb1b3c2
data/.travis.yml CHANGED
@@ -1,5 +1,16 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.15.0
4
+ - 2.3.6
5
+ - 2.4.3
6
+ - 2.5.0
7
+ - 3.0.1
8
+ before_install: gem install bundler -v 2.2.16
9
+ before_script:
10
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
11
+ - chmod +x ./cc-test-reporter
12
+ - ./cc-test-reporter before-build
13
+ script:
14
+ - bundle exec rspec
15
+ after_script:
16
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ ## v3.0.0 (2021-04-13)
2
+
3
+ - Ruby 3 support.
4
+
5
+ ## v1.2.0 (2017-12-20)
6
+
7
+ - Support for proc and lambda
8
+
9
+ ## v1.1.0 (2017-06-06)
10
+
11
+ - Implement `validates :list, intersection: { in: ANOTHER_LIST }` see the README for more information
12
+
13
+ ## v1.0.0 (2017-06-06)
14
+
15
+ - Release 1.0 version
16
+ - Add `:within` parameter support as an alias for `:in`
17
+
18
+ ## v0.1.0 (2017-06-01)
19
+
20
+ - Initial release
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Active Model Validates Intersection Of
2
2
 
3
- ![Gem Version](https://img.shields.io/gem/v/active_model_validates_intersection_of.svg?style=flat-square) [![Code Climate](https://img.shields.io/codeclimate/github/rafaelbiriba/active_model_validates_intersection_of.svg?style=flat-square)](https://codeclimate.com/github/rafaelbiriba/active_model_validates_intersection_of) [![Coverage Status](https://img.shields.io/coveralls/rafaelbiriba/active_model_validates_intersection_of/master.svg?style=flat-square)](https://coveralls.io/r/rafaelbiriba/active_model_validates_intersection_of?branch=master) [![Travis](https://img.shields.io/travis/rafaelbiriba/active_model_validates_intersection_of/master.svg?style=flat-square)](https://travis-ci.org/rafaelbiriba/active_model_validates_intersection_of)
3
+ ![Gem Version](https://img.shields.io/gem/v/active_model_validates_intersection_of.svg?style=flat-square) [![Maintainability](https://api.codeclimate.com/v1/badges/e95e09a4905d648a3600/maintainability)](https://codeclimate.com/github/rafaelbiriba/active_model_validates_intersection_of/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/e95e09a4905d648a3600/test_coverage)](https://codeclimate.com/github/rafaelbiriba/active_model_validates_intersection_of/test_coverage) [![Coverage Status](https://img.shields.io/coveralls/rafaelbiriba/active_model_validates_intersection_of/master.svg?style=flat-square)](https://coveralls.io/r/rafaelbiriba/active_model_validates_intersection_of?branch=master) [![Travis](https://img.shields.io/travis/rafaelbiriba/active_model_validates_intersection_of/master.svg?style=flat-square)](https://travis-ci.org/rafaelbiriba/active_model_validates_intersection_of)
4
4
 
5
5
  A custom validation for Active Model that check if an array is included in another one.
6
6
 
@@ -11,7 +11,7 @@ Consider an User model that have some set of "default" permissions.
11
11
  ```ruby
12
12
  class User < ActiveRecord::Base
13
13
  DEFAULT_PERMISSION = ["read", "write", "share"]
14
- validates_intersection_of :permission, in: DEFAULT_ROLES
14
+ validates_intersection_of :permission, in: DEFAULT_PERMISSION
15
15
  end
16
16
  ```
17
17
 
@@ -21,8 +21,8 @@ If you want to validate your user based on an array:
21
21
  user = User.new(permission: ["read", "share"])
22
22
  user.valid? #true
23
23
 
24
- user = User.new(permission: ["read", "admin"])
25
- user.valid? #false
24
+ user = User.new(permission: ["read", "admin"])
25
+ user.valid? #false
26
26
  ```
27
27
 
28
28
  This active model custom validation **is for you**!
@@ -32,7 +32,7 @@ user.valid? #true
32
32
  Add this line to your application's Gemfile:
33
33
 
34
34
  ```ruby
35
- gem 'active_model_validates_intersection_of'
35
+ gem "active_model_validates_intersection_of"
36
36
  ```
37
37
 
38
38
  And then execute:
@@ -43,31 +43,45 @@ Or install it yourself as:
43
43
 
44
44
  $ gem install active_model_validates_intersection_of
45
45
 
46
- ## Usage
47
-
48
- * `in:` parameter is required
49
- * `message:` is optional
46
+ If your framework doesn't auto require gems, don't forget to do it after require of `active_model` gem.
50
47
 
51
48
  ```ruby
52
- class User < ActiveRecord::Base
53
- DEFAULT_PERMISSION = ["read", "write", "share"]
54
- validates_intersection_of :permission, in: DEFAULT_ROLES
55
- end
49
+ require "active_model"
50
+ require "active_model_validates_intersection_of"
56
51
  ```
57
52
 
58
- ```ruby
59
- class User < ActiveRecord::Base
60
- DEFAULT_PERMISSION = ["read", "write", "share"]
61
- validates_intersection_of :permission, in: DEFAULT_ROLES, message: "invalid permission"
62
- end
63
- ```
53
+ ## Usage
54
+
55
+ ### Parameters
56
+
57
+ * `:in` - Parameter is required. (Supports: Array, proc and lambda)
58
+ * `:within` - *Optional:* A synonym(alias) for `:in`
59
+ * `:message` - *Optional:* Specifies a custom error message
64
60
 
65
- You can also use the custom validation directly:
61
+ ### Validation
62
+
63
+ You can use the intersection validation in three differents ways: (Feel free to use what you liked more :))
66
64
 
67
65
  ```ruby
68
66
  class User < ActiveRecord::Base
69
67
  DEFAULT_PERMISSION = ["read", "write", "share"]
70
- validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:permission], in: VALID_ARRAY
68
+
69
+ # Using the alias validates_intersection_of
70
+ validates_intersection_of :permission, in: DEFAULT_PERMISSION, message: "invalid permission"
71
+ validates_intersection_of :permission, within: DEFAULT_PERMISSION, message: "invalid permission"
72
+
73
+ # proc and lambda support
74
+ validates_intersection_of :permission, in: proc { DEFAULT_PERMISSION }, message: "invalid permission"
75
+ validates_intersection_of :permission, in: lambda { |l| DEFAULT_PERMISSION }, message: "invalid permission"
76
+
77
+ # Using the validator explicit:
78
+ validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:permission], in: DEFAULT_PERMISSION
79
+ validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:permission], within: DEFAULT_PERMISSION
80
+
81
+ #Using the validator implicit:
82
+ validates :permission, intersection: { in: DEFAULT_PERMISSION, message: "invalid permission" }
83
+ validates :permission, intersection: { within: DEFAULT_PERMISSION, message: "invalid permission" }
84
+
71
85
  end
72
86
  ```
73
87
 
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(spec)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activemodel", ">= 4.0.0"
22
- spec.add_development_dependency "bundler", "~> 1.15"
23
- spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_dependency "activemodel", ">= 5.0.0"
22
+ spec.add_development_dependency "bundler", "~> 2.1"
23
+ spec.add_development_dependency "rake", "~> 13.0"
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
25
  spec.add_development_dependency "coveralls"
26
+ spec.add_development_dependency "simplecov"
26
27
  end
@@ -1,3 +1,4 @@
1
1
  require "active_model_validates_intersection_of/version.rb"
2
- require "active_model_validates_intersection_of/inclusion_intersection_validator.rb"
3
- require "active_model_validates_intersection_of/validates_intersection_of_alias.rb"
2
+ require "active_model_validates_intersection_of/validator.rb"
3
+ require "intersection_validator.rb"
4
+ require "validates_intersection_of_alias.rb"
@@ -0,0 +1,36 @@
1
+ module ActiveModelValidatesIntersectionOf
2
+ class Validator < ActiveModel::EachValidator
3
+ ERROR_MESSAGE = "An object with the method #include? or a proc, lambda or symbol is required, " \
4
+ "and must be supplied as the :in (or :within) option"
5
+
6
+ def check_validity!
7
+ unless delimiter.respond_to?(:include?) || delimiter.respond_to?(:call) || delimiter.respond_to?(:to_sym)
8
+ raise ArgumentError, ERROR_MESSAGE
9
+ end
10
+ end
11
+
12
+ def validate_each(record, attribute, value)
13
+ raise ArgumentError, "value must be an array" unless value.is_a?(Array)
14
+
15
+ if (value - members(record)).any?
16
+ record.errors.add(attribute, :inclusion, **options.except(:in, :within).merge!(value: value))
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def members(record)
23
+ members = if delimiter.respond_to?(:call)
24
+ delimiter.call(record)
25
+ elsif delimiter.respond_to?(:to_sym)
26
+ record.send(delimiter)
27
+ else
28
+ delimiter
29
+ end
30
+ end
31
+
32
+ def delimiter
33
+ @delimiter ||= options[:in] || options[:within]
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveModelValidatesIntersectionOf
2
- VERSION = "0.1.0"
2
+ VERSION = "3.0.0".freeze
3
3
  end
@@ -0,0 +1 @@
1
+ IntersectionValidator = Class.new(ActiveModelValidatesIntersectionOf::Validator)
@@ -0,0 +1,149 @@
1
+ require "spec_helper"
2
+ require_relative "../shared.rb"
3
+
4
+ RSpec.describe IntersectionValidator do
5
+ class BadSetupValidator
6
+ include ActiveModel::Validations
7
+ attr_accessor :list
8
+ end
9
+
10
+ context "setup" do
11
+ describe "with neither :in nor :within configuration" do
12
+ it "raises argument error" do
13
+ expect {
14
+ BadSetupValidator.class_eval("validates :list, intersection: true")
15
+ }.to raise_error(ArgumentError)
16
+ end
17
+ end
18
+ end
19
+
20
+ context "validation" do
21
+ context "with :in option" do
22
+ class ListAliasValidator
23
+ VALID_ARRAY = ["a", "b", 1 , 2]
24
+ include ActiveModel::Validations
25
+ attr_accessor :list
26
+ validates :list, intersection: { in: VALID_ARRAY, message: "not valid" }
27
+ end
28
+
29
+ let(:valid_partial_array) { ListAliasValidator::VALID_ARRAY.sample(2) }
30
+ let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
31
+ subject { ListAliasValidator.new }
32
+
33
+ describe "with a valid list" do
34
+ it_behaves_like "valid object"
35
+ end
36
+
37
+ describe "with an invalid list" do
38
+ it_behaves_like "invalid object"
39
+ end
40
+ end
41
+
42
+ context "with :within option" do
43
+ class WithinOptionListAliasValidator
44
+ VALID_ARRAY = ["a", "b", 1 , 2]
45
+ include ActiveModel::Validations
46
+ attr_accessor :list
47
+ validates :list, intersection: { within: VALID_ARRAY, message: "not valid" }
48
+ end
49
+
50
+ let(:valid_partial_array) { WithinOptionListAliasValidator::VALID_ARRAY.sample(2) }
51
+ let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
52
+
53
+ subject { WithinOptionListAliasValidator.new }
54
+
55
+ context "validation with :in option" do
56
+ describe "with a valid list" do
57
+ it_behaves_like "valid object"
58
+ end
59
+
60
+ describe "with an invalid list" do
61
+ it_behaves_like "invalid object"
62
+ end
63
+ end
64
+ end
65
+
66
+ context "validate with lambda" do
67
+ class SomeList
68
+ VALID_ARRAY = ["z", "x", 5 , 6]
69
+ include ActiveModel::Validations
70
+ attr_accessor :list
71
+ validates_intersection_of :list, in: lambda {|a| VALID_ARRAY }, message: "not valid"
72
+ end
73
+
74
+ it "is valid" do
75
+ list = SomeList.new
76
+ list.list = ["z"]
77
+ expect(list.valid?).to eq true
78
+ end
79
+
80
+ it "is invalid" do
81
+ list = SomeList.new
82
+ list.list = ["G"]
83
+ expect(list.valid?).to eq false
84
+ end
85
+ end
86
+
87
+ context "validate with proc" do
88
+ class ProcList
89
+ VALID_ARRAY = ["z", "q", 5 , 3]
90
+ include ActiveModel::Validations
91
+ attr_accessor :list
92
+ validates_intersection_of :list, in: proc { VALID_ARRAY }, message: "not valid"
93
+ end
94
+
95
+ it "is valid" do
96
+ list = ProcList.new
97
+ list.list = ["q"]
98
+ expect(list.valid?).to eq true
99
+ end
100
+
101
+ it "is invalid" do
102
+ list = ProcList.new
103
+ list.list = [10]
104
+ expect(list.valid?).to eq false
105
+ end
106
+ end
107
+
108
+ context "validate with symbol" do
109
+ class SymList
110
+ VALID_ARRAY = ["z", "d", 5 , 6]
111
+ include ActiveModel::Validations
112
+ attr_accessor :list
113
+ validates_intersection_of :list, in: :valid_options, message: "not valid"
114
+
115
+ def valid_options
116
+ VALID_ARRAY
117
+ end
118
+ end
119
+
120
+ it "is valid" do
121
+ list = SymList.new
122
+ list.list = ["d"]
123
+ expect(list.valid?).to eq true
124
+ end
125
+
126
+ it "is invalid" do
127
+ list = SymList.new
128
+ list.list = [8]
129
+ expect(list.valid?).to eq false
130
+ end
131
+ end
132
+
133
+ context "validate with value as string" do
134
+ class SomeInvalidList
135
+ include ActiveModel::Validations
136
+ attr_accessor :list
137
+ validates_intersection_of :list, in: proc { ['test'] }, message: "not valid"
138
+ end
139
+
140
+ it "causes an exception" do
141
+ list = SomeInvalidList.new
142
+ list.list = "d"
143
+ expect {
144
+ list.valid?
145
+ }.to raise_error(ArgumentError, "value must be an array")
146
+ end
147
+ end
148
+ end
149
+ end
@@ -5,37 +5,65 @@ RSpec.describe ActiveModel::Validations::HelperMethods do
5
5
  class BadSetup
6
6
  include ActiveModel::Validations
7
7
  attr_accessor :list
8
- validates_intersection_of :list
9
8
  end
10
9
 
11
- let(:badsetup) { BadSetup.new }
12
-
13
10
  context "setup" do
14
- describe "without an :in configuration" do
15
- it_behaves_like "invalid configuration"
11
+ describe "with neither :in nor :within configuration" do
12
+ it "raises argument error" do
13
+ expect {
14
+ BadSetup.class_eval("validates_intersection_of :list")
15
+ }.to raise_error(ArgumentError)
16
+ end
16
17
  end
17
18
  end
18
19
 
19
- VALID_ARRAY = ["z", "x", 5 , 6]
20
+ context "validation" do
21
+ context "with :in option" do
22
+ class List
23
+ VALID_ARRAY = ["z", "x", 5 , 6]
24
+ include ActiveModel::Validations
25
+ attr_accessor :list
26
+ validates_intersection_of :list, in: VALID_ARRAY, message: "not valid"
27
+ end
20
28
 
21
- let(:valid_partial_array) { VALID_ARRAY.sample(2) }
22
- let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
29
+ let(:valid_partial_array) { List::VALID_ARRAY.sample(2) }
30
+ let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
23
31
 
24
- class List
25
- include ActiveModel::Validations
26
- attr_accessor :list
27
- validates_intersection_of :list, in: VALID_ARRAY, message: "not valid"
28
- end
32
+ subject { List.new }
29
33
 
30
- subject { List.new }
34
+ context "validation" do
35
+ describe "with a valid list" do
36
+ it_behaves_like "valid object"
37
+ end
31
38
 
32
- context "validation" do
33
- describe "with a valid list" do
34
- it_behaves_like "valid object"
39
+ describe "with an invalid list" do
40
+ it_behaves_like "invalid object"
41
+ end
42
+ end
35
43
  end
36
44
 
37
- describe "with an invalid list" do
38
- it_behaves_like "invalid object"
45
+ context "with :within option" do
46
+ class ListWithinOption
47
+ VALID_ARRAY = ["z", "x", 5 , 6]
48
+ include ActiveModel::Validations
49
+ attr_accessor :list
50
+ validates_intersection_of :list, within: VALID_ARRAY, message: "not valid"
51
+ end
52
+
53
+ let(:valid_partial_array) { ListWithinOption::VALID_ARRAY.sample(2) }
54
+ let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
55
+
56
+ subject { ListWithinOption.new }
57
+
58
+ context "validation" do
59
+ describe "with a valid list" do
60
+ it_behaves_like "valid object"
61
+ end
62
+
63
+ describe "with an invalid list" do
64
+ it_behaves_like "invalid object"
65
+ end
66
+ end
39
67
  end
40
68
  end
41
69
  end
@@ -0,0 +1,66 @@
1
+ require "spec_helper"
2
+ require_relative "../shared.rb"
3
+
4
+ RSpec.describe ActiveModelValidatesIntersectionOf::Validator do
5
+ class BadSetupValidator
6
+ include ActiveModel::Validations
7
+ attr_accessor :list
8
+ end
9
+
10
+ context "setup" do
11
+ describe "with neither :in nor :within configuration" do
12
+ it "raises argument error" do
13
+ expect {
14
+ BadSetupValidator.class_eval("validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:list]")
15
+ }.to raise_error(ArgumentError)
16
+ end
17
+ end
18
+ end
19
+
20
+ context "validation" do
21
+ context "with :in option" do
22
+ class ListValidator
23
+ VALID_ARRAY = ["a", "b", 1 , 2]
24
+ include ActiveModel::Validations
25
+ attr_accessor :list
26
+ validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:list], in: VALID_ARRAY, message: "not valid"
27
+ end
28
+
29
+ let(:valid_partial_array) { ListValidator::VALID_ARRAY.sample(2) }
30
+ let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
31
+ subject { ListValidator.new }
32
+
33
+ describe "with a valid list" do
34
+ it_behaves_like "valid object"
35
+ end
36
+
37
+ describe "with an invalid list" do
38
+ it_behaves_like "invalid object"
39
+ end
40
+ end
41
+
42
+ context "with :within option" do
43
+ class WithinOptionListValidator
44
+ VALID_ARRAY = ["a", "b", 1 , 2]
45
+ include ActiveModel::Validations
46
+ attr_accessor :list
47
+ validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:list], within: VALID_ARRAY, message: "not valid"
48
+ end
49
+
50
+ let(:valid_partial_array) { WithinOptionListValidator::VALID_ARRAY.sample(2) }
51
+ let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
52
+
53
+ subject { WithinOptionListValidator.new }
54
+
55
+ context "validation with :in option" do
56
+ describe "with a valid list" do
57
+ it_behaves_like "valid object"
58
+ end
59
+
60
+ describe "with an invalid list" do
61
+ it_behaves_like "invalid object"
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
data/spec/shared.rb CHANGED
@@ -1,9 +1,3 @@
1
- RSpec.shared_examples "invalid configuration" do
2
- it "should raise an error" do
3
- expect { badsetup.valid? }.to raise_error(ArgumentError)
4
- end
5
- end
6
-
7
1
  RSpec.shared_examples "valid object" do
8
2
  it "the subject should be valid" do
9
3
  subject.list = valid_partial_array
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,12 @@
1
+ require "simplecov"
2
+ SimpleCov.start
3
+
4
+ require "coveralls"
5
+ Coveralls.wear!
6
+
1
7
  require "bundler/setup"
2
8
  require "active_model"
3
9
  require "active_model_validates_intersection_of"
4
- require 'coveralls'
5
- Coveralls.wear!
6
10
 
7
11
  RSpec.configure do |config|
8
12
  # Enable flags like --only-failures and --next-failure
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_model_validates_intersection_of
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Biriba
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-01 00:00:00.000000000 Z
11
+ date: 2021-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0
19
+ version: 5.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.0
26
+ version: 5.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.15'
33
+ version: '2.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.15'
40
+ version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: A custom validation for your Active Model that check if an array is included
84
98
  in another one
85
99
  email:
@@ -91,16 +105,19 @@ files:
91
105
  - ".gitignore"
92
106
  - ".rspec"
93
107
  - ".travis.yml"
108
+ - CHANGELOG.md
94
109
  - Gemfile
95
110
  - README.md
96
111
  - Rakefile
97
112
  - active_model_validates_intersection_of.gemspec
98
113
  - lib/active_model_validates_intersection_of.rb
99
- - lib/active_model_validates_intersection_of/inclusion_intersection_validator.rb
100
- - lib/active_model_validates_intersection_of/validates_intersection_of_alias.rb
114
+ - lib/active_model_validates_intersection_of/validator.rb
101
115
  - lib/active_model_validates_intersection_of/version.rb
102
- - spec/lib/inclusion_intersection_validator_spec.rb
116
+ - lib/intersection_validator.rb
117
+ - lib/validates_intersection_of_alias.rb
118
+ - spec/lib/intersection_validator_spec.rb
103
119
  - spec/lib/validates_intersection_of_alias_spec.rb
120
+ - spec/lib/validator_spec.rb
104
121
  - spec/shared.rb
105
122
  - spec/spec_helper.rb
106
123
  homepage: https://github.com/rafaelbiriba/active_model_validates_intersection_of
@@ -122,14 +139,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
139
  - !ruby/object:Gem::Version
123
140
  version: '0'
124
141
  requirements: []
125
- rubyforge_project:
126
- rubygems_version: 2.6.12
142
+ rubygems_version: 3.0.3
127
143
  signing_key:
128
144
  specification_version: 4
129
145
  summary: A custom validation for your Active Model that check if an array is included
130
146
  in another one
131
147
  test_files:
132
- - spec/lib/inclusion_intersection_validator_spec.rb
148
+ - spec/lib/intersection_validator_spec.rb
133
149
  - spec/lib/validates_intersection_of_alias_spec.rb
150
+ - spec/lib/validator_spec.rb
134
151
  - spec/shared.rb
135
152
  - spec/spec_helper.rb
@@ -1,11 +0,0 @@
1
- module ActiveModelValidatesIntersectionOf
2
- class Validator < ActiveModel::EachValidator
3
- def validate_each(record, attribute, value)
4
- delimiter = options[:in]
5
- raise(ArgumentError, "An array must be supplied as the :in option of the configuration hash") unless delimiter.kind_of?(Array)
6
- if (value - delimiter).any?
7
- record.errors.add(attribute, :inclusion, options.except(:in).merge!(value: value))
8
- end
9
- end
10
- end
11
- end
@@ -1,41 +0,0 @@
1
- require "spec_helper"
2
- require_relative "../shared.rb"
3
-
4
- RSpec.describe ActiveModelValidatesIntersectionOf::Validator do
5
- class BadSetupValidator
6
- include ActiveModel::Validations
7
- attr_accessor :list
8
- validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:list]
9
- end
10
-
11
- let(:badsetup) { BadSetupValidator.new }
12
-
13
- context "setup" do
14
- describe "without an :in configuration" do
15
- it_behaves_like "invalid configuration"
16
- end
17
- end
18
-
19
- VALID_ARRAY = ["a", "b", 1 , 2]
20
-
21
- let(:valid_partial_array) { VALID_ARRAY.sample(2) }
22
- let(:invalid_partial_array) { valid_partial_array + ["invalid"] }
23
-
24
- class ListValidator
25
- include ActiveModel::Validations
26
- attr_accessor :list
27
- validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:list], in: VALID_ARRAY, message: "not valid"
28
- end
29
-
30
- subject { List.new }
31
-
32
- context "validation" do
33
- describe "with a valid list" do
34
- it_behaves_like "valid object"
35
- end
36
-
37
- describe "with an invalid list" do
38
- it_behaves_like "invalid object"
39
- end
40
- end
41
- end