dynamic_uniqueness_validator 0.1.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 +7 -0
- data/README.md +29 -0
- data/lib/dynamic_uniqueness_validator.rb +7 -0
- data/spec/dynamic_uniqueness_validator_spec.rb +31 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/database.rb +26 -0
- metadata +109 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: faaf571149748d61c8e6b764caab89e0227bf83a
|
4
|
+
data.tar.gz: dd6a5d2b15812e1657dd0300d3f6530cb10ecffc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7aff11272b4187ce6d30e554a4cdd51e12fda59ba65e868aa4ba3117a6dbb05fccb996fae5493bb50ab69f2042f2ace14bebe924e5b4faaab6b10190c4a1ad52
|
7
|
+
data.tar.gz: e96d92de31e77cc438374dfc187d754193f2cb65719d6108d9dd2b6806a5e39c0ca0d411fcd2f32c355893355494de020ef32e1e9e765c7d969bea5cabcf07db
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# DynamicUniquenessValidator
|
2
|
+
|
3
|
+
Adds the ability to validate two fields at the same time. For an intermediate table with many-to-many association
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add to your Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'dynamic_uniqueness_validator'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle install
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Add $ inverse_of to model with has_many. Then add the following to your model:
|
20
|
+
|
21
|
+
$ validates :my_model_item, dynamic_uniqueness: { parent_association: :parent_model, child_association: :model_item }
|
22
|
+
|
23
|
+
You can also use the message option
|
24
|
+
|
25
|
+
$ validates :my_model_item, dynamic_uniqueness: { parent_association: :parent_model, child_association: :model_item, message: "Custom error message" }
|
26
|
+
|
27
|
+
## License
|
28
|
+
|
29
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
class DynamicUniquenessValidator < ActiveModel::EachValidator
|
4
|
+
def validate_each(record, attribute, value)
|
5
|
+
record.errors.add(attribute, options[:message] || :taken) if record.public_send(options[:parent_association]).public_send(options[:child_association]).any? { |item| item != record && value == item.read_attribute(attribute) }
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
describe 'Validation' do
|
2
|
+
context 'given valid data' do
|
3
|
+
it 'should be valid' do
|
4
|
+
order = Order.new
|
5
|
+
order.order_items.build(name: 'name1')
|
6
|
+
order.order_items.build(name: 'name2')
|
7
|
+
expect(order).to be_valid
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'not should be valid' do
|
11
|
+
order = Order.new
|
12
|
+
order.order_items.build(name: 'name1')
|
13
|
+
order.order_items.build(name: 'name1')
|
14
|
+
|
15
|
+
expect(order).to_not be_valid
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "error" do
|
20
|
+
subject { order = Order.new
|
21
|
+
order.order_items.build(name: 'name1')
|
22
|
+
order.order_items.build(name: 'name1')
|
23
|
+
}
|
24
|
+
|
25
|
+
before { subject.valid? }
|
26
|
+
|
27
|
+
it "should show custom message" do
|
28
|
+
expect(subject.errors[:name]).to include "Its not valid"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.before(:all) do
|
3
|
+
create_database
|
4
|
+
end
|
5
|
+
|
6
|
+
def create_database
|
7
|
+
ActiveRecord::Migration.verbose = false
|
8
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
9
|
+
ActiveRecord::Schema.define(version: 1) do
|
10
|
+
create_table :orders
|
11
|
+
create_table :order_items do |t|
|
12
|
+
t.string :name
|
13
|
+
t.references :order
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Order < ActiveRecord::Base
|
20
|
+
has_many :order_items, inverse_of: :order
|
21
|
+
end
|
22
|
+
|
23
|
+
class OrderItem < ActiveRecord::Base
|
24
|
+
belongs_to :order
|
25
|
+
validates :name, dynamic_uniqueness: { parent_association: :order, child_association: :order_items, message: "Its not valid" }
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dynamic_uniqueness_validator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pavel Kononovich
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-03-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '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: '1.14'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.14'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
description: Dynamic uniqueness validator to validation two fields before save in
|
70
|
+
db.
|
71
|
+
email:
|
72
|
+
- p.kononovich@gmail.com
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- README.md
|
78
|
+
- lib/dynamic_uniqueness_validator.rb
|
79
|
+
- spec/dynamic_uniqueness_validator_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
81
|
+
- spec/support/database.rb
|
82
|
+
homepage: https://github.com/Platinet/dynamic_uniqueness_validator
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.5.1
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: Dynamic uniqueness validator.
|
106
|
+
test_files:
|
107
|
+
- spec/dynamic_uniqueness_validator_spec.rb
|
108
|
+
- spec/spec_helper.rb
|
109
|
+
- spec/support/database.rb
|