Class: Rucola::Initializer

Inherits:
Object show all
Defined in:
lib/rucola/initializer.rb

Overview

Rails-like Initializer responsible for processing configuration.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeInitializer

Create an initializer instance.



126
127
128
# File 'lib/rucola/initializer.rb', line 126

def initialize
  @configuration = Configuration.new
end

Instance Attribute Details

#configurationObject (readonly)

The Configuration instance used by this Initializer instance.



123
124
125
# File 'lib/rucola/initializer.rb', line 123

def configuration
  @configuration
end

Class Method Details

.bootObject

Load the config/boot.rb file.



66
67
68
69
70
# File 'lib/rucola/initializer.rb', line 66

def boot
  Rucola::Plugin.before_boot
  do_boot
  Rucola::Plugin.after_boot
end

.do_bootObject

Override this method from your Plugin.before_boot method if you need to alter behaviour before any of the application’s files are required and the app is started.



75
76
77
# File 'lib/rucola/initializer.rb', line 75

def do_boot
  Kernel.require Rucola::RCApp.root_path + '/config/boot'
end

.instanceObject



61
62
63
# File 'lib/rucola/initializer.rb', line 61

def instance
  @initializer ||= new
end

.load_pluginsObject

Loads all the plugins that are found in plugins_root.



85
86
87
88
89
90
91
92
93
94
# File 'lib/rucola/initializer.rb', line 85

def load_plugins
  root = plugins_root
  if root.exist?
    root.children.each do |plugin|
      init_rb = plugin + 'init.rb'
      next unless init_rb.exist?
      Kernel.require init_rb
    end
  end
end

.plugins_rootObject

Returns the path to the plugins root directory. Eg /MyApp/vendor/plugins.



80
81
82
# File 'lib/rucola/initializer.rb', line 80

def plugins_root
  RUBYCOCOA_ROOT + 'vendor/plugins'
end

.runObject

Run the initializer and start the application. Pass it a block to set the configuration.

Rucola::Initializer.run do |config|
  config.use_debugger = true
  # See +Configuration+ for more info on the options.
end


103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/rucola/initializer.rb', line 103

def run
  if @initializer.nil?
    @initializer = new
    
    yield @initializer.configuration if block_given?
    @initializer.process
    
    start_app
  else
    yield @initializer.configuration if block_given?
  end
end

.start_appObject

Starts the application’s run loop.



117
118
119
# File 'lib/rucola/initializer.rb', line 117

def start_app
  OSX.NSApplicationMain(0, nil) unless Rucola::RCApp.test? || ENV['DONT_START_RUBYCOCOA_APP']
end

Instance Method Details

#load_application_initializersObject



199
200
201
202
203
# File 'lib/rucola/initializer.rb', line 199

def load_application_initializers
  Dir["#{configuration.root_path}/config/initializers/**/*.rb"].sort.each do |initializer|
    load(initializer)
  end
end

#processObject

Step through the initialization routines.



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/rucola/initializer.rb', line 131

def process
  Rucola::Plugin.before_process(self)
  
  # load the environment config
  @configuration.load_environment_configuration!
  
  Rucola::Debugger.use! if @configuration.use_debugger
  use_reloader! if @configuration.use_reloader
  
  require_dependencies
  require_frameworks
  require_lib_source_files
  require_ruby_source_files
  
  Rucola::Plugin.after_process(self)
end

#require_dependenciesObject

Requires all the dependencies specified in config/dependencies.rb



149
150
151
152
# File 'lib/rucola/initializer.rb', line 149

def require_dependencies
  deps_file = (RUBYCOCOA_ROOT + 'config/dependencies.rb').to_s
  Rucola::Dependencies.load(deps_file).require!
end

#require_frameworksObject

Requires all frameworks specified by the Configuration#objc_frameworks list. This is also responsible for including osx/active_record_proxy if use_active_record? is true



157
158
159
# File 'lib/rucola/initializer.rb', line 157

def require_frameworks
  configuration.objc_frameworks.each { |framework| OSX.require_framework(framework) }
end

#require_lib_source_filesObject

Requires any ruby source files in the app/lib/ directory.



173
174
175
176
177
# File 'lib/rucola/initializer.rb', line 173

def require_lib_source_files
  Dir[RUBYCOCOA_ROOT + 'lib/*.rb'].each do |f|
    require f
  end
end

#require_ruby_source_filesObject

Loops through the subdirectories of the app/ directory. It requires any ruby file in any of the subdirectories and registers the required file in the hash @require_ruby_source_files with the name of the subdirectory as it’s key.

require_ruby_source_files # => :views=>[], :controllers=>



185
186
187
188
189
# File 'lib/rucola/initializer.rb', line 185

def require_ruby_source_files
  Dir[RUBYCOCOA_ROOT + 'app/**/*.rb'].each do |f|
    require f
  end
end

#require_ruby_source_files_in_dir_recursive(dir) ⇒ Object

Recursively requires any ruby source file that it finds.



162
163
164
165
166
167
168
169
170
# File 'lib/rucola/initializer.rb', line 162

def require_ruby_source_files_in_dir_recursive(dir)
  dir.children.each do |child|
    if child.directory?
      require_ruby_source_files_in_dir_recursive(child)
      next
    end
    require child if child.basename.to_s =~ /\.rb$/
  end
end

#set_load_path!Object

Set the paths from which your application will automatically load source files.



206
207
208
209
210
# File 'lib/rucola/initializer.rb', line 206

def set_load_path!
  load_paths = configuration.load_paths || [] # TODO: from script/console the configuration isn't ran.
  load_paths.reverse_each { |dir| $LOAD_PATH.unshift(dir) if File.directory?(dir) } unless Rucola::RCApp.test? # FIXME: why??
  $LOAD_PATH.uniq!
end

#use_reloader!Object

Loads the Reloader lib if use_reloader is set to true on the Configuration.



192
193
194
195
196
197
# File 'lib/rucola/initializer.rb', line 192

def use_reloader!
  if configuration.use_reloader
    Kernel.require 'rucola/reloader'
    Rucola::Reloader.start!
  end
end