<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-35513340</id><updated>2012-02-17T00:25:22.577+04:00</updated><category term='ruby'/><category term='firefox'/><category term='postgres'/><category term='code'/><category term='solition'/><category term='pingback'/><category term='php'/><category term='opera'/><category term='browser'/><category term='howto'/><category term='rubyonrails'/><title type='text'>Developer Notes</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35513340.post-6208207848520407691</id><published>2007-12-21T00:45:00.000+03:00</published><updated>2007-12-21T00:49:11.649+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='solition'/><title type='text'>attachment_fu :size = 0</title><content type='html'>нашел решение проблемы с опредением размера файла как 0 при использовалании attachment_fu под windows&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.railsforum.com/viewtopic.php?pid=26427#p26427"&gt;http://www.railsforum.com/viewtopic.php?pid=26427#p26427&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-6208207848520407691?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/6208207848520407691/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=6208207848520407691' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/6208207848520407691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/6208207848520407691'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/12/attachmentfu-size-0.html' title='attachment_fu :size = 0'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-8243142894702816031</id><published>2007-06-13T23:02:00.000+04:00</published><updated>2007-06-13T23:06:01.476+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Enumerable#sequenced_group_by</title><content type='html'>&lt;pre bgcolor="#2f4f4f"&gt;&lt;font color="#f5deb3"&gt;&lt;font color="#ffa500"&gt;module&lt;/font&gt; Enumerable&lt;br /&gt;  &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;like&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;general&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;&amp;lt;tt&amp;gt;group_by&amp;lt;/tt&amp;gt;,&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;but&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;keeps&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;order&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;of&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;original&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;collection&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; sequenced_group_by&lt;br /&gt;    groups, hash &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;, &lt;font color="#00ffff"&gt;{&lt;/font&gt;&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;br /&gt;    each &lt;font color="#ffa500"&gt;do&lt;/font&gt; &lt;font color="#00ffff"&gt;|&lt;/font&gt;element&lt;font color="#00ffff"&gt;|&lt;/font&gt;&lt;br /&gt;      key &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#ffa500"&gt;yield&lt;/font&gt;&lt;font color="#00ffff"&gt;(&lt;/font&gt;element&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;      groups &lt;font color="#00ffff"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#00ffff"&gt;[&lt;/font&gt;key, hash&lt;font color="#00ffff"&gt;[&lt;/font&gt;key&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt; &lt;font color="#ffa500"&gt;unless&lt;/font&gt; hash.has_key&lt;font color="#00ffff"&gt;?&lt;/font&gt;&lt;font color="#00ffff"&gt;(&lt;/font&gt;key&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;      hash&lt;font color="#00ffff"&gt;[&lt;/font&gt;key&lt;font color="#00ffff"&gt;]&lt;/font&gt; &lt;font color="#00ffff"&gt;&amp;lt;&amp;lt;&lt;/font&gt; element&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;    groups&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;&lt;pre bgcolor="#2f4f4f"&gt;&lt;font color="#f5deb3"&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_sequenced_group_by&lt;br /&gt;    input &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;a2&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;c1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;b1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;f1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;a1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;br /&gt;    result &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;a&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;a2&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;a1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;c&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;c1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;b&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;b1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;f&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;f1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;br /&gt;    assert_not_equal result, input.group_by&lt;font color="#00ffff"&gt;{&lt;/font&gt;&lt;font color="#00ffff"&gt;|&lt;/font&gt;x&lt;font color="#00ffff"&gt;|&lt;/font&gt; x.at&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;0&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;br /&gt;    assert_equal result, input.sequenced_group_by&lt;font color="#00ffff"&gt;{&lt;/font&gt;&lt;font color="#00ffff"&gt;|&lt;/font&gt;x&lt;font color="#00ffff"&gt;|&lt;/font&gt; x.at&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;0&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-8243142894702816031?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/8243142894702816031/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=8243142894702816031' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/8243142894702816031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/8243142894702816031'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/06/enumerablesequencedgroupby.html' title='Enumerable#sequenced_group_by'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-1673758903872907736</id><published>2007-06-06T12:44:00.000+04:00</published><updated>2007-06-06T12:47:19.613+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>"View in Firefox" для Opera</title><content type='html'>В Firefox есть экстеншн которые позволяет просмотреть текушию страницу в IE или в Opera, также есть экстеншн который позволяет просмотреть страницу открытую в IE в Firefox. Ниже приведен способ который позволяет сделать переход Opera -&gt; Firefox.&lt;br /&gt;&lt;br /&gt;Откройте файл C:\Programs\Opera\defaults\standard_menu.ini&lt;br /&gt;Найдите секцию [Document Popup Menu] и добавьте туда&lt;br /&gt;Item, "View in Firefox" = Execute program, "C:\Programs\Firefox\Firefox.exe","%u".&lt;br /&gt;&lt;br /&gt;У меня этот выглядит так&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;[Document Popup Menu]&lt;br /&gt;Item, "View in Firefox" = Execute program, "C:\Programs\Mozilla\Firefox.exe","%u"&lt;br /&gt;Item, 50426,    = Back&lt;br /&gt;Item, 50427,    = Forward&lt;br /&gt;Item, 67648,    = Rewind&lt;br /&gt;Item, 67649,    = Fast Forward&lt;br /&gt;--------------------1&lt;br /&gt;Item, 50428,    = Reload&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://operawiki.info/EditingINIFilesZHCN"&gt;Источник решения&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-1673758903872907736?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/1673758903872907736/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=1673758903872907736' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/1673758903872907736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/1673758903872907736'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/06/view-in-firefox-opera.html' title='&quot;View in Firefox&quot; для Opera'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-1806367959252776821</id><published>2007-04-19T18:18:00.000+04:00</published><updated>2007-04-19T22:58:08.723+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pingback'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Реализация Pingback механизма</title><content type='html'>&lt;style type="text/css"&gt;pre{background-color: #2f4f4f; overflow-x: auto; overflow-y: auto; border: 1px solid #003333; padding: 5px; }&lt;/style&gt;&lt;br /&gt;Что такое pingback хорошо описано &lt;a href="http://www.softwaremaniacs.org/blog/2005/05/18/pingback-rules/"&gt;здесь&lt;/a&gt;. А также в &lt;a href="http://www.hixie.ch/specs/pingback/pingback"&gt;спецификации&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Задача состоит в том что есть события (Event), которые имеют комментарии, а также должны отслеживать pingback ссылки, чем мы и займемся. Весь код приводится без купюр, для того чтобы его можно было использовать с небольшими модификациями если понадобится.&lt;br /&gt;&lt;br /&gt;Сгенерируем web сервис&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;ruby script\generate ws pingback ping&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Объявление и реализация web сервиса&lt;br /&gt;&lt;pre&gt;&lt;font color="#f5deb3"&gt;&lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;app\apis\event_pingback_api.rb&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackApi &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt; ActionWebService&lt;font color="#00ffff"&gt;::&lt;/font&gt;API&lt;font color="#00ffff"&gt;::&lt;/font&gt;Base&lt;br /&gt;  inflect_names &lt;font color="#cc6600"&gt;false&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  api_method &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ing,&lt;br /&gt;    &lt;font color="#00ffff"&gt;:&lt;/font&gt;expects &lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;[&lt;/font&gt; &lt;font color="#00ffff"&gt;{&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;sourceURI &lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;:&lt;/font&gt;string&lt;font color="#00ffff"&gt;}&lt;/font&gt;, &lt;font color="#00ffff"&gt;{&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;targetURI &lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;:&lt;/font&gt;string&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;,&lt;br /&gt;    &lt;font color="#00ffff"&gt;:&lt;/font&gt;returns &lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;string&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackService &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt; ActionWebService&lt;font color="#00ffff"&gt;::&lt;/font&gt;Base&lt;br /&gt;  web_service_api EventPingbackApi&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; ping&lt;font color="#00ffff"&gt;(&lt;/font&gt;source_uri, target_uri&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;      event &lt;font color="#00ffff"&gt;=&lt;/font&gt; find_event_by_uri&lt;font color="#00ffff"&gt;(&lt;/font&gt;target_uri&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;      EventPingbackComment.register&lt;font color="#00ffff"&gt;!&lt;/font&gt; event, source_uri, target_uri&lt;br /&gt;      &lt;font color="#ffa500"&gt;return&lt;/font&gt; &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;success&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;rescue&lt;/font&gt;&lt;br /&gt;      raise XMLRPC&lt;font color="#00ffff"&gt;::&lt;/font&gt;FaultException.new&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;0&lt;/font&gt;, &lt;font color="#cc6600"&gt;$!&lt;/font&gt;.&lt;font color="#ffa500"&gt;class&lt;/font&gt;.to_s.underscore.humanize&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  protected&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; find_event_by_uri&lt;font color="#00ffff"&gt;(&lt;/font&gt;uri&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    uri_params &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00ffff"&gt;::&lt;/font&gt;ActionController&lt;font color="#00ffff"&gt;::&lt;/font&gt;Routing&lt;font color="#00ffff"&gt;::&lt;/font&gt;Routes.recognize_path&lt;font color="#00ffff"&gt;(&lt;/font&gt;URI.parse&lt;font color="#00ffff"&gt;(&lt;/font&gt;uri&lt;font color="#00ffff"&gt;)&lt;/font&gt;.path, &lt;font color="#00ffff"&gt;{&lt;/font&gt;&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    event &lt;font color="#00ffff"&gt;=&lt;/font&gt; Event.find_by_id&lt;font color="#00ffff"&gt;(&lt;/font&gt;uri_params&lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;id&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    raise EventPingbackComment&lt;font color="#00ffff"&gt;::&lt;/font&gt;TargetNoExist &lt;font color="#ffa500"&gt;unless&lt;/font&gt; event&lt;br /&gt;    event&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;По &lt;a href="http://www.hixie.ch/specs/pingback/pingback#TOC3"&gt;спецификации&lt;/a&gt;, ошибка может быть описана или детально, каждая со своим кодом, или с общим кодом 0, я остановился на простом варианте (raise XMLRPC::FaultException.new(0)).&lt;/p&gt;&lt;br /&gt;web сервис общается с внешним миром через контроллер&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;app\controllers\event_pingback_controller.rb&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;class&lt;/span&gt; EventPingbackController &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt; ApplicationController&lt;br /&gt;session &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;off&lt;br /&gt;&lt;br /&gt;web_service_dispatching_mode &lt;span style="color: rgb(255, 255, 204);"&gt;&lt;em&gt;:la&lt;/em&gt;&lt;/span&gt;yered&lt;br /&gt;&lt;br /&gt;web_service &lt;span style="color: rgb(255, 255, 204);"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/span&gt;ingback, EventPingbackService.new&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;web_service_scaffold&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;:invoke&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;To&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;with&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;Fiddler&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;POST&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;http://localhost:3000/event_pingback/api&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;HEADERS:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;Content-Type:&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;text/xml&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;User-Agent:&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;Incutio&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;XML-RPC&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;--&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;WordPress/2.1.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;Host:&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;thisishappening.local:3000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;Content-Length:&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;293&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;BODY:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;?xml&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;version="1.0"?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;methodCall&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;methodName&amp;gt;pingback.ping&amp;lt;/methodName&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;params&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;param&amp;gt;&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;http://localhost/blogs/wordpress/?p=10&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;param&amp;gt;&amp;lt;value&amp;gt;&amp;lt;string&amp;gt;http://localhost:3000/events/show/6&amp;lt;/string&amp;gt;&amp;lt;/value&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;/params&amp;gt;&amp;lt;/methodCall&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Обратите внимание на web_service_dispatching_mode :layered, это необходимо чтобы метод мог быть вызван по имени pingback.ping, URL на web сервис будет в этом случае http://my.app.com/PATH/TO/CONTROLLER/api.&lt;/p&gt;&lt;br /&gt;теперь pingback запись в нашей системе&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;app\models\event_pingback_comment.rb&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 153);"&gt;require&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;hpricot&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 153);"&gt;require&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;open-uri&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;class&lt;/span&gt; EventPingbackComment &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt; EventGeneralComment&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;class&lt;/span&gt; PingbackError &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt; StandardError; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;class&lt;/span&gt; AlreadyRegistered &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt; PingbackError; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;class&lt;/span&gt; SourceNoLinkedToTarget &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt; PingbackError; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;class&lt;/span&gt; TargetNoExist &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt; PingbackError; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;validates_uniqueness_of &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;source_uri, &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;scope &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;event_id&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;register&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;ping&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;is&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;the&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;system&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;as&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;comment&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(204, 102, 0);"&gt;self&lt;/span&gt;.register&lt;span style="color: rgb(0, 255, 255);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;event, source_uri, target_uri&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  raise AlreadyRegistered &lt;span style="color: rgb(255, 165, 0);"&gt;if&lt;/span&gt; EventPingbackComment.count&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;conditions &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;event_id &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; event.id, &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;source_uri &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; source_uri&lt;span style="color: rgb(0, 255, 255);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(205, 205, 0);"&gt;0&lt;/span&gt;&lt;br /&gt;  source_body &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; load_page_content&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;source_uri&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  raise SourceNoLinkedToTarget &lt;span style="color: rgb(255, 165, 0);"&gt;unless&lt;/span&gt; source_body.include&lt;span style="color: rgb(0, 255, 255);"&gt;?&lt;/span&gt; target_uri&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;extract&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;some&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;info&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;from&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;source&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;page&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;br /&gt;  doc &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; Hpricot&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;source_body&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  title &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; doc.at&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;?&lt;/span&gt; cleanup_title&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;doc.at&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;.inner_text&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt; &lt;span style="color: rgb(204, 102, 0);"&gt;nil&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  EventPingbackComment.create&lt;span style="color: rgb(0, 255, 255);"&gt;!&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;event &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; event,&lt;br /&gt;    &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;source_uri &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; source_uri,&lt;br /&gt;    &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;source_title &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; title,&lt;br /&gt;    &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;body &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; extract_excerpt&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;doc, target_uri&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;def&lt;/span&gt; pingback&lt;span style="color: rgb(0, 255, 255);"&gt;?&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(204, 102, 0);"&gt;true&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;protected&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(204, 102, 0);"&gt;self&lt;/span&gt;.load_page_content&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;uri&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  open&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;uri&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;.read&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(204, 102, 0);"&gt;self&lt;/span&gt;.cleanup_title&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;text&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  text.gsub(/&lt;span style="color: rgb(255, 0, 153);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;\&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;?&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;^&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;&amp;gt;&lt;/span&gt;/, &lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;.gsub(/&lt;span style="color: rgb(255, 0, 153);"&gt;\s&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;}&lt;/span&gt;/, &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;.strip&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(204, 102, 0);"&gt;self&lt;/span&gt;.extract_excerpt&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;doc, target_uri&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  link &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; doc.at&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;%Q{&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;@&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;href&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;#{&lt;/span&gt;target_uri&lt;span style="color: rgb(0, 255, 255);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;that&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;consruct&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;no&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;catch&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;urls&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;with&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;port,&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;like&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;http://domain:3000,&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;be&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;careful&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;when&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;test&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(255, 165, 0);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt; &lt;span style="color: rgb(255, 165, 0);"&gt;unless&lt;/span&gt; link&lt;br /&gt;&lt;br /&gt;  link_text &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; link.inner_text&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;prevent&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;really&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;link&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;text&lt;/span&gt;&lt;br /&gt;  link_text &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; link_text&lt;span style="color: rgb(0, 255, 255);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(205, 205, 0);"&gt;0&lt;/span&gt;, &lt;span style="color: rgb(205, 205, 0);"&gt;100&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;...&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt; &lt;span style="color: rgb(255, 165, 0);"&gt;if&lt;/span&gt; link_text.size &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(205, 205, 0);"&gt;100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;since&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;in&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;text&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;can&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;be&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;several&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;links&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;to&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;our&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;page,&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;substitute&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;first&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;found&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;with&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;marker&lt;/span&gt;&lt;br /&gt;  link.swap&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;PINGBACK_TARGET_URI&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;text&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;only&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;from&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;parent&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;HTML&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;element&lt;/span&gt;&lt;br /&gt;  text &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; link.parent.inner_text&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;remove&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;lines&lt;/span&gt;&lt;br /&gt;  text.gsub&lt;span style="color: rgb(0, 255, 255);"&gt;!&lt;/span&gt;(/&lt;span style="color: rgb(255, 0, 153);"&gt;\s&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;\n\s&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;*&lt;/span&gt;/, &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;cut&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;text&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;to&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;100&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;chars&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;before&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;and&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;100&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;after,&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;rounded&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;to&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;full&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;word&lt;/span&gt;&lt;br /&gt;  text.gsub&lt;span style="color: rgb(0, 255, 255);"&gt;!&lt;/span&gt;(/&lt;span style="color: rgb(255, 0, 153);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;?&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;\s&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;100&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;PINGBACK_TARGET_URI&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;100&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;\s&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 153);"&gt;*&lt;/span&gt;/m, &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;\1&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;insert&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;link&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;text&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;back&lt;/span&gt;&lt;br /&gt;  text.gsub&lt;span style="color: rgb(0, 255, 255);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;PINGBACK_TARGET_URI&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;, link_text&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;&lt;br /&gt;  text.strip&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;добавим именованный путь на вебсервис&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;config\routes.rb&lt;/span&gt;&lt;br /&gt;map.event_pingback &lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;event_pingback&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;api&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;controller &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;event_pingback&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;, &lt;span style="color: rgb(255, 255, 204);"&gt;&lt;em&gt;:a&lt;/em&gt;&lt;/span&gt;ction &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;api&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;br /&gt;map.events &lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;events&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;action&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;controller &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;events&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;добавим заголовоки к странице события&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;  &lt;span style="color: rgb(190, 190, 190);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;app\controllers\events_controller.rb&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;def&lt;/span&gt; show&lt;br /&gt;  response.headers&lt;span style="color: rgb(0, 255, 255);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;X-Pingback&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;]&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt; event_pingback_url&lt;br /&gt;&lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;app\views\events\show.rhtml&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%&lt;/span&gt; content_for &lt;span style="color: rgb(255, 255, 204);"&gt;&lt;em&gt;:h&lt;/em&gt;&lt;/span&gt;ead_top &lt;span style="color: rgb(255, 165, 0);"&gt;do&lt;/span&gt; &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;link&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;rel&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;pingback&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;href&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;event_pingback_url&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%&lt;/span&gt; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;right&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;column&lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt; &lt;/span&gt;&lt;span style="color: rgb(190, 190, 190);"&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;HRML для pingback коментария будет следующим&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(245, 222, 179);"&gt;      &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;user&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;post&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;header&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;gt;&lt;/span&gt;Pingback by &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%=&lt;/span&gt; link_to &lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;comment.source_title &lt;span style="color: rgb(0, 255, 255);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;|&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;Anonymous&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt;, comment.source_uri &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt; at &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%=&lt;/span&gt; comment.created_at.to_s&lt;span style="color: rgb(0, 255, 255);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;:&lt;/span&gt;time&lt;span style="color: rgb(0, 255, 255);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;:&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%&lt;/span&gt; &lt;span style="color: rgb(255, 165, 0);"&gt;unless&lt;/span&gt; comment.body.blank&lt;span style="color: rgb(0, 255, 255);"&gt;?&lt;/span&gt; &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;gt;&lt;/span&gt;[...] &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%=&lt;/span&gt; h comment.body &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt; [...]&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 170, 226);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%&lt;/span&gt; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(0, 170, 226);"&gt;&amp;lt;%&lt;/span&gt; &lt;span style="color: rgb(255, 165, 0);"&gt;end&lt;/span&gt; &lt;span style="color: rgb(0, 170, 226);"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Тестирование всего этого дела, проводилось с использанием Wordpress 2.1.&lt;br /&gt;На этом основная часть закончена, ниже будут приведены тесты.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Тесты&lt;/span&gt;&lt;br /&gt;поставим глобальную заглушку, чтобы при тестах не делать запросов наружу&lt;br /&gt;&lt;pre&gt;&lt;font color="#f5deb3"&gt;&lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;test\mocks\test\event_pingback_comment.rb&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cc99"&gt;require&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;app/models/event_pingback_comment&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackComment&lt;br /&gt;&lt;br /&gt;  protected&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; &lt;font color="#cc6600"&gt;self&lt;/font&gt;.load_page_content&lt;font color="#00ffff"&gt;(&lt;/font&gt;uri&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Source&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Title&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;/title&amp;gt;&amp;lt;head&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;body&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;link&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;to&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;a&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;href=&amp;quot;http://local.com/events/show/1&amp;quot;&amp;gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;body&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;use&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;EventPingbackComment.stubs(:load_page_content).returns('text')&lt;/font&gt;&lt;br /&gt;  &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;to&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;override&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;this&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;stub&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;тесты на то что коментарий создается правильно&lt;br /&gt;&lt;pre&gt;&lt;font color="#f5deb3"&gt;&lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;test\unit\event_pingback_comment_test.rb&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cc99"&gt;require&lt;/font&gt; File.dirname&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#cc6600"&gt;__FILE__&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt; &lt;font color="#00ffff"&gt;+&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;/../test_helper&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackCommentTest &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt; Test&lt;font color="#00ffff"&gt;::&lt;/font&gt;Unit&lt;font color="#00ffff"&gt;::&lt;/font&gt;TestCase&lt;br /&gt;&lt;br /&gt;  fixtures &lt;font color="#00ffff"&gt;:&lt;/font&gt;events, &lt;font color="#00ffff"&gt;:&lt;/font&gt;event_comments&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_create&lt;br /&gt;    assert_difference EventPingbackComment &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      EventPingbackComment.register&lt;font color="#00ffff"&gt;!&lt;/font&gt; events&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;one&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;events&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;show&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_extract_title_from_source_page&lt;br /&gt;    create_comment&lt;br /&gt;    assert_equal &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;Source&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Title&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;comment&lt;/strong&gt;&lt;/font&gt;.source_title&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_no_allow_nested_tags_in_title_from_source_page&lt;br /&gt;    EventPingbackComment.stubs&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#ffffcc"&gt;&lt;em&gt;:l&lt;/em&gt;&lt;/font&gt;oad_page_content&lt;font color="#00ffff"&gt;)&lt;/font&gt;.returns&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;title&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Source&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;script&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Title&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;/title&amp;gt;&amp;lt;div&amp;gt;link&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;to&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;a&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;href=&amp;quot;http://local.com/events/show/1&amp;quot;&amp;gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    create_comment&lt;br /&gt;    assert_equal &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;Source&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;alert&lt;/font&gt;&lt;font color="#00cd00"&gt;(&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;font color="#00cd00"&gt;)&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Title&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;comment&lt;/strong&gt;&lt;/font&gt;.source_title&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_no_fail_for_source_page_without_title&lt;br /&gt;    EventPingbackComment.stubs&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#ffffcc"&gt;&lt;em&gt;:l&lt;/em&gt;&lt;/font&gt;oad_page_content&lt;font color="#00ffff"&gt;)&lt;/font&gt;.returns&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;div&amp;gt;link&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;to&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;a&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;href=&amp;quot;http://local.com/events/show/1&amp;quot;&amp;gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    create_comment&lt;br /&gt;    assert_equal &lt;font color="#cc6600"&gt;nil&lt;/font&gt;, &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;comment&lt;/strong&gt;&lt;/font&gt;.source_title&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_no_create_if_already_referenced&lt;br /&gt;    assert_no_difference EventPingbackComment &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      assert_raise&lt;font color="#00ffff"&gt;(&lt;/font&gt;EventPingbackComment&lt;font color="#00ffff"&gt;::&lt;/font&gt;AlreadyRegistered&lt;font color="#00ffff"&gt;)&lt;/font&gt; &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;        EventPingbackComment.register&lt;font color="#00ffff"&gt;!&lt;/font&gt; events&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;one&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;oldpost&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;events&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;show&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_no_create_if_link_no_exist_on_source_page&lt;br /&gt;    EventPingbackComment.stubs&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#ffffcc"&gt;&lt;em&gt;:l&lt;/em&gt;&lt;/font&gt;oad_page_content&lt;font color="#00ffff"&gt;)&lt;/font&gt;.returns&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;no&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;link&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    assert_no_difference EventPingbackComment &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      assert_raise&lt;font color="#00ffff"&gt;(&lt;/font&gt;EventPingbackComment&lt;font color="#00ffff"&gt;::&lt;/font&gt;SourceNoLinkedToTarget&lt;font color="#00ffff"&gt;)&lt;/font&gt; &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;        EventPingbackComment.register&lt;font color="#00ffff"&gt;!&lt;/font&gt; events&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;one&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;events&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;show&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_should_extract_excerpt_from_source_page&lt;br /&gt;    create_comment&lt;br /&gt;    assert_equal &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;link&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;to&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;comment&lt;/strong&gt;&lt;/font&gt;.body&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_source_page_extract_excerpt_should_get_100_characters_before_and_100_after&lt;br /&gt;    source_body &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Lorem&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ipsum&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;dolor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;sit&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;amet,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;consectetuer&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;adipiscing&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;elit.&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Nam&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;lectus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;justo,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;porttitor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ullamcorper&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;cursus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;in,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ante.&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;a&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;href=&amp;quot;http://local.com/events/show/1&amp;quot;&amp;gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Lorem&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ipsum&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;dolor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;sit&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;amet,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;consectetuer&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;adipiscing&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;elit.&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Nam&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;lectus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;justo,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;porttitor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ullamcorper&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;cursus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;in,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ante.&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;should&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;extract&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;words&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;(no&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;words&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;clipping)&lt;/font&gt;&lt;br /&gt;    before &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;consectetuer&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;adipiscing&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;elit.&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Nam&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;lectus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;justo,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;porttitor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ullamcorper&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;cursus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;in,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ante.&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    after &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;Lorem&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ipsum&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;dolor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;sit&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;amet,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;consectetuer&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;adipiscing&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;elit.&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Nam&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;lectus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;justo,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;porttitor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    assert_equal &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;#{&lt;/font&gt;before&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00ffff"&gt;#{&lt;/font&gt;after&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, EventPingbackComment.extract_excerpt&lt;font color="#00ffff"&gt;(&lt;/font&gt;Hpricot&lt;font color="#00ffff"&gt;(&lt;/font&gt;source_body&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;http://local.com/events/show/1&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_source_page_extract_excerpt_should_prevent_really_long_link_text&lt;br /&gt;    source_body &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;a&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;href=&amp;quot;http://local.com/events/show/1&amp;quot;&amp;gt;Lorem&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ipsum&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;dolor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;sit&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;amet,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;consectetuer&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;adipiscing&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;elit.&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Nam&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;lectus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;justo,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;porttitor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ullamcorper&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;cursus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;in,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ante.&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    assert_equal &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;Lorem&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ipsum&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;dolor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;sit&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;amet&lt;/font&gt;&lt;font color="#00cd00"&gt;,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;consectetuer&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;adipiscing&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;elit&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Nam&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;lectus&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;justo&lt;/font&gt;&lt;font color="#00cd00"&gt;,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;porttitor&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ac&lt;/font&gt;&lt;font color="#00cd00"&gt;,&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;ullamcorpe&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, EventPingbackComment.extract_excerpt&lt;font color="#00ffff"&gt;(&lt;/font&gt;Hpricot&lt;font color="#00ffff"&gt;(&lt;/font&gt;source_body&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;http://local.com/events/show/1&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_source_page_extract_excerpt_should_be_empty_for_pages_without_valid_link&lt;br /&gt;    source_body &lt;font color="#00ffff"&gt;=&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Some&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;Text&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;http://local.com/events/show/1&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;end&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;of&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;text&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    assert_equal &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;, EventPingbackComment.extract_excerpt&lt;font color="#00ffff"&gt;(&lt;/font&gt;Hpricot&lt;font color="#00ffff"&gt;(&lt;/font&gt;source_body&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;http://local.com/events/show/1&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;  &lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  private&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; create_comment&lt;br /&gt;    &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;comment&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;=&lt;/font&gt; EventPingbackComment.register&lt;font color="#00ffff"&gt;!&lt;/font&gt; events&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00ffff"&gt;:&lt;/font&gt;one&lt;font color="#00ffff"&gt;)&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;events&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;show&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;тесты на вебсервис&lt;br /&gt;&lt;pre&gt;&lt;font color="#f5deb3"&gt;&lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;test\functional\event_pingback_api_test.rb&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cc99"&gt;require&lt;/font&gt; File.dirname&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#cc6600"&gt;__FILE__&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt; &lt;font color="#00ffff"&gt;+&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;/../test_helper&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cc99"&gt;require&lt;/font&gt; &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;event_pingback_controller&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackController; &lt;font color="#ffa500"&gt;def&lt;/font&gt; rescue_action&lt;font color="#00ffff"&gt;(&lt;/font&gt;e&lt;font color="#00ffff"&gt;)&lt;/font&gt; raise e &lt;font color="#ffa500"&gt;end&lt;/font&gt;; &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackControllerApiTest &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt; Test&lt;font color="#00ffff"&gt;::&lt;/font&gt;Unit&lt;font color="#00ffff"&gt;::&lt;/font&gt;TestCase&lt;br /&gt;  fixtures &lt;font color="#ffffcc"&gt;&lt;em&gt;:all&lt;/em&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; setup&lt;br /&gt;    &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;controller&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;=&lt;/font&gt; EventPingbackController.new&lt;br /&gt;    &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;request&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#00ffff"&gt;=&lt;/font&gt; ActionController&lt;font color="#00ffff"&gt;::&lt;/font&gt;TestRequest.new&lt;br /&gt;    &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;response&lt;/strong&gt;&lt;/font&gt;   &lt;font color="#00ffff"&gt;=&lt;/font&gt; ActionController&lt;font color="#00ffff"&gt;::&lt;/font&gt;TestResponse.new&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_ping_to_event&lt;br /&gt;    assert_success &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;=&lt;/font&gt; invoke_layered &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ingback, &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ing, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;events&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;show&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_ping_to_event_by_shortcut &lt;br /&gt;    EventPingbackComment.stubs&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#ffffcc"&gt;&lt;em&gt;:l&lt;/em&gt;&lt;/font&gt;oad_page_content&lt;font color="#00ffff"&gt;)&lt;/font&gt;.returns&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;div&amp;gt;link&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;to&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;lt;a&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;href=&amp;quot;http://local.com/RangeEvent&amp;quot;&amp;gt;Event&lt;/font&gt;&lt;font color="#00cd00"&gt; &lt;/font&gt;&lt;font color="#00cd00"&gt;One&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    assert_success &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;=&lt;/font&gt; invoke_layered &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ingback, &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ing, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;RangeEvent&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_ping_to_event_that_not_exist&lt;br /&gt;    assert_failure&lt;font color="#00ffff"&gt;(&lt;/font&gt;XMLRPC&lt;font color="#00ffff"&gt;::&lt;/font&gt;FaultException&lt;font color="#00ffff"&gt;)&lt;/font&gt; &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;=&lt;/font&gt; invoke_layered &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ingback, &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ing, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;events&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;show&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;1000&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_ping_to_event_to_shortcut_that_not_exist&lt;br /&gt;    assert_failure&lt;font color="#00ffff"&gt;(&lt;/font&gt;XMLRPC&lt;font color="#00ffff"&gt;::&lt;/font&gt;FaultException&lt;font color="#00ffff"&gt;)&lt;/font&gt; &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00ffff"&gt;=&lt;/font&gt; invoke_layered &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ingback, &lt;font color="#ffffcc"&gt;&lt;em&gt;:p&lt;/em&gt;&lt;/font&gt;ing, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;source&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;blog&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;post&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;http&lt;/font&gt;&lt;font color="#00cd00"&gt;:&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;local&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;com&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;NotExist&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; assert_success&lt;br /&gt;    assert_difference EventPingbackComment &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      &lt;font color="#ffa500"&gt;yield&lt;/font&gt;&lt;br /&gt;      &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;If&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;the&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;pingback&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;request&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;is&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;successful,&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;then&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;the&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;return&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;value&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;MUST&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;be&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;a&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;single&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;string,&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;containing&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;as&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;much&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;information&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;as&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;the&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;server&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;deems&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;useful.&lt;/font&gt;&lt;br /&gt;      assert_kind_of String, &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      assert &lt;font color="#66ccff"&gt;&lt;strong&gt;@&lt;/strong&gt;&lt;/font&gt;&lt;font color="#66ccff"&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;/font&gt;.size &lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#cdcd00"&gt;0&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; assert_failure&lt;font color="#00ffff"&gt;(&lt;/font&gt;error_class &lt;font color="#00ffff"&gt;=&lt;/font&gt; EventPingbackComment&lt;font color="#00ffff"&gt;::&lt;/font&gt;PingbackError&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;br /&gt;    assert_no_difference EventPingbackComment &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;      assert_raise error_class &lt;font color="#ffa500"&gt;do&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ffa500"&gt;yield&lt;/font&gt;&lt;br /&gt;      &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;    &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;тесты на то что страница события имеет неоходимые &lt;a href="http://www.hixie.ch/specs/pingback/pingback#TOC2"&gt;заголовки&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="#f5deb3"&gt;&lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;test\integration\event_pingback_test.rb&lt;/font&gt;&lt;br /&gt;&lt;font color="#00cc99"&gt;require&lt;/font&gt; &lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;#{&lt;/font&gt;File.dirname&lt;font color="#00ffff"&gt;(&lt;/font&gt;&lt;font color="#cc6600"&gt;__FILE__&lt;/font&gt;&lt;font color="#00ffff"&gt;)&lt;/font&gt;&lt;font color="#00ffff"&gt;}&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;.&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;test_helper&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;see&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;http://www.hixie.ch/specs/pingback/pingback&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;for&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;pingback&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;spec.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;class&lt;/font&gt; EventPingbackTest &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt; ActionController&lt;font color="#00ffff"&gt;::&lt;/font&gt;IntegrationTest&lt;br /&gt;  fixtures &lt;font color="#ffffcc"&gt;&lt;em&gt;:all&lt;/em&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_events_should_has_x_pingback_header_and_pingback_link&lt;br /&gt;    get &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;events/show/1&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    assert_response &lt;font color="#00ffff"&gt;:&lt;/font&gt;success&lt;br /&gt;    assert_not_nil response.headers&lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;X-Pingback&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;br /&gt;    &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;if&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;header&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;not&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;found,&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;link&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;rel=&amp;quot;pingback&amp;quot;&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;element&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;will&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;be&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;checked&lt;/font&gt;&lt;br /&gt;    &lt;font color="#bebebe"&gt;#&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;worpress&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;2.1&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;by&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;default&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;check&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;only&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;first&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;2048&lt;/font&gt;&lt;font color="#bebebe"&gt; &lt;/font&gt;&lt;font color="#bebebe"&gt;bytes&lt;/font&gt;&lt;br /&gt;    assert_match &lt;font color="#ff0099"&gt;%r{&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff0099"&gt;link&lt;/font&gt;&lt;font color="#ff0099"&gt; &lt;/font&gt;&lt;font color="#ff0099"&gt;rel&lt;/font&gt;&lt;font color="#ff0099"&gt;=&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt;pingback&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt; &lt;/font&gt;&lt;font color="#ff0099"&gt;href&lt;/font&gt;&lt;font color="#ff0099"&gt;=&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt;(&lt;/font&gt;&lt;font color="#ff0099"&gt;[&lt;/font&gt;&lt;font color="#ff0099"&gt;^&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt;]&lt;/font&gt;&lt;font color="#ff0099"&gt;+&lt;/font&gt;&lt;font color="#ff0099"&gt;)&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt; &lt;/font&gt;&lt;font color="#ff0099"&gt;?&lt;/font&gt;&lt;font color="#ff0099"&gt;/&lt;/font&gt;&lt;font color="#ff0099"&gt;?&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#ff0099"&gt;}&lt;/font&gt;, response.body&lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#cdcd00"&gt;0&lt;/font&gt;, &lt;font color="#cdcd00"&gt;2048&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#ffa500"&gt;def&lt;/font&gt; test_other_pages_should_not_be_pingback_enabled&lt;br /&gt;    get &lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;br /&gt;    assert_response &lt;font color="#00ffff"&gt;:&lt;/font&gt;success&lt;br /&gt;    assert_nil response.headers&lt;font color="#00ffff"&gt;[&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;X-Pingback&lt;/font&gt;&lt;font color="#00cd00"&gt;'&lt;/font&gt;&lt;font color="#00ffff"&gt;]&lt;/font&gt;&lt;br /&gt;    assert_no_match &lt;font color="#ff0099"&gt;%r{&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff0099"&gt;link&lt;/font&gt;&lt;font color="#ff0099"&gt; &lt;/font&gt;&lt;font color="#ff0099"&gt;rel&lt;/font&gt;&lt;font color="#ff0099"&gt;=&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt;pingback&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt; &lt;/font&gt;&lt;font color="#ff0099"&gt;href&lt;/font&gt;&lt;font color="#ff0099"&gt;=&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt;(&lt;/font&gt;&lt;font color="#ff0099"&gt;[&lt;/font&gt;&lt;font color="#ff0099"&gt;^&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt;]&lt;/font&gt;&lt;font color="#ff0099"&gt;+&lt;/font&gt;&lt;font color="#ff0099"&gt;)&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff0099"&gt; &lt;/font&gt;&lt;font color="#ff0099"&gt;?&lt;/font&gt;&lt;font color="#ff0099"&gt;/&lt;/font&gt;&lt;font color="#ff0099"&gt;?&lt;/font&gt;&lt;font color="#ff0099"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#ff0099"&gt;}&lt;/font&gt;, response.body&lt;br /&gt;  &lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#ffa500"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-1806367959252776821?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/1806367959252776821/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=1806367959252776821' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/1806367959252776821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/1806367959252776821'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/04/pingback.html' title='Реализация Pingback механизма'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-562761152507783683</id><published>2007-03-19T20:43:00.000+03:00</published><updated>2007-03-19T20:46:04.960+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>Ruby and PostgreSql</title><content type='html'>I have problems with postgres-pr gem&lt;br /&gt;&lt;br /&gt;This Win32 gem works http://ruby.scripting.ca/postgres/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-562761152507783683?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/562761152507783683/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=562761152507783683' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/562761152507783683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/562761152507783683'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/03/ruby-and-postgresql.html' title='Ruby and PostgreSql'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-8991556680877534634</id><published>2007-02-19T23:28:00.000+03:00</published><updated>2007-02-19T23:30:02.111+03:00</updated><title type='text'>Asset Packager’s functionality added into rails core</title><content type='html'>Asset Packager’s functionality added into core - &lt;a href="http://dev.rubyonrails.org/changeset/6164"&gt;http://dev.rubyonrails.org/changeset/6164&lt;/a&gt;    &lt;p&gt;For anyone that’s never used Asset Packager, it basically just combines all your stylesheets into a single file, and all your javascripts into a single file. It speeds things up alot by reducing the number of &lt;span class="caps"&gt;HTTP&lt;/span&gt; requests the browser has to make.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-8991556680877534634?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/8991556680877534634/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=8991556680877534634' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/8991556680877534634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/8991556680877534634'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/02/asset-packagers-functionality-added.html' title='Asset Packager’s functionality added into rails core'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-4307298871048111450</id><published>2007-02-18T14:08:00.000+03:00</published><updated>2007-02-18T14:19:23.565+03:00</updated><title type='text'>Browser performance improvement in RubyOnRails</title><content type='html'>From changelog:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Work around the two connection per host browser limit: use asset%d.myapp.com to distribute asset requests among asset[0123].myapp.com. Use a DNS wildcard or CNAMEs to map these hosts to your asset server. See http://www.die.net/musings/page_load_time/ for background.&lt;/span&gt;&lt;br /&gt;Before that change rails allows only one asserts domain.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;" class="searchword0"&gt;Added&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="searchword1"&gt;X-Runtime&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="searchword2"&gt;to&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="searchword3"&gt;all&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="searchword4"&gt;responses&lt;/span&gt;&lt;span style="font-style: italic;"&gt; with the request run time [DHH] (rename from X-Benchmark)&lt;br /&gt;&lt;/span&gt;On Firefox you can use WebDeveloper or Firebug extensions to see that header.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Another nice thing (ETag) desribed by Chad Fowler - &lt;a href="http://www.chadfowler.com/2007/2/17/edge-rails-goody-automatic-304-for-views-not-modified"&gt;Edge Rails Goody: Automatic 304 for Views Not Modified&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-4307298871048111450?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/4307298871048111450/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=4307298871048111450' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/4307298871048111450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/4307298871048111450'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2007/02/browser-performance-improvement-in.html' title='Browser performance improvement in RubyOnRails'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-377034673816779343</id><published>2006-11-11T18:01:00.000+03:00</published><updated>2006-11-11T18:02:21.325+03:00</updated><title type='text'>Sendmail vs smtp</title><content type='html'>Когда стоит вопрос каким образом отсылать email, знайте что sendmail гораздо быстрее SMTP.&lt;br /&gt;&lt;br /&gt;SMTP:&lt;br /&gt;Sending Mail to user (25.22760)&lt;br /&gt;Sending Mail to internal (31.11207)&lt;br /&gt;Sending Mail notification (20.70688)&lt;br /&gt;&lt;br /&gt;Sendmail:&lt;br /&gt;Sending Mail to user (0.16841)&lt;br /&gt;Sending Mail to internal (0.28479)&lt;br /&gt;Sending Mail notification (0.24701)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.pearware.org/2006/11/9/activemailer-email-performance-on-site5"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-377034673816779343?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/377034673816779343/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=377034673816779343' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/377034673816779343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/377034673816779343'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2006/11/sendmail-vs-smtp.html' title='Sendmail vs smtp'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-5785744011404865124</id><published>2006-11-08T01:51:00.000+03:00</published><updated>2006-11-08T01:57:33.467+03:00</updated><title type='text'>ActiveRecord added support for nil and Array in :conditions</title><content type='html'>Nice feature added to rails several days ago&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Support nil and Array in :conditions =&gt; { attr =&gt; value } hashes.  #6548 [Assaf, Jeremy Kemper]&lt;br /&gt;find(:all, :conditions =&gt; { :topic_id =&gt; [1, 2, 3], :last_read =&gt; nil }&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So for &lt;code&gt;Todo.find(:all, :conditions =&gt; { :id =&gt; [1,2,3] })&lt;/code&gt;&lt;br /&gt;will be generated following query&lt;br /&gt;&lt;code&gt;SELECT * FROM todos WHERE (todos.`id` IN (1,2,3))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And &lt;code&gt;Todo.find(:all, :conditions =&gt; { :description =&gt; nil }) will use&lt;/code&gt;&lt;br /&gt;&lt;code&gt;SELECT * FROM todos WHERE (todos.`description` IS NULL)&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-5785744011404865124?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/5785744011404865124/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=5785744011404865124' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/5785744011404865124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/5785744011404865124'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2006/11/activerecord-added-support-for-nil-and.html' title='ActiveRecord added support for nil and Array in :conditions'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-2221332941993085014</id><published>2006-10-10T02:41:00.000+04:00</published><updated>2006-10-10T02:52:46.325+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>New rails generate model feature</title><content type='html'>Nice ruby on rails  new generator feature&lt;br /&gt;&lt;blockquote&gt;Added generated attribute options to script/generate model, like the one found in scaffold_resource and resource. Examples:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;./script/generate model post title:string created_on:date body:text published:boolean&lt;/span&gt; &lt;/blockquote&gt;&lt;br /&gt;Will addtionally create migration file with code&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt; def self.up&lt;br /&gt;  create_table :posts do |t|&lt;br /&gt;    t.column :title, :string&lt;br /&gt;    t.column :created_on, :date&lt;br /&gt;    t.column :body, :text&lt;br /&gt;    t.column :published, :boolean&lt;br /&gt;  end&lt;br /&gt; end&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-2221332941993085014?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/2221332941993085014/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=2221332941993085014' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/2221332941993085014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/2221332941993085014'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2006/10/new-rails-generate-model-feature.html' title='New rails generate model feature'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35513340.post-115999460545154225</id><published>2006-10-05T00:40:00.000+04:00</published><updated>2006-10-05T00:47:08.143+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP static class name solution</title><content type='html'>&lt;p class="MsoNormal"&gt;При разработке обобщенного кода, бывает необходимо узнать класс из статического метода.&lt;br /&gt;т.е. если у нас есть классы BaseTag, ConcreteTag то необходимо чтобы при вызове ConcreteTag:find_all() в методе find_all() была возможность определить что метод вызван именно для класса ConcreteTag. В PHP нет такой возможности&lt;br /&gt;&lt;br /&gt;предлагается использовать debug_backtrace() чтобы получить эту информацию&lt;br /&gt;&lt;br /&gt;&lt;span style="" lang="EN-US"&gt;&lt;code&gt;&lt;br /&gt;function get_class_static()&lt;br /&gt;{&lt;br /&gt;$bt = debug_backtrace();&lt;br /&gt;// note that we are using $bt[1] instead of $bt[0];&lt;br /&gt;//$bt[0] would return the get_class_static function rather than the calling class&lt;br /&gt;$name = $bt[1]['class'];&lt;br /&gt;return $name;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;a href="http://passivedigressive.com/archives/2005-02/php-static-class-name-solution/"&gt;Source of Solution&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35513340-115999460545154225?l=rmdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rmdev.blogspot.com/feeds/115999460545154225/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35513340&amp;postID=115999460545154225' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/115999460545154225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35513340/posts/default/115999460545154225'/><link rel='alternate' type='text/html' href='http://rmdev.blogspot.com/2006/10/php-static-class-name-solution.html' title='PHP static class name solution'/><author><name>Sergey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
