Code Monkey home page Code Monkey logo

venus's Introduction

Venus - Object-Oriented Standard Library for Perl 5

Venus is an object-orientation framework and extendible standard library for Perl 5 with classes which wrap most native Perl data types. Venus has a simple modular architecture, robust library of classes and methods, supports pure-Perl autoboxing, advanced exception handling, "true" and "false" keywords, package introspection, command-line options parsing, and more.

Installation

Install Venus using cpm:

cpm install Venus

Install Venus using cpanm:

cpanm -qn Venus

Install Venus using Perl (via cpanm):

curl -sSL https://cpanmin.us | perl - -qn Venus

Install Venus using Perl (via cpanm, from GitHub):

curl -ssL https://cpanmin.us | perl - -qn https://github.com/awncorp/venus.zip

Features

  • Perl 5.18.0+
  • Zero Dependencies
  • Fast Object-Orientation
  • Robust Standard Library
  • Intuitive Value Classes
  • Pure Perl Autoboxing
  • Convenient Utility Classes
  • Simple Package Reflection
  • Flexible Exception Handling
  • Composable Standards
  • Pluggable (no monkeypatching)
  • Proxyable Methods
  • Type Assertions
  • Type Coercions
  • Value Casting
  • Boolean Values
  • Complete Documentation
  • Complete Test Coverage

Founder

Contributing

We rely on your contributions and feedback to improve Venus, and we love hearing about your experiences and what we can improve upon.

All contributions are always welcome! See the contributing guide for ways to get started, and please adhere to this project's code of conduct.

Support

For support, feel free to report an issue.

License

Apache 2

venus's People

Contributors

awncorp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

stepht bollwarm

venus's Issues

Document overrides

Document all Kind classes and roles which implement operator overloading.

i.e. "This package overloads the following operators:"

Implement Venus::Role::Digestable

This role should be added to all Kind classes. The digest method call will wrap the existing dump signature and allow derived objects to compute a hash using the core "Digest" module.

t/Venus_Date.t may fail with non-English locale

See subject. With a German locale it fails like this:

    #   Failed test at t/Venus_Date.t line 1159.
    #                   'Mo, 01 Feb 1988 00:00:00 +0100'
    #     doesn't match '(?^u:Mon, 01 Feb 1988 00:00:00 [-+]\d{4})'
    # Looks like you failed 1 test of 4.

Document all proxyable methods

A proxyable method, different from the Proxyable role, are methods that take as arguments a method name and arguments which the original method call will make itself after performing some other operation.

Extend Venus::Role::Coercion with new abilities

Venus::Role::Coercion#coerce_args
This method coerces the build arguments provided.
E.g. coerce_args(data, spec)

Venus::Role::Coercion#coerce_into
This method coerces a value into an object.
E.g. coerce_into(Venus/Code, value)

Venus::Role::Coercion#coerce_onto
This method sets a single writable attribute using the coerced value
E.g. coerce_onto(data, foo, Venus/Code, value)

Update CONTRIBUTING.md

Update CONTRIBUTING.md to include required and suggested tools, as well as an explanation of how CI/CD is configured, how CHANGELOG is generated, and how releases to GitHub and CPAN are done.

Implement better multi-library JSON handling

While JSON::PP 2.9700 is core in Perl 5.14 onward, configuring custom boolean values via boolean_values supported isn't until JSON::PP 4.00.

https://github.com/cpanery/venus/blob/99ca61b2701fce115ab6178c533e22db73d400a3/lib/Venus/Json.pm#L43-L46
https://github.com/cpanery/venus/blob/99ca61b2701fce115ab6178c533e22db73d400a3/lib/Venus/Json.pm#L81-L84

This is going to continue to get hairy, first having to drop support for Cpanel::JSON::XS, and now having to contend with all the nuances between different JSON libraries and their handling of boolean values.

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.