165 lines
5.7 KiB
RPMSpec
165 lines
5.7 KiB
RPMSpec
#
|
|
# spec file for package perl-Object-InsideOut
|
|
#
|
|
# Copyright (c) 2024 SUSE LLC
|
|
#
|
|
# 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 https://bugs.opensuse.org/
|
|
#
|
|
|
|
|
|
%define cpan_name Object-InsideOut
|
|
Name: perl-Object-InsideOut
|
|
Version: 4.50.0
|
|
Release: 0
|
|
# 4.05 -> normalize -> 4.50.0
|
|
%define cpan_version 4.05
|
|
License: Artistic-1.0 OR GPL-1.0-or-later
|
|
Summary: Comprehensive inside-out object support module
|
|
URL: https://metacpan.org/release/%{cpan_name}
|
|
Source0: https://cpan.metacpan.org/authors/id/J/JD/JDHEDDEN/%{cpan_name}-%{cpan_version}.tar.gz
|
|
Source1: cpanspec.yml
|
|
Source100: README.md
|
|
BuildArch: noarch
|
|
BuildRequires: perl
|
|
BuildRequires: perl-macros
|
|
BuildRequires: perl(Exception::Class) >= 1.22
|
|
BuildRequires: perl(Module::Build)
|
|
BuildRequires: perl(Scalar::Util) >= 1.63
|
|
Requires: perl(Exception::Class) >= 1.22
|
|
Requires: perl(Scalar::Util) >= 1.63
|
|
Requires: perl(Test::More) >= 0.98
|
|
Provides: perl(Bundle::Object::InsideOut) = %{version}
|
|
Provides: perl(Object::InsideOut)
|
|
Provides: perl(Object::InsideOut::Exception) = %{version}
|
|
Provides: perl(Object::InsideOut::Metadata) = %{version}
|
|
Provides: perl(Object::InsideOut::Results) = %{version}
|
|
Provides: perl(Object::InsideOut::Secure) = %{version}
|
|
Provides: perl(Object::InsideOut::Util) = %{version}
|
|
%undefine __perllib_provides
|
|
%{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 "SEE ALSO". 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 threads::shared.
|
|
|
|
* * 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 mod_perl, as well. Also
|
|
supports additions to class hierarchies, and dynamic creation of object
|
|
fields during runtime.
|
|
|
|
* * Exception Objects
|
|
|
|
Object::InsideOut uses Exception::Class 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 Storable 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
|
|
%autosetup -n %{cpan_name}-%{cpan_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
|
|
|
|
%files -f %{name}.files
|
|
%doc Changes examples README
|
|
|
|
%changelog
|