validates_overlap 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,9 +3,9 @@ source "http://rubygems.org"
3
3
  gem "rails", ">= 3.0.0"
4
4
 
5
5
  group :test, :development do
6
- gem "sqlite3", '~>1.3.7'
7
- gem "rspec-rails", '~>2.12.2'
8
- gem "factory_girl_rails", '~>4.2.1'
9
- gem "bundler", '~>1.2.4'
10
- gem "jeweler", '~>1.8.4'
6
+ gem "sqlite3", '~>1.3'
7
+ gem "rspec-rails", '~>2.12'
8
+ gem "factory_girl_rails", '~>4.2'
9
+ gem "bundler", '~>1.2'
10
+ gem "jeweler", '~>1.8'
11
11
  end
data/README.rdoc CHANGED
@@ -12,42 +12,36 @@ If you are developing Rails 3 app, let say some meeting planner and you can't sa
12
12
  === Using
13
13
 
14
14
  Add to your gemfile
15
- ```ruby
16
- gem 'validates_overlap'
17
- ```
15
+ gem 'validates_overlap'
16
+
18
17
 
19
18
  In your model
20
19
 
21
20
  without scope
22
- ```ruby
23
- validates :starts_at, :ends_at, :overlap => true
24
- ```
21
+ validates :starts_at, :ends_at, :overlap => true
22
+
25
23
 
26
24
  with scope
27
- ```ruby
28
- validates :starts_at, :ends_at, :overlap => {:scope => "user_id"}
29
- ```
25
+ validates :starts_at, :ends_at, :overlap => {:scope => "user_id"}
26
+
30
27
 
31
28
  exclude edges
32
- ```ruby
33
- validates :starts_at, :ends_at, :overlap => {:exclude_edges => "starts_at"}
34
- validates :starts_at, :ends_at, :overlap => {:exclude_edges => ["starts_at", "ends_at"]}
35
- ```
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
+
36
32
 
37
33
  with complicated relation relations
38
34
 
39
35
  Exaple describes valildatation of user, positions and time slots.
40
36
  User can't be assigned 2 times on position which is under time slot with time overlap.
41
37
 
42
- ```ruby
43
- class Position < ActiveRecord::Base
44
- belongs_to :time_slot
45
- belongs_to :user
46
- validates "time_slots.starts_at", "time_slots.ends_at",
47
- :overlap => {
48
- :query_options => {:includes => :time_slot},
49
- :scope => { "positions.user_id" => proc{|position| position.user_id} }
50
- }
51
- end
52
-
53
- ```
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
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -128,8 +128,11 @@ class OverlapValidator < ActiveModel::EachValidator
128
128
 
129
129
  # Add attribute and his value to sql condition
130
130
  def add_attribute(record, attr_name, value = nil)
131
- self.sql_conditions += " AND #{attribute_to_sql(attr_name, record)} = :#{value_attribute_name(attr_name)}"
132
- self.sql_values.merge!({:"#{value_attribute_name(attr_name)}" => resolve_scope_value(record, attr_name, value)})
131
+ _value = resolve_scope_value(record, attr_name, value)
132
+ operator = _value.is_a?(Array) ? " IN (:%s)" : " = :%s"
133
+
134
+ self.sql_conditions += " AND #{attribute_to_sql(attr_name, record)} #{operator}" % value_attribute_name(attr_name)
135
+ self.sql_values.merge!({:"#{value_attribute_name(attr_name)}" => _value})
133
136
  end
134
137
 
135
138
  def value_attribute_name(attr_name)
@@ -23,20 +23,24 @@ describe TimeSlot do
23
23
  time_slot1 = FactoryGirl.create(:time_slot, :starts_at => "2012-10-11".to_date, :ends_at => "2012-10-13".to_date)
24
24
  time_slot2 = FactoryGirl.create(:time_slot, :starts_at => "2012-10-15".to_date, :ends_at => "2012-10-16".to_date)
25
25
  user = FactoryGirl.create(:user)
26
+ user_2 = FactoryGirl.create(:user)
26
27
  position1 = FactoryGirl.create(:position, :time_slot => time_slot1, :user => user)
27
28
  position2 = FactoryGirl.create(:position, :time_slot => time_slot2, :user => user)
29
+ position3 = FactoryGirl.create(:position, :time_slot => time_slot2, :user => user_2)
28
30
  time_slot2.reload
29
31
  time_slot2.starts_at = "2012-10-12".to_date
30
32
  time_slot2.should_not be_valid
33
+
31
34
  time_slot2.errors[:base].should_not be_empty
32
35
  end
33
36
 
34
- it "is be valid if exists time slot which have position with same person" do
37
+ it "is valid if exists time slot which have position with same person" do
35
38
  time_slot1 = FactoryGirl.create(:time_slot, :starts_at => "2012-10-11".to_date, :ends_at => "2012-10-13".to_date)
36
39
  time_slot2 = FactoryGirl.create(:time_slot, :starts_at => "2012-10-14".to_date, :ends_at => "2012-10-16".to_date)
37
40
  user = FactoryGirl.create(:user)
38
41
  position1 = FactoryGirl.create(:position, :time_slot => time_slot1, :user => user)
39
42
  position2 = FactoryGirl.build(:position, :time_slot => time_slot2, :user => user)
43
+
40
44
  time_slot2.starts_at = "2012-10-15".to_date
41
45
  time_slot2.should be_valid
42
46
  time_slot2.errors[:base].should be_empty
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "validates_overlap"
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
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-02-19"
12
+ s.date = "2013-03-05"
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 = [
@@ -102,26 +102,26 @@ Gem::Specification.new do |s|
102
102
 
103
103
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
104
104
  s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
105
- s.add_development_dependency(%q<sqlite3>, ["~> 1.3.7"])
106
- s.add_development_dependency(%q<rspec-rails>, ["~> 2.12.2"])
107
- s.add_development_dependency(%q<factory_girl_rails>, ["~> 4.2.1"])
108
- s.add_development_dependency(%q<bundler>, ["~> 1.2.4"])
109
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
105
+ s.add_development_dependency(%q<sqlite3>, ["~> 1.3"])
106
+ s.add_development_dependency(%q<rspec-rails>, ["~> 2.12"])
107
+ s.add_development_dependency(%q<factory_girl_rails>, ["~> 4.2"])
108
+ s.add_development_dependency(%q<bundler>, ["~> 1.2"])
109
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8"])
110
110
  else
111
111
  s.add_dependency(%q<rails>, [">= 3.0.0"])
112
- s.add_dependency(%q<sqlite3>, ["~> 1.3.7"])
113
- s.add_dependency(%q<rspec-rails>, ["~> 2.12.2"])
114
- s.add_dependency(%q<factory_girl_rails>, ["~> 4.2.1"])
115
- s.add_dependency(%q<bundler>, ["~> 1.2.4"])
116
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
112
+ s.add_dependency(%q<sqlite3>, ["~> 1.3"])
113
+ s.add_dependency(%q<rspec-rails>, ["~> 2.12"])
114
+ s.add_dependency(%q<factory_girl_rails>, ["~> 4.2"])
115
+ s.add_dependency(%q<bundler>, ["~> 1.2"])
116
+ s.add_dependency(%q<jeweler>, ["~> 1.8"])
117
117
  end
118
118
  else
119
119
  s.add_dependency(%q<rails>, [">= 3.0.0"])
120
- s.add_dependency(%q<sqlite3>, ["~> 1.3.7"])
121
- s.add_dependency(%q<rspec-rails>, ["~> 2.12.2"])
122
- s.add_dependency(%q<factory_girl_rails>, ["~> 4.2.1"])
123
- s.add_dependency(%q<bundler>, ["~> 1.2.4"])
124
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
120
+ s.add_dependency(%q<sqlite3>, ["~> 1.3"])
121
+ s.add_dependency(%q<rspec-rails>, ["~> 2.12"])
122
+ s.add_dependency(%q<factory_girl_rails>, ["~> 4.2"])
123
+ s.add_dependency(%q<bundler>, ["~> 1.2"])
124
+ s.add_dependency(%q<jeweler>, ["~> 1.8"])
125
125
  end
126
126
  end
127
127
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_overlap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-19 00:00:00.000000000 Z
12
+ date: 2013-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.3.7
37
+ version: '1.3'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.3.7
45
+ version: '1.3'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rspec-rails
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 2.12.2
53
+ version: '2.12'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 2.12.2
61
+ version: '2.12'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: factory_girl_rails
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 4.2.1
69
+ version: '4.2'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 4.2.1
77
+ version: '4.2'
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: bundler
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 1.2.4
85
+ version: '1.2'
86
86
  type: :development
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 1.2.4
93
+ version: '1.2'
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: jeweler
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 1.8.4
101
+ version: '1.8'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 1.8.4
109
+ version: '1.8'
110
110
  description: It can be useful when you you are developing some app where you will
111
111
  work with meetings, events etc.
112
112
  email: robinbortlik@gmail.com
@@ -204,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
204
204
  version: '0'
205
205
  segments:
206
206
  - 0
207
- hash: 3573107370652400302
207
+ hash: 2932668315205371865
208
208
  required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  none: false
210
210
  requirements: