<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Oleksandr Bondar - Home</title>
  <id>tag:obondar.com,2008:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  <link href="http://obondar.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://obondar.com/" rel="alternate" type="text/html"/>
  <updated>2008-07-03T09:52:47Z</updated>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2008-07-03:24</id>
    <published>2008-07-03T09:43:00Z</published>
    <updated>2008-07-03T09:52:47Z</updated>
    <link href="http://obondar.com/2008/7/3/paypal-express-recurring-payments" rel="alternate" type="text/html"/>
    <title>Paypal Express Recurring Payments</title>
<content type="html">
            &lt;p&gt;
This is the extension for activemerchant to work with recurring payments:
&lt;/p&gt;
&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;35&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;45&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;55&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;59&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;60&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;61&lt;tt&gt;
&lt;/tt&gt;62&lt;tt&gt;
&lt;/tt&gt;63&lt;tt&gt;
&lt;/tt&gt;64&lt;tt&gt;
&lt;/tt&gt;65&lt;tt&gt;
&lt;/tt&gt;66&lt;tt&gt;
&lt;/tt&gt;67&lt;tt&gt;
&lt;/tt&gt;68&lt;tt&gt;
&lt;/tt&gt;69&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;70&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;71&lt;tt&gt;
&lt;/tt&gt;72&lt;tt&gt;
&lt;/tt&gt;73&lt;tt&gt;
&lt;/tt&gt;74&lt;tt&gt;
&lt;/tt&gt;75&lt;tt&gt;
&lt;/tt&gt;76&lt;tt&gt;
&lt;/tt&gt;77&lt;tt&gt;
&lt;/tt&gt;78&lt;tt&gt;
&lt;/tt&gt;79&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;80&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;81&lt;tt&gt;
&lt;/tt&gt;82&lt;tt&gt;
&lt;/tt&gt;83&lt;tt&gt;
&lt;/tt&gt;84&lt;tt&gt;
&lt;/tt&gt;85&lt;tt&gt;
&lt;/tt&gt;86&lt;tt&gt;
&lt;/tt&gt;87&lt;tt&gt;
&lt;/tt&gt;88&lt;tt&gt;
&lt;/tt&gt;89&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;90&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;91&lt;tt&gt;
&lt;/tt&gt;92&lt;tt&gt;
&lt;/tt&gt;93&lt;tt&gt;
&lt;/tt&gt;94&lt;tt&gt;
&lt;/tt&gt;95&lt;tt&gt;
&lt;/tt&gt;96&lt;tt&gt;
&lt;/tt&gt;97&lt;tt&gt;
&lt;/tt&gt;98&lt;tt&gt;
&lt;/tt&gt;99&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;101&lt;tt&gt;
&lt;/tt&gt;102&lt;tt&gt;
&lt;/tt&gt;103&lt;tt&gt;
&lt;/tt&gt;104&lt;tt&gt;
&lt;/tt&gt;105&lt;tt&gt;
&lt;/tt&gt;106&lt;tt&gt;
&lt;/tt&gt;107&lt;tt&gt;
&lt;/tt&gt;108&lt;tt&gt;
&lt;/tt&gt;109&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;110&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;111&lt;tt&gt;
&lt;/tt&gt;112&lt;tt&gt;
&lt;/tt&gt;113&lt;tt&gt;
&lt;/tt&gt;114&lt;tt&gt;
&lt;/tt&gt;115&lt;tt&gt;
&lt;/tt&gt;116&lt;tt&gt;
&lt;/tt&gt;117&lt;tt&gt;
&lt;/tt&gt;118&lt;tt&gt;
&lt;/tt&gt;119&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;120&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;121&lt;tt&gt;
&lt;/tt&gt;122&lt;tt&gt;
&lt;/tt&gt;123&lt;tt&gt;
&lt;/tt&gt;124&lt;tt&gt;
&lt;/tt&gt;125&lt;tt&gt;
&lt;/tt&gt;126&lt;tt&gt;
&lt;/tt&gt;127&lt;tt&gt;
&lt;/tt&gt;128&lt;tt&gt;
&lt;/tt&gt;129&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;130&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;131&lt;tt&gt;
&lt;/tt&gt;132&lt;tt&gt;
&lt;/tt&gt;133&lt;tt&gt;
&lt;/tt&gt;134&lt;tt&gt;
&lt;/tt&gt;135&lt;tt&gt;
&lt;/tt&gt;136&lt;tt&gt;
&lt;/tt&gt;137&lt;tt&gt;
&lt;/tt&gt;138&lt;tt&gt;
&lt;/tt&gt;139&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;140&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;141&lt;tt&gt;
&lt;/tt&gt;142&lt;tt&gt;
&lt;/tt&gt;143&lt;tt&gt;
&lt;/tt&gt;144&lt;tt&gt;
&lt;/tt&gt;145&lt;tt&gt;
&lt;/tt&gt;146&lt;tt&gt;
&lt;/tt&gt;147&lt;tt&gt;
&lt;/tt&gt;148&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;include &lt;span class='co'&gt;ActiveMerchant&lt;/span&gt;::&lt;span class='co'&gt;Billing&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='c'&gt;# simple extension to ActiveMerchant for basic support of recurring payments with Express Checkout API&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;module&lt;/span&gt; &lt;span class='cl'&gt;ActiveMerchant&lt;/span&gt; &lt;span class='c'&gt;#:nodoc:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='r'&gt;module&lt;/span&gt; &lt;span class='cl'&gt;Billing&lt;/span&gt; &lt;span class='c'&gt;#:nodoc:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;class&lt;/span&gt; &lt;span class='cl'&gt;PaypalExpressRecurringGateway&lt;/span&gt; &amp;lt; &lt;span class='co'&gt;Gateway&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      include &lt;span class='co'&gt;PaypalCommonAPI&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='co'&gt;LIVE_REDIRECT_URL&lt;/span&gt; = &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;https://www.paypal.com/cgibin/webscr?cmd=_customer-billing-agreement&amp;amp;token=&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='co'&gt;TEST_REDIRECT_URL&lt;/span&gt; = &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_customer-billing-agreement&amp;amp;token=&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;redirect_url&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        test? ? &lt;span class='co'&gt;TEST_REDIRECT_URL&lt;/span&gt; : &lt;span class='co'&gt;LIVE_REDIRECT_URL&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;redirect_url_for&lt;/span&gt;(token)&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='il'&gt;&lt;span class='dl'&gt;#{&lt;/span&gt;redirect_url&lt;span class='dl'&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class='il'&gt;&lt;span class='dl'&gt;#{&lt;/span&gt;token&lt;span class='dl'&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;setup_agreement&lt;/span&gt;(description, return_url, cancel_url)&lt;tt&gt;
&lt;/tt&gt;        commit &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;SetCustomerBillingAgreement&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, build_setup_request(description, return_url, cancel_url)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;create_profile&lt;/span&gt;(token, description, cycles, amount, next_billing_date)&lt;tt&gt;
&lt;/tt&gt;        commit &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;CreateRecurringPaymentsProfile&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, build_create_profile_request(token, description, cycles, amount, next_billing_date)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;update_profile&lt;/span&gt;(profile_id, description, amount)&lt;tt&gt;
&lt;/tt&gt;        commit &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;UpdateRecurringPaymentsProfile&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, build_change_profile_request(profile_id, description, amount)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;cancel_profile&lt;/span&gt;(profile_id)&lt;tt&gt;
&lt;/tt&gt;        commit &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;ManageRecurringPaymentsProfileStatus&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, manage_profile_request(profile_id, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;Cancel&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;get_profile_details&lt;/span&gt;(profile_id)&lt;tt&gt;
&lt;/tt&gt;        commit &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;GetRecurringPaymentsProfileDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, build_get_profile_details_request(profile_id)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    private&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;build_setup_request&lt;/span&gt;(description, return_url, cancel_url)&lt;tt&gt;
&lt;/tt&gt;        xml = &lt;span class='co'&gt;Builder&lt;/span&gt;::&lt;span class='co'&gt;XmlMarkup&lt;/span&gt;.new &lt;span class='sy'&gt;:indent&lt;/span&gt; =&amp;gt; &lt;span class='i'&gt;2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;SetCustomerBillingAgreementReq&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;PAYPAL_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;SetCustomerBillingAgreementRequest&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns:n2&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;EBAY_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Version&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='i'&gt;50&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:SetCustomerBillingAgreementRequestDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:BillingAgreementDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:BillingType&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;RecurringPayments&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:BillingAgreementDescription&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, description&lt;tt&gt;
&lt;/tt&gt;              &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:ReturnURL&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, return_url&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:CancelURL&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, cancel_url&lt;tt&gt;
&lt;/tt&gt;            &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.target!&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;build_create_profile_request&lt;/span&gt;(token, description, cycles, amount, billing_start_date, currency=&lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;USD&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;        xml = &lt;span class='co'&gt;Builder&lt;/span&gt;::&lt;span class='co'&gt;XmlMarkup&lt;/span&gt;.new &lt;span class='sy'&gt;:indent&lt;/span&gt; =&amp;gt; &lt;span class='i'&gt;2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;CreateRecurringPaymentsProfileReq&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;PAYPAL_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;CreateRecurringPaymentsProfileRequest&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns:n2&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;EBAY_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Version&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='i'&gt;50&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:CreateRecurringPaymentsProfileRequestDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;Token&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, token&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:RecurringPaymentsProfileDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:BillingStartDate&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, billing_start_date&lt;tt&gt;
&lt;/tt&gt;              &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:ScheduleDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Description&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, description&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:PaymentPeriod&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                  xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:BillingPeriod&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;Month&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                  xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:BillingFrequency&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, cycles&lt;tt&gt;
&lt;/tt&gt;                  xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:TotalBillingCycles&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='i'&gt;0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                  xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Amount&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, amount, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;currencyID&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; currency&lt;tt&gt;
&lt;/tt&gt;                &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.target!&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;build_change_profile_request&lt;/span&gt;(profile_id, description, amount)&lt;tt&gt;
&lt;/tt&gt;        xml = &lt;span class='co'&gt;Builder&lt;/span&gt;::&lt;span class='co'&gt;XmlMarkup&lt;/span&gt;.new &lt;span class='sy'&gt;:indent&lt;/span&gt; =&amp;gt; &lt;span class='i'&gt;2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;UpdateRecurringPaymentsProfileReq&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;PAYPAL_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;UpdateRecurringPaymentsProfileRequest&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns:n2&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;EBAY_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Version&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='i'&gt;50&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:UpdateRecurringPaymentsProfileRequestDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;ProfileID&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, profile_id&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:ScheduleDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Description&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, description&lt;tt&gt;
&lt;/tt&gt;                xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:PaymentPeriod&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                  xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Amount&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, amount&lt;tt&gt;
&lt;/tt&gt;                &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.target!&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;manage_profile_request&lt;/span&gt;(profile_id, action)&lt;tt&gt;
&lt;/tt&gt;        xml = &lt;span class='co'&gt;Builder&lt;/span&gt;::&lt;span class='co'&gt;XmlMarkup&lt;/span&gt;.new &lt;span class='sy'&gt;:indent&lt;/span&gt; =&amp;gt; &lt;span class='i'&gt;2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;ManageRecurringPaymentsProfileStatusReq&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;PAYPAL_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;ManageRecurringPaymentsProfileStatusRequest&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns:n2&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;EBAY_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Version&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='i'&gt;50&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:ManageRecurringPaymentsProfileStatusRequestDetails&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;ProfileID&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, profile_id&lt;tt&gt;
&lt;/tt&gt;              xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Action&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, action&lt;tt&gt;
&lt;/tt&gt;            &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.target!&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;build_get_profile_details_request&lt;/span&gt;(profile_id)&lt;tt&gt;
&lt;/tt&gt;        xml = &lt;span class='co'&gt;Builder&lt;/span&gt;::&lt;span class='co'&gt;XmlMarkup&lt;/span&gt;.new &lt;span class='sy'&gt;:indent&lt;/span&gt; =&amp;gt; &lt;span class='i'&gt;2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;GetRecurringPaymentsProfileDetailsReq&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;PAYPAL_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;GetRecurringPaymentsProfileDetailsRequest&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;xmlns:n2&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class='co'&gt;EBAY_NAMESPACE&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;n2:Version&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='i'&gt;50&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            xml.tag! &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;ProfileID&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, profile_id&lt;tt&gt;
&lt;/tt&gt;          &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        xml.target!&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;build_response&lt;/span&gt;(success, message, response, options = {})&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='co'&gt;PaypalExpressProfileResponse&lt;/span&gt;.new(success, message, response, options)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;class&lt;/span&gt; &lt;span class='cl'&gt;PaypalExpressProfileResponse&lt;/span&gt; &amp;lt; &lt;span class='co'&gt;PaypalExpressResponse&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;profile_id&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='iv'&gt;@params&lt;/span&gt;[&lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;profile_id&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;next_billing_date&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='iv'&gt;@params&lt;/span&gt;[&lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;next_billing_date&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;active?&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;         &lt;span class='iv'&gt;@params&lt;/span&gt;[&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;profile_status&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;]==&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;ActiveProfile&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2008-06-03:23</id>
    <published>2008-06-03T12:41:00Z</published>
    <updated>2008-06-03T12:49:16Z</updated>
    <link href="http://obondar.com/2008/6/3/using-the-results-of-victory" rel="alternate" type="text/html"/>
    <title>Using the results of victory</title>
<content type="html">
            &lt;p&gt;Activity should give results that you can own.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2008-06-03:22</id>
    <published>2008-06-03T12:37:00Z</published>
    <updated>2008-06-03T12:40:23Z</updated>
    <link href="http://obondar.com/2008/6/3/forums-on-dostorm" rel="alternate" type="text/html"/>
    <title>Forums on DoStorm</title>
<content type="html">
            &lt;p&gt;Yesterday I did deployed forulio to dostorm website. Forums are available at &lt;a href='http://forum.dostorm.com'&gt;forum.dostorm.com&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2008-03-13:21</id>
    <published>2008-03-13T13:38:00Z</published>
    <updated>2008-03-13T17:44:40Z</updated>
    <link href="http://obondar.com/2008/3/13/dostorm-forulio-com" rel="alternate" type="text/html"/>
    <title>DoStorm &amp; Forulio.com</title>
<content type="html">
            &lt;p&gt;Some weeks ago I with my friend Ruslan started weekend project &lt;a href='http://forulio.com'&gt;Forulio.com&lt;/a&gt;. We are working on it only on weekends and during work week we collect ideas and thoughts in DoStorm. I like how this process looks, DoStorm are good tool for collection ideas and sharing them. &lt;/p&gt;
&lt;p&gt;
This is how one of our brainstorm looks:
&lt;/p&gt;
&lt;p&gt;
&lt;img src='http://obondar.com/assets/2008/3/13/dostorm1.jpg' width='600' /&gt;
&lt;/p&gt;
&lt;p&gt;
Also while using DoStorm we got some very nice ideas how to improve it. Some of them are:
&lt;ul&gt;
&lt;li&gt;combine with todo functionality 
&lt;li&gt;add reminders
&lt;li&gt;add notes
&lt;li&gt;improve interface to easier navigate thought rounds
&lt;li&gt;add round result, that should be added when closing round   
&lt;/ul&gt;
Actually, we created new brainstorm session for DoStorm improvements ;) 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2008-02-24:19</id>
    <published>2008-02-24T18:46:00Z</published>
    <updated>2008-02-24T18:52:25Z</updated>
    <link href="http://obondar.com/2008/2/24/public-brainstorms-link-removed" rel="alternate" type="text/html"/>
    <title>Public brainstorms link removed</title>
<content type="html">
            I decided to remove link to public brainstorms on main page of DoStorm.com. I think that if you want to share your brainstorm round, you can post your link to blog or send it via email, but there is no sense in making public all shared rounds.
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2008-02-21:17</id>
    <published>2008-02-21T16:37:00Z</published>
    <updated>2008-02-21T18:38:34Z</updated>
    <link href="http://obondar.com/2008/2/21/dostorm-new-design" rel="alternate" type="text/html"/>
    <title>DoStorm new design</title>
<content type="html">
            &lt;p&gt;After short delay I came back to DoStorm. Designer Rustam joined to team so now i am not alone;). &lt;/p&gt;
&lt;p&gt;
Our new logo:&lt;br /&gt;
&lt;img src='http://obondar.com/assets/2008/2/21/dostorm2.png' /&gt;
&lt;/p&gt;
&lt;p&gt;
Very first design draft is here:&lt;/p&gt;
&lt;a href='http://obondar.com/assets/2008/2/21/round_22.png'&gt;&lt;img src='http://obondar.com/assets/2008/2/21/round_22.png' width='400' /&gt;&lt;/a&gt;
&lt;p&gt;There are some new features that we want to implement. In next releases well be added possibility to comment suggestions and chat window on round page. We are thinking about how to display round with expanded suggestions that became new rounds. How to export round in easy to read format. 
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-12-10:12</id>
    <published>2007-12-10T13:13:00Z</published>
    <updated>2007-12-10T13:19:35Z</updated>
    <category term="Ruby on Rails"/>
    <link href="http://obondar.com/2007/12/10/render-partial-with-gettext-problem" rel="alternate" type="text/html"/>
    <title>Render partial with gettext problem</title>
<content type="html">
            &lt;p&gt;
While rendering some template you can get error message, something like : &lt;br /&gt;
&lt;code&gt;
ActionView::TemplateError (Couldn't find template file for admin/users/_new_edit&lt;b&gt;_en&lt;/b&gt;&lt;br /&gt;
&lt;/code&gt;
The &quot;_en&quot; is added by gettext. To make gettext skip trying to render template that is not exists, I made change in gettext gem:
&lt;/p&gt;
&lt;code&gt;
ruby/gems/1.8/gems/gettext-1.10.0/lib/gettext&lt;br /&gt;
line 328 : &lt;br /&gt;return render_file_without_locale(localized_path, use_full_path, local_assigns) if File.exists?(localized_path)
 &lt;/code&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-11-23:11</id>
    <published>2007-11-23T19:46:00Z</published>
    <updated>2007-11-23T20:16:10Z</updated>
    <link href="http://obondar.com/2007/11/23/rocket-s-engine" rel="alternate" type="text/html"/>
    <title>Rocket's engine </title>
<content type="html">
            &lt;p&gt;
I am happy! Rocket's engines here:
&lt;a href='http://rc-mania.com.ua/rc-mania.php '&gt;http://rc-mania.com.ua/rc-mania.php&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
More powerful - &lt;a href='http://www.apogeerockets.com/rocket_motors.asp'&gt;Model Rocket Motors&lt;/a&gt;
but there they do not deliver outside USA ;( 
&lt;/p&gt;
&lt;p&gt;
Also there are engines from &lt;a href='http://www.made-in-china.com/china-products/productviewwhJEnGxromQO/Toy-Model-Rocket-Engine-A6-3-B6-4-C6-4-D5-0-.html'&gt;China&lt;/a&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-11-15:10</id>
    <published>2007-11-15T19:02:00Z</published>
    <updated>2007-11-16T21:23:01Z</updated>
    <category term="Projects"/>
    <link href="http://obondar.com/2007/11/15/brainstorm-round-for-non-registered-users" rel="alternate" type="text/html"/>
    <title>Brainstorm round for non registered users</title>
<content type="html">
            &lt;p&gt;Now all users can try to &lt;a href='http://dostorm.com/ask'&gt;use DoStorm&lt;/a&gt; application before registration. &lt;/p&gt;
&lt;p&gt;After registration you can:
&lt;ul&gt;
 &lt;li&gt;create as many rounds as you need
 &lt;li&gt;start new rounds from suggestion
 &lt;li&gt;share your rounds
&lt;/ul&gt;
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-11-10:9</id>
    <published>2007-11-10T09:41:00Z</published>
    <updated>2007-11-10T09:59:55Z</updated>
    <link href="http://obondar.com/2007/11/10/how-to-install-mysql-gem-without-mysql-installed" rel="alternate" type="text/html"/>
    <title>How to install mysql gem without mysql installed</title>
<content type="html">
            &lt;code&gt;
apt-get install libmysqlclient15-dev&lt;br /&gt;
gem install mysql
&lt;/code&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-11-04:8</id>
    <published>2007-11-04T23:59:00Z</published>
    <updated>2007-11-05T00:04:01Z</updated>
    <link href="http://obondar.com/2007/11/4/new-features-for-dostorm-com" rel="alternate" type="text/html"/>
    <title>New features for DoStorm.com</title>
<content type="html">
            &lt;p&gt;
&lt;b&gt;Sharing.&lt;/b&gt;&lt;br /&gt;
To share round you only need to click on &quot;Share this round&quot; checkbox. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Starting new round from selected suggestion.&lt;/b&gt;&lt;br /&gt;
While searching for solution some suggestions may be the start of new brainstorm round. Start it by clicking &quot;+&quot; link near the selected suggestion. When child round is present for suggestion, you will see &quot;#&quot; link that navigates to this round page.
 &lt;/p&gt;
&lt;a href='http://dostorm.com'&gt;Enjoy!&lt;/a&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-11-04:7</id>
    <published>2007-11-04T10:07:00Z</published>
    <updated>2007-11-04T10:09:21Z</updated>
    <category term="Projects"/>
    <link href="http://obondar.com/2007/11/4/dostorm-com" rel="alternate" type="text/html"/>
    <title>DoStorm.com</title>
<content type="html">
            I just got the domain name for brainstorm application, now project has name - &lt;a href='http://dostorm.com'&gt;DoStorm.com&lt;/a&gt;.
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-11-02:6</id>
    <published>2007-11-02T20:22:00Z</published>
    <updated>2007-11-05T00:51:47Z</updated>
    <category term="Projects"/>
    <category term="Ruby on Rails"/>
    <link href="http://obondar.com/2007/11/2/brainstorm-tool" rel="alternate" type="text/html"/>
    <title>Brainstorm tool</title>
<content type="html">
            &lt;p&gt;The first version of  &lt;a href='http://dostorm.com/'&gt;brainstorm application&lt;/a&gt; to get right solutions is online. I do not have the name for it now. The challenge is that there are many way to use this application, you can find ideas, solutions, questions. How to give name for all of them?
Initially I thought about application for asking questions, but while working on it, I found that there are many other possibilities. 
&lt;/p&gt;
&lt;p&gt;
So, what is ready? Now you can:
&lt;ul&gt;
&lt;li&gt;register
&lt;li&gt;create new brainstorm round
&lt;li&gt;enter suggestions, issues, questions, ideas, whatever it is
&lt;li&gt;edit suggestions
&lt;li&gt;select suggestion that is really important
&lt;li&gt;sort selected suggestions 
&lt;li&gt;edit name of round
&lt;li&gt;browse all rounds
&lt;li&gt;close round, so you stop with adding new suggestions
&lt;/ul&gt;
In short time I am planning to add:
&lt;ul&gt;
&lt;li&gt;Sharing
&lt;li&gt;Send round to email
&lt;li&gt;Invite friend to brainstorm round
&lt;li&gt;Start new round from selected suggestion
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href='http://dostorm.com/'&gt;Do storm!&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Please, write a word, comments or suggestion about application.
Thank you!
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-10-30:13</id>
    <published>2007-10-30T18:38:00Z</published>
    <updated>2007-12-12T18:50:00Z</updated>
    <link href="http://obondar.com/2007/10/30/undefined-method-assign_variables_from_controller" rel="alternate" type="text/html"/>
    <title>UNDEFINED METHOD 'ASSIGN_VARIABLES_FROM_CONTROLLER'</title>
<content type="html">
            &lt;code&gt;
Undefined method 'assign_variables_from_controller' message can appear when in controller you operate with instance variable @template.
&lt;/code&gt;

&lt;p&gt;

To avoid such message in your controller try to rename instance variable @template in your method to something other, @tmpl for example. 
&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://obondar.com/">
    <author>
      <name>obondar</name>
    </author>
    <id>tag:obondar.com,2007-10-28:14</id>
    <published>2007-10-28T18:48:00Z</published>
    <updated>2007-12-12T18:51:02Z</updated>
    <link href="http://obondar.com/2007/10/28/how-to-delete-file-to-recycle-bin-using-win32api" rel="alternate" type="text/html"/>
    <title>HOW TO DELETE FILE TO RECYCLE BIN USING WIN32API</title>
<content type="html">
            &lt;p&gt;
In current project there is situation when file should not be just deleted but deleted to Recycle Bin. It is possible to do this by executing &lt;a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shfileoperation.asp'&gt;SHFileOperation&lt;/a&gt;. The main problem is how to do this from ruby. This example shows how to execute external method with passing structure as a parameter.
&lt;/p&gt;
&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;35&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;45&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;require &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;dl/import&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;dl/struct&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;module&lt;/span&gt; &lt;span class='cl'&gt;User32&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      extend &lt;span class='co'&gt;DL&lt;/span&gt;::&lt;span class='co'&gt;Importable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;BOOL&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;int&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;UINT&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;unsigned int&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;PVOID&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;void *&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LONG&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;long&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;HWND&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;void *&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPCTSTR&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;char *&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPVOID&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;void *&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPCTSTR&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;char *&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      typealias &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;FILEOP_FLAGS&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;long&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;    &lt;span class='co'&gt;SHFileOperation&lt;/span&gt; = struct [&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;HWND hwnd&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;UINT wFunc&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPCTSTR pFrom&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPCTSTR pTo&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;FILEOP_FLAGS fFlags&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;BOOL fAnyOperationsAborted&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPVOID hNameMappings&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;LPCTSTR lpszProgressTitle&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    ]&lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;    dlload &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;shell32.dll&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    extern &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;BOOL SHFileOperation(PVOID)&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='co'&gt;FO_DELETE&lt;/span&gt;          = &lt;span class='i'&gt;3&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='co'&gt;FOF_ALLOWUNDO&lt;/span&gt;      = &lt;span class='i'&gt;64&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='co'&gt;FOF_NOCONFIRMATION&lt;/span&gt; = &lt;span class='i'&gt;16&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;        &lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='pc'&gt;self&lt;/span&gt;.trash_file(file)&lt;tt&gt;
&lt;/tt&gt;                file_info = &lt;span class='co'&gt;User32&lt;/span&gt;::&lt;span class='co'&gt;SHFileOperation&lt;/span&gt;::malloc&lt;tt&gt;
&lt;/tt&gt;                file_info.wFunc = &lt;span class='co'&gt;FO_DELETE&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                file_info.pFrom = file&lt;tt&gt;
&lt;/tt&gt;                file_info.pTo = file&lt;tt&gt;
&lt;/tt&gt;                file_info.fFlags = &lt;span class='co'&gt;FOF_ALLOWUNDO&lt;/span&gt; | &lt;span class='co'&gt;FOF_NOCONFIRMATION&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                file_info.wFunc = &lt;span class='co'&gt;FO_DELETE&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                puts file_info.pFrom&lt;tt&gt;
&lt;/tt&gt;                &lt;span class='r'&gt;if&lt;/span&gt; &lt;span class='co'&gt;File&lt;/span&gt;.readable?(file)&lt;tt&gt;
&lt;/tt&gt;                        sHFileOperation(file_info.to_ptr)&lt;tt&gt;
&lt;/tt&gt;                &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
</feed>
