acts_as_span 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,49 +1,36 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Span" do
4
- before(:each) do
5
- build_model :span_model do
6
- date :start_date
7
- date :end_date
8
-
9
- acts_as_span
10
- end
11
- end
12
-
13
- let(:span_model) { SpanModel.new(:start_date => Date.today, :end_date => nil) }
3
+ RSpec.describe "Span" do
4
+ let(:span_model) { SpanModel.new(:start_date => Date.current, :end_date => nil) }
14
5
  let(:span) { span_model.span }
15
-
16
- context "#span_status & #span_status_to_s" do
6
+
7
+ context "#span_status" do
17
8
  before(:each) do
18
- span.stub!(:current?).and_return(false)
19
- span.stub!(:future?).and_return(false)
20
- span.stub!(:expired?).and_return(false)
9
+ allow(span).to receive(:current?).and_return(false)
10
+ allow(span).to receive(:future?).and_return(false)
11
+ allow(span).to receive(:expired?).and_return(false)
21
12
  end
22
-
13
+
23
14
  it "should return :unknown when all_conditions == false" do
24
- span.span_status.should == :unknown
25
- span.span_status_to_s.should == 'Unknown'
15
+ expect(span.span_status).to eq(:unknown)
26
16
  end
27
-
17
+
28
18
  it "should return :current when current? == true" do
29
- span.should_receive(:current?).twice.and_return(true)
30
-
31
- span.span_status.should == :current
32
- span.span_status_to_s.should == 'Current'
19
+ expect(span).to receive(:current?).once.and_return(true)
20
+
21
+ expect(span.span_status).to eq(:current)
33
22
  end
34
-
23
+
35
24
  it "should return :current when future? == true" do
36
- span.should_receive(:future?).twice.and_return(true)
37
-
38
- span.span_status.should == :future
39
- span.span_status_to_s.should == 'Future'
25
+ expect(span).to receive(:future?).once.and_return(true)
26
+
27
+ expect(span.span_status).to eq(:future)
40
28
  end
41
-
29
+
42
30
  it "should return :current when expired? == true" do
43
- span.should_receive(:expired?).twice.and_return(true)
44
-
45
- span.span_status.should == :expired
46
- span.span_status_to_s.should == 'Expired'
31
+ expect(span).to receive(:expired?).once.and_return(true)
32
+
33
+ expect(span.span_status).to eq(:expired)
47
34
  end
48
35
  end
49
- end
36
+ end
@@ -1,54 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Span" do
4
- before(:each) do
5
- build_model :span_model do
6
- date :start_date
7
- date :end_date
8
- end
9
- end
10
-
11
- #let(:span_model) { SpanModel.new(:start_date => Date.today, :end_date => Date.today + 1) }
12
- #let(:span) { span_model.span }
13
-
3
+ RSpec.describe "Span" do
14
4
  it "should be valid" do
15
5
  SpanModel.acts_as_span
16
6
  span_model = SpanModel.new(:start_date => nil, :end_date => nil)
17
-
18
- span_model.should be_valid
19
- end
20
-
21
- context ":start_date_field_required => true" do
22
- before do
23
- SpanModel.acts_as_span :start_date_field_required => true
24
- end
25
-
26
- it "should require a start_date" do
27
- span_model = SpanModel.new(:start_date => nil, :end_date => Date.today + 1)
28
-
29
- span_model.should_not be_valid
30
- span_model.errors[:start_date].should have(1).error
31
- end
32
- end
33
-
34
- context ":end_date_field_required => true" do
35
- before do
36
- SpanModel.acts_as_span :end_date_field_required => true
37
- end
38
-
39
- it "should require an end_date" do
40
- span_model = SpanModel.new(:start_date => Date.today, :end_date => nil)
41
-
42
- span_model.should_not be_valid
43
- span_model.errors[:end_date].should have(1).error
44
- end
7
+
8
+ expect(span_model).to be_valid
45
9
  end
46
-
10
+
47
11
  it "should require a start_date before the end_date" do
48
12
  SpanModel.acts_as_span
49
- span_model = SpanModel.new(:start_date => Date.today, :end_date => Date.today - 1)
50
-
51
- span_model.should_not be_valid
52
- span_model.errors[:end_date].should have(1).error
13
+ span_model = SpanModel.new(:start_date => Date.current, :end_date => Date.current - 1)
14
+
15
+ expect(span_model).not_to be_valid
16
+ expect(span_model.errors[:end_date].size).to eq(1)
53
17
  end
54
18
  end
@@ -1,41 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
- #NOTE: we're also testing :start_date_field & :end_date_field options work
4
-
5
- describe "Span" do
6
- before(:each) do
7
- build_model :span_model do
8
- date :start_date_x
9
- date :end_date_x
10
-
11
- acts_as_span :start_date_field => :start_date_x,
12
- :end_date_field => :end_date_x
13
- end
14
- end
15
-
16
- context "#close!" do
17
- let(:span_model) { SpanModel.new(:start_date_x => Date.today, :end_date_x => nil) }
18
- let(:span) { span_model.span }
19
-
20
- it "should set end_date? to today" do
21
- lambda { span.close! }.should change(span_model, :end_date_x).from(nil).to(Date.today)
22
- end
23
-
24
- it "should set end_date? to the parameter" do
25
- lambda { span.close_on!(Date.today + 1.day) }.should change(span_model, :end_date_x).from(nil).to(Date.today + 1.day)
26
- end
27
- end
28
-
3
+ RSpec.describe "Span" do
29
4
  context "start_date & end_date" do
30
- let(:span_model) { SpanModel.new(:start_date_x => Date.today, :end_date_x => Date.today + 1) }
5
+ let(:span_model) { SpanModel.new(:start_date => Date.current, :end_date => Date.current + 1) }
31
6
  let(:span) { span_model.span }
32
7
 
33
8
  it "should return the start_date" do
34
- span.start_date.should == span_model.start_date_x
9
+ expect(span.start_date).to eq(span_model.start_date)
35
10
  end
36
11
 
37
12
  it "should return the end_date" do
38
- span.end_date.should == span_model.end_date_x
13
+ expect(span.end_date).to eq(span_model.end_date)
39
14
  end
40
15
  end
41
- end
16
+ end
@@ -0,0 +1,115 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActsAsSpan::WithinParentDateSpanValidator do
4
+ let(:new_child) do
5
+ child_class.new(
6
+ start_date: new_child_start_date,
7
+ end_date: new_child_end_date,
8
+ mama: mama)
9
+ end
10
+
11
+ let!(:mama) { Mama.create(start_date: mama_start_date, end_date: mama_end_date) }
12
+ let!(:papa) { Papa.create(start_date: papa_start_date, end_date: papa_end_date) }
13
+
14
+ let(:thirty_years_ago) { Date.current - 30.years }
15
+ let(:seventy_years_in_the_future) { Date.current + 70.years }
16
+
17
+ let(:mama_start_date) { thirty_years_ago }
18
+ let(:mama_end_date) { seventy_years_in_the_future }
19
+
20
+ let(:papa_start_date) { thirty_years_ago + 1.year }
21
+ let(:papa_end_date) { seventy_years_in_the_future - 1.year }
22
+
23
+ describe 'an object that validates against a single parent' do
24
+ let(:child_class) { OneParentChild }
25
+
26
+ context 'inside parent date span' do
27
+ let(:new_child_start_date) { mama_start_date }
28
+ let(:new_child_end_date) { mama_end_date }
29
+
30
+ it do
31
+ expect(new_child).to be_valid
32
+ end
33
+ end
34
+
35
+ context 'child_record_without_start_date' do
36
+ let(:new_child_start_date) { nil }
37
+ let(:new_child_end_date) { mama_end_date }
38
+
39
+ it do
40
+ expect(new_child).to be_invalid
41
+ end
42
+ end
43
+
44
+ context 'child_record_without_start_date' do
45
+ let(:new_child_start_date) { mama_start_date }
46
+ let(:new_child_end_date) { nil }
47
+
48
+ it do
49
+ expect(new_child).to be_invalid
50
+ end
51
+ end
52
+
53
+ context 'child_record_started_before_parent_record' do
54
+ let(:new_child_start_date) { mama_start_date - 1 }
55
+ let(:new_child_end_date) { mama_end_date }
56
+
57
+ it do
58
+ expect(new_child).to be_invalid
59
+ end
60
+ end
61
+
62
+ context 'child_record_ended_after_parent_record' do
63
+ let(:new_child_start_date) { mama_start_date }
64
+ let(:new_child_end_date) { mama_end_date + 1 }
65
+
66
+ it do
67
+ expect(new_child).to be_invalid
68
+ end
69
+ end
70
+
71
+ context 'with unassigned parent start_date' do
72
+ let(:new_child_start_date) { thirty_years_ago }
73
+ let(:new_child_end_date) { mama_end_date }
74
+ let(:mama_start_date) { nil }
75
+
76
+ it do
77
+ expect(new_child).to be_valid
78
+ end
79
+ end
80
+
81
+ context 'with unassigned parent end_date' do
82
+ let(:new_child_start_date) { mama_start_date }
83
+ let(:new_child_end_date) { seventy_years_in_the_future }
84
+ let(:mama_end_date) { nil }
85
+
86
+ it do
87
+ expect(new_child).to be_valid
88
+ end
89
+ end
90
+ end
91
+
92
+ describe 'an object with multiple parents' do
93
+ let(:child_class) { TwoParentChild }
94
+
95
+ before { new_child.papa = papa }
96
+
97
+ context 'valid cases' do
98
+ let(:new_child_start_date) { papa_start_date }
99
+ let(:new_child_end_date) { papa_end_date }
100
+
101
+ it 'allows date spans that lie within all respective parental date spans' do
102
+ expect(new_child).to be_valid
103
+ end
104
+ end
105
+
106
+ context 'invalid cases' do
107
+ let(:new_child_start_date) { papa_start_date - 1 }
108
+ let(:new_child_end_date) { papa_end_date + 1 }
109
+
110
+ it 'does not allow date spans that lie outside of respective parental date spans' do
111
+ expect(new_child).not_to be_valid
112
+ end
113
+ end
114
+ end
115
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,23 @@
1
- require 'rubygems'
2
1
  require 'bundler/setup'
3
- require 'acts_as_fu'
4
- require 'active_support'
5
-
6
2
  require 'acts_as_span'
3
+ require 'pry'
4
+
5
+ require 'active_record'
6
+ require 'active_support'
7
+ require 'spec_models'
7
8
 
8
9
  RSpec.configure do |config|
9
- config.include ActsAsFu
10
- end
10
+ # Enable flags like --only-failures and --next-failure
11
+ config.example_status_persistence_file_path = ".rspec_status"
12
+
13
+ # Disable RSpec exposing methods globally on `Module` and `main`
14
+ config.disable_monkey_patching!
15
+
16
+ config.expect_with :rspec do |c|
17
+ c.syntax = :expect
18
+ end
19
+
20
+ config.after do
21
+ Temping.cleanup
22
+ end
23
+ end
@@ -0,0 +1,69 @@
1
+ require 'temping'
2
+ require 'has_siblings'
3
+
4
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
5
+ ActiveRecord::Base.logger = Logger.new(STDOUT) if ENV["DEBUG"]
6
+
7
+ Temping.create :span_model do
8
+ with_columns do |t|
9
+ t.date :start_date
10
+ t.date :end_date
11
+ end
12
+
13
+ acts_as_span
14
+ end
15
+
16
+ Temping.create :one_parent_child do
17
+ with_columns do |t|
18
+ t.belongs_to :mama
19
+
20
+ t.date :start_date
21
+ t.date :end_date
22
+ end
23
+
24
+ acts_as_span
25
+
26
+ belongs_to :mama
27
+ has_siblings through: [:mama]
28
+
29
+ validates_with ActsAsSpan::NoOverlapValidator, scope: proc { siblings }
30
+ validates_with ActsAsSpan::WithinParentDateSpanValidator, parents: [:mama]
31
+ end
32
+
33
+ Temping.create :two_parent_child do
34
+ with_columns do |t|
35
+ t.belongs_to :mama
36
+ t.belongs_to :papa
37
+
38
+ t.date :start_date
39
+ t.date :end_date
40
+ end
41
+
42
+ acts_as_span
43
+
44
+ belongs_to :mama
45
+ belongs_to :papa
46
+ has_siblings through: [:mama, :papa]
47
+
48
+ validates_with ActsAsSpan::NoOverlapValidator, scope: proc { siblings }
49
+ validates_with ActsAsSpan::WithinParentDateSpanValidator, parents: [:mama, :papa]
50
+ end
51
+
52
+ Temping.create :mama do
53
+ with_columns do |t|
54
+ t.date :start_date
55
+ t.date :end_date
56
+ end
57
+
58
+ has_many :one_parent_children
59
+ has_many :two_parent_children
60
+ end
61
+
62
+ Temping.create :papa do
63
+ with_columns do |t|
64
+ t.date :start_date
65
+ t.date :end_date
66
+ end
67
+
68
+ has_many :one_parent_children
69
+ end
metadata CHANGED
@@ -1,112 +1,212 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: acts_as_span
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Eric Sullivan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
-
13
- date: 2011-08-28 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: activerecord
11
+ date: 2018-07-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
17
63
  prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: has_siblings
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.7
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.7
83
+ - !ruby/object:Gem::Dependency
84
+ name: temping
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-byebug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
21
101
  - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "3"
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'
111
+ - !ruby/object:Gem::Dependency
112
+ name: activerecord
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 4.2.0
24
118
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: activesupport
28
119
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
30
- none: false
31
- requirements:
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
32
122
  - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
123
+ - !ruby/object:Gem::Version
124
+ version: 4.2.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: activesupport
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 4.2.0
35
132
  type: :runtime
36
- version_requirements: *id002
37
- description: start_date and end_date as a span w/ ActiveRecord
38
- email:
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 4.2.0
139
+ description: ActiveRecord model w/ a start_date and an end_date == ActsAsSpan
140
+ email:
39
141
  - eric.sullivan@annkissam.com
40
142
  executables: []
41
-
42
143
  extensions: []
43
-
44
144
  extra_rdoc_files: []
45
-
46
- files:
47
- - .gitignore
145
+ files:
146
+ - ".gitignore"
147
+ - ".rspec"
148
+ - ".travis.yml"
48
149
  - Gemfile
49
- - Gemfile.lock
50
150
  - LICENSE
51
151
  - README.rdoc
52
152
  - Rakefile
53
153
  - acts_as_span.gemspec
54
154
  - lib/acts_as_span.rb
155
+ - lib/acts_as_span/no_overlap_validator.rb
55
156
  - lib/acts_as_span/span_instance.rb
56
- - lib/acts_as_span/span_instance/overlap.rb
57
157
  - lib/acts_as_span/span_instance/status.rb
58
158
  - lib/acts_as_span/span_instance/validations.rb
59
159
  - lib/acts_as_span/span_klass.rb
60
- - lib/acts_as_span/span_klass/overlap.rb
61
160
  - lib/acts_as_span/span_klass/status.rb
62
161
  - lib/acts_as_span/version.rb
162
+ - lib/acts_as_span/within_parent_date_span_validator.rb
63
163
  - spec/lib/acts_as_span_spec.rb
64
164
  - spec/lib/delegation_spec.rb
65
- - spec/lib/negative_spec.rb
165
+ - spec/lib/no_overlap_validator_spec.rb
66
166
  - spec/lib/span_instance/named_scopes_on_spec.rb
67
167
  - spec/lib/span_instance/named_scopes_spec.rb
68
168
  - spec/lib/span_instance/overlap_spec.rb
69
169
  - spec/lib/span_instance/status_spec.rb
70
170
  - spec/lib/span_instance/validations_spec.rb
71
171
  - spec/lib/span_instance_spec.rb
72
- - spec/spec.opts
172
+ - spec/lib/within_parent_date_span_validator_spec.rb
73
173
  - spec/spec_helper.rb
174
+ - spec/spec_models.rb
74
175
  homepage: https://github.com/annkissam/acts_as_span
75
- licenses: []
76
-
176
+ licenses:
177
+ - MIT
178
+ metadata:
179
+ allowed_push_host: https://rubygems.org
77
180
  post_install_message:
78
181
  rdoc_options: []
79
-
80
- require_paths:
182
+ require_paths:
81
183
  - lib
82
- required_ruby_version: !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ requirements:
85
186
  - - ">="
86
- - !ruby/object:Gem::Version
87
- version: "0"
88
- required_rubygems_version: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
91
191
  - - ">="
92
- - !ruby/object:Gem::Version
93
- version: "0"
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
94
194
  requirements: []
95
-
96
- rubyforge_project: acts_as_span
97
- rubygems_version: 1.8.8
195
+ rubyforge_project:
196
+ rubygems_version: 2.6.14
98
197
  signing_key:
99
- specification_version: 3
100
- summary: acts_as_span 0.0.5
101
- test_files:
198
+ specification_version: 4
199
+ summary: acts_as_span 0.0.6
200
+ test_files:
102
201
  - spec/lib/acts_as_span_spec.rb
103
202
  - spec/lib/delegation_spec.rb
104
- - spec/lib/negative_spec.rb
203
+ - spec/lib/no_overlap_validator_spec.rb
105
204
  - spec/lib/span_instance/named_scopes_on_spec.rb
106
205
  - spec/lib/span_instance/named_scopes_spec.rb
107
206
  - spec/lib/span_instance/overlap_spec.rb
108
207
  - spec/lib/span_instance/status_spec.rb
109
208
  - spec/lib/span_instance/validations_spec.rb
110
209
  - spec/lib/span_instance_spec.rb
111
- - spec/spec.opts
210
+ - spec/lib/within_parent_date_span_validator_spec.rb
112
211
  - spec/spec_helper.rb
212
+ - spec/spec_models.rb