validates_overlap 0.1.2 → 0.1.3
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 +15 -0
- data/.travis.yml +0 -1
- data/Gemfile +1 -0
- data/README.md +62 -0
- data/VERSION +1 -1
- data/lib/validates_overlap/overlap_validator.rb +2 -2
- data/spec/dummy/app/models/active_meeting.rb +4 -0
- data/spec/dummy/db/migrate/20130826155107_create_active_meetings.rb +14 -0
- data/spec/dummy/db/schema.rb +9 -1
- data/spec/dummy/spec/factories/active_meeting.rb +7 -0
- data/spec/dummy/spec/models/active_meetings_spec.rb +18 -0
- data/spec/dummy/spec/overlap_validator_spec.rb +24 -0
- data/spec/spec_helper.rb +1 -0
- data/validates_overlap.gemspec +14 -6
- metadata +26 -24
- data/README.rdoc +0 -47
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTc5NTQ4NDFlMTU1MjVkZDllOGEzNzVjYzhhYjNlY2VlODlhYzZmOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzNmNWJiMjhjYWM4ODFmYTFhMGRhM2EyZjYwYTlkYjZlMGM2NTQwMg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NTIxNzM5ZWQ0ZjEzZDFiZGE3YWVjM2YzMzliZDgzN2E0MTdjNmFmZTlhNGQ0
|
10
|
+
M2FkOGM5ZGQ3M2JjYzc5OWNjNTVlNDg5YzIyY2U4NzUwYmVmMDZiMDMxNjhi
|
11
|
+
MzAxOTEyM2ZmZTdhZmVhYzNhOTE1Mzk1MDMyMjYxMWI3NWZjNTM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YmU0MTU0MDNmMmQxMTdkYjQ5MmIzMjk1NGZkNjY1MzI3OTA3OTk1OTg0Nzg2
|
14
|
+
N2Y3NTFjZGJiODM4NTBlMzZjZmNiNjRiZTQxY2E0YjRlNDY0MjMyZGU1NDRi
|
15
|
+
MGMyM2U5Nzc4YmY2ZmJlMmY0YjBiOGY0ZTIxMzBiNGQ2NjgwYjQ=
|
data/Gemfile
CHANGED
data/README.md
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
[](https://secure.travis-ci.org/robinbortlik/validates_overlap)
|
2
|
+
|
3
|
+
# ValidatesOverlap
|
4
|
+
|
5
|
+
This project rocks and uses MIT-LICENSE.
|
6
|
+
|
7
|
+
#### This gem is compatible with Rails 3 and 4.
|
8
|
+
|
9
|
+
#### When this gem should be helpful for you?
|
10
|
+
If you are developing Rails 3 app, let say some meeting planner and you can't save records which have time overlap.
|
11
|
+
|
12
|
+
#### Using
|
13
|
+
|
14
|
+
Add to your gemfile
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'validates_overlap'
|
18
|
+
```
|
19
|
+
|
20
|
+
In your model
|
21
|
+
|
22
|
+
#### without scope
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
validates :starts_at, :ends_at, :overlap => true
|
26
|
+
```
|
27
|
+
|
28
|
+
#### with scope
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
validates :starts_at, :ends_at, :overlap => {:scope => "user_id"}
|
32
|
+
```
|
33
|
+
|
34
|
+
#### exclude edges
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
validates :starts_at, :ends_at, :overlap => {:exclude_edges => "starts_at"}
|
38
|
+
validates :starts_at, :ends_at, :overlap => {:exclude_edges => ["starts_at", "ends_at"]}
|
39
|
+
```
|
40
|
+
|
41
|
+
#### define custom validation key and message
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
validates :starts_at, :ends_at, :overlap => {:message_title => "Some validation title", :message_content => "Some validation message"}
|
45
|
+
```
|
46
|
+
|
47
|
+
#### with complicated relation relations
|
48
|
+
|
49
|
+
Example describes valildatation of user, positions and time slots.
|
50
|
+
User can't be assigned 2 times on position which is under time slot with time overlap.
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
class Position < ActiveRecord::Base
|
54
|
+
belongs_to :time_slot
|
55
|
+
belongs_to :user
|
56
|
+
validates "time_slots.starts_at", "time_slots.ends_at",
|
57
|
+
:overlap => {
|
58
|
+
:query_options => {:includes => :time_slot},
|
59
|
+
:scope => { "positions.user_id" => proc{|position| position.user_id} }
|
60
|
+
}
|
61
|
+
end
|
62
|
+
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
@@ -15,9 +15,9 @@ class OverlapValidator < ActiveModel::EachValidator
|
|
15
15
|
def validate(record)
|
16
16
|
if self.find_crossed(record)
|
17
17
|
if record.respond_to? attributes.first
|
18
|
-
record.errors.add(attributes.first, :overlap)
|
18
|
+
record.errors.add(options[:message_title] || attributes.first, options[:message_content] || :overlap)
|
19
19
|
else
|
20
|
-
record.errors.add(:base, :overlap)
|
20
|
+
record.errors.add(options[:message_title] || :base, options[:message_content] || :overlap)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateActiveMeetings < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :active_meetings do |t|
|
4
|
+
t.date :starts_at
|
5
|
+
t.date :ends_at
|
6
|
+
t.boolean :is_active
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :active_meetings
|
13
|
+
end
|
14
|
+
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,15 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
14
|
+
ActiveRecord::Schema.define(:version => 20130826155107) do
|
15
|
+
|
16
|
+
create_table "active_meetings", :force => true do |t|
|
17
|
+
t.date "starts_at"
|
18
|
+
t.date "ends_at"
|
19
|
+
t.boolean "is_active"
|
20
|
+
t.datetime "created_at", :null => false
|
21
|
+
t.datetime "updated_at", :null => false
|
22
|
+
end
|
15
23
|
|
16
24
|
create_table "end_overlap_meetings", :force => true do |t|
|
17
25
|
t.date "starts_at"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
require_relative '../factories/active_meeting'
|
3
|
+
|
4
|
+
describe ActiveMeeting do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ActiveMeeting.delete_all
|
8
|
+
end
|
9
|
+
|
10
|
+
context "scoping" do
|
11
|
+
it "should apply scope" do
|
12
|
+
ActiveMeeting.should_receive(:active).with(true).and_call_original
|
13
|
+
active_meeting = ActiveMeeting.new
|
14
|
+
active_meeting.valid?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
describe OverlapValidator do
|
2
|
+
|
3
|
+
|
4
|
+
context "validation message" do
|
5
|
+
|
6
|
+
it "should have default message" do
|
7
|
+
subject = OverlapValidator.new({:attributes => [:starts_at, :ends_at]})
|
8
|
+
meeting = Meeting.new
|
9
|
+
subject.stub(:find_crossed){true}
|
10
|
+
subject.validate(meeting)
|
11
|
+
meeting.errors[:starts_at].should eq ["overlaps with another record"]
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be possible to configure message" do
|
15
|
+
subject = OverlapValidator.new({:attributes => [:starts_at, :ends_at]})
|
16
|
+
meeting = Meeting.new
|
17
|
+
subject.stub(:find_crossed){true}
|
18
|
+
subject.stub(:options){ {:message_title => :optional_key, :message_content => "Message content"} }
|
19
|
+
subject.validate(meeting)
|
20
|
+
meeting.errors.messages.should eq :optional_key => ["Message content"]
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/validates_overlap.gemspec
CHANGED
@@ -5,21 +5,21 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "validates_overlap"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Robin Bortlik"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-08-26"
|
13
13
|
s.description = "It can be useful when you you are developing some app where you will work with meetings, events etc."
|
14
14
|
s.email = "robinbortlik@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
|
-
"README.
|
16
|
+
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
19
|
".travis.yml",
|
20
20
|
"Gemfile",
|
21
21
|
"MIT-LICENSE",
|
22
|
-
"README.
|
22
|
+
"README.md",
|
23
23
|
"Rakefile",
|
24
24
|
"VERSION",
|
25
25
|
"lib/validates_overlap.rb",
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"spec/dummy/Rakefile",
|
29
29
|
"spec/dummy/app/controllers/application_controller.rb",
|
30
30
|
"spec/dummy/app/helpers/application_helper.rb",
|
31
|
+
"spec/dummy/app/models/active_meeting.rb",
|
31
32
|
"spec/dummy/app/models/end_overlap_meeting.rb",
|
32
33
|
"spec/dummy/app/models/meeting.rb",
|
33
34
|
"spec/dummy/app/models/position.rb",
|
@@ -59,6 +60,7 @@ Gem::Specification.new do |s|
|
|
59
60
|
"spec/dummy/db/migrate/20120509131012_create_start_overlap_meetings.rb",
|
60
61
|
"spec/dummy/db/migrate/20120509131032_create_start_end_overlap_meetings.rb",
|
61
62
|
"spec/dummy/db/migrate/20121207162212_create_time_slot.rb",
|
63
|
+
"spec/dummy/db/migrate/20130826155107_create_active_meetings.rb",
|
62
64
|
"spec/dummy/db/schema.rb",
|
63
65
|
"spec/dummy/public/404.html",
|
64
66
|
"spec/dummy/public/422.html",
|
@@ -72,6 +74,7 @@ Gem::Specification.new do |s|
|
|
72
74
|
"spec/dummy/public/javascripts/rails.js",
|
73
75
|
"spec/dummy/public/stylesheets/.gitkeep",
|
74
76
|
"spec/dummy/script/rails",
|
77
|
+
"spec/dummy/spec/factories/active_meeting.rb",
|
75
78
|
"spec/dummy/spec/factories/end_overlap_meeting.rb",
|
76
79
|
"spec/dummy/spec/factories/meeting.rb",
|
77
80
|
"spec/dummy/spec/factories/position.rb",
|
@@ -80,6 +83,7 @@ Gem::Specification.new do |s|
|
|
80
83
|
"spec/dummy/spec/factories/time_slot.rb",
|
81
84
|
"spec/dummy/spec/factories/user.rb",
|
82
85
|
"spec/dummy/spec/factories/user_meeting.rb",
|
86
|
+
"spec/dummy/spec/models/active_meetings_spec.rb",
|
83
87
|
"spec/dummy/spec/models/end_overlap_meeting_spec.rb",
|
84
88
|
"spec/dummy/spec/models/meeting_spec.rb",
|
85
89
|
"spec/dummy/spec/models/position_spec.rb",
|
@@ -88,17 +92,18 @@ Gem::Specification.new do |s|
|
|
88
92
|
"spec/dummy/spec/models/time_slot_spec.rb",
|
89
93
|
"spec/dummy/spec/models/user_meeting_spec.rb",
|
90
94
|
"spec/dummy/spec/models/user_spec.rb",
|
95
|
+
"spec/dummy/spec/overlap_validator_spec.rb",
|
91
96
|
"spec/spec_helper.rb",
|
92
97
|
"validates_overlap.gemspec"
|
93
98
|
]
|
94
99
|
s.homepage = "http://github.com/robinbortlik/validates_overlap"
|
95
100
|
s.licenses = ["MIT"]
|
96
101
|
s.require_paths = ["lib"]
|
97
|
-
s.rubygems_version = "
|
102
|
+
s.rubygems_version = "2.0.6"
|
98
103
|
s.summary = "This gem helps validate records with time overlap."
|
99
104
|
|
100
105
|
if s.respond_to? :specification_version then
|
101
|
-
s.specification_version =
|
106
|
+
s.specification_version = 4
|
102
107
|
|
103
108
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
104
109
|
s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
|
@@ -107,6 +112,7 @@ Gem::Specification.new do |s|
|
|
107
112
|
s.add_development_dependency(%q<factory_girl_rails>, ["~> 4.2"])
|
108
113
|
s.add_development_dependency(%q<bundler>, ["~> 1.2"])
|
109
114
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8"])
|
115
|
+
s.add_development_dependency(%q<pry>, [">= 0"])
|
110
116
|
else
|
111
117
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
112
118
|
s.add_dependency(%q<sqlite3>, ["~> 1.3"])
|
@@ -114,6 +120,7 @@ Gem::Specification.new do |s|
|
|
114
120
|
s.add_dependency(%q<factory_girl_rails>, ["~> 4.2"])
|
115
121
|
s.add_dependency(%q<bundler>, ["~> 1.2"])
|
116
122
|
s.add_dependency(%q<jeweler>, ["~> 1.8"])
|
123
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
117
124
|
end
|
118
125
|
else
|
119
126
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
@@ -122,6 +129,7 @@ Gem::Specification.new do |s|
|
|
122
129
|
s.add_dependency(%q<factory_girl_rails>, ["~> 4.2"])
|
123
130
|
s.add_dependency(%q<bundler>, ["~> 1.2"])
|
124
131
|
s.add_dependency(%q<jeweler>, ["~> 1.8"])
|
132
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
125
133
|
end
|
126
134
|
end
|
127
135
|
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_overlap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Robin Bortlik
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: sqlite3
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec-rails
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: factory_girl_rails
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: bundler
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: jeweler
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ~>
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,23 +90,36 @@ dependencies:
|
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ~>
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '1.8'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
110
111
|
description: It can be useful when you you are developing some app where you will
|
111
112
|
work with meetings, events etc.
|
112
113
|
email: robinbortlik@gmail.com
|
113
114
|
executables: []
|
114
115
|
extensions: []
|
115
116
|
extra_rdoc_files:
|
116
|
-
- README.
|
117
|
+
- README.md
|
117
118
|
files:
|
118
119
|
- .travis.yml
|
119
120
|
- Gemfile
|
120
121
|
- MIT-LICENSE
|
121
|
-
- README.
|
122
|
+
- README.md
|
122
123
|
- Rakefile
|
123
124
|
- VERSION
|
124
125
|
- lib/validates_overlap.rb
|
@@ -127,6 +128,7 @@ files:
|
|
127
128
|
- spec/dummy/Rakefile
|
128
129
|
- spec/dummy/app/controllers/application_controller.rb
|
129
130
|
- spec/dummy/app/helpers/application_helper.rb
|
131
|
+
- spec/dummy/app/models/active_meeting.rb
|
130
132
|
- spec/dummy/app/models/end_overlap_meeting.rb
|
131
133
|
- spec/dummy/app/models/meeting.rb
|
132
134
|
- spec/dummy/app/models/position.rb
|
@@ -158,6 +160,7 @@ files:
|
|
158
160
|
- spec/dummy/db/migrate/20120509131012_create_start_overlap_meetings.rb
|
159
161
|
- spec/dummy/db/migrate/20120509131032_create_start_end_overlap_meetings.rb
|
160
162
|
- spec/dummy/db/migrate/20121207162212_create_time_slot.rb
|
163
|
+
- spec/dummy/db/migrate/20130826155107_create_active_meetings.rb
|
161
164
|
- spec/dummy/db/schema.rb
|
162
165
|
- spec/dummy/public/404.html
|
163
166
|
- spec/dummy/public/422.html
|
@@ -171,6 +174,7 @@ files:
|
|
171
174
|
- spec/dummy/public/javascripts/rails.js
|
172
175
|
- spec/dummy/public/stylesheets/.gitkeep
|
173
176
|
- spec/dummy/script/rails
|
177
|
+
- spec/dummy/spec/factories/active_meeting.rb
|
174
178
|
- spec/dummy/spec/factories/end_overlap_meeting.rb
|
175
179
|
- spec/dummy/spec/factories/meeting.rb
|
176
180
|
- spec/dummy/spec/factories/position.rb
|
@@ -179,6 +183,7 @@ files:
|
|
179
183
|
- spec/dummy/spec/factories/time_slot.rb
|
180
184
|
- spec/dummy/spec/factories/user.rb
|
181
185
|
- spec/dummy/spec/factories/user_meeting.rb
|
186
|
+
- spec/dummy/spec/models/active_meetings_spec.rb
|
182
187
|
- spec/dummy/spec/models/end_overlap_meeting_spec.rb
|
183
188
|
- spec/dummy/spec/models/meeting_spec.rb
|
184
189
|
- spec/dummy/spec/models/position_spec.rb
|
@@ -187,34 +192,31 @@ files:
|
|
187
192
|
- spec/dummy/spec/models/time_slot_spec.rb
|
188
193
|
- spec/dummy/spec/models/user_meeting_spec.rb
|
189
194
|
- spec/dummy/spec/models/user_spec.rb
|
195
|
+
- spec/dummy/spec/overlap_validator_spec.rb
|
190
196
|
- spec/spec_helper.rb
|
191
197
|
- validates_overlap.gemspec
|
192
198
|
homepage: http://github.com/robinbortlik/validates_overlap
|
193
199
|
licenses:
|
194
200
|
- MIT
|
201
|
+
metadata: {}
|
195
202
|
post_install_message:
|
196
203
|
rdoc_options: []
|
197
204
|
require_paths:
|
198
205
|
- lib
|
199
206
|
required_ruby_version: !ruby/object:Gem::Requirement
|
200
|
-
none: false
|
201
207
|
requirements:
|
202
208
|
- - ! '>='
|
203
209
|
- !ruby/object:Gem::Version
|
204
210
|
version: '0'
|
205
|
-
segments:
|
206
|
-
- 0
|
207
|
-
hash: 2932668315205371865
|
208
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
212
|
requirements:
|
211
213
|
- - ! '>='
|
212
214
|
- !ruby/object:Gem::Version
|
213
215
|
version: '0'
|
214
216
|
requirements: []
|
215
217
|
rubyforge_project:
|
216
|
-
rubygems_version:
|
218
|
+
rubygems_version: 2.0.6
|
217
219
|
signing_key:
|
218
|
-
specification_version:
|
220
|
+
specification_version: 4
|
219
221
|
summary: This gem helps validate records with time overlap.
|
220
222
|
test_files: []
|
data/README.rdoc
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
{<img src="https://secure.travis-ci.org/robinbortlik/validates_overlap.png?branch=master" alt="Build Status" />}[http://travis-ci.org/robinbortlik/validates_overlap]
|
2
|
-
|
3
|
-
= ValidatesOverlap
|
4
|
-
|
5
|
-
This project rocks and uses MIT-LICENSE.
|
6
|
-
|
7
|
-
=== This gem is available only for Rails 3.
|
8
|
-
|
9
|
-
=== When this gem should be helpful for you?
|
10
|
-
If you are developing Rails 3 app, let say some meeting planner and you can't save records which have time overlap.
|
11
|
-
|
12
|
-
=== Using
|
13
|
-
|
14
|
-
Add to your gemfile
|
15
|
-
gem 'validates_overlap'
|
16
|
-
|
17
|
-
|
18
|
-
In your model
|
19
|
-
|
20
|
-
without scope
|
21
|
-
validates :starts_at, :ends_at, :overlap => true
|
22
|
-
|
23
|
-
|
24
|
-
with scope
|
25
|
-
validates :starts_at, :ends_at, :overlap => {:scope => "user_id"}
|
26
|
-
|
27
|
-
|
28
|
-
exclude edges
|
29
|
-
validates :starts_at, :ends_at, :overlap => {:exclude_edges => "starts_at"}
|
30
|
-
validates :starts_at, :ends_at, :overlap => {:exclude_edges => ["starts_at", "ends_at"]}
|
31
|
-
|
32
|
-
|
33
|
-
with complicated relation relations
|
34
|
-
|
35
|
-
Exaple describes valildatation of user, positions and time slots.
|
36
|
-
User can't be assigned 2 times on position which is under time slot with time overlap.
|
37
|
-
|
38
|
-
|
39
|
-
class Position < ActiveRecord::Base
|
40
|
-
belongs_to :time_slot
|
41
|
-
belongs_to :user
|
42
|
-
validates "time_slots.starts_at", "time_slots.ends_at",
|
43
|
-
:overlap => {
|
44
|
-
:query_options => {:includes => :time_slot},
|
45
|
-
:scope => { "positions.user_id" => proc{|position| position.user_id} }
|
46
|
-
}
|
47
|
-
end
|