Module: OpenHAB::CoreExt::Ruby::Range
- Included in:
- Range
- Defined in:
- lib/openhab/core_ext/ruby/range.rb
Overview
Extensions to Range
Instance Method Summary collapse
-
#circular? ⇒ true, false
Checks if this range is circular.
- #cover?(object) ⇒ Boolean
-
#each ⇒ Object
normal Range#each will not yield at all if begin > end.
Instance Method Details
#circular? ⇒ true, false
Checks if this range is circular
A circular range is one whose data type will repeat if keep you keep calling #succ on it, and whose beginning is after its end.
Used by #cover? to check if the value is between ‘end` and `begin`, instead of `begin` and `end`.
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/openhab/core_ext/ruby/range.rb', line 54 def circular? return false if self.begin.nil? || self.end.nil? return false if self.begin <= self.end case self.begin || self.end when java.time.LocalTime, java.time.MonthDay, java.time.Month true else false end end |
#cover?(object) ⇒ Boolean
8 9 10 11 12 13 14 15 16 |
# File 'lib/openhab/core_ext/ruby/range.rb', line 8 def cover?(object) # inverted circular range if circular? return object >= self.begin || object < self.end if exclude_end? return object >= self.begin || object <= self.end end super end |
#each ⇒ Object
normal Range#each will not yield at all if begin > end
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/openhab/core_ext/ruby/range.rb', line 27 def each return super unless circular? return to_enum(:each) unless block_given? val = self.begin loop do is_end = val == self.end break if is_end && exclude_end? yield val break if is_end val = val.succ end end |