Carrot

 view release on metacpan or  search on metacpan

lib/Carrot/Meta/Greenhouse/Package_Loader.pm  view on Meta::CPAN

			$singular_instances->{$pkg_name} =
				$pkg_name->constructor(@ARGUMENTS);
		}
		return($singular_instances->{$pkg_name});

	} else {
		if (exists($no_instances->{$pkg_name}))
		{
			$translated_errors->oppose(
				'reloading_singluar',
				[$pkg_name]);
		}
		return($pkg_name->constructor(@ARGUMENTS));
	}
}

sub create_pending_instance
# /type function
# /effect "Constructs an instance for a package marked as pending"
# //parameters
#	pkg_name
# //returns
{
	my ($pkg_name) = @ARGUMENTS;

	unless (exists($pending->{$pkg_name}))
	{
		$translated_errors->oppose(
			'package_loading_not_pending',
			[$pkg_name]);
	}
	my $pkg_ref = delete($pending->{$pkg_name});
	$$pkg_ref = $pkg_name->constructor;
	return;
}

sub provide_instance_soonest
# /type function
# /effect "Provide a instances of the given packages as soon as they"re loaded'
# //parameters
#	pkg_name  +multiple
# //returns
{
	foreach my $pkg_name (@ARGUMENTS)
	{
		$pending->{$pkg_name} = \$pkg_name;
		$specific_events->subscribe_callback(
			$pkg_name, \&create_pending_instance);
#		$pkg_name = IS_UNDEFINED;
	}
	return;
}

sub mark_singular
# /type function
# /effect "Marks a package for singular instances."
# //parameters
#	pkg_name
# //returns
{
	my $pkg_name = (caller)[RDX_CALLER_PACKAGE];
	unless (exists($singular_instances->{$pkg_name}))
	{
		$singular_instances->{$pkg_name} = IS_UNDEFINED;
	}
	return;
}

sub mark_no
# /type function
# /effect "Marks a package for singular instances."
# //parameters
#	pkg_name
# //returns
{
	my $pkg_name = (caller)[RDX_CALLER_PACKAGE];
	$no_instances->{$pkg_name} = IS_EXISTENT;
	return;
}

# sub load_before_bless
# # /type function
# # /effect ""
# # //parameters
# #	<reference>
# #	<pkg_name>
# # //returns
# {
# 	my ($reference, $pkg_name) = @ARGUMENTS;
#
# 	$loader->load($pkg_name);
# 	return(bless($reference, $pkg_name));
# }

sub dot_ini_got_package_name
# /type class_method
# /effect "Processes a package name from a .ini file."
# //parameters
#	class
#	package_name
# //returns
{
	my ($class, $package_name) = @ARGUMENTS;

	$package_name->load;
#	my $pkg_name = $package_name->value;
#	$singular_instances->{$pkg_name} = provide_instance_soonest($pkg_name);

	return;
}

# =--------------------------------------------------------------------------= #

	return(PERL_FILE_LOADED);
}
# //revision_control
#	version 1.1.226
#	branch main
#	maturity alpha
# /license MPL-2.0 (Mozilla Public License v2.0)
# /copyright "(C) 2009-2014 Winfried Trümper <win@carrot-programming.org>"



( run in 1.770 second using v1.01-cache-2.11-cpan-364913b4093 )