class TZInfo::TimezoneProxy

A proxy class standing in for a {Timezone} with a given identifier. {TimezoneProxy} inherits from {Timezone} and can be treated identically to {Timezone} instances loaded with {Timezone.get}.

{TimezoneProxy} instances are used to avoid the performance overhead of loading time zone data into memory, for example, by {Timezone.all}.

The first time an attempt is made to access the data for the time zone, the real {Timezone} will be loaded is loaded. If the proxy's identifier was not valid, then an exception will be raised at this point.

Public Class Methods

_load(data) click to toggle source

Loads a {TimezoneProxy} from the serialized representation returned by {_dump}. This is method is called when using `Marshal.load` or `Marshal.restore` to restore a serialized {Timezone}.

@param data [String] a serialized representation of a {TimezoneProxy}. @return [TimezoneProxy] the result of converting `data` back into a

{TimezoneProxy}.
# File lib/tzinfo/timezone_proxy.rb, line 71
def self._load(data)
  TimezoneProxy.new(data)
end
new(identifier) click to toggle source

Initializes a new {TimezoneProxy}.

The `identifier` parameter is not checked when initializing the proxy. It will be validated when the real {Timezone} instance is loaded.

@param identifier [String] an IANA Time Zone Database time zone

identifier.
Calls superclass method
# File lib/tzinfo/timezone_proxy.rb, line 23
def initialize(identifier)
  super()
  @identifier = identifier
  @real_timezone = nil
end

Public Instance Methods

_dump(limit) click to toggle source

Returns a serialized representation of this {TimezoneProxy}. This method is called when using `Marshal.dump` with an instance of {TimezoneProxy}.

@param limit [Integer] the maximum depth to dump - ignored. @return

[String] a serialized representation of this {TimezoneProxy}.

@return [String] a serialized representation of this {TimezoneProxy}.

# File lib/tzinfo/timezone_proxy.rb, line 60
def _dump(limit)
  identifier
end
canonical_zone() click to toggle source

(see Timezone#canonical_zone)

# File lib/tzinfo/timezone_proxy.rb, line 50
def canonical_zone
  real_timezone.canonical_zone
end
identifier() click to toggle source

(see Timezone#identifier)

# File lib/tzinfo/timezone_proxy.rb, line 30
def identifier
  @real_timezone ? @real_timezone.identifier : @identifier
end
period_for(time) click to toggle source

(see Timezone#period_for)

# File lib/tzinfo/timezone_proxy.rb, line 35
def period_for(time)
  real_timezone.period_for_utc(time)
end
periods_for_local(local_time) click to toggle source

(see Timezone#periods_for_local)

# File lib/tzinfo/timezone_proxy.rb, line 40
def periods_for_local(local_time)
  real_timezone.periods_for_local(local_time)
end
transitions_up_to(to, from = nil) click to toggle source

(see Timezone#transitions_up_to)

# File lib/tzinfo/timezone_proxy.rb, line 45
def transitions_up_to(to, from = nil)
  real_timezone.transitions_up_to(to, from)
end

Private Instance Methods

real_timezone() click to toggle source

Returns the real {Timezone} instance being proxied.

The real {Timezone} is loaded using {Timezone.get} on the first access.

@return [Timezone] the real {Timezone} instance being proxied.

# File lib/tzinfo/timezone_proxy.rb, line 82
def real_timezone
  # Thread-safety: It is possible that the value of @real_timezone may be
  # calculated multiple times in concurrently executing threads. It is not
  # worth the overhead of locking to ensure that @real_timezone is only
  # calculated once.
  unless @real_timezone
    result = Timezone.get(@identifier)
    return result if frozen?
    @real_timezone = result
  end

  @real_timezone
end