changeset 79:2d1c3f713280

ORM concept in development
author wizard
date Mon, 05 Apr 2010 00:20:34 +0400 (2010-04-04)
parents a5cb84374d40
children f017c0d7527c
files Lib/IMPL/DOM/Transform/PostToDOM.pm Lib/IMPL/ORM.pm Lib/IMPL/ORM/Adapter/Generic.pm Lib/IMPL/ORM/Schema.pm Lib/IMPL/ORM/Schema/GenericClass.pm Lib/IMPL/ORM/Schema/TransformToSQL.pm Lib/IMPL/ORM/Store/DBIC.pm Lib/IMPL/ORM/Unit.pm Lib/IMPL/Web/Security.pm
diffstat 9 files changed, 211 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Transform/PostToDOM.pm	Fri Apr 02 20:19:17 2010 +0400
+++ b/Lib/IMPL/DOM/Transform/PostToDOM.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -25,6 +25,7 @@
     my $navi = $this->Navigator;
     
     while (my ($key,$value) = each %$data) {
+    	# TODO: review
         my $node = $navi->Navigate($key);
         $node->nodeValue($value);
     }
--- a/Lib/IMPL/ORM.pm	Fri Apr 02 20:19:17 2010 +0400
+++ b/Lib/IMPL/ORM.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -35,89 +35,48 @@
 
 1;
 __END__
+
 =pod
+
+=head1 NAME
+
+C<IMPL::ORM> - Object Relational Mapping
+
 =head1 SYNOPSIS
 
-use IMPL::ORM::Sql;
+=begin code
 
-my $DB = new IMPL::ORM::Sql("connection string");
+my $ds = IMPL::ORM::Storage::DBIC->new('My::Data',$dsn,$user,$pass,{Autocommit => 1});
+
 
-local $IMPL::ORM::Depth = 1; # load childs only, no more
-
-my $artist = $DB->Lookup( Artist => { name => 'Beatles' } );
+my $foo = $ds->Insert(
+	My::Data::Foo->new(
+		'foo class'
+	)
+);
 
-my $order = new Order();
-$order->AddItem($_) foreach $artist->Albums->List;
+my $bar = $ds->Insert(
+	My::Data::Bar->new(
+		'bar class'
+	)
+)
+
+$bar->fooObject($foo);
+
+$ds->Save($bar);
 
-$DB->Save($order);
+my $fooOther = $ds->Retrieve(
+	'My::Data::Bar',
+	{
+		name =>  'bar class',
+		fooObject => {
+			name => 'some foo'
+		}
+	}
+)
 
-my $label = $artist->Albums->Index(0)->Label;
-
-$DB->Populate($label); #load $label
+=end code
 
 =head1 DESCRIPTION
-=head2 MEMBERS
-=level 4
-=back
-=head2 Variables
-=head2 INTERNALS
-=head3 Object Representation
 
-������ ����� ������������ � �������� ������ �������������� � ���� ������
-���������, ������ �� ������� ������������ ��������� �������� ������.
-
-Foo         entityFoo
-    Bar         entityBar
-    Baz         entityBaz
-
-��� ���������� ����������� ������� ������� � ��������������� ��������� ���������
-��� ���� - ���� ��� ���������� ������������ �������� ��������, ������ - ���
-������� ������������ ��������.
-
-Foo
-    public virtual property Name => prop_all, {Type => String};
-    
-entityFoo
-    string m_Name - ����������� ��������
-    string v_Name - ���������� ��������
-    
-������ ����������� ������ � ���� ����� ����������� �������������.
-����� ������� �������������� �� �����, �� ��� ��� ���� ��� �� ����� ���������.
-
-=head3 Object Cache
-
-��� ����� ��������, ������� ������������ � ��������� ������ ������������ ���
-��������. ���� �������� ���������� �� ���� �������, � ����� ����� �����������
-�������.
-
-ObjectInfo => {
-    instance => weak ref
-    _id => data source dependent id
-    state => {persistent|null|new|deleted}
-    work_unit => ref to the work unit where object is acting
-}
-
-������ ��������� �������� ����� ��� ������� ObjectInfoById � ObjectInfo
-
-=head3 Type mapping
-
-�������� ������ ����� � ���� ����� ������, ������� ���������� ����� �����,
-�������� � ������ ���������. ���� ��������� ����� ����������� �����:
-
-=level 4
-
-=item 1
-
-����������� �������, ����� ����� �������������� � ��� ������ �������
-
-=item
-
-����������� ������� � ���� �������� (������� ������, ������ � �.�.)
-
-=item
-
-������, ������� �� ������ �������� � ���������� ������, ����� ��� ���������.
-
-=back
-
-=cut
+=cut
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/ORM/Adapter/Generic.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -0,0 +1,103 @@
+package IMPL::ORM::Adapter::Generic;
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::ORM::Adapter::Generic> ������� ��� ������ � ������� ������� ������������� ������.
+
+=head1 DESCRIPTION
+
+��������� �������� ������, ��������� ������ �� �������, � ����� �������� ������ �
+������ � ������� ����� ������.
+
+=head1 MEMBERS
+
+=over
+
+=item C<CTOR($object,$hashOptions)>
+
+������� ����� ������� � ������� C<$object>
+
+=item C<[get]object>
+
+������ ��� �������� ������ ������ �������, C<undef> ���� ������ ������.
+
+=item C<[get]isChanged>
+
+���� �� ���������� � �������.
+
+=item C<[get]isDeleted>
+
+�������� �� ������ ���������.
+
+=item C<[get]isNew>
+
+�������� �� ������ ����� ��� ��.
+
+=item C<[get]initialState>
+
+��������� ��������� �������, C<undef> ���� ������ ��� ������.
+
+=item C<[get]currentState>
+
+������� ���������. C<undef> ���� ������ ������.
+
+=item C<[get,list]history>
+
+������� ���������. C<IMPL::Object::List>
+
+=item C<SaveChanges>
+
+��������� ��������� �� ������� � ������� ���������, ��� ���� ��������� ������������ � �������.
+
+B<returns> ���������� �� ���������� � �������. 
+
+=item C<Revert($version)>
+
+���������� ������ � ������������ ������.
+
+=item C<Delete>
+
+������� ������, ������ �������� ��� ��� �������� �� ������ C<Commit>.
+
+=item C<Commit>
+
+���������� ������� ���������, � ������������� �������������� ��������.
+
+=back
+
+=head1 ���������� �� ���������� �������
+
+=begin code
+
+{
+	version => 1, # object version
+	op => STORAGE_UPDATE,
+	data => {
+		entity1 => {
+			field1 => 'value 1'
+		},
+		entity2 => {
+			field2 => 'value 2'
+		}
+	}
+}
+
+=end code
+
+=head1 ���������� �� ����������� �������
+
+=begin code
+
+{
+	prop_name => [ entity => 'field' ]
+}
+
+=end code
+
+=cut
\ No newline at end of file
--- a/Lib/IMPL/ORM/Schema.pm	Fri Apr 02 20:19:17 2010 +0400
+++ b/Lib/IMPL/ORM/Schema.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -121,6 +121,10 @@
 
 =pod
 
+=head1 NAME
+
+C<IMPL::ORM::Schema> ����� ����������� ������� � ����������� ���������.
+
 =head1 DESCRIPTION
 
 ����� ������, ������������ ����� DOM ��������, ���������� �������
@@ -128,6 +132,8 @@
 
 ������ ���� - ��� �������� ��������.
 
+=begin code xml
+
 <Schema>
     <Entity entityName="My_Data_Foo">
         <Field fieldName="Doo" fieldType="String"/>
@@ -142,4 +148,6 @@
     </Entity>
 </Schema>
 
+=end code xml
+
 =cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/ORM/Schema/GenericClass.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -0,0 +1,17 @@
+package IMPL::ORM::Schema::GenericClass;
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::ORM::Schema::GenericClass> ���������� ����� �� ������������� ������.
+
+=head1 DESCRIPTION
+
+������ ���������� ������ � ������ �� �� ��������� �������� ����� ������.
+
+=cut
\ No newline at end of file
--- a/Lib/IMPL/ORM/Schema/TransformToSQL.pm	Fri Apr 02 20:19:17 2010 +0400
+++ b/Lib/IMPL/ORM/Schema/TransformToSQL.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -171,7 +171,11 @@
 
 =head1 SYNOPSIS
 
+=begin code
+
 my $sqlSchema = IMPL::ORM::Schema::TransformToSQL->Default->Transform(Data::Schema->instance);
 
+=end code
+
 =cut
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/ORM/Store/DBIC.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -0,0 +1,13 @@
+package IMPL::ORM::DBIC;
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::ORM::DBIC> - ��������� ������ �� ������ C<DBIx::Class>.
+
+=cut
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/ORM/Unit.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -0,0 +1,20 @@
+package IMPL::ORM::Unit;
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::ORM::Unit> ������� ��������.
+
+=head1 DESCRIPTION
+
+C<[Infrastructure]>
+
+��������� ���������� ������������������ ���������. ������������ C<IMPL::ORM> ��� ���������� ����������
+����������.
+
+=cut
\ No newline at end of file
--- a/Lib/IMPL/Web/Security.pm	Fri Apr 02 20:19:17 2010 +0400
+++ b/Lib/IMPL/Web/Security.pm	Mon Apr 05 00:20:34 2010 +0400
@@ -7,8 +7,7 @@
 __PACKAGE__->PassThroughArgs;
 
 BEGIN {
-	public property sessionFactory => prop_get | owner_set;
-	public property userFactory => prop_get | owner_set; 
+	public property source => prop_all;
 }
 
 sub CTOR {
@@ -17,12 +16,19 @@
 	$this->dataSource or die new IMPL::InvalidArgumentException("The argument is required",'dataSource');
 }
 
-sub Session {
-	my ($this,%args) = @_;
+sub RetrSession {
+	my ($this,$sid) = @_;
+	
+	return $this->source->RetrSession(id => $sid);
 }
 
-sub User {
+sub RetrSecData {
+	my ($this,$user,$secPackage) = @_;
 	
+	$user = ref $user ? $user->name : $user;
+	
+	return
+		$this->source->RetrSecData(user => $user, package => $secPackage);
 }
 
 1;