module Adjective::Temporable

Public Instance Methods

expired?() click to toggle source

Checks if remaining_duration is at 0. @return [Boolean] @example

SurrogateClass.expired? #=> True/False
# File lib/adjective/concerns/temporable.rb, line 41
def expired?
  @remaining_duration == 0
end
expiring?() click to toggle source

Checks if remaining_duration is at 1. @return [Boolean] @example

SurrogateClass.expired? #=> True/False
# File lib/adjective/concerns/temporable.rb, line 49
def expiring?
  # This method seems like a meme, but I think it makes sense
  @remaining_duration == 1
end
extend_by(extension) click to toggle source

Extends the duration and keeps it within bounds. @param extension [Integer] @return [Integer] @example

SurrogateClass.extend_by(2)
# File lib/adjective/concerns/temporable.rb, line 68
def extend_by(extension)
  @remaining_duration += extension
  normalize_remaining_duration
  return @remaining_duration
end
initialize_temporality(opts={}) click to toggle source

Initialize module data for Temporable @param opts [Hash] @return [Object] @example

initialize_temporality({max_duration: 5, remaining_duration: 4})
# File lib/adjective/concerns/temporable.rb, line 16
def initialize_temporality(opts={})
  @max_duration = opts[:max_duration] ||= 1
  @remaining_duration = opts[:remaining_duration] ||= @max_duration

  throw_duration_theshold_error if invalid_durations?

  [:max_duration, :remaining_duration].each do |attribute| 
    self.class.send(:attr_accessor, attribute)
  end
  normalize_remaining_duration 
  return self     
end
max_duration?() click to toggle source

Checks if the status is at it's maximum duration @return [Boolean] @example

SurrogateClass.max_duration? #=> True/False
# File lib/adjective/concerns/temporable.rb, line 33
def max_duration?
  @max_duration == @remaining_duration
end
normalize_remaining_duration() click to toggle source

Checks and sets remaining_duration if it is out of bounds. @return [Integer] @example

SurrogateClass.normalize_remaining_duration
# File lib/adjective/concerns/temporable.rb, line 58
def normalize_remaining_duration
  @remaining_duration = @max_duration if @remaining_duration > @max_duration
  @remaining_duration = 0 if @remaining_duration < 0
end

Private Instance Methods

invalid_durations?() click to toggle source

Checks if initial durations are valid. @return [Boolean] @example

SurrogateClass.invalid_durations?
# File lib/adjective/concerns/temporable.rb, line 89
def invalid_durations?
  @remaining_duration > @max_duration
end
throw_duration_theshold_error() click to toggle source

Triggers error to the thrown is thesholds are exceeed on initialization. @return [Boolean] @private @example

SurrogateClass.throw_duration_threshold_error
# File lib/adjective/concerns/temporable.rb, line 81
def throw_duration_theshold_error
  raise ArgumentError, "Provded initial_duration or remaining_duration values exceed max_duration: max: #{@max_duration}, remaining: #{@remaining_duration}."
end