aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails.rb
blob: 670477f91a2fb674344bbb941d5fc627f3ae903d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
require 'rails/ruby_version_check'

require 'pathname'

require 'active_support'
require 'active_support/core_ext/kernel/reporting'
require 'active_support/core_ext/array/extract_options'

require 'rails/application'
require 'rails/version'
require 'rails/deprecation'

require 'active_support/railtie'
require 'action_dispatch/railtie'

# For Ruby 1.9, UTF-8 is the default internal and external encoding.
silence_warnings do
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end

module Rails
  autoload :Info, 'rails/info'
  autoload :InfoController, 'rails/info_controller'
  autoload :Queueing, 'rails/queueing'

  class << self
    def application
      @application ||= nil
    end

    def application=(application)
      @application = application
    end

    # The Configuration instance used to configure the Rails environment
    def configuration
      application.config
    end

    # Rails.queue is the application's queue. You can push a job onto
    # the queue by:
    #
    #   Rails.queue.push job
    #
    # A job is an object that responds to +run+. Queue consumers will
    # pop jobs off of the queue and invoke the queue's +run+ method.
    #
    # Note that depending on your queue implementation, jobs may not
    # be executed in the same process as they were created in, and
    # are never executed in the same thread as they were created in.
    #
    # If necessary, a queue implementation may need to serialize your
    # job for distribution to another process. The documentation of
    # your queue will specify the requirements for that serialization.
    def queue
      application.queue
    end

    def initialize!
      application.initialize!
    end

    def initialized?
      application.initialized?
    end

    def logger
      @logger ||= nil
    end

    def logger=(logger)
      @logger = logger
    end

    def backtrace_cleaner
      @backtrace_cleaner ||= begin
        # Relies on Active Support, so we have to lazy load to postpone definition until AS has been loaded
        require 'rails/backtrace_cleaner'
        Rails::BacktraceCleaner.new
      end
    end

    def root
      application && application.config.root
    end

    def env
      @_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development")
    end

    def env=(environment)
      @_env = ActiveSupport::StringInquirer.new(environment)
    end

    def cache
      @cache ||= nil
    end

    def cache=(cache)
      @cache = cache
    end

    # Returns all rails groups for loading based on:
    #
    # * The Rails environment;
    # * The environment variable RAILS_GROUPS;
    # * The optional envs given as argument and the hash with group dependencies;
    #
    #   groups :assets => [:development, :test]
    #
    #   # Returns
    #   # => [:default, :development, :assets] for Rails.env == "development"
    #   # => [:default, :production]           for Rails.env == "production"
    def groups(*groups)
      hash = groups.extract_options!
      env = Rails.env
      groups.unshift(:default, env)
      groups.concat ENV["RAILS_GROUPS"].to_s.split(",")
      groups.concat hash.map { |k,v| k if v.map(&:to_s).include?(env) }
      groups.compact!
      groups.uniq!
      groups
    end

    def version
      VERSION::STRING
    end

    def public_path
      application && application.paths["public"].first
    end
  end
end