Class Merb::BootLoader::Dependencies
In: merb-core/lib/merb-core/bootloader.rb
Parent: Merb::BootLoader

Methods

Public Class methods

Loads json or json_pure and requires it.

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 415
415:   def self.enable_json_gem
416:     gem "json"
417:     require "json/ext"
418:   rescue LoadError
419:     gem "json_pure"
420:     require "json/pure"
421:   end

Load each dependency that has been declared so far.

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 404
404:   def self.load_dependencies
405:     dependencies.each { |dependency| Kernel.load_dependency(dependency, nil) }
406:     nil
407:   end

Load the init_file specified in Merb::Config or if not specified, the init.rb file from the Merb configuration directory, and any environment files, which register the list of necessary dependencies and any after_app_loads hooks.

Dependencies can hook into the bootloader process itself by using before or after insertion methods. Since these are loaded from this bootloader (Dependencies), they can only adapt the bootloaders that haven‘t been loaded up until this point.

Returns

nil

:api: plugin

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 382
382:   def self.run
383:     set_encoding
384:     # this is crucial: load init file with all the preferences
385:     # then environment init file, then start enabling specific
386:     # components, load dependencies and update logger.
387:     unless Merb::disabled?(:initfile)
388:       load_initfile
389:       load_env_config
390:     end
391:     expand_ruby_path
392:     enable_json_gem unless Merb::disabled?(:json)
393:     load_dependencies
394:     update_logger
395:     nil
396:   end

Default encoding to UTF8 if it has not already been set to something else.

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 452
452:   def self.set_encoding
453:     unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("1.9")
454:       $KCODE = 'UTF8' if $KCODE == 'NONE' || $KCODE.blank?
455:     end
456:     
457:     nil
458:   end

Resets the logger and sets the log_stream to Merb::Config[:log_file] if one is specified, falling back to STDOUT.

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 430
430:   def self.update_logger
431:     Merb.reset_logger!
432: 
433:     # If log file is given, use it and not log stream we have.
434:     if Merb::Config[:log_file]
435:       raise "log file should be a string, got: #{Merb::Config[:log_file].inspect}" unless Merb::Config[:log_file].is_a?(String)
436:       STDOUT.puts "Logging to file at #{Merb::Config[:log_file]}" unless Merb.testing?
437:       Merb::Config[:log_stream] = File.open(Merb::Config[:log_file], "a")
438:     # but if it's not given, fallback to log stream or stdout
439:     else
440:       Merb::Config[:log_stream] ||= STDOUT
441:     end
442: 
443:     nil
444:   end

Private Class methods

Determines the path for the environment configuration file

Returns

String:The path to the config file for the environment

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 468
468:     def self.env_config
469:       Merb.dir_for(:config) / "environments" / (Merb.environment + ".rb")
470:     end

Checks to see whether or not an environment configuration exists

Returns

Boolean:Whether or not the environment configuration file exists.

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 478
478:     def self.env_config?
479:       Merb.environment && File.exist?(env_config)
480:     end

Expands Ruby path with framework directories (for models, lib, etc). Only run once.

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 537
537:     def self.expand_ruby_path
538:       # Add models, controllers, helpers and lib to the load path
539:       unless @ran
540:         Merb.logger.info "Expanding RUBY_PATH..." if Merb::Config[:verbose]
541: 
542:         $LOAD_PATH.unshift Merb.dir_for(:model)
543:         $LOAD_PATH.unshift Merb.dir_for(:controller)
544:         $LOAD_PATH.unshift Merb.dir_for(:lib)
545:         $LOAD_PATH.unshift Merb.dir_for(:helper)
546:       end
547: 
548:       @ran = true
549:       nil
550:     end

Determines the init file to use, if any. By default Merb uses init.rb from application config directory.

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 503
503:     def self.initfile
504:       if Merb::Config[:init_file]
505:         Merb::Config[:init_file].chomp(".rb") + ".rb"
506:       else
507:         Merb.dir_for(:config) / "init.rb"
508:       end
509:     end

Loads the environment configuration file, if it is present

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 488
488:     def self.load_env_config
489:       if env_config?
490:         STDOUT.puts "Loading #{env_config}" unless Merb.testing?
491:         load(env_config)
492:       end
493:       nil
494:     end

Loads the init file, should one exist

Returns

nil

:api: private

[Source]

     # File merb-core/lib/merb-core/bootloader.rb, line 517
517:     def self.load_initfile
518:       return nil if Merb.const_defined?("INIT_RB_LOADED")
519:       if File.exists?(initfile)
520:         STDOUT.puts "Loading init file from #{initfile}" unless Merb.testing?
521:         load(initfile)
522:         Merb.const_set("INIT_RB_LOADED", true)
523:       elsif !Merb.testing?
524:         Merb.fatal! "You are not in a Merb application, or you are in " \
525:           "a flat application and have not specified the init file. If you " \
526:           "are trying to create a new merb application, use merb-gen app."
527:       end
528:       nil
529:     end

[Validate]