validates_overlap 0.1.1 → 0.1.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 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: