Changeset 9129

Show
Ignore:
Timestamp:
04/08/08 18:15:58 (5 years ago)
Author:
takemaru
Message:

lang/perl/Catalyst-Controller-Atompub, refactoring around make_edit_uri, v0.4.4 rc3

Location:
lang/perl/Catalyst-Controller-Atompub/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Catalyst-Controller-Atompub/trunk/lib/Catalyst/Controller/Atompub/Collection.pm

    r9126 r9129  
    195195 
    196196        my ($uri) = $self->make_edit_uri($c) or return $self->error($c); 
    197         $entry = $self->_assign_link_and_id($uri, $entry) or return $self->error($c); 
     197        $entry = $self->_assign_uri_for_entry($c, $entry, $uri) or return $self->error($c); 
    198198 
    199199        $self->entry_resource->uri($uri); 
    200200    } 
    201201    else { 
    202         my($entry_uri, $media_uri) = $self->make_edit_uri($c, $media_type); 
    203  
    204         return $self->error($c, RC_BAD_REQUEST, 'No body') unless $c->req->body; 
    205  
    206         my $entry = $self->_create_media_link_entry($c, $entry_uri, $media_uri) 
    207             or return $self->error($c); 
     202        my $entry = $self->_create_media_link_entry($c) or return $self->error($c); 
    208203        my $media = read_file($c->req->body, binmode => ':raw'); 
    209204 
    210205        $self->media_link_entry( Catalyst::Controller::Atompub::Collection::Resource->new({ 
    211             uri => $entry_uri, 
    212206            body => $entry, 
    213207        }) ); 
    214208 
    215209        $self->media_resource( Catalyst::Controller::Atompub::Collection::Resource->new({ 
    216             uri => $media_uri, 
    217210            body => $media, 
    218211            type => $media_type, 
    219212        }) ); 
     213 
     214        my($entry_uri, $media_uri) = $self->make_edit_uri($c, $media_type) or return $self->error($c); 
     215        $entry = $self->_assign_uri_for_entry($c, $entry, $entry_uri, $media_uri) or return $self->error($c); 
     216 
     217        $self->media_link_entry->uri($entry_uri); 
     218        $self->media_resource->uri($media_uri); 
     219 
     220        return $self->error($c, RC_BAD_REQUEST, 'No body') unless $c->req->body; 
    220221    } 
    221222 
     
    301302        $media_type = media_type('entry'); 
    302303        $body = $self->_fixup_entry($c) or return $self->error($c); 
    303         $body = $self->_assign_link_and_id($uri, $body) or return $self->error($c); 
     304        $body = $self->_assign_uri_for_entry($c, $body, $uri) or return $self->error($c); 
    304305    } 
    305306    else { 
     
    390391    $entry->updated($self->edited->w3c) unless $entry->updated; 
    391392 
    392     # $entry->id(_make_id($uri)) unless $entry->id; 
    393     # $entry->edit_link($uri); 
    394     # XXX check edit-media link 
    395  
    396393    if (!$entry->author) { 
    397394        my $author = XML::Atom::Person->new; 
     
    408405} 
    409406 
    410 sub _assign_link_and_id { 
    411     my($self, $uri, $entry) = @_; 
    412     $entry->id(_make_id($uri)) unless $entry->id; 
    413     $entry->edit_link($uri); 
    414     # XXX check edit-media link 
     407sub _assign_uri_for_entry { 
     408    my($self, $c, $entry, $entry_uri, $media_uri) = @_; 
     409    $entry->id(_make_id($entry_uri)) unless $entry->id; 
     410    $entry->edit_link($entry_uri); 
     411    if ($media_uri) { 
     412        $entry->edit_media_link($media_uri); 
     413        unless ($entry->content) { 
     414            my $content = XML::Atom::Content->new; 
     415            $content->src($media_uri); 
     416            $content->type($c->req->content_type); 
     417            $entry->content($content); 
     418        } 
     419    } 
    415420    $entry; 
    416421} 
     
    426431 
    427432sub _create_media_link_entry { 
    428     my($self, $c, $entry_uri, $media_uri) = @_; 
    429  
     433    my($self, $c) = @_; 
    430434    my $entry = XML::Atom::Entry->new; 
    431  
    432435    $entry->edited($self->edited->w3c); 
    433436    $entry->updated($self->edited->w3c) unless $entry->updated; 
    434  
    435     my $link = XML::Atom::Link->new; 
    436     $link->rel('edit-media'); 
    437     $link->href($media_uri); 
    438     $entry->add_link($link); 
    439  
    440     $link = XML::Atom::Link->new; 
    441     $link->rel('edit'); 
    442     $link->href($entry_uri); 
    443     $entry->add_link($link); 
    444  
    445     $entry->id($entry_uri); 
    446  
    447437    $entry->title(uri_unescape $c->req->slug || ''); 
    448  
    449     my $content = XML::Atom::Content->new; 
    450     $content->src($media_uri); 
    451     $content->type($c->req->content_type); 
    452     $entry->content($content); 
    453  
    454438    $entry->summary(''); 
    455  
    456439    $entry; 
    457440} 
  • lang/perl/Catalyst-Controller-Atompub/trunk/samples/MyBlog/t/01.t

    r8804 r9129  
    138138ok $entry->edited; 
    139139ok $entry->updated; 
    140 is $entry->id, 'http://localhost:3000/mediacollection/media_1.atom'; 
     140like $entry->id, qr{tag:localhost:3000,\d{4}-\d\d-\d\d:/mediacollection/media_1.atom}; 
    141141 
    142142is $entry->edit_link, 'http://localhost:3000/mediacollection/media_1.atom';