Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Schema/SimpleNode.pm @ 388:648dfaf642e0
DOM refactoring,
removed inflators from DOM Schema,
DOM validation - in progress
author | cin |
---|---|
date | Tue, 11 Feb 2014 20:22:01 +0400 |
parents | 4ddb27ff4a0b |
children |
comparison
equal
deleted
inserted
replaced
387:4cc6cc370fb2 | 388:648dfaf642e0 |
---|---|
1 package IMPL::DOM::Schema::SimpleNode; | 1 package IMPL::DOM::Schema::SimpleNode; |
2 use strict; | 2 use strict; |
3 use warnings; | 3 use warnings; |
4 | 4 |
5 use parent qw(IMPL::DOM::Schema::Node); | 5 use IMPL::declare { |
6 use IMPL::Class::Property; | 6 base => [ |
7 use IMPL::DOM::Property qw(_dom); | 7 'IMPL::DOM::Schema::Node' => sub { |
8 | 8 my %args = @_; |
9 BEGIN { | 9 $args{nodeName} ||= 'SimpleNode'; |
10 public _dom _direct property inflator => prop_get; | 10 %args |
11 public _dom _direct property messageInflateError => prop_get; | 11 } |
12 } | 12 ] |
13 | 13 }; |
14 our %CTOR = ( | |
15 'IMPL::DOM::Schema::Node' => sub { | |
16 my %args = @_; | |
17 $args{nodeName} ||= 'SimpleNode'; | |
18 delete @args{qw(inflator messageInflateError)}; | |
19 %args | |
20 } | |
21 ); | |
22 | |
23 sub CTOR { | |
24 my ($this,%args) = @_; | |
25 | |
26 if ( $args{inflator} ) { | |
27 $this->{$inflator} = $args{inflator} ; | |
28 $this->{$messageInflateError} = exists $args{messageInflateError} ? $args{messageInflateError} : 'Failed to inflate nodeValue %node.path%: %error%'; | |
29 } | |
30 } | |
31 | 14 |
32 sub Validate { | 15 sub Validate { |
33 my ($this,$node,$ctx) = @_; | 16 my ($this,$node,$ctx) = @_; |
17 | |
18 $ctx->{schemaNode} ||= $this; # для безымянных типов | |
19 | |
20 $ctx->{schemaType} = $this; | |
34 | 21 |
35 my @result; | 22 my @result; |
36 | 23 |
37 push @result, $_->Validate($node,$ctx) foreach $this->childNodes; | 24 push @result, $_->Validate($node,$ctx) foreach $this->childNodes; |
38 | 25 |
39 return @result; | 26 return @result; |
40 } | |
41 | |
42 sub inflateValue { | |
43 my ($this,$value) = @_; | |
44 | |
45 if ( my $inflator = $this->inflator ) { | |
46 return $inflator->new($value,$this); | |
47 } else { | |
48 return $value; | |
49 } | |
50 } | 27 } |
51 | 28 |
52 1; | 29 1; |
53 | 30 |
54 __END__ | 31 __END__ |