validates_overlap 0.0.6 → 0.1.0

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.1.0
@@ -5,6 +5,7 @@ class OverlapValidator < ActiveModel::EachValidator
5
5
 
6
6
  attr_accessor :sql_conditions
7
7
  attr_accessor :sql_values
8
+ attr_accessor :scoped_model
8
9
 
9
10
  def initialize(args)
10
11
  attributes_are_range(args[:attributes])
@@ -12,7 +13,13 @@ class OverlapValidator < ActiveModel::EachValidator
12
13
  end
13
14
 
14
15
  def validate(record)
15
- record.errors.add(attributes.first, :overlap) if self.find_crossed(record)
16
+ if self.find_crossed(record)
17
+ if record.respond_to? attributes.first
18
+ record.errors.add(attributes.first, :overlap)
19
+ else
20
+ record.errors.add(:base, :overlap)
21
+ end
22
+ end
16
23
  end
17
24
 
18
25
 
@@ -20,20 +27,34 @@ class OverlapValidator < ActiveModel::EachValidator
20
27
 
21
28
  # Check if exists at least one record in DB which is crossed with current record
22
29
  def find_crossed(record)
30
+ self.scoped_model = record.class
23
31
  self.generate_overlap_sql_conditions(record)
24
32
  self.generate_overlap_sql_values(record)
25
- self.add_attributes(record, options[:scope]) if options && !(scope = options[:scope]).blank?
33
+ self.add_attributes(record, options[:scope]) if options && options[:scope].present?
34
+ self.add_query_options(options[:query_options]) if options && options[:query_options].present?
26
35
 
27
- return record.class.exists?([sql_conditions, sql_values])
36
+ return self.scoped_model.exists?([sql_conditions, sql_values])
28
37
  end
29
38
 
30
39
 
31
40
  # Resolve attributes values from record to use in sql conditions
32
41
  # return array in form ['2011-01-10', '2011-02-20']
33
42
  def resolve_values_from_attributes(record)
34
- attributes.map { |attr| record.send(attr.to_sym) }
43
+ attributes.map do |attr|
44
+ if attr.to_s.include?(".")
45
+ self.get_assoc_value(record, attr)
46
+ else
47
+ record.send(attr.to_sym)
48
+ end
49
+ end
35
50
  end
36
51
 
52
+ def get_assoc_value(record, attr)
53
+ assoc, attr_name = attr.to_s.split(".")
54
+ assoc_name = assoc.singularize.to_sym
55
+ assoc_obj = record.send(assoc_name) if record.respond_to?(assoc_name)
56
+ (assoc_obj || record).send(attr_name.to_sym)
57
+ end
37
58
  # Prepare attribute names to use in sql conditions
38
59
  # return array in form ['meetings.starts_at', 'meetings.ends_at']
39
60
  def attributes_to_sql(record)
@@ -43,7 +64,11 @@ class OverlapValidator < ActiveModel::EachValidator
43
64
 
44
65
  # Prepare attribute name to use in sql conditions created in form 'table_name.attribute_name'
45
66
  def attribute_to_sql(attr, record)
46
- "#{record_table_name(record)}.#{attr}"
67
+ if attr.to_s.include?(".")
68
+ attr
69
+ else
70
+ "#{record_table_name(record)}.#{attr}"
71
+ end
47
72
  end
48
73
 
49
74
 
@@ -76,12 +101,12 @@ class OverlapValidator < ActiveModel::EachValidator
76
101
  starts_at_value, ends_at_value = resolve_values_from_attributes(record)
77
102
  self.sql_values = {:starts_at_value => starts_at_value, :ends_at_value => ends_at_value}
78
103
  end
79
-
104
+
80
105
  # Return the condition string depend on exclude_edges option.
81
106
  def condition_string(starts_at_attr, ends_at_attr)
82
107
  except_option = Array(options[:exclude_edges]).map(&:to_s)
83
- starts_at_sign = except_option.include?(starts_at_attr.split(".").last) ? "<" : "<="
84
- ends_at_sign = except_option.include?(ends_at_attr.split(".").last) ? ">" : ">="
108
+ starts_at_sign = except_option.include?(starts_at_attr.to_s.split(".").last) ? "<" : "<="
109
+ ends_at_sign = except_option.include?(ends_at_attr.to_s.split(".").last) ? ">" : ">="
85
110
  "#{ends_at_attr} #{ends_at_sign} :starts_at_value AND #{starts_at_attr} #{starts_at_sign} :ends_at_value"
86
111
  end
87
112
 
@@ -91,6 +116,10 @@ class OverlapValidator < ActiveModel::EachValidator
91
116
  def add_attributes(record, attrs)
92
117
  if attrs.is_a?(Array)
93
118
  attrs.each { |attr| self.add_attribute(record, attr) }
119
+ elsif attrs.is_a?(Hash)
120
+ attrs.each do |attr_name, value|
121
+ self.add_attribute(record, attr_name, value)
122
+ end
94
123
  else
95
124
  self.add_attribute(record, attrs)
96
125
  end
@@ -98,9 +127,31 @@ class OverlapValidator < ActiveModel::EachValidator
98
127
 
99
128
 
100
129
  # Add attribute and his value to sql condition
101
- def add_attribute(record, attr)
102
- self.sql_conditions += " AND #{attribute_to_sql(attr, record)} = :#{attr}_value"
103
- self.sql_values.merge!({:"#{attr}_value" => record.send(:"#{attr}")})
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)})
133
+ end
134
+
135
+ def value_attribute_name(attr_name)
136
+ name = attr_name.to_s.include?(".") ? attr_name.to_s.gsub(".", "_") : attr_name
137
+ name + "_value"
138
+ end
139
+
140
+ def resolve_scope_value(record, attr_name, value = nil)
141
+ if value
142
+ value.is_a?(Proc) ? value.call(record) : value
143
+ else
144
+ record.send(:"#{attr_name}")
145
+ end
146
+ end
147
+
148
+ # Allow to use scope, joins, includes methods before querying
149
+ # == Example:
150
+ # validates_overlap :date_from, :date_to, :query_options => {:includes => "visits"}
151
+ def add_query_options(methods)
152
+ methods.each do |method_name, params|
153
+ self.scoped_model = self.scoped_model.send(method_name.to_sym, *params)
154
+ end
104
155
  end
105
156
 
106
157
  end
@@ -0,0 +1,9 @@
1
+ class Position < ActiveRecord::Base
2
+ belongs_to :time_slot
3
+ belongs_to :user
4
+ validates "time_slots.starts_at", "time_slots.ends_at",
5
+ :overlap => {
6
+ :query_options => {:includes => :time_slot},
7
+ :scope => { "positions.user_id" => proc{|position| position.user_id} }
8
+ }
9
+ end
@@ -1,3 +1,3 @@
1
1
  class StartOverlapMeeting < ActiveRecord::Base
2
2
  validates :starts_at, :ends_at, :overlap => {:exclude_edges => :starts_at}
3
- end
3
+ end
@@ -0,0 +1,8 @@
1
+ class TimeSlot < ActiveRecord::Base
2
+ has_many :positions
3
+ validates "time_slots.starts_at", "time_slots.ends_at",
4
+ :overlap => {
5
+ :query_options => {:includes => :positions},
6
+ :scope => {"positions.user_id" => proc{|time_slot| time_slot.positions.map(&:user_id)} }
7
+ }
8
+ end
@@ -0,0 +1,20 @@
1
+ class CreateTimeSlot < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :time_slots do |t|
4
+ t.date :starts_at
5
+ t.date :ends_at
6
+ t.timestamps
7
+ end
8
+
9
+ create_table :positions do |t|
10
+ t.belongs_to :user
11
+ t.belongs_to :time_slot
12
+ t.timestamps
13
+ end
14
+ end
15
+
16
+ def self.down
17
+ drop_table :time_slots
18
+ drop_table :positions
19
+ end
20
+ end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20120509131032) do
14
+ ActiveRecord::Schema.define(:version => 20121207162212) do
15
15
 
16
16
  create_table "end_overlap_meetings", :force => true do |t|
17
17
  t.date "starts_at"
@@ -27,6 +27,13 @@ ActiveRecord::Schema.define(:version => 20120509131032) do
27
27
  t.datetime "updated_at", :null => false
28
28
  end
29
29
 
30
+ create_table "positions", :force => true do |t|
31
+ t.integer "user_id"
32
+ t.integer "time_slot_id"
33
+ t.datetime "created_at", :null => false
34
+ t.datetime "updated_at", :null => false
35
+ end
36
+
30
37
  create_table "start_end_overlap_meetings", :force => true do |t|
31
38
  t.date "starts_at"
32
39
  t.date "ends_at"
@@ -41,6 +48,13 @@ ActiveRecord::Schema.define(:version => 20120509131032) do
41
48
  t.datetime "updated_at", :null => false
42
49
  end
43
50
 
51
+ create_table "time_slots", :force => true do |t|
52
+ t.date "starts_at"
53
+ t.date "ends_at"
54
+ t.datetime "created_at", :null => false
55
+ t.datetime "updated_at", :null => false
56
+ end
57
+
44
58
  create_table "user_meetings", :force => true do |t|
45
59
  t.integer "user_id"
46
60
  t.date "starts_at"
@@ -0,0 +1,4 @@
1
+ Factory.define :position do |u|
2
+ u.association(:user, :factory => :user)
3
+ u.association(:time_slot, :factory => :time_slot)
4
+ end
@@ -0,0 +1,4 @@
1
+ Factory.define :time_slot do |u|
2
+ u.starts_at '2011-01-05'.to_date
3
+ u.ends_at '2011-01-08'.to_date
4
+ end
@@ -1,3 +1,3 @@
1
1
  Factory.define :user do |u|
2
- u.name 'John'
3
- end
2
+ u.name 'John'
3
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../factories/position'
3
+ require_relative '../factories/time_slot'
4
+ require_relative '../factories/user'
5
+
6
+ describe Position do
7
+
8
+ before(:all) do
9
+ Position.delete_all
10
+ TimeSlot.delete_all
11
+ User.delete_all
12
+ end
13
+
14
+ it "create position" do
15
+ lambda {
16
+ Factory(:position)
17
+ }.should change(Position, :count).by(1)
18
+ end
19
+
20
+ context "Validation with scope and association" do
21
+
22
+ it "is not valid if exists time slot which have position with same person" do
23
+ time_slot1 = Factory.create(:time_slot, :starts_at => "2012-10-11".to_date, :ends_at => "2012-10-13".to_date)
24
+ time_slot2 = Factory.create(:time_slot, :starts_at => "2012-10-12".to_date, :ends_at => "2012-10-13".to_date)
25
+ user = Factory.create(:user)
26
+ position1 = Factory.create(:position, :time_slot => time_slot1, :user => user)
27
+ position2 = Factory.build(:position, :time_slot => time_slot2, :user => user)
28
+ position2.should_not be_valid
29
+ position2.errors[:base].should_not be_empty
30
+ end
31
+
32
+ it "is be valid if exists time slot which have position with same person" do
33
+ time_slot1 = Factory.create(:time_slot, :starts_at => "2012-10-11".to_date, :ends_at => "2012-10-13".to_date)
34
+ time_slot2 = Factory.create(:time_slot, :starts_at => "2012-10-14".to_date, :ends_at => "2012-10-15".to_date)
35
+ user = Factory.create(:user)
36
+ position1 = Factory.create(:position, :time_slot => time_slot1, :user => user)
37
+ position2 = Factory.build(:position, :time_slot => time_slot2, :user => user)
38
+ position2.should be_valid
39
+ position2.errors[:base].should be_empty
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,47 @@
1
+ require_relative '../../../spec_helper'
2
+ require_relative '../factories/position'
3
+ require_relative '../factories/time_slot'
4
+ require_relative '../factories/user'
5
+
6
+ describe TimeSlot do
7
+
8
+ before(:all) do
9
+ Position.delete_all
10
+ TimeSlot.delete_all
11
+ User.delete_all
12
+ end
13
+
14
+ it "create time_slot" do
15
+ lambda {
16
+ Factory(:time_slot)
17
+ }.should change(TimeSlot, :count).by(1)
18
+ end
19
+
20
+ context "Validation with scope and association" do
21
+
22
+ it "is not valid if exists time slot which have position with same person" do
23
+ time_slot1 = Factory.create(:time_slot, :starts_at => "2012-10-11".to_date, :ends_at => "2012-10-13".to_date)
24
+ time_slot2 = Factory.create(:time_slot, :starts_at => "2012-10-15".to_date, :ends_at => "2012-10-16".to_date)
25
+ user = Factory.create(:user)
26
+ position1 = Factory.create(:position, :time_slot => time_slot1, :user => user)
27
+ position2 = Factory.create(:position, :time_slot => time_slot2, :user => user)
28
+ time_slot2.reload
29
+ time_slot2.starts_at = "2012-10-12".to_date
30
+ time_slot2.should_not be_valid
31
+ time_slot2.errors[:base].should_not be_empty
32
+ end
33
+
34
+ it "is be valid if exists time slot which have position with same person" do
35
+ time_slot1 = Factory.create(:time_slot, :starts_at => "2012-10-11".to_date, :ends_at => "2012-10-13".to_date)
36
+ time_slot2 = Factory.create(:time_slot, :starts_at => "2012-10-14".to_date, :ends_at => "2012-10-16".to_date)
37
+ user = Factory.create(:user)
38
+ position1 = Factory.create(:position, :time_slot => time_slot1, :user => user)
39
+ position2 = Factory.build(:position, :time_slot => time_slot2, :user => user)
40
+ time_slot2.starts_at = "2012-10-15".to_date
41
+ time_slot2.should be_valid
42
+ time_slot2.errors[:base].should be_empty
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "validates_overlap"
8
- s.version = "0.0.6"
8
+ s.version = "0.1.0"
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 = "2012-05-13"
12
+ s.date = "2012-12-07"
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 = [
@@ -30,8 +30,10 @@ Gem::Specification.new do |s|
30
30
  "spec/dummy/app/helpers/application_helper.rb",
31
31
  "spec/dummy/app/models/end_overlap_meeting.rb",
32
32
  "spec/dummy/app/models/meeting.rb",
33
+ "spec/dummy/app/models/position.rb",
33
34
  "spec/dummy/app/models/start_end_overlap_meeting.rb",
34
35
  "spec/dummy/app/models/start_overlap_meeting.rb",
36
+ "spec/dummy/app/models/time_slot.rb",
35
37
  "spec/dummy/app/models/user.rb",
36
38
  "spec/dummy/app/models/user_meeting.rb",
37
39
  "spec/dummy/app/views/layouts/application.html.erb",
@@ -56,6 +58,7 @@ Gem::Specification.new do |s|
56
58
  "spec/dummy/db/migrate/20120509130956_create_end_overlap_meetings.rb",
57
59
  "spec/dummy/db/migrate/20120509131012_create_start_overlap_meetings.rb",
58
60
  "spec/dummy/db/migrate/20120509131032_create_start_end_overlap_meetings.rb",
61
+ "spec/dummy/db/migrate/20121207162212_create_time_slot.rb",
59
62
  "spec/dummy/db/schema.rb",
60
63
  "spec/dummy/public/404.html",
61
64
  "spec/dummy/public/422.html",
@@ -71,14 +74,18 @@ Gem::Specification.new do |s|
71
74
  "spec/dummy/script/rails",
72
75
  "spec/dummy/spec/factories/end_overlap_meeting.rb",
73
76
  "spec/dummy/spec/factories/meeting.rb",
77
+ "spec/dummy/spec/factories/position.rb",
74
78
  "spec/dummy/spec/factories/start_end_overlap_meeting.rb",
75
79
  "spec/dummy/spec/factories/start_overlap_meeting.rb",
80
+ "spec/dummy/spec/factories/time_slot.rb",
76
81
  "spec/dummy/spec/factories/user.rb",
77
82
  "spec/dummy/spec/factories/user_meeting.rb",
78
83
  "spec/dummy/spec/models/end_overlap_meeting_spec.rb",
79
84
  "spec/dummy/spec/models/meeting_spec.rb",
85
+ "spec/dummy/spec/models/position_spec.rb",
80
86
  "spec/dummy/spec/models/start_end_overlap_meeting_spec.rb",
81
87
  "spec/dummy/spec/models/start_overlap_meeting_spec.rb",
88
+ "spec/dummy/spec/models/time_slot_spec.rb",
82
89
  "spec/dummy/spec/models/user_meeting_spec.rb",
83
90
  "spec/dummy/spec/models/user_spec.rb",
84
91
  "spec/spec_helper.rb",
@@ -87,7 +94,7 @@ Gem::Specification.new do |s|
87
94
  s.homepage = "http://github.com/robinbortlik/validates_overlap"
88
95
  s.licenses = ["MIT"]
89
96
  s.require_paths = ["lib"]
90
- s.rubygems_version = "1.8.17"
97
+ s.rubygems_version = "1.8.24"
91
98
  s.summary = "This gem helps validate records with time overlap."
92
99
 
93
100
  if s.respond_to? :specification_version then
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.0.6
4
+ version: 0.1.0
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: 2012-05-13 00:00:00.000000000 Z
12
+ date: 2012-12-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70310037153900 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70310037153900
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: sqlite3
27
- requirement: &70310037153420 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70310037153420
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rspec-rails
38
- requirement: &70310037152920 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 2.0.0.beta
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70310037152920
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.0.beta
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: factory_girl_rails
49
- requirement: &70310037152400 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70310037152400
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: bundler
60
- requirement: &70310037151840 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: 1.0.0
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70310037151840
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.0.0
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: jeweler
71
- requirement: &70310037151340 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: 1.5.2
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70310037151340
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.5.2
80
110
  description: It can be useful when you you are developing some app where you will
81
111
  work with meetings, events etc.
82
112
  email: robinbortlik@gmail.com
@@ -99,8 +129,10 @@ files:
99
129
  - spec/dummy/app/helpers/application_helper.rb
100
130
  - spec/dummy/app/models/end_overlap_meeting.rb
101
131
  - spec/dummy/app/models/meeting.rb
132
+ - spec/dummy/app/models/position.rb
102
133
  - spec/dummy/app/models/start_end_overlap_meeting.rb
103
134
  - spec/dummy/app/models/start_overlap_meeting.rb
135
+ - spec/dummy/app/models/time_slot.rb
104
136
  - spec/dummy/app/models/user.rb
105
137
  - spec/dummy/app/models/user_meeting.rb
106
138
  - spec/dummy/app/views/layouts/application.html.erb
@@ -125,6 +157,7 @@ files:
125
157
  - spec/dummy/db/migrate/20120509130956_create_end_overlap_meetings.rb
126
158
  - spec/dummy/db/migrate/20120509131012_create_start_overlap_meetings.rb
127
159
  - spec/dummy/db/migrate/20120509131032_create_start_end_overlap_meetings.rb
160
+ - spec/dummy/db/migrate/20121207162212_create_time_slot.rb
128
161
  - spec/dummy/db/schema.rb
129
162
  - spec/dummy/public/404.html
130
163
  - spec/dummy/public/422.html
@@ -140,14 +173,18 @@ files:
140
173
  - spec/dummy/script/rails
141
174
  - spec/dummy/spec/factories/end_overlap_meeting.rb
142
175
  - spec/dummy/spec/factories/meeting.rb
176
+ - spec/dummy/spec/factories/position.rb
143
177
  - spec/dummy/spec/factories/start_end_overlap_meeting.rb
144
178
  - spec/dummy/spec/factories/start_overlap_meeting.rb
179
+ - spec/dummy/spec/factories/time_slot.rb
145
180
  - spec/dummy/spec/factories/user.rb
146
181
  - spec/dummy/spec/factories/user_meeting.rb
147
182
  - spec/dummy/spec/models/end_overlap_meeting_spec.rb
148
183
  - spec/dummy/spec/models/meeting_spec.rb
184
+ - spec/dummy/spec/models/position_spec.rb
149
185
  - spec/dummy/spec/models/start_end_overlap_meeting_spec.rb
150
186
  - spec/dummy/spec/models/start_overlap_meeting_spec.rb
187
+ - spec/dummy/spec/models/time_slot_spec.rb
151
188
  - spec/dummy/spec/models/user_meeting_spec.rb
152
189
  - spec/dummy/spec/models/user_spec.rb
153
190
  - spec/spec_helper.rb
@@ -167,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
204
  version: '0'
168
205
  segments:
169
206
  - 0
170
- hash: 486938746215204514
207
+ hash: 1024957372964977180
171
208
  required_rubygems_version: !ruby/object:Gem::Requirement
172
209
  none: false
173
210
  requirements:
@@ -176,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
213
  version: '0'
177
214
  requirements: []
178
215
  rubyforge_project:
179
- rubygems_version: 1.8.17
216
+ rubygems_version: 1.8.24
180
217
  signing_key:
181
218
  specification_version: 3
182
219
  summary: This gem helps validate records with time overlap.