Class: IronNails::Initializer

Inherits:
Object
  • Object
show all
Defined in:
lib/ironnails/config/initializer.rb

Overview

This structure has been heavily inspired by the rails framework. The Configuration class holds all the parameters for the Initializer Usually, you’ll create a Configuration file implicitly through the block running on the Initializer, but it’s also possible to create the Configuration instance in advance and pass it in like this:

config = IronNails::Configuration.new
IronNails::Initializer.run(config)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ Initializer

Returns a new instance of Initializer.



50
51
52
53
54
55
56
57
58
59
# File 'lib/ironnails/config/initializer.rb', line 50

def initialize(configuration)
  IronNails.configuration = configuration

  initialize_logger

  set_constants
  require_binaries
  include_namespaces
  require_application_files
end

Class Method Details

.run(configuration = Configuration.new) {|configuration| ... } ⇒ Object

Yields:



61
62
63
64
65
# File 'lib/ironnails/config/initializer.rb', line 61

def self.run(configuration = Configuration.new)
  yield configuration if block_given?
  initializer = new configuration
  initializer
end

Instance Method Details

#configurationObject



67
68
69
# File 'lib/ironnails/config/initializer.rb', line 67

def configuration
  IronNails.configuration
end

#include_namespacesObject



122
123
124
125
126
# File 'lib/ironnails/config/initializer.rb', line 122

def include_namespaces
  logger.debug "Including namespaces", IRONNAILS_FRAMEWORKNAME
  #include_global_namespaces configuration.namespaces
  configuration.namespaces.each { |namespace| Object.send :include, eval(namespace) }
end

#initialize_loggerObject

If the IRONNAILS_DEFAULT_LOGGER constant is already set, this initialization routine does nothing. If the constant is not set, and Configuration#logger is not nil, this also does nothing. Otherwise, a new logger instance is created at Configuration#log_path, with a default log level of Configuration#log_level.

If the log could not be created, the log will be set to output to STDERR, with a log level of WARN.



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
# File 'lib/ironnails/config/initializer.rb', line 83

def initialize_logger
  # if the environment has explicitly defined a logger, use it
  return if defined?(IRONNAILS_DEFAULT_LOGGER)

  unless logr = configuration.logger
    begin
      logr = IronNails::Logging::BufferedLogger.new(configuration.log_path)
      logr.level = IronNails::Logging::BufferedLogger.const_get(configuration.log_level.to_s.upcase)
      if configuration.environment == "production"
        logr.auto_flushing = false
        logr.set_non_blocking_io
      end
    rescue StandardError => e
      logr = IronNails::Logging::BufferedLogger.new(STDERR)
      logr.level = IronNails::Logging::BufferedLogger::WARN
      logr.warn(
              "IronNails Error: Unable to access log file. Please ensure that #{configuration.log_path} exists and is chmod 0666. " +
                      "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed. #{e}"
      )
    end
    logr.debug "initializing logger", IRONNAILS_FRAMEWORKNAME
  end

  silence_warnings { Object.const_set "IRONNAILS_DEFAULT_LOGGER", logr }
end

#loggerObject



109
110
111
# File 'lib/ironnails/config/initializer.rb', line 109

def logger
  IRONNAILS_DEFAULT_LOGGER
end

#require_application_filesObject



128
129
130
131
132
133
# File 'lib/ironnails/config/initializer.rb', line 128

def require_application_files
  logger.debug "requiring application files", IRONNAILS_FRAMEWORKNAME
  configuration.application_paths.each do |path|
    require_files path, :rb
  end
end

#require_binariesObject



114
115
116
117
118
119
# File 'lib/ironnails/config/initializer.rb', line 114

def require_binaries
  logger.debug "requiring binaries from bin", IRONNAILS_FRAMEWORKNAME
  configuration.assembly_paths.each do |path|
    require_files path, :dll
  end
end

#require_files(path, extension) ⇒ Object



135
136
137
138
139
140
# File 'lib/ironnails/config/initializer.rb', line 135

def require_files(path, extension)
  Dir.glob("#{File.expand_path(path)}/*.#{extension}").each do |file|
    # puts "#{file}"
    require "#{file}" unless configuration.excluded_file? file
  end
end

#set_constantsObject



71
72
73
# File 'lib/ironnails/config/initializer.rb', line 71

def set_constants
  logger.debug "setting application constants", IRONNAILS_FRAMEWORKNAME
end