<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -61,16 +61,19 @@ sub find {
     WGDev::X::AssetNotFound-&gt;throw( asset =&gt; $asset_spec );
 }
 
+my $package_re = qr{
+    [[:upper:]]\w+
+    (?: ::[[:upper:]]\w+ )*
+}msx;
+
 sub validate_class {
     my $self = shift;
     my $in_class = my $class = shift;
     if (
         $class =~ s{\A
+            # optionally starting with WebGUI::Asset:: or ::
             (?:(?:WebGUI::Asset)?::)?
-            (
-                [[:upper:]]\w+
-                (?: ::[[:upper:]]\w+ )*
-            )
+            ( $package_re )
             \z
         }{WebGUI::Asset::$1}msx
         )
@@ -100,14 +103,63 @@ sub serialize {
     }
     my $short_class = $class;
     $short_class =~ s/^WebGUI::Asset:://xms;
+
+    my ( $asset_properties, $meta, $text )
+        = $self-&gt;_asset_properties( $asset, $properties );
+
+    my $basic_yaml = WGDev::yaml_encode( {
+            'Asset ID'   =&gt; $asset_properties-&gt;{assetId},
+            'Title'      =&gt; $asset_properties-&gt;{title},
+            'Menu Title' =&gt; $asset_properties-&gt;{menuTitle},
+            'URL'        =&gt; $asset_properties-&gt;{url},
+            'Parent'     =&gt; (
+                ref $asset
+                ? $asset-&gt;getParent-&gt;get('url')
+                : $self-&gt;import_node-&gt;get('url')
+            ),
+        } );
+
+    # filter out unneeded YAML syntax
+    $basic_yaml =~ s/\A---(?:\Q {}\E)?\n?//msx;
+
+    # line up colons
+    $basic_yaml =~ s/^([^:]+):/sprintf(&quot;%-12s:&quot;, $1)/msxeg;
+    $basic_yaml =~ s/\n?\z/\n/msx;
+    my $output = $self-&gt;_gen_serialize_header($short_class) . $basic_yaml;
+
+    for my $field ( sort keys %{$text} ) {
+        my $value = $text-&gt;{$field};
+        if ( !defined $value ) {
+            $value = q{~};
+        }
+        $value =~ s/\r\n?/\n/msxg;
+        $output .= $self-&gt;_gen_serialize_header($field) . $value . &quot;\n&quot;;
+    }
+
+    my $meta_yaml = WGDev::yaml_encode($meta);
+    $meta_yaml =~ s/\A---(?:\Q {}\E)?\n?//msx;
+    $output .= $self-&gt;_gen_serialize_header('Properties') . $meta_yaml . &quot;\n&quot;;
+
+    return $output;
+}
+
+sub _asset_properties {
+    my $self       = shift;
+    my $class      = shift;
+    my $properties = shift;
+    my $asset;
+    if ( ref $class ) {
+        $asset = $class;
+        $class = ref $asset;
+    }
+
     my $definition = $class-&gt;definition( $self-&gt;{session} );
     my %text;
     my %meta;
 
-    my $asset_properties = {
-        ref $asset  ? %{ $asset-&gt;get } : (),
-        $properties ? %{$properties}   : () };
-
+    my $asset_properties
+        = { $asset ? %{ $asset-&gt;get } : (), $properties ? %{$properties} : (),
+        };
     for my $def ( @{$definition} ) {
         while ( my ( $property, $property_def )
             = each %{ $def-&gt;{properties} } )
@@ -141,40 +193,7 @@ sub serialize {
             }
         }
     }
-
-    my $basic_yaml = WGDev::yaml_encode( {
-            'Asset ID'   =&gt; $asset_properties-&gt;{assetId},
-            'Title'      =&gt; $asset_properties-&gt;{title},
-            'Menu Title' =&gt; $asset_properties-&gt;{menuTitle},
-            'URL'        =&gt; $asset_properties-&gt;{url},
-            'Parent'     =&gt; (
-                ref $asset
-                ? $asset-&gt;getParent-&gt;get('url')
-                : $self-&gt;import_node-&gt;get('url')
-            ),
-        } );
-
-    # filter out unneeded YAML syntax
-    $basic_yaml =~ s/\A---(?:\Q {}\E)?\n?//msx;
-
-    # line up colons
-    $basic_yaml =~ s/^([^:]+):/sprintf(&quot;%-12s:&quot;, $1)/msxeg;
-    $basic_yaml =~ s/\n?\z/\n/msx;
-    my $output = $self-&gt;_gen_serialize_header($short_class) . $basic_yaml;
-
-    while ( my ( $field, $value ) = each %text ) {
-        if ( !defined $value ) {
-            $value = q{~};
-        }
-        $value =~ s/\r\n?/\n/msxg;
-        $output .= $self-&gt;_gen_serialize_header($field) . $value . &quot;\n&quot;;
-    }
-
-    my $meta_yaml = WGDev::yaml_encode( \%meta );
-    $meta_yaml =~ s/\A---(?:\Q {}\E)?\n?//msx;
-    $output .= $self-&gt;_gen_serialize_header('Properties') . $meta_yaml . &quot;\n&quot;;
-
-    return $output;
+    return ( $asset_properties, \%meta, \%text );
 }
 
 my %basic_translation = (</diff>
      <filename>lib/WGDev/Asset.pm</filename>
    </modified>
    <modified>
      <diff>@@ -209,11 +209,11 @@ Menu Title  : ~
 Parent      : import_node_url
 Title       : ~
 URL         : ~
-==== TextField ===============================================================
+==== CodeField ===============================================================
 ~
 ==== HTMLField ===============================================================
 ~
-==== CodeField ===============================================================
+==== TextField ===============================================================
 ~
 ==== Properties ==============================================================
 properties:
@@ -243,14 +243,14 @@ Menu Title  : ~
 Parent      : parent_node_url
 Title       : ~
 URL         : ~
+==== CodeField ===============================================================
+~
+==== HTMLField ===============================================================
+~
 ==== TextField ===============================================================
 Text
 Field
 Value
-==== HTMLField ===============================================================
-~
-==== CodeField ===============================================================
-~
 ==== Properties ==============================================================
 properties:
   OtherField: default value</diff>
      <filename>t/wgdev-asset.t</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>64a26387bb4bafcd7afebd1964d58ed7a6defa1d</id>
    </parent>
  </parents>
  <author>
    <name>Graham Knop</name>
    <email>haarg@haarg.org</email>
  </author>
  <url>http://github.com/haarg/wgdev/commit/56e27405f1db1c2332625b25e58031b37eeb7ccf</url>
  <id>56e27405f1db1c2332625b25e58031b37eeb7ccf</id>
  <committed-date>2009-10-04T07:59:24-07:00</committed-date>
  <authored-date>2009-10-04T07:59:24-07:00</authored-date>
  <message>small refactor to WGDev::Asset</message>
  <tree>3cfe767633c8de95c2086fd3eb2a9ae279ba7543</tree>
  <committer>
    <name>Graham Knop</name>
    <email>haarg@haarg.org</email>
  </committer>
</commit>
