@@ -5,45 +5,47 @@ use MooseX::NonMoose;
5
5
use MooseX::Aliases;
6
6
extends ' Xray::XDIFile' ;
7
7
with ' Xray::XDI::WriterPP' ;
8
+ with ' MooseX::Clone' ;
8
9
9
10
use List::MoreUtils qw( any uniq) ;
10
11
11
12
our $VERSION = ' 1.00' ; # Inline::MakeMake uses /^\d.\d\d$/ as the pattern for the version number -- note the two digits to the right of the dot
12
13
13
- has ' file' => (is => ' rw' , isa => ' Str' , default => q{ } ,
14
+ has ' file' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } ,
14
15
trigger => sub{$_ [0]-> _build_object});
15
16
16
17
has ' xdifile' => (
17
18
is => ' ro' ,
19
+ traits => [qw( NoClone) ],
18
20
isa => ' Xray::XDIFile' ,
19
21
init_arg => undef ,
20
22
lazy => 1,
21
23
builder => ' _build_object' ,
22
24
);
23
25
# no need to fiddle with inline_constructor here
24
- has ' ok' => (is => ' rw' , isa => ' Bool' , default => 0);
25
- has ' warning' => (is => ' rw' , isa => ' Bool' , default => 0);
26
- has ' errorcode' => (is => ' rw' , isa => ' Int' , default => 0);
27
- has ' error' => (is => ' rw' , isa => ' Str' , default => q{ } );
28
-
29
- has ' filename' => (is => ' rw' , isa => ' Str' , default => q{ } );
30
- has ' xdi_libversion' => (is => ' rw' , isa => ' Str' , default => q{ } );
31
- has ' xdi_version' => (is => ' rw' , isa => ' Str' , default => q{ } );
32
- has ' extra_version' => (is => ' rw' , isa => ' Str' , default => q{ } );
33
- has ' element' => (is => ' rw' , isa => ' Str' , default => q{ } );
34
- has ' edge' => (is => ' rw' , isa => ' Str' , default => q{ } );
35
- has ' dspacing' => (is => ' rw' , isa => ' Num' , default => 0);
36
- has ' comments' => (is => ' rw' , isa => ' Str' , default => q{ } );
37
- has ' nmetadata' => (is => ' rw' , isa => ' Int' , default => 0);
38
- has ' npts' => (is => ' rw' , isa => ' Int' , default => 0);
39
- has ' narrays' => (is => ' rw' , isa => ' Int' , default => 0);
40
- has ' narray_labels' => (is => ' rw' , isa => ' Int' , default => 0);
41
-
42
- has ' array_labels' => (is => ' rw' , isa => ' ArrayRef' , default => sub{[]});
43
- has ' array_units' => (is => ' rw' , isa => ' ArrayRef' , default => sub{[]});
26
+ has ' ok' => (is => ' rw' , isa => ' Bool' , traits => [ qw( NoClone ) ], default => 0);
27
+ has ' warning' => (is => ' rw' , isa => ' Bool' , traits => [ qw( NoClone ) ], default => 0);
28
+ has ' errorcode' => (is => ' rw' , isa => ' Int' , traits => [ qw( NoClone ) ], default => 0);
29
+ has ' error' => (is => ' rw' , isa => ' Str' , traits => [ qw( NoClone ) ], default => q{ } );
30
+
31
+ has ' filename' => (is => ' rw' , isa => ' Str' , traits => [ qw( NoClone ) ], default => q{ } );
32
+ has ' xdi_libversion' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } );
33
+ has ' xdi_version' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } );
34
+ has ' extra_version' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } );
35
+ has ' element' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } );
36
+ has ' edge' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } );
37
+ has ' dspacing' => (is => ' rw' , isa => ' Num' , traits => [ qw( Clone ) ], default => 0);
38
+ has ' comments' => (is => ' rw' , isa => ' Str' , traits => [ qw( Clone ) ], default => q{ } );
39
+ has ' nmetadata' => (is => ' rw' , isa => ' Int' , traits => [ qw( Clone ) ], default => 0);
40
+ has ' npts' => (is => ' rw' , isa => ' Int' , traits => [ qw( Clone ) ], default => 0);
41
+ has ' narrays' => (is => ' rw' , isa => ' Int' , traits => [ qw( Clone ) ], default => 0);
42
+ has ' narray_labels' => (is => ' rw' , isa => ' Int' , traits => [ qw( Clone ) ], default => 0);
43
+
44
+ has ' array_labels' => (is => ' rw' , isa => ' ArrayRef' , traits => [ qw( Clone ) ], default => sub{[]});
45
+ has ' array_units' => (is => ' rw' , isa => ' ArrayRef' , traits => [ qw( Clone ) ], default => sub{[]});
44
46
45
47
has ' metadata' => (
46
- traits => [' Hash' ],
48
+ traits => [' Hash' , ' Clone ' ],
47
49
is => ' rw' ,
48
50
isa => ' HashRef' ,
49
51
default => sub { {} },
@@ -55,18 +57,18 @@ has 'metadata' => (
55
57
},
56
58
);
57
59
58
- has ' data' => (
59
- traits => [' Hash' ],
60
- is => ' rw' ,
61
- isa => ' HashRef' ,
62
- default => sub { {} },
63
- handles => {
64
- ' exists_in_data' => ' exists' ,
65
- ' ids_in_data' => ' keys' ,
66
- ' get_data' => ' get' ,
67
- ' set_data' => ' set' ,
68
- },
69
- );
60
+ has ' data' => (
61
+ traits => [' Hash' , ' NoClone ' ],
62
+ is => ' rw' ,
63
+ isa => ' HashRef' ,
64
+ default => sub { {} },
65
+ handles => {
66
+ ' exists_in_data' => ' exists' ,
67
+ ' ids_in_data' => ' keys' ,
68
+ ' get_data' => ' get' ,
69
+ ' set_data' => ' set' ,
70
+ },
71
+ );
70
72
71
73
sub _build_object {
72
74
my ($self ) = @_ ;
@@ -232,6 +234,14 @@ sub set_item {
232
234
return $self ;
233
235
};
234
236
237
+ sub delete_item {
238
+ my ($self , $family , $keyword ) = @_ ;
239
+ my $rhash = $self -> metadata;
240
+ delete $rhash -> {$family }-> {$keyword };
241
+ $self -> metadata($rhash );
242
+ return $self ;
243
+ };
244
+
235
245
sub push_comment {
236
246
my ($self , @comments ) = @_ ;
237
247
my $all = $self -> comments;
@@ -269,6 +279,17 @@ sub token {
269
279
};
270
280
271
281
282
+ sub serialize {
283
+ my ($self ) = @_ ;
284
+ my $copy = $self -> clone;
285
+ $copy -> data({});
286
+ local $Data::Dumper::Indent = 0;
287
+ my $string = $copy -> dump (3);
288
+ undef $copy ;
289
+ return $string ;
290
+ };
291
+
292
+
272
293
no Moose;
273
294
__PACKAGE__ -> meta-> make_immutable;
274
295
1;
0 commit comments