From: groditi Date: Fri, 5 Oct 2007 19:28:51 +0000 (+0000) Subject: simplify value widgets to reduce PROCESS calls, make some classes immutable which... X-Git-Tag: v0.002000~493^2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a5200252cbe43d0d240e75e95d9dfd1623975172;p=catagits%2FReaction.git simplify value widgets to reduce PROCESS calls, make some classes immutable which were not before. nice increase in performance. --- diff --git a/lib/ComponentUI/Model/TestModel.pm b/lib/ComponentUI/Model/TestModel.pm index deef6d0..3d633f3 100644 --- a/lib/ComponentUI/Model/TestModel.pm +++ b/lib/ComponentUI/Model/TestModel.pm @@ -1,7 +1,13 @@ package ComponentUI::Model::TestModel; use lib 't/lib'; -use base 'Catalyst::Model::Reaction::InterfaceModel::DBIC'; +use aliased 'Catalyst::Model::Reaction::InterfaceModel::DBIC'; + +use Reaction::Class; + +class TestModel is DBIC, which { + +}; __PACKAGE__->config ( diff --git a/lib/ComponentUI/TestModel.pm b/lib/ComponentUI/TestModel.pm index 71c9672..2559776 100644 --- a/lib/ComponentUI/TestModel.pm +++ b/lib/ComponentUI/TestModel.pm @@ -5,7 +5,6 @@ use base 'Reaction::InterfaceModel::Object'; use Reaction::Class; use Reaction::InterfaceModel::Reflector::DBIC; - my $reflector = Reaction::InterfaceModel::Reflector::DBIC->new; $reflector->reflect_schema @@ -15,4 +14,5 @@ $reflector->reflect_schema sources => [qw/Foo Bar Baz/], ); + 1; diff --git a/lib/ComponentUI/View/Site.pm b/lib/ComponentUI/View/Site.pm index fa89c0a..280b41e 100644 --- a/lib/ComponentUI/View/Site.pm +++ b/lib/ComponentUI/View/Site.pm @@ -11,29 +11,3 @@ class Site is TT, which { __END__; -use Class::MOP; - -{ - my @reflect_widgets = qw(ActionForm ObjectView ListView - Field::File - Field::Password - Field::Text DisplayField::Text - Field::Number DisplayField::Number - Field::String DisplayField::String - Field::Boolean DisplayField::Boolean - Field::DateTime DisplayField::DateTime - Field::ChooseOne DisplayField::RelatedObject - Field::ChooseMany DisplayField::Collection - Field::HiddenArray DisplayField::List - ); - - - for (@reflect_widgets){ - my $base = "Reaction::UI::Widget::${_}"; - my $target = "ComponentUI::View::Site::Widget::${_}"; - Class::MOP::load_class( $base ); - $base->meta->create($target, superclasses => [$base]); - } -} - -1; diff --git a/lib/Reaction/Meta/Attribute.pm b/lib/Reaction/Meta/Attribute.pm index 9f444df..01540e0 100644 --- a/lib/Reaction/Meta/Attribute.pm +++ b/lib/Reaction/Meta/Attribute.pm @@ -43,6 +43,8 @@ around _process_options => sub { $super->($class, $name, $options); }; +__PACKAGE__->meta->make_immutable(inline_constructor => 0); + 1; __END__; diff --git a/lib/Reaction/Meta/Class.pm b/lib/Reaction/Meta/Class.pm index e963586..27c084f 100644 --- a/lib/Reaction/Meta/Class.pm +++ b/lib/Reaction/Meta/Class.pm @@ -12,4 +12,7 @@ around initialize => sub { $super->($class, $pkg, 'attribute_metaclass' => 'Reaction::Meta::Attribute', @_ ); }; + +__PACKAGE__->meta->make_immutable; + 1; diff --git a/lib/Reaction/UI/Widget/DisplayField/List.pm b/lib/Reaction/UI/Widget/DisplayField/List.pm index 3b3d779..e444bd5 100644 --- a/lib/Reaction/UI/Widget/DisplayField/List.pm +++ b/lib/Reaction/UI/Widget/DisplayField/List.pm @@ -6,7 +6,7 @@ class List, which { widget renders [ qw/label list item/ => { viewport => func(self => 'viewport') } ]; label renders [ string { $_{viewport}->label } ]; list renders [ item over func('viewport', 'value_names') ]; - item renders [ string { $_{_} } ]; + item renders [ string { $_ } ]; }; 1; diff --git a/lib/Reaction/UI/Widget/Field.pm b/lib/Reaction/UI/Widget/Field.pm index 11f2c67..aa0abf9 100644 --- a/lib/Reaction/UI/Widget/Field.pm +++ b/lib/Reaction/UI/Widget/Field.pm @@ -16,11 +16,11 @@ class Field, which { viewport => func('self', 'viewport'), } ]; + field renders [ string { $_{viewport}->value }, ]; + label renders [ string { $_{viewport}->label }, ]; message renders [ string { $_{viewport}->message }, ]; - field renders [ string { $_{viewport}->value }, ]; - }; 1; diff --git a/lib/Reaction/UI/Widget/Value.pm b/lib/Reaction/UI/Widget/Value.pm index 07db1c0..a968279 100644 --- a/lib/Reaction/UI/Widget/Value.pm +++ b/lib/Reaction/UI/Widget/Value.pm @@ -3,8 +3,12 @@ package Reaction::UI::Widget::Value; use Reaction::UI::WidgetClass; class Value, which { - widget renders [ qw/value/ => { viewport => func(self => 'viewport') } ]; - value renders [ string { $_{viewport}->value } ]; + widget renders [ string {""} ], + { value => sub{ + my $vp = $_{self}->{viewport}; + $vp->can('value_string') ? $vp->value_string : $vp->value; + } + }; }; 1; diff --git a/lib/Reaction/UI/Widget/Value/Boolean.pm b/lib/Reaction/UI/Widget/Value/Boolean.pm index 21a0f3f..392f79d 100644 --- a/lib/Reaction/UI/Widget/Value/Boolean.pm +++ b/lib/Reaction/UI/Widget/Value/Boolean.pm @@ -3,7 +3,7 @@ package Reaction::UI::Widget::Value::Boolean; use Reaction::UI::WidgetClass; class Boolean is 'Reaction::UI::Widget::Value', which { - value renders [ string { $_{viewport}->value_string } ]; + }; 1; diff --git a/lib/Reaction/UI/Widget/Value/Collection.pm b/lib/Reaction/UI/Widget/Value/Collection.pm index 073911d..caae18a 100644 --- a/lib/Reaction/UI/Widget/Value/Collection.pm +++ b/lib/Reaction/UI/Widget/Value/Collection.pm @@ -5,7 +5,7 @@ use Reaction::UI::WidgetClass; class Collection, which { widget renders [ qw/list/ => { viewport => func(self => 'viewport') } ]; list renders [ item over func('viewport', 'value_names') ]; - item renders [ string { $_ } ]; + item renders [ string {""} ], { value => $_ }; }; 1; diff --git a/lib/Reaction/UI/Widget/Value/DateTime.pm b/lib/Reaction/UI/Widget/Value/DateTime.pm index 63159c5..b598c71 100644 --- a/lib/Reaction/UI/Widget/Value/DateTime.pm +++ b/lib/Reaction/UI/Widget/Value/DateTime.pm @@ -3,7 +3,7 @@ package Reaction::UI::Widget::Value::DateTime; use Reaction::UI::WidgetClass; class DateTime is 'Reaction::UI::Widget::Value', which { - value renders [ string { $_{viewport}->value_string } ]; + }; 1; diff --git a/lib/Reaction/UI/Widget/Value/List.pm b/lib/Reaction/UI/Widget/Value/List.pm index bd713e4..638cbfb 100644 --- a/lib/Reaction/UI/Widget/Value/List.pm +++ b/lib/Reaction/UI/Widget/Value/List.pm @@ -3,9 +3,9 @@ package Reaction::UI::Widget::Value::List; use Reaction::UI::WidgetClass; class List, which { - widget renders [ qw/list item/ => { viewport => func(self => 'viewport') } ]; + widget renders [ qw/list/ => { viewport => func(self => 'viewport') } ]; list renders [ item over func('viewport', 'value_names') ]; - item renders [ string { $_{_} } ]; + item renders [ string {""} ], { value => $_ }; }; 1; diff --git a/lib/Reaction/UI/Widget/Value/RelatedObject.pm b/lib/Reaction/UI/Widget/Value/RelatedObject.pm index 4617514..b7fbd6f 100644 --- a/lib/Reaction/UI/Widget/Value/RelatedObject.pm +++ b/lib/Reaction/UI/Widget/Value/RelatedObject.pm @@ -3,7 +3,7 @@ package Reaction::UI::Widget::Value::RelatedObject; use Reaction::UI::WidgetClass; class RelatedObject is 'Reaction::UI::Widget::Value', which { - value renders [ string { $_{viewport}->value_string } ]; + }; 1; diff --git a/share/skin/default/layout/value/boolean.tt b/share/skin/default/layout/value/boolean.tt index 1ce3367..310783b 100644 --- a/share/skin/default/layout/value/boolean.tt +++ b/share/skin/default/layout/value/boolean.tt @@ -1,9 +1,5 @@ =for layout widget -[% content %] - -=for layout value - -[% content | html %] +[% value | html %] =cut \ No newline at end of file diff --git a/share/skin/default/layout/value/collection.tt b/share/skin/default/layout/value/collection.tt index d376ecc..c866aa8 100644 --- a/share/skin/default/layout/value/collection.tt +++ b/share/skin/default/layout/value/collection.tt @@ -1,6 +1,6 @@ =for layout widget -[% list %] +[% list %] =for layout list @@ -10,6 +10,6 @@ =for layout item -
  • [% content | html %]
  • +
  • [% value | html %]
  • =cut diff --git a/share/skin/default/layout/value/date_time.tt b/share/skin/default/layout/value/date_time.tt index e35741c..0ee0d75 100644 --- a/share/skin/default/layout/value/date_time.tt +++ b/share/skin/default/layout/value/date_time.tt @@ -1,9 +1,5 @@ =for layout widget -[% content %] - -=for layout value - -[% content | html %] +[% value | html %] =cut diff --git a/share/skin/default/layout/value/list.tt b/share/skin/default/layout/value/list.tt index eea4e02..bd8ad27 100644 --- a/share/skin/default/layout/value/list.tt +++ b/share/skin/default/layout/value/list.tt @@ -1,6 +1,6 @@ =for layout widget -[% list %] +[% list %] =for layout list @@ -10,6 +10,6 @@ =for layout item -
  • [% content | html %]
  • +
  • [% value | html %]
  • =cut \ No newline at end of file diff --git a/share/skin/default/layout/value/number.tt b/share/skin/default/layout/value/number.tt index e35741c..0ee0d75 100644 --- a/share/skin/default/layout/value/number.tt +++ b/share/skin/default/layout/value/number.tt @@ -1,9 +1,5 @@ =for layout widget -[% content %] - -=for layout value - -[% content | html %] +[% value | html %] =cut diff --git a/share/skin/default/layout/value/related_object.tt b/share/skin/default/layout/value/related_object.tt index e35741c..0ee0d75 100644 --- a/share/skin/default/layout/value/related_object.tt +++ b/share/skin/default/layout/value/related_object.tt @@ -1,9 +1,5 @@ =for layout widget -[% content %] - -=for layout value - -[% content | html %] +[% value | html %] =cut diff --git a/share/skin/default/layout/value/string.tt b/share/skin/default/layout/value/string.tt index 1ce3367..310783b 100644 --- a/share/skin/default/layout/value/string.tt +++ b/share/skin/default/layout/value/string.tt @@ -1,9 +1,5 @@ =for layout widget -[% content %] - -=for layout value - -[% content | html %] +[% value | html %] =cut \ No newline at end of file diff --git a/share/skin/default/layout/value/text.tt b/share/skin/default/layout/value/text.tt index 1ce3367..310783b 100644 --- a/share/skin/default/layout/value/text.tt +++ b/share/skin/default/layout/value/text.tt @@ -1,9 +1,5 @@ =for layout widget -[% content %] - -=for layout value - -[% content | html %] +[% value | html %] =cut \ No newline at end of file diff --git a/t/lib/RTest/TestDB/Bar.pm b/t/lib/RTest/TestDB/Bar.pm index 4e22d06..1af3f05 100644 --- a/t/lib/RTest/TestDB/Bar.pm +++ b/t/lib/RTest/TestDB/Bar.pm @@ -31,4 +31,7 @@ __PACKAGE__->belongs_to( { 'foreign.id' => 'self.foo_id' } ); +__PACKAGE__->meta->make_immutable; + + 1; diff --git a/t/lib/RTest/TestDB/Baz.pm b/t/lib/RTest/TestDB/Baz.pm index 848cb4f..47cc019 100644 --- a/t/lib/RTest/TestDB/Baz.pm +++ b/t/lib/RTest/TestDB/Baz.pm @@ -26,4 +26,6 @@ __PACKAGE__->set_primary_key('id'); __PACKAGE__->has_many('links_to_foo_list' => 'RTest::TestDB::FooBaz', 'baz'); __PACKAGE__->many_to_many('foo_list' => 'links_to_foo_list' => 'foo'); +__PACKAGE__->meta->make_immutable; + 1; diff --git a/t/lib/RTest/TestDB/Foo.pm b/t/lib/RTest/TestDB/Foo.pm index 5733054..7e3cd2f 100644 --- a/t/lib/RTest/TestDB/Foo.pm +++ b/t/lib/RTest/TestDB/Foo.pm @@ -39,4 +39,7 @@ __PACKAGE__->many_to_many('baz_list' => 'links_to_baz_list' => 'baz'); *get_baz_list = sub { [ shift->baz_list->all ] }; } + +__PACKAGE__->meta->make_immutable; + 1;