Rails: Singleton: Message of the Day

A simple Ruby Singleton class that provides a mechanism for app wide messaging.


    module MessageOfTheDay
      extend self
      @motd_active = ENV['MOTD_ACTIVE'] rescue nil
      @motd_start = (ActiveSupport::TimeZone.new 'Eastern Time (US & Canada)').parse(ENV['MOTD_START']).to_datetime.strftime("%Y-%m-%d %H:%M %Z") rescue nil
      @motd_stop = (ActiveSupport::TimeZone.new 'Eastern Time (US & Canada)').parse(ENV['MOTD_STOP']).to_datetime.strftime("%Y-%m-%d %H:%M %Z") rescue nil
      @motd_description = ENV['MOTD_DESCRIPTION'] rescue nil
      @motd_footer = ENV['MOTD_FOOTER'] rescue nil
    
      def motd_active
        @motd_active
      end
      def turn_on
        @motd_active = "true"
      end
      def turn_off
        @motd_active = "false"
      end
      def switch
        if @motd_active.eql?("true")
          turn_off
        else
          turn_off
        end
      end
      def motd_start
        @motd_start
      end
      def set_motd_start(start)
        @motd_start = start
      end
      def motd_stop
        @motd_stop
      end
      def set_motd_stop(stop)
        @motd_stop = stop
      end
      def motd_description
        @motd_description
      end
      def set_motd_description(description)
        @motd_description = description
      end
      def motd_footer
        @motd_footer
      end
      def set_motd_footer(footer)
        @motd_footer = footer
      end
      def content
        I18n.t("session.motd", :start=> @motd_start,:stop=> @motd_stop,:description=> @motd_description,:footer=> @motd_footer).html_safe
      end
      def active?
        return false if @motd_active.nil?
        return false unless @motd_active.downcase.eql?("true")
        start_time = DateTime.strptime(@motd_start, "%Y-%m-%d %H:%M %Z") rescue nil?
        stop_time = DateTime.strptime(@motd_stop, "%Y-%m-%d %H:%M %Z") rescue nil?
        return false if start_time.nil?
        return false if stop_time.nil?
        return false if start_time > stop_time
        return false if Time.now > stop_time
        return true
      end
    end