Module: DateContinuity::Model
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/date_continuity/model.rb
Constant Summary collapse
- TIME_UNIT_VALUES =
%w(second minute hour day week month year).freeze
- DAY_EQUIVALENTS =
{ second: 86_400, minute: 1_440, hour: 24, day: 1, week: (1.0 / 7.0) }.freeze
Instance Method Summary collapse
- #calc_duration(start_datetime = start_value, end_datetime = end_value) ⇒ Object
-
#calc_end ⇒ Object
Calculation Methods.
- #calc_start ⇒ Object
- #duration_object(duration = duration_value - 1) ⇒ Object
-
#set_duration ⇒ Object
Setter methods.
- #set_end ⇒ Object
- #set_start ⇒ Object
Instance Method Details
#calc_duration(start_datetime = start_value, end_datetime = end_value) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/date_continuity/model.rb', line 52 def calc_duration(start_datetime = start_value, end_datetime = end_value) # DateTime subtraction returns a fraction representing days if start_datetime && end_datetime duration = case time_unit_value when "month" then months_between(start_datetime, end_datetime) when "year" then years_between(start_datetime, end_datetime) else (end_datetime - start_datetime) * DAY_EQUIVALENTS[time_unit_value.to_sym] end + 1 (duration * frequency_value).to_i else _raise_not_enough_information_error [start_method, end_method] end end |
#calc_end ⇒ Object
Calculation Methods
36 37 38 39 40 41 42 |
# File 'lib/date_continuity/model.rb', line 36 def calc_end if start_value.present? && duration_value.present? start_value + duration_object else _raise_not_enough_information_error [start_method, duration_method] end end |
#calc_start ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/date_continuity/model.rb', line 44 def calc_start if end_value.present? && duration_value.present? end_value - duration_object else _raise_not_enough_information_error [end_method, duration_method] end end |
#duration_object(duration = duration_value - 1) ⇒ Object
67 68 69 |
# File 'lib/date_continuity/model.rb', line 67 def duration_object(duration = duration_value - 1) (duration.public_send(time_unit_value) / frequency_value) end |
#set_duration ⇒ Object
Setter methods
73 74 75 76 |
# File 'lib/date_continuity/model.rb', line 73 def set_duration send("#{duration_method}=", calc_duration) self end |
#set_end ⇒ Object
78 79 80 81 |
# File 'lib/date_continuity/model.rb', line 78 def set_end send("#{end_method}=", calc_end) self end |
#set_start ⇒ Object
83 84 85 86 |
# File 'lib/date_continuity/model.rb', line 83 def set_start send("#{start_method}=", calc_start) self end |