Giter Club home page Giter Club logo

p5-class-type-enum's People

Contributors

manwar avatar merrilymeredith avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

manwar yoe

p5-class-type-enum's Issues

Add `$class->list_is_methods`

From your SYNPOSIS example, list_is_methods would return a list of strings:

("is_bread", "is_toasting", "is_toast", "is_burnt")

Could be implemented pretty easily:

sub list_is_methods {
  map "is_$_", @{ $_[0]->values };
}

This would allow the following:

package Toast {
  use Moo;
 
  has status => (
    is     => 'rw',
    coerce => sub {
      Toast::Status->coerce_symbol(shift)
    },
    isa    => sub {
      $_[0]->isa('Toast::Status') or die "Toast calamity!"
    },
    handles => [ Toast::Status->list_is_methods ],
  );
}

my $toast = Toast->new(status => "bread");
if ($toast->is_bread) {  # don't need to do $toast->status->is_bread
  ...;
}

Add `$class->type_constraint`

Add a class method called type_constraint along these lines:

sub type_constraint {
  my $class = ref($_[0]) || $_[0];
  require Type::Tiny::Class;
  require Types::Standard;
  Type::Tiny::Class
    ->new(class => $class)
    ->plus_constructors(Types::Standard::Str(), "coerce_symbol");
}

This would simplify your SYNOPSIS example to:

package Toast {
  use Moo;
 
  has status => (
    is     => 'rw',
    isa    => Toast::Status->type_constraint,
    coerce => 1,
  );
}

Remove dependency on Function::Parameters

Function::Parameters won't work on Perls older than 5.14. Removing the dependency on it would allow your module to work on Perl back to 5.8.x pretty easily.

I'm happy to submit a pull request if this would be something you'd be interested in.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.