All Projects → cpanery → venus

cpanery / venus

Licence: Unknown, Unknown licenses found Licenses found Unknown LICENSE Unknown LICENSE.md
OO Standard Library for Perl 5

Programming Languages

perl
6916 projects

Projects that are alternatives of or similar to venus

core.horse64.org
THIS IS A MIRROR, CHECK https://codeberg.org/Horse64/core.horse64.org
Stars: ✭ 3 (-78.57%)
Mutual labels:  object-oriented, standard-library
pawn-stdlib
The Pawn Standard Library Package, not including any files related to SA:MP - designed for the sampctl package management system.
Stars: ✭ 13 (-7.14%)
Mutual labels:  standard-library
framework
Data handling framework complementary to backend active record systems.
Stars: ✭ 30 (+114.29%)
Mutual labels:  object-oriented
Devel-Camelcadedb
Perl module for debugging with Perl5 plugin for IntelliJ
Stars: ✭ 23 (+64.29%)
Mutual labels:  perl5
DDoS-Script
A script written in perl for ddos ​​with automatic detection of open and vulnerable port that gives up to 1.5 gb packages / s
Stars: ✭ 30 (+114.29%)
Mutual labels:  perl5
xavier
Xavier is a small object-oriented XML library for Lazarus and Delphi
Stars: ✭ 38 (+171.43%)
Mutual labels:  object-oriented
FlexCanvasJS
RIA Web Application Framework for HTML5 Canvas inspired by Adobe Flex / Flash. Style-able, skin-able, customize-able Javascript UI component set, from shapes to color pickers to data grids. Relative and dynamic layouts, automatic redraw regions, composite effects, and much more. Great for everything 2D, complex web forms to games.
Stars: ✭ 18 (+28.57%)
Mutual labels:  object-oriented
fork
A simple, self hosted, low level programming language.
Stars: ✭ 69 (+392.86%)
Mutual labels:  standard-library
prime.js
Prime JS is a different kind of JavaScript framework. Prime is written in 100% standard, explicit, and namespaced Object Oriented JavaScript.
Stars: ✭ 13 (-7.14%)
Mutual labels:  object-oriented
CourseDownloader
GUI app for downloading whole online courses with folder structure from one url
Stars: ✭ 20 (+42.86%)
Mutual labels:  object-oriented
App-revealup
HTTP Server app for viewing Markdown formatted text as slides
Stars: ✭ 38 (+171.43%)
Mutual labels:  perl5
perl-live
perl live coding
Stars: ✭ 13 (-7.14%)
Mutual labels:  perl5
p5-type-tiny
Perl 5 distribution Type-Tiny; see homepage for downloads and documentation.
Stars: ✭ 48 (+242.86%)
Mutual labels:  perl5
cassandra-top
Cassandra top command to monitor cluster without Datastax OpsCenter, and log nodetool administrative commands
Stars: ✭ 13 (-7.14%)
Mutual labels:  perl5
whichpm
Locates installed Perl modules.
Stars: ✭ 20 (+42.86%)
Mutual labels:  perl5
learn-swift-with-bob
Learn Swift 4 with Bob: Intermediate to Advanced Swift 4 Course
Stars: ✭ 22 (+57.14%)
Mutual labels:  object-oriented
Star-lang-specification
Work in progress specs for the Star programming language
Stars: ✭ 26 (+85.71%)
Mutual labels:  object-oriented
libra-code
quantum-dynamics-hub.github.io/libra/index.html
Stars: ✭ 33 (+135.71%)
Mutual labels:  object-oriented
EMF
Extended Mechanics & Flavor
Stars: ✭ 33 (+135.71%)
Mutual labels:  perl5
snap
Snap Programming Language
Stars: ✭ 20 (+42.86%)
Mutual labels:  object-oriented

Venus - Object-Oriented Standard Library for Perl 5

Venus is an object-orientation framework and extendible standard library for Perl 5, built on top of Moo 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.

Demo: Better Boolean Values

i.e. Venus knows the difference between boolean 0, numerical 0, and the string '0'.

Venus Demo

Installation

Install Venus using cpm:

cpm install Venus

Install Venus using cpanm:

cpanm -qn Venus

Install Venus using Perl:

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

Install Venus using Perl (from GitHub):

$ curl -ssL https://cpanmin.us | perl - -qn git://github.com/cpanery/venus.git

Features

Feature: Standard Library

package main;

use Venus::Array;

my $array = Venus::Array->new([1..4]);

# $array->all(sub{ $_ > 0 });
# $array->any(sub{ $_ > 0 });
# $array->each(sub{ $_ > 0 });
# $array->grep(sub{ $_ > 0 });
# $array->map(sub{ $_ > 0 });
# $array->none(sub{ $_ < 0 });
# $array->one(sub{ $_ == 0 });
# $array->random;

use Venus::Hash;

my $hash = Venus::Hash->new({1..8});

# $hash->all(sub{ $_ > 0 });
# $hash->any(sub{ $_ > 0 });
# $hash->each(sub{ $_ > 0 });
# $hash->grep(sub{ $_ > 0 });
# $hash->map(sub{ $_ > 0 });
# $hash->none(sub{ $_ < 0 });
# $hash->one(sub{ $_ == 0 });
# $hash->random;

$array->count == $hash->count;

Feature: Value Classes

Array

package main;

use Venus::Array;

my $array = Venus::Array->new;

$array->random;

Boolean

package main;

use Venus::Boolean;

my $boolean = Venus::Boolean->new;

$boolean->negate;

Code

package main;

use Venus::Code;

my $code = Venus::Code->new;

$code->call;

Hash

package main;

use Venus::Hash;

my $hash = Venus::Hash->new;

$hash->random;

Feature: Builtin Autoboxing

package main;

use Venus::String;

my $string = Venus::String->new('hello, world');

$string->box->split(', ')->join(' ')->titlecase->unbox->get;

# Hello World

Feature: Utility Classes

Args

package main;

use Venus::Args;

my $args = Venus::Args->new;

$args->get(0);

Data

package main;

use Venus::Data;

my $docs = Venus::Data->new->docs;

$docs->find('head1', 'NAME');

Date

package main;

use Venus::Date;

my $date = Venus::Date->new;

$date->iso8601;

Error

package main;

use Venus::Error;

my $error = Venus::Error->new;

$error->throw;

Path

package main;

use Venus::Path;

my $path = Venus::Path->new('/tmp/random');

$path->mkdirs;

Feature: Package Reflection

package main;

use Venus::Space;

my $space = Venus::Space->new('Venus');

$space->do('tryload')->routines;

Feature: Exception Handling

package MyApp;

use Venus::Class;

with 'Venus::Role::Throwable';
with 'Venus::Role::Catchable';

sub execute {
  shift->throw->error;
}

package main;

my $myapp = MyApp->new;

my $error = $myapp->catch('execute');

# $error->isa('MyApp::Error');

Feature: Composable Standards

package MyApp;

use Venus::Class;

with 'Venus::Role::Dumpable';
with 'Venus::Role::Stashable';

package main;

my $myapp = MyApp->new;

$myapp->stash(greeting => 'hello world');

$myapp->dump('stash');

# '{"greeting" => "hello world"}'

Feature: Pluggable Library

package Venus::String::Plugin::Base64;

use Venus::Class;

sub execute {
  my ($self, $string) = @_;

  require MIME::Base64;

  return MIME::Base64::encode_base64($string->value);
}

package main;

use Venus::String;

my $string = Venus::String->new('hello, world');

$string->base64;

Feature: Template System

package main;

use Venus::Template;

my $template = Venus::Template->new(q(
  {{ if user.name }}
  Welcome, {{ user.name }}!
  {{ else user.name }}
  Welcome, friend!
  {{ end user.name }}
));

$template->render;

Documentation

CPAN

For documentation and usage information on specific classes or roles (traits), see below:

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].