Lazy Load Hooks
Commit e58e3faf introduces the notion of lazy load hooks as provided by ActiveSupport.
Read here for more information on how to use them
If you are developing a plugin and need to register some code to run after a particular model has loaded you can register a load hook.
E.g. Fat Free CRM uses this feature to load the settings file after the Setting class is invoked.
setting_files = FatFreeCRM.root.join(“config”, “settings.default.yml”) setting_files « Rails.root.join(“config”, “settings.yml”) unless Rails.env == ‘test’ setting_files.each do |settings_file| Setting.load_settings_from_yaml(settings_file) if File.exist?(settings_file) end
(Taken from https://github.com/fatfreecrm/fat_free_crm/blob/master/lib/fat_free_crm/load_settings.rb)
The last line of https://github.com/fatfreecrm/fat_free_crm/blob/master/app/models/setting.rb#L118 class activates the hook.
This can also be used in plugins. Say, for example, you want to register your own custom field. You can configure your engine.rb as such:
self.register(:as => 'example', :klass => 'CustomFieldExample', :type => 'string')
This will be triggered when the ‘fat_free_crm_field’ hook is run. This happens immediately after the Field class is loaded.
Hooks have been placed on all models in the app/models directory. Take a look at the last line of each specific model for the name of the hook to register. They follow the “fat_free_crm_classname” convention.