1 | module OpenEHR
|
---|
2 | module Assumed_Library_Types
|
---|
3 | class Interval
|
---|
4 | attr_reader :lower, :lower_included, :lower_unbounded
|
---|
5 | attr_reader :upper, :upper_included, :upper_unbounded
|
---|
6 | def initialize(lower, upper,
|
---|
7 | lower_included = nil, upper_included = nil)
|
---|
8 | check_lower_upper(lower, upper)
|
---|
9 | set_lower_included(lower_included)
|
---|
10 | set_upper_included(upper_included)
|
---|
11 | end
|
---|
12 |
|
---|
13 | def set_lower(lower)
|
---|
14 | check_lower_upper(lower, @upper)
|
---|
15 | end
|
---|
16 |
|
---|
17 | def set_upper(upper)
|
---|
18 | check_lower_upper(@lower, upper)
|
---|
19 | end
|
---|
20 |
|
---|
21 | def set_lower_included(lower_included)
|
---|
22 | if (lower == nil) && (lower_included != nil)
|
---|
23 | raise ArgumentError, "lower is not set"
|
---|
24 | end
|
---|
25 | @lower_included = lower_included
|
---|
26 | end
|
---|
27 |
|
---|
28 | def set_upper_included(upper_included)
|
---|
29 | @upper_included = upper_included
|
---|
30 | if (upper == nil) && (upper_included != nil)
|
---|
31 | raise ArgumentError, "upper is not set"
|
---|
32 | end
|
---|
33 | end
|
---|
34 |
|
---|
35 | def has?(value)
|
---|
36 | if ((@lower < value) && (value < @upper) ||
|
---|
37 | (@lower_included == true) && (@lower == value) ||
|
---|
38 | (@upper_included == true) && (@upper == value))
|
---|
39 | true
|
---|
40 | else
|
---|
41 | false
|
---|
42 | end
|
---|
43 | end
|
---|
44 |
|
---|
45 | private
|
---|
46 |
|
---|
47 | def check_lower_upper(lower, upper)
|
---|
48 | if (lower == nil) && (upper == nil)
|
---|
49 | raise ArgumentError, "Either lower or upper must be assigned"
|
---|
50 | end
|
---|
51 | if (lower == nil) && (upper != nil)
|
---|
52 | @lower_unbounded = true
|
---|
53 | elsif (lower != nil) && (upper == nil)
|
---|
54 | @upper_unbounded = true
|
---|
55 | elsif lower > upper
|
---|
56 | raise ArgumentError, "Upper must be larger than lower."
|
---|
57 | end
|
---|
58 | @lower = lower
|
---|
59 | @upper = upper
|
---|
60 | end
|
---|
61 | end
|
---|
62 | end
|
---|
63 | end
|
---|