acts_as_span 0.0.5 → 1.2.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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -3
  3. data/.rspec +2 -0
  4. data/.tool-versions +1 -0
  5. data/.travis.yml +12 -0
  6. data/Gemfile +0 -3
  7. data/README.rdoc +4 -16
  8. data/Rakefile +5 -1
  9. data/acts_as_span.gemspec +31 -14
  10. data/config/locales/en/acts_as_span.yml +15 -0
  11. data/lib/acts_as_span.rb +69 -98
  12. data/lib/acts_as_span/end_date_propagator.rb +198 -0
  13. data/lib/acts_as_span/no_overlap_validator.rb +86 -0
  14. data/lib/acts_as_span/span_instance.rb +24 -32
  15. data/lib/acts_as_span/span_instance/status.rb +12 -27
  16. data/lib/acts_as_span/span_instance/validations.rb +11 -53
  17. data/lib/acts_as_span/span_klass.rb +11 -19
  18. data/lib/acts_as_span/span_klass/status.rb +43 -12
  19. data/lib/acts_as_span/version.rb +6 -4
  20. data/lib/acts_as_span/within_parent_date_span_validator.rb +44 -0
  21. data/spec/lib/acts_as_span_spec.rb +38 -35
  22. data/spec/lib/delegation_spec.rb +45 -78
  23. data/spec/lib/end_date_propagator_spec.rb +319 -0
  24. data/spec/lib/no_overlap_validator_spec.rb +129 -0
  25. data/spec/lib/span_instance/named_scopes_on_spec.rb +193 -193
  26. data/spec/lib/span_instance/named_scopes_spec.rb +193 -191
  27. data/spec/lib/span_instance/overlap_spec.rb +193 -253
  28. data/spec/lib/span_instance/status_spec.rb +22 -35
  29. data/spec/lib/span_instance/validations_spec.rb +8 -44
  30. data/spec/lib/span_instance_spec.rb +17 -30
  31. data/spec/lib/span_klass/status_spec.rb +38 -0
  32. data/spec/lib/within_parent_date_span_validator_spec.rb +126 -0
  33. data/spec/spec_helper.rb +19 -6
  34. data/spec/spec_models.rb +226 -0
  35. metadata +167 -61
  36. data/Gemfile.lock +0 -47
  37. data/lib/acts_as_span/span_instance/overlap.rb +0 -17
  38. data/lib/acts_as_span/span_klass/overlap.rb +0 -21
  39. data/spec/lib/negative_spec.rb +0 -30
  40. data/spec/spec.opts +0 -1
metadata CHANGED
@@ -1,112 +1,218 @@
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: 1.2.0
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Eric Sullivan
9
- autorequire:
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: 2021-02-02 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: 2.1.4
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: has_siblings
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.7
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 12.3.3
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 12.3.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.4'
90
+ type: :development
17
91
  prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.4'
97
+ - !ruby/object:Gem::Dependency
98
+ name: temping
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: 5.0.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: 5.0.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: 5.0.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: 5.0.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
+ - ".tool-versions"
149
+ - ".travis.yml"
48
150
  - Gemfile
49
- - Gemfile.lock
50
151
  - LICENSE
51
152
  - README.rdoc
52
153
  - Rakefile
53
154
  - acts_as_span.gemspec
155
+ - config/locales/en/acts_as_span.yml
54
156
  - lib/acts_as_span.rb
157
+ - lib/acts_as_span/end_date_propagator.rb
158
+ - lib/acts_as_span/no_overlap_validator.rb
55
159
  - lib/acts_as_span/span_instance.rb
56
- - lib/acts_as_span/span_instance/overlap.rb
57
160
  - lib/acts_as_span/span_instance/status.rb
58
161
  - lib/acts_as_span/span_instance/validations.rb
59
162
  - lib/acts_as_span/span_klass.rb
60
- - lib/acts_as_span/span_klass/overlap.rb
61
163
  - lib/acts_as_span/span_klass/status.rb
62
164
  - lib/acts_as_span/version.rb
165
+ - lib/acts_as_span/within_parent_date_span_validator.rb
63
166
  - spec/lib/acts_as_span_spec.rb
64
167
  - spec/lib/delegation_spec.rb
65
- - spec/lib/negative_spec.rb
168
+ - spec/lib/end_date_propagator_spec.rb
169
+ - spec/lib/no_overlap_validator_spec.rb
66
170
  - spec/lib/span_instance/named_scopes_on_spec.rb
67
171
  - spec/lib/span_instance/named_scopes_spec.rb
68
172
  - spec/lib/span_instance/overlap_spec.rb
69
173
  - spec/lib/span_instance/status_spec.rb
70
174
  - spec/lib/span_instance/validations_spec.rb
71
175
  - spec/lib/span_instance_spec.rb
72
- - spec/spec.opts
176
+ - spec/lib/span_klass/status_spec.rb
177
+ - spec/lib/within_parent_date_span_validator_spec.rb
73
178
  - spec/spec_helper.rb
179
+ - spec/spec_models.rb
74
180
  homepage: https://github.com/annkissam/acts_as_span
75
- licenses: []
76
-
77
- post_install_message:
181
+ licenses:
182
+ - MIT
183
+ metadata:
184
+ allowed_push_host: https://rubygems.org
185
+ post_install_message:
78
186
  rdoc_options: []
79
-
80
- require_paths:
187
+ require_paths:
81
188
  - lib
82
- required_ruby_version: !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
85
191
  - - ">="
86
- - !ruby/object:Gem::Version
87
- version: "0"
88
- required_rubygems_version: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
91
196
  - - ">="
92
- - !ruby/object:Gem::Version
93
- version: "0"
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
94
199
  requirements: []
95
-
96
- rubyforge_project: acts_as_span
97
- rubygems_version: 1.8.8
98
- signing_key:
99
- specification_version: 3
100
- summary: acts_as_span 0.0.5
101
- test_files:
200
+ rubygems_version: 3.0.3
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: acts_as_span 1.2.0
204
+ test_files:
102
205
  - spec/lib/acts_as_span_spec.rb
103
206
  - spec/lib/delegation_spec.rb
104
- - spec/lib/negative_spec.rb
207
+ - spec/lib/end_date_propagator_spec.rb
208
+ - spec/lib/no_overlap_validator_spec.rb
105
209
  - spec/lib/span_instance/named_scopes_on_spec.rb
106
210
  - spec/lib/span_instance/named_scopes_spec.rb
107
211
  - spec/lib/span_instance/overlap_spec.rb
108
212
  - spec/lib/span_instance/status_spec.rb
109
213
  - spec/lib/span_instance/validations_spec.rb
110
214
  - spec/lib/span_instance_spec.rb
111
- - spec/spec.opts
215
+ - spec/lib/span_klass/status_spec.rb
216
+ - spec/lib/within_parent_date_span_validator_spec.rb
112
217
  - spec/spec_helper.rb
218
+ - spec/spec_models.rb
data/Gemfile.lock DELETED
@@ -1,47 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- acts_as_span (0.0.5)
5
- activerecord (>= 3)
6
- activesupport
7
-
8
- GEM
9
- remote: http://rubygems.org/
10
- specs:
11
- activemodel (3.0.10)
12
- activesupport (= 3.0.10)
13
- builder (~> 2.1.2)
14
- i18n (~> 0.5.0)
15
- activerecord (3.0.10)
16
- activemodel (= 3.0.10)
17
- activesupport (= 3.0.10)
18
- arel (~> 2.0.10)
19
- tzinfo (~> 0.3.23)
20
- activesupport (3.0.10)
21
- acts_as_fu (0.0.7.2)
22
- activerecord
23
- sqlite3-ruby
24
- arel (2.0.10)
25
- builder (2.1.2)
26
- diff-lcs (1.1.2)
27
- i18n (0.5.0)
28
- rspec (2.6.0)
29
- rspec-core (~> 2.6.0)
30
- rspec-expectations (~> 2.6.0)
31
- rspec-mocks (~> 2.6.0)
32
- rspec-core (2.6.4)
33
- rspec-expectations (2.6.0)
34
- diff-lcs (~> 1.1.2)
35
- rspec-mocks (2.6.0)
36
- sqlite3 (1.3.4)
37
- sqlite3-ruby (1.3.3)
38
- sqlite3 (>= 1.3.3)
39
- tzinfo (0.3.29)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- acts_as_fu
46
- acts_as_span!
47
- rspec
@@ -1,17 +0,0 @@
1
- require 'active_support'
2
-
3
- module ActsAsSpan
4
- class SpanInstance
5
- module Overlap
6
- extend ActiveSupport::Concern
7
-
8
- module InstanceMethods
9
- #http://stackoverflow.com/questions/699448/ruby-how-do-you-check-whether-a-range-contains-a-subset-of-another-range
10
- #start_date <= record_end_date && record_start_date <= end_date
11
- def overlap?(other_span)
12
- (start_date.nil? || other_span.end_date.nil? || start_date <= other_span.end_date) && (end_date.nil? || other_span.start_date.nil? || other_span.start_date <= end_date)
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,21 +0,0 @@
1
- require 'active_support'
2
-
3
- module ActsAsSpan
4
- class SpanKlass
5
- module Overlap
6
- extend ActiveSupport::Concern
7
-
8
- module InstanceMethods
9
- def overlap(test_span)
10
- overlap_scope = klass.where( ["(#{table_name}.#{start_date_field} IS NULL OR :end_date IS NULL OR #{table_name}.#{start_date_field} <= :end_date) AND (#{table_name}.#{end_date_field} IS NULL OR :start_date IS NULL OR :start_date <= #{table_name}.#{end_date_field})", { :start_date => test_span.start_date, :end_date => test_span.end_date } ] )
11
-
12
- if !test_span.new_record? && test_span.span_klass == klass
13
- overlap_scope.where( ["#{table_name}.id != :id", { :id => test_span.id } ] )
14
- end
15
-
16
- overlap_scope
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "acts_as_span" do
4
- before(:each) do
5
- build_model :negative_model do
6
- end
7
- end
8
-
9
- context "NegativeModel (Class)" do
10
- it "should respond_to acts_as_span" do
11
- NegativeModel.should respond_to(:acts_as_span)
12
- end
13
-
14
- it "should return false for acts_as_span?" do
15
- NegativeModel.acts_as_span?.should be_false
16
- end
17
-
18
- it "should have no acts_as_span_definitions" do
19
- NegativeModel.acts_as_span_definitions.should be_empty
20
- end
21
- end
22
-
23
- context "NegativeModel (Instance)" do
24
- let(:negative_model) { NegativeModel.new }
25
-
26
- it "should return false for acts_as_span?" do
27
- negative_model.acts_as_span?.should be_false
28
- end
29
- end
30
- end
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --color