validates_belongs_to 0.0.1 → 0.0.2
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.
- data/Gemfile +5 -0
- data/README.md +17 -0
- data/lib/validates_belongs_to/locale/en.yml +3 -4
- data/lib/validates_belongs_to/version.rb +1 -1
- data/lib/validates_belongs_to.rb +7 -5
- data/spec/spec_helper.rb +2 -1
- data/spec/validates_belong_to_spec.rb +6 -18
- metadata +37 -11
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
This is a simple validator which validates an association belongs to the same owner.
|
|
4
4
|
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Add to your Gemfile:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'validates_belongs_to'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Add the validator to your model:
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
class Car < ActiveRecord::Base
|
|
17
|
+
validates :warehouse, :belongs_to => :user
|
|
18
|
+
# or you can use validates_belongs_to :warehouse, :user
|
|
19
|
+
end
|
|
20
|
+
```
|
|
21
|
+
|
|
5
22
|
## Example code
|
|
6
23
|
|
|
7
24
|
```ruby
|
data/lib/validates_belongs_to.rb
CHANGED
|
@@ -16,8 +16,8 @@ module ValidatesBelongsTo
|
|
|
16
16
|
class BelongsToValidator < ActiveModel::EachValidator
|
|
17
17
|
|
|
18
18
|
def validate_each(record, attribute, owner)
|
|
19
|
-
record_value = get_id_by_association(record)
|
|
20
|
-
owner_value = get_id_by_association(owner)
|
|
19
|
+
record_value = get_id_by_association(record, options[:with])
|
|
20
|
+
owner_value = get_id_by_association(owner, options[:with])
|
|
21
21
|
|
|
22
22
|
unless record_value == owner_value
|
|
23
23
|
record.errors.add(attribute, :belongs_to, options.merge(:value => options[:with]))
|
|
@@ -26,13 +26,15 @@ module ValidatesBelongsTo
|
|
|
26
26
|
|
|
27
27
|
protected
|
|
28
28
|
|
|
29
|
-
def get_id_by_association(record)
|
|
30
|
-
|
|
29
|
+
def get_id_by_association(record, association_name)
|
|
30
|
+
return nil if record.nil?
|
|
31
|
+
|
|
32
|
+
association = record.class.reflect_on_association(association_name)
|
|
31
33
|
|
|
32
34
|
if association.try(:macro) == :belongs_to
|
|
33
35
|
record.send(association.foreign_key)
|
|
34
36
|
else
|
|
35
|
-
association_resource = record.send(
|
|
37
|
+
association_resource = record.send(association_name)
|
|
36
38
|
association_resource.try(association_resource.class.primary_key)
|
|
37
39
|
end
|
|
38
40
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -2,30 +2,18 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe ValidatesBelongsTo do
|
|
4
4
|
|
|
5
|
-
context
|
|
6
|
-
|
|
7
|
-
let(:user) { User.create }
|
|
8
|
-
let(:warehouse) { Warehouse.create({ :user => user }) }
|
|
9
|
-
|
|
10
|
-
subject { Car.create({ :user => user, :warehouse => warehouse })}
|
|
11
|
-
|
|
12
|
-
it { should be_valid }
|
|
13
|
-
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
context "invalid" do
|
|
5
|
+
context :validation do
|
|
17
6
|
|
|
18
7
|
let(:user) { User.create }
|
|
19
8
|
let(:user_2) { User.create }
|
|
20
|
-
let(:warehouse) { Warehouse.create({ :user => user }) }
|
|
21
9
|
|
|
22
|
-
|
|
10
|
+
let(:warehouse) { Warehouse.create({ :user => user }) }
|
|
11
|
+
let(:warehouse_2) { Warehouse.create({ :user => user_2 }) }
|
|
23
12
|
|
|
24
|
-
|
|
13
|
+
subject { Car.new({ :user => user }) }
|
|
25
14
|
|
|
26
|
-
it
|
|
27
|
-
|
|
28
|
-
end
|
|
15
|
+
it { should allow_value(warehouse).for(:warehouse) }
|
|
16
|
+
it { should_not allow_value(warehouse_2).for(:warehouse).with_message('does not belong to user') }
|
|
29
17
|
|
|
30
18
|
end
|
|
31
19
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: validates_belongs_to
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2013-01-04 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bundler
|
|
16
|
-
requirement:
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
@@ -21,10 +21,15 @@ dependencies:
|
|
|
21
21
|
version: 1.0.0
|
|
22
22
|
type: :development
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 1.0.0
|
|
25
30
|
- !ruby/object:Gem::Dependency
|
|
26
31
|
name: rspec
|
|
27
|
-
requirement:
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
28
33
|
none: false
|
|
29
34
|
requirements:
|
|
30
35
|
- - ~>
|
|
@@ -32,10 +37,15 @@ dependencies:
|
|
|
32
37
|
version: '2.3'
|
|
33
38
|
type: :development
|
|
34
39
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ~>
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '2.3'
|
|
36
46
|
- !ruby/object:Gem::Dependency
|
|
37
47
|
name: sqlite3
|
|
38
|
-
requirement:
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
39
49
|
none: false
|
|
40
50
|
requirements:
|
|
41
51
|
- - ! '>='
|
|
@@ -43,10 +53,15 @@ dependencies:
|
|
|
43
53
|
version: '0'
|
|
44
54
|
type: :development
|
|
45
55
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
47
62
|
- !ruby/object:Gem::Dependency
|
|
48
63
|
name: activerecord
|
|
49
|
-
requirement:
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
65
|
none: false
|
|
51
66
|
requirements:
|
|
52
67
|
- - ~>
|
|
@@ -54,7 +69,12 @@ dependencies:
|
|
|
54
69
|
version: '3.0'
|
|
55
70
|
type: :runtime
|
|
56
71
|
prerelease: false
|
|
57
|
-
version_requirements:
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ~>
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '3.0'
|
|
58
78
|
description: Validates wether an association belongs to the same owner
|
|
59
79
|
email:
|
|
60
80
|
- mail@arjen.me
|
|
@@ -87,15 +107,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
87
107
|
- - ! '>='
|
|
88
108
|
- !ruby/object:Gem::Version
|
|
89
109
|
version: '0'
|
|
110
|
+
segments:
|
|
111
|
+
- 0
|
|
112
|
+
hash: 2930070579441286280
|
|
90
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
114
|
none: false
|
|
92
115
|
requirements:
|
|
93
116
|
- - ! '>='
|
|
94
117
|
- !ruby/object:Gem::Version
|
|
95
118
|
version: '0'
|
|
119
|
+
segments:
|
|
120
|
+
- 0
|
|
121
|
+
hash: 2930070579441286280
|
|
96
122
|
requirements: []
|
|
97
123
|
rubyforge_project: validates_belongs_to
|
|
98
|
-
rubygems_version: 1.8.
|
|
124
|
+
rubygems_version: 1.8.24
|
|
99
125
|
signing_key:
|
|
100
126
|
specification_version: 3
|
|
101
127
|
summary: Validates wether an association belongs to the same owner
|