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 +1 -1
- data/lib/validates_overlap/overlap_validator.rb +62 -11
- data/spec/dummy/app/models/position.rb +9 -0
- data/spec/dummy/app/models/start_overlap_meeting.rb +1 -1
- data/spec/dummy/app/models/time_slot.rb +8 -0
- data/spec/dummy/db/migrate/20121207162212_create_time_slot.rb +20 -0
- data/spec/dummy/db/schema.rb +15 -1
- data/spec/dummy/spec/factories/position.rb +4 -0
- data/spec/dummy/spec/factories/time_slot.rb +4 -0
- data/spec/dummy/spec/factories/user.rb +2 -2
- data/spec/dummy/spec/models/position_spec.rb +44 -0
- data/spec/dummy/spec/models/time_slot_spec.rb +47 -0
- data/validates_overlap.gemspec +10 -3
- metadata +53 -16
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
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
|
-
|
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 &&
|
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
|
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
|
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
|
-
"
|
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,
|
102
|
-
self.sql_conditions += " AND #{attribute_to_sql(
|
103
|
-
self.sql_values.merge!({:"#{
|
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
|
@@ -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
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -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 =>
|
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"
|
@@ -1,3 +1,3 @@
|
|
1
1
|
Factory.define :user do |u|
|
2
|
-
|
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
|
data/validates_overlap.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "validates_overlap"
|
8
|
-
s.version = "0.0
|
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-
|
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.
|
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
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|