My job at Bank of America consists largely of data collection and storage. To
collect data in Perl, I have to write XS modules to interface with the
vendor-supplied native libraries. Because I want to know my code works, my XS
modules come with robust test suites, testing that everything works correctly.
Since the XS module was intended to be used by other, larger systems, I decided
to help those larger systems test their dependency on my module: I included a
Test::MockObject that mocked
my module's interface. By using my test module, the tests can try some data and
see if their code works.
But the hardest part to test is always the failures. How do they test if the
news service goes down in the middle of a data pull? How about if it goes down
between data pulls but still inside the same process? How do they test if the
user has input an invalid ID for data?
Continue reading Testing is a Feature of Your Service...
This month's presentation was on the
Git::Repository Perl module,
given by me. In both my jobs, I use the Git::Repository module to automate
Continue reading Chicago.PM - Scripting Git With Perl...
For a large application, configuration files become a necessity. They help
flexible code be used in multiple instances across multiple modules. But they
are, for the most part, only data structures, which can be a problem if the
configured object is expecting another configured object.
Continue reading Using MooseX::Types to Inflate Config Values...
This month's project night focused on Joel Berger's Alien::Base module. The
final bugs are either squashed or very close, and we got an introduction to how
the whole thing works.
Continue reading Chicago.PM Report - Project Night: Alien::Base...
Moose is great! At its very basic, it simplifies the boilerplate required to
create Perl objects immensely, providing attributes with type constraints,
method modifiers for semantic enhancement, and role-based class composition for
better code re-use.
Moose is built on top of Class::MOP. MOP stands for Meta-Object Protocol. A
meta-object is an object that describes an object. So, each attribute and
method in your class has a corresponding entry in the meta-object describing
it. The meta-object is where you can find out what type constraints are on an
attribute, or what methods a class has available.
Since the meta-object is a Plain Old Perl Object, we can call methods on it at
runtime. Using those meta-object methods to add an attribute would modify our
object, adding that attribute to the object. Using Class::MOP, we can compose
classes at runtime!
Continue reading Run-time Class Composition With Moose...