1 package CatalystX::ControllerGeneratingModel;
3 # Stolen from doy - http://tozt.net/code/Bot-Games/lib/Bot/Games/OO.pm
4 # Note, this code is not modifier safe, as it doesn't deal with wrapped methods.
8 use Moose::Util::MetaRole;
10 sub command { # This takes way too much code, surely there must be a better way to
13 my ($name, $code, %args) = @_;
14 my $method_meta = $class->meta->get_method($name);
15 my $superclass = Moose::blessed($method_meta) || 'Moose::Meta::Method';
16 my $method_metaclass = Moose::Meta::Class->create_anon_class(
17 superclasses => [$superclass],
18 roles => ['CatalystX::ControllerGeneratingModel::DispatchableMethod'],
22 $method_metaclass->rebless_instance($method_meta);
25 $method_meta = $method_metaclass->name->wrap(
27 package_name => $class,
30 $class->meta->add_method($name, $method_meta);
34 Moose::Exporter->setup_import_methods(
35 with_caller => ['command'],
42 Moose->init_meta(%options);
43 # Moose::Util::MetaRole::apply_metaclass_roles(
44 # for_class => $options{for_class},
45 # attribute_metaclass_roles => ['FooBar::Meta::Role::Attribute'],
46 # metaclass_roles => ['FooBar::Meta::Role::Class'],
48 return $options{for_class}->meta;