summary refs log tree commit diff
path: root/lib/Net/HTTP/Spore/Meta.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/HTTP/Spore/Meta.pm')
-rw-r--r--lib/Net/HTTP/Spore/Meta.pm47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/Net/HTTP/Spore/Meta.pm b/lib/Net/HTTP/Spore/Meta.pm
new file mode 100644
index 0000000..8b4942a
--- /dev/null
+++ b/lib/Net/HTTP/Spore/Meta.pm
@@ -0,0 +1,47 @@
+package Net::HTTP::Spore::Meta;
+
+use Moose;
+use Moose::Exporter;
+use Moose::Util::MetaRole;
+
+our $VERSION = '0.14';
+
+Moose::Exporter->setup_import_methods(
+    with_meta => [qw/spore_method/],
+    also      => [qw/Moose/]
+);
+
+sub spore_method {
+    my $meta = shift;
+    my $name = shift;
+    $meta->add_spore_method($name, @_);
+}
+
+sub init_meta {
+    my ($class, %options) = @_;
+
+    my $for = $options{for_class};
+    Moose->init_meta(%options);
+
+    my $meta = Moose::Util::MetaRole::apply_metaroles(
+        for       => $for,
+        class_metaroles => {
+            class => ['Net::HTTP::Spore::Meta::Class'],
+        },
+    );
+
+    Moose::Util::MetaRole::apply_base_class_roles(
+        for   => $for,
+        roles => [
+            qw/
+              Net::HTTP::Spore::Role::UserAgent
+              Net::HTTP::Spore::Role::Request
+              Net::HTTP::Spore::Role::Middleware
+              /
+        ],
+    );
+
+    $meta;
+};
+
+1;