lib/core/environment.rb in nucleon-0.2.1 vs lib/core/environment.rb in nucleon-0.2.2

- old
+ new

@@ -79,10 +79,11 @@ unless @load_info[namespace][plugin_type].has_key?(plugin_info[:provider]) data = { :namespace => namespace, :type => plugin_type, + :base_path => base_path, :file => file, :provider => plugin_info[:provider], :directory => plugin_info[:directory], :class_components => plugin_info[:class_components] } @@ -158,24 +159,26 @@ def create_plugin(namespace, plugin_type, provider, options = {}, &code) namespace = namespace.to_sym plugin_type = sanitize_id(plugin_type) provider = sanitize_id(provider) - + unless plugin_type_defined?(namespace, plugin_type) return nil end if type_info = loaded_plugin(namespace, plugin_type, provider) - ids = Util::Data.array(type_info[:class].register_ids).flatten - instance_options = Config.new(options).export - instance_options = Util::Data.subset(instance_options, ids, true) - instance_name = "#{provider}_" + Nucleon.sha1(instance_options) + ids = Util::Data.array(type_info[:class].register_ids).flatten + instance_config = Config.new(options) + ensure_new = instance_config.delete(:new, false) + instance_options = Util::Data.subset(instance_config.export, ids, true) + instance_name = "#{provider}_" + Nucleon.sha1(instance_options) + @active_info[namespace] = {} unless @active_info.has_key?(namespace) @active_info[namespace][plugin_type] = {} unless @active_info[namespace].has_key?(plugin_type) - unless instance_name && @active_info[namespace][plugin_type].has_key?(instance_name) + if ensure_new || ! ( instance_name && @active_info[namespace][plugin_type].has_key?(instance_name) ) type_info[:instance_name] = instance_name options = code.call(type_info, options) if code plugin = type_info[:class].new(namespace, plugin_type, provider, options)