<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: params code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 04:29:42 GMT</pubDate>
    <description>DZone Snippets: params code</description>
    <item>
      <title>Testing for nil or empty params in Ruby on Rails</title>
      <link>http://snippets.dzone.com/posts/show/5437</link>
      <description>I find myself doing these 4 things a lot:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if params[:object] &amp;&amp; !params[:object].empty&lt;br /&gt;if params[:object] &amp;&amp; params[:object] == value&lt;br /&gt;if params[:object][:attribute] &amp;&amp; !params[:object][:attribute].empty&lt;br /&gt;if params[:object][:attribute] &amp;&amp; params[:object][:attribute] == value&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I put params_check() in my application.rb and it allows me to do this instead:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if params_check(:object)&lt;br /&gt;if params_check(:object, value)&lt;br /&gt;if params_check([:object, :attribute])&lt;br /&gt;if params_check([:object, :attribute], value)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  def params_check(*args)&lt;br /&gt;    if args.length == 1&lt;br /&gt;      if args[0].class == Array&lt;br /&gt;        if params[args[0][0]][args[0][1]] &amp;&amp; !params[args[0][0]][args[0][1]].empty?&lt;br /&gt;          true&lt;br /&gt;        end&lt;br /&gt;      else        &lt;br /&gt;        if params[args[0]] &amp;&amp; !params[args[0]].empty?&lt;br /&gt;          true&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;    elsif args.length == 2&lt;br /&gt;      if args[0].class == Array&lt;br /&gt;        if params[args[0][0]][args[0][1]] &amp;&amp; params[args[0][0]][args[0][1]] == args[1]&lt;br /&gt;          true&lt;br /&gt;        end&lt;br /&gt;      else&lt;br /&gt;        if params[args[0]] &amp;&amp; params[args[0]] == args[1]&lt;br /&gt;          true&lt;br /&gt;        end&lt;br /&gt;      end  &lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I stole this off another snippet and modified it to add more conditions. Thanks to whoever it was.</description>
      <pubDate>Mon, 28 Apr 2008 20:00:11 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5437</guid>
      <author>galatians (Jonathan)</author>
    </item>
    <item>
      <title>Unify the handling of XML records</title>
      <link>http://snippets.dzone.com/posts/show/4833</link>
      <description>This Ruby code creates, updates or deletes an XML record, using a hash, record handling objects, and XML to invoke the correct method.  &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#file: recordx_handler.rb&lt;br /&gt;require 'recordx'&lt;br /&gt;&lt;br /&gt;class RecordX_Update &lt; RecordX&lt;br /&gt;  def call(params)&lt;br /&gt;    #todo: write the code to read the xml parameter string&lt;br /&gt;    update_record(h)&lt;br /&gt;    save_file &lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class RecordX_Create &lt; RecordX&lt;br /&gt;  def call(params)&lt;br /&gt;    #todo: write the code to read the xml parameter string  &lt;br /&gt;    create_record(h)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class RecordX_Delete &lt; RecordX&lt;br /&gt;  def call(params)&lt;br /&gt;    doc = Document.new(params)&lt;br /&gt;    node = doc.root.elements["param[@var='id']"]&lt;br /&gt;    puts node&lt;br /&gt;    id = node.attributes.get_attribute('val').to_s&lt;br /&gt;    delete_record(id)&lt;br /&gt;    puts 'deleted record ' + id&lt;br /&gt;    save_file&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class RecordX_handler&lt;br /&gt;  def invoke(method, params)&lt;br /&gt;    h = Hash.new&lt;br /&gt;    h["create"] = RecordX_Create.new&lt;br /&gt;    h["update"] = RecordX_Update.new&lt;br /&gt;    h["delete"] = RecordX_Delete.new&lt;br /&gt;    h[method].call(params)&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;  xml_method = "&lt;method name='delete'&gt;&lt;params&gt;&lt;param var='id' val='17648' /&gt;&lt;/params&gt;&lt;/method&gt;"&lt;br /&gt;  doc = Document.new(xml_method)&lt;br /&gt;  method = doc.root.attributes.get_attribute('name').to_s&lt;br /&gt;  params = doc.root.elements['params'].to_s&lt;br /&gt;&lt;br /&gt;  rh = RecordX_handler.new&lt;br /&gt;  rh.invoke(method, params)&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This code is intended to be called by a Ruby CGI script which can simply relay the cgi post argument to the recordx_handler object.&lt;br /&gt;</description>
      <pubDate>Sun, 02 Dec 2007 13:50:18 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4833</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Hash Tricks</title>
      <link>http://snippets.dzone.com/posts/show/2178</link>
      <description>From: http://blog.caboo.se/articles/2006/06/11/stupid-hash-tricks&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Hash&lt;br /&gt;&lt;br /&gt;  # lets through the keys in the argument&lt;br /&gt;  # &gt;&gt; {:one =&gt; 1, :two =&gt; 2, :three =&gt; 3}.pass(:one)&lt;br /&gt;  # =&gt; {:one=&gt;1}&lt;br /&gt;  def pass(*keys)&lt;br /&gt;    tmp = self.clone&lt;br /&gt;    tmp.delete_if {|k,v| ! keys.include?(k) }&lt;br /&gt;    tmp&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # blocks the keys in the arguments&lt;br /&gt;  # &gt;&gt; {:one =&gt; 1, :two =&gt; 2, :three =&gt; 3}.block(:one)&lt;br /&gt;  # =&gt; {:two=&gt;2, :three=&gt;3}&lt;br /&gt;  def block(*keys)&lt;br /&gt;    tmp = self.clone&lt;br /&gt;    tmp.delete_if {|k,v| keys.include?(k) }&lt;br /&gt;    tmp&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In case you don&#8217;t already see the utility of this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def some_action&lt;br /&gt;    # some script kiddie also passed in :bee, which we don't want tampered with _here_.&lt;br /&gt;    @model = Model.create(params.pass(:foo, :bar))&lt;br /&gt;  end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;or those cases where you don&#8217;t want to let everything through and don&#8217;t want to resort to attr_protected or attr_accessible</description>
      <pubDate>Tue, 13 Jun 2006 02:17:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2178</guid>
      <author>MattScilipoti (Matt Scilipoti)</author>
    </item>
  </channel>
</rss>
