dynamic_uniqueness_validator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,9 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'bundler/setup'
5
+ Bundler.require(:default)
6
+
7
+ require 'active_record'
8
+
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -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