# module ActiveSupport

This class has dubious semantics and we only have it so that people can write `params[:key]` instead of `params['key']` and they get the same value for both keys.

lazy_load_hooks allows rails to lazily load a lot of components and thus making the app boot faster. Because of this feature now there is no need to require `ActiveRecord::Base` at boot time purely to apply configuration. Instead a hook is registered that applies configuration once `ActiveRecord::Base` is loaded. Here `ActiveRecord::Base` is used as example but this feature can be applied elsewhere too.

Here is an example where `on_load` method is called to register a hook.

    initializer "active_record.initialize_timezone" do
      ActiveSupport.on_load(:active_record) do
        self.time_zone_aware_attributes = true
        self.default_timezone = :utc
      end
    end

When the entirety of `activerecord/lib/active_record/base.rb` has been evaluated then `run_load_hooks` is invoked. The very last line of `activerecord/lib/active_record/base.rb` is:

    ActiveSupport.run_load_hooks(:active_record, ActiveRecord::Base)

Some code from jeremymcanally’s “pending” github.com/jeremymcanally/pending/tree/master

The TimeZone class serves as a wrapper around TZInfo::Timezone instances. It allows us to do the following:

- Limit the set of zones provided by TZInfo to a meaningful subset of 142 zones.

- Retrieve and display zones with a friendlier name (e.g., “Eastern Time (US & Canada)” instead of “America/New_York”).

- Lazily load TZInfo::Timezone instances only when they’re needed.

- Create ActiveSupport::TimeWithZone instances via TimeZone’s `local`, `parse`, `at` and `now` methods.

If you set `config.time_zone` in the Rails Application, you can access this TimeZone object via `Time.zone`:

    # application.rb:
    class Application < Rails::Application
      config.time_zone = "Eastern Time (US & Canada)"
    end

    Time.zone       # => #<TimeZone:0x514834...>
    Time.zone.name  # => "Eastern Time (US & Canada)"
    Time.zone.now   # => Sun, 18 May 2008 14:30:44 EDT -04:00

The version of TZInfo bundled with Active Support only includes the definitions necessary to support the zones defined by the TimeZone class. If you need to use zones that aren’t defined by TimeZone, you’ll need to install the TZInfo gem (if a recent version of the gem is installed locally, this will be used instead of the bundled version.)

# XmlMini JRuby JDOM implementation

# XmlMini LibXML implementation

# XmlMini LibXML implementation using a SAX-based parser

# XmlMini Nokogiri implementation

# XmlMini Nokogiri implementation using a SAX-based parser

# XmlMini ReXML implementation

### Constants

FrozenObjectError

### Attributes

load_all_hooks[RW]

### Public Class Methods

execute_hook(base, options, block) click to toggle source

    # File lib/active_support/lazy_load_hooks.rb, line 32
    def self.execute_hook(base, options, block)
      if options[:yield]
        block.call(base)
      else
        base.instance_eval(&block)
      end
    end

load_all!() click to toggle source

    # File lib/active_support.rb, line 30
    def load_all!; load_all_hooks.each { |hook| hook.call } end

on_load(name, options = {}, &block) click to toggle source

    # File lib/active_support/lazy_load_hooks.rb, line 24
    def self.on_load(name, options = {}, &block)
      if base = @loaded[name]
        execute_hook(base, options, block)
      else
        @load_hooks[name] << [block, options]
      end
    end

on_load_all(&hook) click to toggle source

    # File lib/active_support.rb, line 29
    def on_load_all(&hook) load_all_hooks << hook end

run_load_hooks(name, base = Object) click to toggle source

    # File lib/active_support/lazy_load_hooks.rb, line 40
    def self.run_load_hooks(name, base = Object)
      @loaded[name] = base
      @load_hooks[name].each do |hook, options|
        execute_hook(base, options, hook)
      end
    end