OBS-URL: https://build.opensuse.org/package/show/devel:languages:perl/perl-Object-InsideOut?expand=0&rev=1
177 lines
6.0 KiB
RPMSpec
177 lines
6.0 KiB
RPMSpec
#
|
|
# spec file for package perl-Object-InsideOut (Version 3.81)
|
|
#
|
|
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
|
#
|
|
# All modifications and additions to the file contributed by third parties
|
|
# remain the property of their copyright owners, unless otherwise agreed
|
|
# upon. The license for this file, and modifications and additions to the
|
|
# file, is the same license as for the pristine package itself (unless the
|
|
# license for the pristine package is not an Open Source License, in which
|
|
# case the license is the MIT License). An "Open Source License" is a
|
|
# license that conforms to the Open Source Definition (Version 1.9)
|
|
# published by the Open Source Initiative.
|
|
|
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
|
#
|
|
|
|
Name: perl-Object-InsideOut
|
|
Version: 3.81
|
|
Release: 1
|
|
License: GPL+ or Artistic
|
|
%define cpan_name Object-InsideOut
|
|
Summary: Comprehensive inside-out object support module
|
|
Url: http://search.cpan.org/dist/Object-InsideOut/
|
|
Group: Development/Libraries/Perl
|
|
Source: http://www.cpan.org/authors/id/J/JD/JDHEDDEN/%{cpan_name}-%{version}.tar.gz
|
|
BuildArch: noarch
|
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
|
BuildRequires: perl
|
|
BuildRequires: perl(Module::Build)
|
|
BuildRequires: perl-macros
|
|
BuildRequires: perl(attributes)
|
|
BuildRequires: perl(B)
|
|
BuildRequires: perl(Config)
|
|
BuildRequires: perl(Data::Dumper)
|
|
BuildRequires: perl(Exception::Class) >= 1.29
|
|
BuildRequires: perl(ExtUtils::MakeMaker)
|
|
BuildRequires: perl(Module::Build)
|
|
BuildRequires: perl(overload)
|
|
BuildRequires: perl(Scalar::Util) >= 1.23
|
|
BuildRequires: perl(strict)
|
|
BuildRequires: perl(Test::More) >= 0.5
|
|
BuildRequires: perl(warnings)
|
|
Requires: perl(attributes)
|
|
Requires: perl(B)
|
|
Requires: perl(Config)
|
|
Requires: perl(Data::Dumper)
|
|
Requires: perl(Exception::Class) >= 1.29
|
|
Requires: perl(overload)
|
|
Requires: perl(Scalar::Util) >= 1.23
|
|
Requires: perl(strict)
|
|
Requires: perl(Test::More) >= 0.5
|
|
Requires: perl(warnings)
|
|
Recommends: perl(Math::Random::MT::Auto)
|
|
Recommends: perl(Want)
|
|
%{perl_requires}
|
|
|
|
%description
|
|
This module provides comprehensive support for implementing classes using
|
|
the inside-out object model.
|
|
|
|
Object::InsideOut implements inside-out objects as anonymous scalar
|
|
references that are blessed into a class with the scalar containing the ID
|
|
for the object (usually a sequence number). For Perl 5.8.3 and later, the
|
|
scalar reference is set as *read-only* to prevent _accidental_
|
|
modifications to the ID. Object data (i.e., fields) are stored within the
|
|
class's package in either arrays indexed by the object's ID, or hashes
|
|
keyed to the object's ID.
|
|
|
|
The virtues of the inside-out object model over the _blessed hash_ object
|
|
model have been extolled in detail elsewhere. See the informational links
|
|
under the /"SEE ALSO" manpage. Briefly, inside-out objects offer the
|
|
following advantages over _blessed hash_ objects:
|
|
|
|
* * Encapsulation
|
|
|
|
Object data is enclosed within the class's code and is accessible only
|
|
through the class-defined interface.
|
|
|
|
* * Field Name Collision Avoidance
|
|
|
|
Inheritance using _blessed hash_ classes can lead to conflicts if any
|
|
classes use the same name for a field (i.e., hash key). Inside-out
|
|
objects are immune to this problem because object data is stored inside
|
|
each class's package, and not in the object itself.
|
|
|
|
* * Compile-time Name Checking
|
|
|
|
A common error with _blessed hash_ classes is the misspelling of field
|
|
names:
|
|
|
|
$obj->{'coment'} = 'Say what?'; # Should be 'comment' not 'coment'
|
|
|
|
As there is no compile-time checking on hash keys, such errors do not
|
|
usually manifest themselves until runtime.
|
|
|
|
With inside-out objects, _text_ hash keys are not used for accessing
|
|
field data. Field names and the data index (i.e., $$self) are checked by
|
|
the Perl compiler such that any typos are easily caught using 'perl -c'.
|
|
|
|
$coment[$$self] = $value; # Causes a compile-time error
|
|
# or with hash-based fields
|
|
$comment{$$self} = $value; # Also causes a compile-time error
|
|
|
|
Object::InsideOut offers all the capabilities of other inside-out object
|
|
modules with the following additional key advantages:
|
|
|
|
* * Speed
|
|
|
|
When using arrays to store object data, Object::InsideOut objects are as
|
|
much as 40% faster than _blessed hash_ objects for fetching and setting
|
|
data, and even with hashes they are still several percent faster than
|
|
_blessed hash_ objects.
|
|
|
|
* * Threads
|
|
|
|
Object::InsideOut is thread safe, and thoroughly supports sharing objects
|
|
between threads using the threads::shared manpage.
|
|
|
|
* * Flexibility
|
|
|
|
Allows control over object ID specification, accessor naming, parameter
|
|
name matching, and much more.
|
|
|
|
* * Runtime Support
|
|
|
|
Supports classes that may be loaded at runtime (i.e., using 'eval {
|
|
require ...; };'). This makes it usable from within the mod_perl manpage,
|
|
as well. Also supports additions to class hierarchies, and dynamic
|
|
creation of object fields during runtime.
|
|
|
|
* * Exception Objects
|
|
|
|
Object::InsideOut uses the Exception::Class manpage for handling errors
|
|
in an OO-compatible manner.
|
|
|
|
* * Object Serialization
|
|
|
|
Object::InsideOut has built-in support for object dumping and reloading
|
|
that can be accomplished in either an automated fashion or through the
|
|
use of class-supplied subroutines. Serialization using the Storable
|
|
manpage is also supported.
|
|
|
|
* * Foreign Class Inheritance
|
|
|
|
Object::InsideOut allows classes to inherit from foreign (i.e.,
|
|
non-Object::InsideOut) classes, thus allowing you to sub-class other Perl
|
|
class, and access their methods from your own objects.
|
|
|
|
* * Introspection
|
|
|
|
Obtain constructor parameters and method metadata for Object::InsideOut
|
|
classes.
|
|
|
|
%prep
|
|
%setup -q -n %{cpan_name}-%{version}
|
|
|
|
%build
|
|
%{__perl} Build.PL installdirs=vendor
|
|
./Build build flags=%{?_smp_mflags}
|
|
|
|
%check
|
|
./Build test
|
|
|
|
%install
|
|
./Build install destdir=%{buildroot} create_packlist=0
|
|
%perl_gen_filelist
|
|
|
|
%clean
|
|
%{__rm} -rf %{buildroot}
|
|
|
|
%files -f %{name}.files
|
|
%defattr(-,root,root,755)
|
|
%doc Changes examples README
|
|
|
|
%changelog
|