boundy 0.3.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 (65) hide show
  1. checksums.yaml +7 -0
  2. data/lib/boundy.rb +19 -0
  3. data/lib/boundy/bound.rb +65 -0
  4. data/lib/boundy/bound/comparator.rb +67 -0
  5. data/lib/boundy/bound/constrainer.rb +29 -0
  6. data/lib/boundy/bound/infinite.rb +46 -0
  7. data/lib/boundy/bound/infinite/above.rb +12 -0
  8. data/lib/boundy/bound/infinite/below.rb +13 -0
  9. data/lib/boundy/comparator.rb +19 -0
  10. data/lib/boundy/comparators.rb +28 -0
  11. data/lib/boundy/domain.rb +115 -0
  12. data/lib/boundy/domain/anterior.rb +45 -0
  13. data/lib/boundy/domain/builder.rb +31 -0
  14. data/lib/boundy/domain/comparator.rb +26 -0
  15. data/lib/boundy/domain/constrainer.rb +21 -0
  16. data/lib/boundy/domain/finite.rb +64 -0
  17. data/lib/boundy/domain/posterior.rb +43 -0
  18. data/lib/boundy/formatter.rb +9 -0
  19. data/lib/boundy/formatter/sql.rb +26 -0
  20. data/lib/boundy/formatter/sql/domain.rb +20 -0
  21. data/lib/boundy/formatter/sql/domain/plugin.rb +22 -0
  22. data/lib/boundy/formatter/sql/factory.rb +14 -0
  23. data/lib/boundy/formatter/sql/plugin.rb +38 -0
  24. data/lib/boundy/formatters/bound.rb +16 -0
  25. data/lib/boundy/formatters/domain.rb +12 -0
  26. data/lib/boundy/formatters/fixnum.rb +20 -0
  27. data/lib/boundy/formatters/sql/bound.rb +22 -0
  28. data/lib/boundy/formatters/sql/domain.rb +28 -0
  29. data/lib/boundy/formatters/sql/domain/anterior.rb +23 -0
  30. data/lib/boundy/formatters/sql/domain/finite.rb +24 -0
  31. data/lib/boundy/formatters/sql/domain/posterior.rb +23 -0
  32. data/lib/boundy/formatters/time.rb +42 -0
  33. data/lib/boundy/range/comparator.rb +38 -0
  34. data/lib/boundy/range/constrainer.rb +17 -0
  35. data/lib/boundy/time/comparator.rb +37 -0
  36. data/test/integration/boundy_test.rb +37 -0
  37. data/test/integration/domain_test.rb +18 -0
  38. data/test/integration/formatter/sql_test.rb +21 -0
  39. data/test/integration/test_helper.rb +14 -0
  40. data/test/unit/boundy/bound/comparator_test.rb +37 -0
  41. data/test/unit/boundy/bound/constrainer_test.rb +123 -0
  42. data/test/unit/boundy/bound/infinite/above_test.rb +36 -0
  43. data/test/unit/boundy/bound/infinite/below_test.rb +36 -0
  44. data/test/unit/boundy/bound/infinite_test.rb +0 -0
  45. data/test/unit/boundy/bound_test.rb +86 -0
  46. data/test/unit/boundy/comparator_test.rb +0 -0
  47. data/test/unit/boundy/domain/anterior_test.rb +103 -0
  48. data/test/unit/boundy/domain/comparator_test.rb +75 -0
  49. data/test/unit/boundy/domain/constrainer_test.rb +11 -0
  50. data/test/unit/boundy/domain/posterior_test.rb +75 -0
  51. data/test/unit/boundy/domain_test.rb +50 -0
  52. data/test/unit/boundy/formatter/sql/domain/plugin_test.rb +16 -0
  53. data/test/unit/boundy/formatter/sql/plugin_test.rb +50 -0
  54. data/test/unit/boundy/formatter/sql_test.rb +26 -0
  55. data/test/unit/boundy/formatters/bound_test.rb +43 -0
  56. data/test/unit/boundy/formatters/domain_test.rb +12 -0
  57. data/test/unit/boundy/formatters/sql/domain/anterior_test.rb +29 -0
  58. data/test/unit/boundy/formatters/sql/domain/finite_test.rb +35 -0
  59. data/test/unit/boundy/formatters/sql/domain/posterior_test.rb +30 -0
  60. data/test/unit/boundy/formatters/time_test.rb +27 -0
  61. data/test/unit/boundy/range/comparator_test.rb +44 -0
  62. data/test/unit/boundy/range/constrainer_test.rb +11 -0
  63. data/test/unit/boundy/time/comparator_test.rb +40 -0
  64. data/test/unit/test_helper.rb +14 -0
  65. metadata +154 -0
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../../../../test_helper', __FILE__)
2
+
3
+ require 'boundy/bound'
4
+ require 'boundy/bound/infinite/above'
5
+
6
+ class Boundy::Bound::Infinite::AboveTest < Test::Unit::TestCase
7
+ setup do
8
+ now = Time.now
9
+ @now_bound = Boundy::Bound.new(now)
10
+ @above = Boundy::Bound::Infinite::Above.new
11
+ end
12
+
13
+ test "< finite" do
14
+ assert_equal false, @above < @now_bound
15
+ end
16
+
17
+ test "> finite" do
18
+ assert_equal true, @above > @now_bound
19
+ end
20
+
21
+ test "<= finite" do
22
+ assert_equal false, @above <= @now_bound
23
+ end
24
+
25
+ test "=> finite" do
26
+ assert_equal true, @above >= @now_bound
27
+ end
28
+
29
+ test "==" do
30
+ assert_equal false, @above == @now_bound
31
+ end
32
+
33
+ test "<=> finite" do
34
+ assert_equal 1, @above <=> @now_bound
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../../../../test_helper', __FILE__)
2
+
3
+ require 'boundy/bound'
4
+ require 'boundy/bound/infinite/below'
5
+
6
+ class Boundy::Bound::Infinite::BelowTest < Test::Unit::TestCase
7
+ setup do
8
+ now = Time.now
9
+ @now_bound = Boundy::Bound.new(now)
10
+ @above = Boundy::Bound::Infinite::Below.new
11
+ end
12
+
13
+ test "< finite" do
14
+ assert_equal true, @above < @now_bound
15
+ end
16
+
17
+ test "> finite" do
18
+ assert_equal false, @above > @now_bound
19
+ end
20
+
21
+ test "<= finite" do
22
+ assert_equal true, @above <= @now_bound
23
+ end
24
+
25
+ test "=> finite" do
26
+ assert_equal false, @above >= @now_bound
27
+ end
28
+
29
+ test "==" do
30
+ assert_equal false, @above == @now_bound
31
+ end
32
+
33
+ test "<=> finite" do
34
+ assert_equal -1, @above <=> @now_bound
35
+ end
36
+ end
File without changes
@@ -0,0 +1,86 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ require 'boundy/bound'
4
+ require 'boundy/domain'
5
+ require 'boundy/domain/anterior'
6
+ require 'boundy/domain/posterior'
7
+
8
+ class Boundy::BoundTest < Test::Unit::TestCase
9
+ time = 5.days.ago
10
+ test_bound = Boundy::Bound.new(time)
11
+
12
+ times = [
13
+ {
14
+ name: "behind",
15
+ time: time - 2.days,
16
+ truthiness: [
17
+ {method: :within?, domain: :anterior},
18
+ {method: :before?, domain: :posterior}
19
+ ]
20
+ },
21
+ {
22
+ name: "equal",
23
+ time: time,
24
+ truthiness: [
25
+ {method: :within?, domain: :anterior},
26
+ {method: :within?, domain: :posterior},
27
+ {method: :within?, domain: :enclosed}
28
+ ]
29
+ },
30
+ {
31
+ name: "ahead",
32
+ time: time + 2.days,
33
+ truthiness: [
34
+ {method: :within?, domain: :posterior},
35
+ {method: :after?, domain: :anterior}
36
+ ]
37
+ }
38
+ ]
39
+
40
+ domain_classes = {
41
+ :anterior => Boundy::Domain::Anterior,
42
+ :posterior => Boundy::Domain::Posterior,
43
+ :enclosed => Boundy::Domain
44
+ }
45
+
46
+ domains = [:anterior, :posterior]
47
+ methods = [:before?, :within?, :after?]
48
+
49
+ cases = times.product(methods, domains).map do |p|
50
+ t = p[0]
51
+ method = p[1]
52
+ domain = p[2]
53
+
54
+ truthiness = t[:truthiness]
55
+ klass = domain_classes[domain]
56
+
57
+ expected = (truthiness.include?({method: method, domain: domain}))
58
+
59
+ t.merge({ :method => method,
60
+ :domain => domain,
61
+ :class => klass,
62
+ :expected => expected,
63
+ :failure => "#{domain.to_s}##{method} against #{t[:time]}"
64
+ })
65
+ end
66
+
67
+
68
+ cases.each do |c|
69
+ test "##{c[:domain]}##{c[:method]}_#{c[:name]}" do
70
+ bound = Boundy::Bound.new(c[:time])
71
+ domain = c[:class].new(bound)
72
+ result = test_bound.method(c[:method]).call(domain)
73
+ assert_equal c[:expected], result, c[:failure]
74
+ end
75
+ end
76
+
77
+ test "<=>" do
78
+ now = Time.new(2013,9,1)
79
+
80
+ from = Boundy::Bound.new(now - 5.day)
81
+ to = Boundy::Bound.new(now - 1.day)
82
+
83
+ assert_equal from <=> to, -1
84
+
85
+ end
86
+ end
File without changes
@@ -0,0 +1,103 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ require 'boundy/domain'
4
+ require 'boundy/domain/anterior'
5
+
6
+ class Boundy::Domain::AnteriorTest < Test::Unit::TestCase
7
+ setup do
8
+ @now = Time.now
9
+
10
+ @before = @now - 5.days
11
+
12
+ @tighter_before = @now - 4.days
13
+ @looser_before = @now - 6.days
14
+
15
+ @after = @now - 2.days
16
+ @tighter_after = @now - 3.days
17
+ @looser_after = @now - 1.days
18
+
19
+ @datum = @before
20
+
21
+ @range = Boundy::Domain::Anterior.new(@datum)
22
+ end
23
+
24
+ # constrain_to
25
+ test 'constrain_to domain equal' do
26
+ new = Boundy::Domain.new(@before, @after)
27
+
28
+ result = @range.constrain_to(new)
29
+
30
+ assert_equal @before, result.from.datum
31
+ assert_equal @after, result.to.datum
32
+ end
33
+
34
+ test 'constrain_to domain tighter' do
35
+ new = Boundy::Domain.new(@tighter_before, @tighter_after)
36
+
37
+ result = @range.constrain_to(new)
38
+
39
+ assert_equal @tighter_before, result.from.datum
40
+ assert_equal @tighter_after, result.to.datum
41
+ end
42
+
43
+ test 'constrain_to domain loserr' do
44
+ new = Boundy::Domain.new(@looser_before, @looser_after)
45
+
46
+ result = @range.constrain_to(new)
47
+
48
+ assert_equal @before, result.from.datum
49
+ assert_equal @looser_after, result.to.datum
50
+ end
51
+
52
+ test 'constrain_to anterior domain equal' do
53
+ new = Boundy::Domain::Anterior.new(@before)
54
+
55
+ result = @range.constrain_to(new)
56
+
57
+ assert_equal @before, result.from.datum
58
+ end
59
+
60
+ test 'constrain_to anterior domain tighter' do
61
+ new = Boundy::Domain::Anterior.new(@tighter_before)
62
+
63
+ result = @range.constrain_to(new)
64
+
65
+ assert_equal @tighter_before, result.from.datum
66
+ end
67
+
68
+ test 'constrain_to anterior domain loserr' do
69
+ new = Boundy::Domain::Anterior.new(@looser_before)
70
+
71
+ result = @range.constrain_to(new)
72
+
73
+ assert_equal @before, result.from.datum
74
+ end
75
+
76
+ test 'constrain_to range equal' do
77
+ range = (@before .. @after)
78
+
79
+ result = @range.constrain_to(range)
80
+
81
+ assert_equal @before, result.from.datum
82
+ assert_equal @after, result.to.datum
83
+ end
84
+
85
+ test 'constrain_to range tighter' do
86
+ range = (@tighter_before .. @tighter_after)
87
+
88
+ result = @range.constrain_to(range)
89
+
90
+ assert_equal @tighter_before, result.from.datum
91
+ assert_equal @tighter_after, result.to.datum
92
+ end
93
+
94
+ test 'constrain_to range looser' do
95
+ range = (@looser_before .. @looser_after)
96
+
97
+ result = @range.constrain_to(range)
98
+
99
+ assert_equal @before, result.from.datum
100
+ assert_equal @looser_after, result.to.datum
101
+ end
102
+ end
103
+
@@ -0,0 +1,75 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ require 'boundy/bound'
4
+ require 'boundy/domain'
5
+ require 'boundy/domain/comparator'
6
+
7
+ class Boundy::Domain::ComparatorTest < Test::Unit::TestCase
8
+ time = 5.days.ago
9
+ test_bound = Boundy::Bound.new(time)
10
+
11
+ times = [
12
+ {
13
+ name: "behind",
14
+ range: (time - 2.days .. time - 1.day),
15
+ truthiness: [
16
+ {method: :before?}
17
+ ]
18
+ },
19
+ {
20
+ name: "touching from behind",
21
+ range: (time - 1.days .. time),
22
+ truthiness: [
23
+ {method: :within?}
24
+ ]
25
+ },
26
+ {
27
+ name: "within",
28
+ range: (time - 1.days .. time + 1.day),
29
+ truthiness: [
30
+ {method: :within?}
31
+ ]
32
+ },
33
+ {
34
+ name: "touching from ahead",
35
+ range: (time .. time + 1.day),
36
+ truthiness: [
37
+ {method: :within?}
38
+ ]
39
+ },
40
+ {
41
+ name: "ahead",
42
+ range: (time + 1.days .. time + 2.day),
43
+ truthiness: [
44
+ {method: :after?}
45
+ ]
46
+ }
47
+ ]
48
+
49
+ methods = [:before?, :after?, :within?]
50
+
51
+ cases = times.product(methods).map do |p|
52
+ t = p[0]
53
+ method = p[1]
54
+ truthiness = t[:truthiness]
55
+
56
+ expected = (truthiness.include?({method: method}))
57
+
58
+ t.merge({ :method => method,
59
+ :expected => expected,
60
+ :failure => "#{method} failed"
61
+ })
62
+ end
63
+
64
+
65
+ cases.each do |c|
66
+ test "##{c[:method]}_#{c[:name]}" do
67
+ range = c[:range]
68
+ domain = Boundy::Domain.new(range.begin, range.end)
69
+ comp = Boundy::Domain::Comparator.new(test_bound, domain)
70
+
71
+ assert_equal c[:expected], comp.method(c[:method]).call
72
+ end
73
+ end
74
+ end
75
+
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ require 'boundy/domain/constrainer'
4
+
5
+ class Boundy::Domain::ConstrainerTest < Test::Unit::TestCase
6
+ test "foo" do
7
+ mock_range = mock
8
+ mock_bound = mock
9
+ Boundy::Domain::Constrainer.new(mock_range,mock_bound)
10
+ end
11
+ end
@@ -0,0 +1,75 @@
1
+ require File.expand_path('../../../test_helper', __FILE__)
2
+
3
+ require 'boundy/domain'
4
+ require 'boundy/domain/posterior'
5
+
6
+ class Boundy::Domain::PosteriorTest < Test::Unit::TestCase
7
+ setup do
8
+ @now = Time.now
9
+ @before = @now - 5.days
10
+
11
+ @tighter_before = @now - 4.days
12
+ @looser_before = @now - 6.days
13
+
14
+ @after = @now - 2.days
15
+ @tighter_after = @now - 3.days
16
+ @looser_after = @now - 1.days
17
+
18
+ @datum = @after
19
+
20
+ @range = Boundy::Domain::Posterior.new(@datum)
21
+ end
22
+
23
+ test 'constrain_to datum_bound equal' do
24
+ new = Boundy::Domain.new(@before, @after)
25
+
26
+ result = @range.constrain_to(new)
27
+
28
+ assert_equal @before, result.from.datum
29
+ assert_equal @after, result.to.datum
30
+ end
31
+
32
+ test 'constrain_to datum_bound tighter' do
33
+ new = Boundy::Domain.new(@tighter_before, @tighter_after)
34
+
35
+ result = @range.constrain_to(new)
36
+
37
+ assert_equal @tighter_before, result.from.datum
38
+ assert_equal @tighter_after, result.to.datum
39
+ end
40
+
41
+ test 'constrain_to datum_bound looser' do
42
+ new = Boundy::Domain.new(@looser_before, @looser_after)
43
+
44
+ result = @range.constrain_to(new)
45
+
46
+ assert_equal @looser_before, result.from.datum
47
+ assert_equal @after, result.to.datum
48
+ end
49
+
50
+ test 'constrain_to range equal' do
51
+ range = (@before .. @after)
52
+
53
+ result = @range.constrain_to(range)
54
+
55
+ assert_equal @before, result.from.datum
56
+ assert_equal @after, result.to.datum
57
+ end
58
+ test 'constrain_to range tighter' do
59
+ range = (@tighter_before .. @tighter_after)
60
+
61
+ result = @range.constrain_to(range)
62
+
63
+ assert_equal @tighter_before, result.from.datum
64
+ assert_equal @tighter_after, result.to.datum
65
+ end
66
+
67
+ test 'constrain_to range looser' do
68
+ range = (@looser_before .. @looser_after)
69
+
70
+ result = @range.constrain_to(range)
71
+
72
+ assert_equal @looser_before, result.from.datum
73
+ assert_equal @after, result.to.datum
74
+ end
75
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ require 'boundy/domain'
4
+ require 'boundy/domain/finite'
5
+ require 'boundy/range/comparator'
6
+
7
+ class Boundy::DomainTest < Test::Unit::TestCase
8
+ setup do
9
+ @now = Time.now
10
+ @before = @now - 5.days
11
+
12
+ @tighter_before = @now - 4.days
13
+ @looser_before = @now - 6.days
14
+
15
+ @after = @now - 2.days
16
+ @tighter_after = @now - 3.days
17
+ @looser_after = @now - 1.days
18
+
19
+ @domain = Boundy::Domain.new(@before, @after)
20
+ end
21
+
22
+ test 'constrain_to domain equal' do
23
+ new = Boundy::Domain.new(@before, @after)
24
+
25
+ result = @domain.constrain_to(new)
26
+
27
+ assert_equal @before, result.from.datum
28
+ assert_equal @after, result.to.datum
29
+ end
30
+
31
+ test 'constrain_to domain tighter' do
32
+ new = Boundy::Domain.new(@tighter_before, @tighter_after)
33
+
34
+ result = @domain.constrain_to(new)
35
+
36
+ assert_equal @tighter_before, result.from.datum
37
+ assert_equal @tighter_after, result.to.datum
38
+ end
39
+
40
+ test 'constrain_to domain loserr' do
41
+ new = Boundy::Domain.new(@looser_before, @looser_after)
42
+
43
+ result = @domain.constrain_to(new)
44
+
45
+ assert_equal @before, result.from.datum
46
+ assert_equal @after, result.to.datum
47
+ end
48
+ end
49
+
50
+