Class: MonthRange::MRange

Inherits:
Range
  • Object
show all
Defined in:
lib/month_range/m_range.rb

Defined Under Namespace

Classes: InvalidStartEnd, NotMRange

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(start_month, end_month) ⇒ MRange

Returns a new instance of MRange.

Raises:



13
14
15
16
17
18
19
20
21
# File 'lib/month_range/m_range.rb', line 13

def initialize(start_month, end_month)
  raise InvalidStartEnd unless start_month.is_a?(MonthRange::Month)
  raise InvalidStartEnd unless end_month.is_a?(MonthRange::Month) || end_month.is_a?(MonthRange::Month::Infinity)
  raise InvalidStartEnd, [start_month, end_month] unless valid_start_end_relation?(start_month, end_month)

  super(start_month, end_month)
  @start_month = start_month
  @end_month = end_month
end

Instance Attribute Details

#end_monthObject (readonly)

Returns the value of attribute end_month.



7
8
9
# File 'lib/month_range/m_range.rb', line 7

def end_month
  @end_month
end

#start_monthObject (readonly)

Returns the value of attribute start_month.



7
8
9
# File 'lib/month_range/m_range.rb', line 7

def start_month
  @start_month
end

Instance Method Details

#combine(m_range) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/month_range/m_range.rb', line 62

def combine(m_range)
  if start_month < m_range.start_month
    MonthRange::MRange.new(start_month, m_range.end_month)
  else
    MonthRange::MRange.new(m_range.start_month, end_month)
  end
end

#continuous?(m_range) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
# File 'lib/month_range/m_range.rb', line 54

def continuous?(m_range)
  return false if m_range.nil?
  raise if start_month >= m_range.start_month
  return false if end_month.infinite?

  end_month == m_range.just_before
end

#just_afterObject



50
51
52
# File 'lib/month_range/m_range.rb', line 50

def just_after
  non_terminated? ? end_month : end_month.next_month(1)
end

#just_beforeObject



46
47
48
# File 'lib/month_range/m_range.rb', line 46

def just_before
  start_month.prev_month(1)
end

#non_terminated?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/month_range/m_range.rb', line 29

def non_terminated?
  end_month.infinite?
end

#overlap?(m_range) ⇒ Boolean

Returns:

  • (Boolean)

Raises:



23
24
25
26
27
# File 'lib/month_range/m_range.rb', line 23

def overlap?(m_range)
  raise NotMRange, "#{m_range} must be MRange." unless m_range.is_a?(MonthRange::MRange)

  true if cover?(m_range.start_month) || cover?(m_range.end_month) || m_range.cover?(self)
end

#subtract(m_range) ⇒ Object

rubocop:disable Metrics/AbcSize



37
38
39
40
41
42
43
44
# File 'lib/month_range/m_range.rb', line 37

def subtract(m_range) # rubocop:disable Metrics/AbcSize
  return self unless overlap?(m_range)

  output_range = []
  output_range << MonthRange::MRange.new(start_month, m_range.just_before) if cover?(m_range.just_before)
  output_range << MonthRange::MRange.new(m_range.just_after, end_month) if cover?(m_range.just_after) && m_range.terminated?
  output_range.flatten.compact
end

#terminated?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/month_range/m_range.rb', line 33

def terminated?
  !end_month.infinite?
end