class TpCommon::Timezones::Config

Public Class Methods

config() click to toggle source

Try to load TpCommon::Timezones::LIST_ZONES in config/timezones.yml from rails app. if not, load the default in timezones/config/timezones.yml

# File lib/tp_common/timezones/config.rb, line 6
def self.config
  config_list_zones
  config_reversed_list_zones
end
load_rails_reversed_time_zones() click to toggle source
# File lib/tp_common/timezones/config.rb, line 44
def self.load_rails_reversed_time_zones
  begin
    TpCommon::Timezones.const_set("REVERSED_LIST_ZONES",
                                  reversed_time_zone_lookup_table(Rails.application.config_for(:reversed)))
    return true
  rescue NameError, NoMethodError, StandardError
  end

  false
end
reversed_time_zone_lookup_table(data_config) click to toggle source
# File lib/tp_common/timezones/config.rb, line 98
def self.reversed_time_zone_lookup_table(data_config)
  data_config.inject({}) do |carry, (zone_key, list_zone)|
    zone_key = zone_key.to_sym
    list_zone.each do |zone_name|
      carry[zone_name.downcase.to_sym] = zone_key
    end

    carry
  end
end

Private Class Methods

config_list_zones() click to toggle source
# File lib/tp_common/timezones/config.rb, line 11
def self.config_list_zones
  return if TpCommon::Timezones.const_defined?("LIST_ZONES")

  return if defined?(::Rails::Railtie) && load_rails_time_zones
  TpCommon::Timezones.const_set("LIST_ZONES", load_default_timezones)
end
config_reversed_list_zones() click to toggle source
# File lib/tp_common/timezones/config.rb, line 19
def self.config_reversed_list_zones
  return if TpCommon::Timezones.const_defined?("REVERSED_LIST_ZONES")

  return if defined?(::Rails::Railtie) && load_rails_reversed_time_zones
  TpCommon::Timezones.const_set("REVERSED_LIST_ZONES",
                                reversed_time_zone_lookup_table(load_default_reversed_timezones))
end
load_default_reversed_timezones() click to toggle source
# File lib/tp_common/timezones/config.rb, line 79
      def self.load_default_reversed_timezones
        file_path = File.join(File.dirname(__FILE__),"config/reversed.yml")
        yaml = Pathname.new(file_path)

        if yaml.exist?
          require "erb"
          (YAML.load(ERB.new(yaml.read).result) || {})["all_zones"] || {}
        else
          raise "Could not load configuration. No such file - #{yaml}"
        end
      rescue Psych::SyntaxError => e
        raise <<~ERRMSG
          YAML syntax error occurred while parsing #{yaml}. 
          Please note that YAML must be consistently indented using spaces. Tabs are not allowed. 
          Error: #{e.message}
        ERRMSG
      end
load_default_timezones() click to toggle source

Private Load the default TpCommon::Timezones::LIST_ZONES in timezones/config/timezones.yml This method is clone from Rails' config_for

# File lib/tp_common/timezones/config.rb, line 60
      def self.load_default_timezones
        file_path = File.join(File.dirname(__FILE__),"config/timezones.yml")
        yaml = Pathname.new(file_path)

        if yaml.exist?
          require "erb"
          (YAML.load(ERB.new(yaml.read).result) || {})["all_zones"] || {}
        else
          raise "Could not load configuration. No such file - #{yaml}"
        end
      rescue Psych::SyntaxError => e
        raise <<~ERRMSG
          YAML syntax error occurred while parsing #{yaml}. 
          Please note that YAML must be consistently indented using spaces. Tabs are not allowed. 
          Error: #{e.message}
        ERRMSG
      end
load_rails_time_zones() click to toggle source

Private

# File lib/tp_common/timezones/config.rb, line 29
def self.load_rails_time_zones
  begin
    TpCommon::Timezones.const_set("LIST_ZONES", Rails.application.config_for(:timezones))
    Rails.logger.debug "[TpCommon::Timezones::Config] Message-3: Use custom timezones in project config/timezones.yml"
    return true
  rescue NameError, NoMethodError
    Rails.logger.debug "[TpCommon::Timezones::Config] Message-1: Use default timezones in tp_common/timezones/config/timezones.yml"
  rescue StandardError
    Rails.logger.debug "[TpCommon::Timezones::Config] Message-2: Use default timezones in tp_common/timezones/config/timezones.yml"
  end

  false
end