Stories
Slash Boxes
Comments

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

Ovid (2709)

Ovid
  (email not shown publicly)
http://publius-ovidius.livejournal.com/
AOL IM: ovidperl (Add Buddy, Send Message)

Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.

Journal of Ovid (2709)

Thursday January 31, 2008
07:54 AM

Class::Dummy?

[ #35535 ]

If I want to serialize arbitrary classes with Bermuda, I need to make arbitrary classes (and instances of them. I looked for something useful, but I'm not seeing it. Currently I'm writing the following:

ok my $dummy = Class::Dummy->new(
    package => 'Foo::Bar',
    methods => {
        first_name => 'bob',
        last_name  => 'marley',
        aref       => [ 1,2,3 ],
        list       => sub { ( 3, 4, 5 ) },
        full_name  => sub {
            my $self = shift;
            return join ' ' => map { $self->$_ } qw/ first_name last_name /;
        },
    };
), '... creating a dummy class should succeed';

isa_ok $dummy, 'Class::Dummy', '... and the object it returns';
can_ok $dummy, 'first_name';
is $dummy->first_name, 'bob';

Please let me know if this already exists.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • You could nearly call that Class::Inner and have it work like Java's inner classes :)

    Which IMO might be a useful thing. Inner classes definitely have their uses - maybe more so in Java.

    • I was thinking of this more as a testing tool so that I could generate fixtures on the fly and embed them in tests:

      my $instance   = Class::Dummy->new(\%interface);
      my @islands    = @yaml_strings;
      my $serialized = Bermuda::Test->serialize($instance, @islands);

      # a bunch of tests

      A persistent problem with test suites is having fixtures embedded in files and the poor programmer has to pop between several files to see them. That also means that a change to one fixture possibly means

      • Sorry - being terse today :)

        I realised what it was for but it occurred to me that it might sometimes be useful outside of tests.

        • Maybe I should rename it then? It really does seem like a useful testing tool (it's already making my life easier), but perhaps others could use it. Does Class::Temp sound like a good name? It would be very useful when you find yourself passing around hashrefs but you hate locked hashes.

          • I think Class::Inner is a similar but different thing that you can release once you get all the other interesting things you're working on done :)
    • And along the lines of what I said earlier, here's my first test case with it:

      #!/usr/bin/perl

      use strict;
      use warnings;

      use lib 'lib', 't/lib';
      use Test::Most 'no_plan'; # tests => 1;
      use Test::XML;
      use Bermuda::Test;
      use Bermuda::XML;
      use Class::Dummy;

      my $dummy = Class::Dummy->new(
          package => 'Some::Class',
          methods => {
              name => 'Victoria',
              email => sub {
                  my $self = shift;

  • There's Class::Generate, which looks pretty weird to me. I use (wrote) Package::Generator, which has no method sugar. You can use Class::MOP, too, as seen here:

    http://groups.google.com/group/perl.perl5.porters/msg/b05428a97a7a91e4 [google.com]
    --
    rjbs