Sha256: e0ed0022123be8cb5dfff938de4433080b54323fb3a987a19d6efbec61db19af

Contents?: true

Size: 1.32 KB

Versions: 42

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

#
# Objects that can localize time to it, kicking out safe uses of a date format.
#
module TimeZoneAble
  extend ActiveSupport::Concern

  def self.included(base)
    base.class_eval do
      #
      # Fields
      #
      field :time_zone, type: String
      #
      # Validations
      #
      validates :time_zone, inclusion: TZInfo::Timezone.all_identifiers, presence: true
      #
      # Callbacks
      #
      before_validation :default_time_zone
    end
  end

  def time_zone_options
    TZInfo::Timezone.all_identifiers
  end

  #
  # Return the given time in the localized time for this object
  #
  def local_time(time, format = :medium, default = 'N/A')
    tz = TZInfo::Timezone.get(time_zone.presence || SystemConfiguration.default_time_zone)
    time.present? ? I18n.l(time.in_time_zone(tz), format: format) : default
  rescue StandardError
    default
  end

  #
  # Return the updated_at if found, otherwise return the created_at. If neither are there
  # then return unknown
  #
  def local_updated_time(obj, format = :medium, default = 'N/A')
    obj.updated_at.present? ? local_time(obj.updated_at, format, default) : local_time(created_at, format, default)
  rescue StandardError
    default
  end

  def default_time_zone
    self.time_zone ||= SystemConfiguration.default_time_zone
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
web47core-0.9.0 lib/app/models/concerns/time_zone_able.rb
web47core-0.8.5 lib/app/models/concerns/time_zone_able.rb
web47core-0.8.3 lib/app/models/concerns/time_zone_able.rb
web47core-0.8.2 lib/app/models/concerns/time_zone_able.rb
web47core-0.8.1 lib/app/models/concerns/time_zone_able.rb
web47core-0.8.0 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.7 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.6 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.4 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.3 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.2 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.1 lib/app/models/concerns/time_zone_able.rb
web47core-0.7.0 lib/app/models/concerns/time_zone_able.rb
web47core-0.6.3 lib/app/models/concerns/time_zone_able.rb
web47core-0.6.2 lib/app/models/concerns/time_zone_able.rb
web47core-0.6.1 lib/app/models/concerns/time_zone_able.rb
web47core-0.6.0 lib/app/models/concerns/time_zone_able.rb
web47core-0.5.5 lib/app/models/concerns/time_zone_able.rb
web47core-0.5.4 lib/app/models/concerns/time_zone_able.rb
web47core-0.5.3 lib/app/models/concerns/time_zone_able.rb