<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml'>
  <head>
    <title>Code coverage for Sinatra-param</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <script src='./assets/0.7.1/application.js' type='text/javascript'></script>    
    <link href='./assets/0.7.1/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
    <link rel="shortcut icon" type="image/png" href="./assets/0.7.1/favicon_green.png" />
    <link rel="icon" type="image/png" href="./assets/0.7.1/favicon.png" />
  </head>
  
  <body>
    <div id="loading">
      <img src="./assets/0.7.1/loading.gif" alt="loading"/>
    </div>
    <div id="wrapper" style="display:none;">
      <div class="timestamp">Generated <abbr class="timeago" title="2013-12-02T12:12:13-08:00">2013-12-02T12:12:13-08:00</abbr></div>
      <ul class="group_tabs"></ul>

      <div id="content">
        <div class="file_list_container" id="AllFiles">
  <h2>
    <span class="group_name">All Files</span>
    (<span class="covered_percent"><span class="green">100.0%</span></span>
     covered at
     <span class="covered_strength">
       <span class="green">
         18.4
       </span>
    </span> hits/line)
  </h2>
  <a name="AllFiles"></a>
  <div>
    <b>1</b> files in total.
    <b>64</b> relevant lines. 
    <span class="green"><b>64</b> lines covered</span> and
    <span class="red"><b>0</b> lines missed </span>
  </div>
  <table class="file_list">
    <thead>
      <tr>
        <th>File</th>
        <th>% covered</th>
        <th>Lines</th>
        <th>Relevant Lines</th>
        <th>Lines covered</th>
        <th>Lines missed</th>
        <th>Avg. Hits / Line</th>
      </tr>
    </thead>
    <tbody>
      
      <tr>
        <td class="strong"><a href="#0f7926ededdfd8418773c107837b6dc4182659b8" class="src_link" title="lib/sinatra/param.rb">lib/sinatra/param.rb</a></td>
        <td class="green strong">100.0 %</td>
        <td>112</td>
        <td>64</td>
        <td>64</td>
        <td>0</td>
        <td>18.4</td>
      </tr>
      
    </tbody>
  </table>
</div>


        
      </div>
    
      <div id="footer">
        Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.7.1 
        and simplecov-html v0.7.1<br/>
        using RSpec
      </div>
    
      <div class="source_files">
      
        <div class="source_table" id="0f7926ededdfd8418773c107837b6dc4182659b8">
  <div class="header">
    <h3>lib/sinatra/param.rb</h3>
    <h4><span class="green">100.0 %</span> covered</h4>
    <div>
      <b>64</b> relevant lines. 
      <span class="green"><b>64</b> lines covered</span> and
      <span class="red"><b>0</b> lines missed.</span>
    </div>
  </div>
  
  <pre>
    <ol>
      
        <li class="covered" data-hits="1" data-linenumber="1">
          <span class="hits">1</span>
          
          <code class="ruby">require &#39;sinatra/base&#39;</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="2">
          <span class="hits">1</span>
          
          <code class="ruby">require &#39;sinatra/param/version&#39;</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="3">
          <span class="hits">1</span>
          
          <code class="ruby">require &#39;time&#39;</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="4">
          <span class="hits">1</span>
          
          <code class="ruby">require &#39;date&#39;</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="5">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="6">
          <span class="hits">1</span>
          
          <code class="ruby">module Sinatra</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="7">
          <span class="hits">1</span>
          
          <code class="ruby">  module Param</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="8">
          <span class="hits">1</span>
          
          <code class="ruby">    Boolean = :boolean</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="9">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="10">
          <span class="hits">1</span>
          
          <code class="ruby">    class InvalidParameterError &lt; StandardError; end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="11">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="12">
          <span class="hits">1</span>
          
          <code class="ruby">    def param(name, type, options = {})</code>
        </li>
      
        <li class="covered" data-hits="76" data-linenumber="13">
          <span class="hits">76</span>
          
          <code class="ruby">      name = name.to_s</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="14">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="76" data-linenumber="15">
          <span class="hits">76</span>
          
          <code class="ruby">      return unless params.member?(name) or present?(options[:default]) or options[:required]</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="16">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="17">
          <span class="hits">67</span>
          
          <code class="ruby">      begin</code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="18">
          <span class="hits">67</span>
          
          <code class="ruby">        params[name] = coerce(params[name], type, options)</code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="19">
          <span class="hits">67</span>
          
          <code class="ruby">        params[name] = options[:default] if params[name].nil? and options[:default]</code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="20">
          <span class="hits">67</span>
          
          <code class="ruby">        params[name] = options[:transform].to_proc.call(params[name]) if options[:transform]</code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="21">
          <span class="hits">67</span>
          
          <code class="ruby">        validate!(params[name], options)</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="22">
          
          
          <code class="ruby">      rescue</code>
        </li>
      
        <li class="covered" data-hits="13" data-linenumber="23">
          <span class="hits">13</span>
          
          <code class="ruby">        error = &quot;Invalid parameter, #{name}&quot;</code>
        </li>
      
        <li class="covered" data-hits="13" data-linenumber="24">
          <span class="hits">13</span>
          
          <code class="ruby">        if content_type and content_type.match(mime_type(:json))</code>
        </li>
      
        <li class="covered" data-hits="13" data-linenumber="25">
          <span class="hits">13</span>
          
          <code class="ruby">          error = {message: error}.to_json</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="26">
          
          
          <code class="ruby">        end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="27">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="13" data-linenumber="28">
          <span class="hits">13</span>
          
          <code class="ruby">        halt 400, error</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="29">
          
          
          <code class="ruby">      end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="30">
          
          
          <code class="ruby">    end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="31">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="32">
          <span class="hits">1</span>
          
          <code class="ruby">    def one_of(*names)</code>
        </li>
      
        <li class="covered" data-hits="6" data-linenumber="33">
          <span class="hits">6</span>
          
          <code class="ruby">      count = 0</code>
        </li>
      
        <li class="covered" data-hits="6" data-linenumber="34">
          <span class="hits">6</span>
          
          <code class="ruby">      names.each do |name|</code>
        </li>
      
        <li class="covered" data-hits="16" data-linenumber="35">
          <span class="hits">16</span>
          
          <code class="ruby">        if params[name] and present?(params[name])</code>
        </li>
      
        <li class="covered" data-hits="9" data-linenumber="36">
          <span class="hits">9</span>
          
          <code class="ruby">          count += 1</code>
        </li>
      
        <li class="covered" data-hits="9" data-linenumber="37">
          <span class="hits">9</span>
          
          <code class="ruby">          next unless count &gt; 1</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="38">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="3" data-linenumber="39">
          <span class="hits">3</span>
          
          <code class="ruby">          error = &quot;Parameters #{names.join(&#39;, &#39;)} are mutually exclusive&quot;</code>
        </li>
      
        <li class="covered" data-hits="3" data-linenumber="40">
          <span class="hits">3</span>
          
          <code class="ruby">          if content_type and content_type.match(mime_type(:json))</code>
        </li>
      
        <li class="covered" data-hits="3" data-linenumber="41">
          <span class="hits">3</span>
          
          <code class="ruby">            error = {message: error}.to_json</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="42">
          
          
          <code class="ruby">          end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="43">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="3" data-linenumber="44">
          <span class="hits">3</span>
          
          <code class="ruby">          halt 400, error</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="45">
          
          
          <code class="ruby">        end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="46">
          
          
          <code class="ruby">      end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="47">
          
          
          <code class="ruby">    end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="48">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="49">
          <span class="hits">1</span>
          
          <code class="ruby">    private</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="50">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="51">
          <span class="hits">1</span>
          
          <code class="ruby">    def coerce(param, type, options = {})</code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="52">
          <span class="hits">67</span>
          
          <code class="ruby">      return nil if param.nil?</code>
        </li>
      
        <li class="covered" data-hits="64" data-linenumber="53">
          <span class="hits">64</span>
          
          <code class="ruby">      return param if (param.is_a?(type) rescue false)</code>
        </li>
      
        <li class="covered" data-hits="39" data-linenumber="54">
          <span class="hits">39</span>
          
          <code class="ruby">      return Integer(param) if type == Integer</code>
        </li>
      
        <li class="covered" data-hits="30" data-linenumber="55">
          <span class="hits">30</span>
          
          <code class="ruby">      return Float(param) if type == Float</code>
        </li>
      
        <li class="covered" data-hits="29" data-linenumber="56">
          <span class="hits">29</span>
          
          <code class="ruby">      return String(param) if type == String</code>
        </li>
      
        <li class="covered" data-hits="28" data-linenumber="57">
          <span class="hits">28</span>
          
          <code class="ruby">      return Time.parse(param) if type == Time</code>
        </li>
      
        <li class="covered" data-hits="27" data-linenumber="58">
          <span class="hits">27</span>
          
          <code class="ruby">      return Date.parse(param) if type == Date</code>
        </li>
      
        <li class="covered" data-hits="26" data-linenumber="59">
          <span class="hits">26</span>
          
          <code class="ruby">      return DateTime.parse(param) if type == DateTime</code>
        </li>
      
        <li class="covered" data-hits="25" data-linenumber="60">
          <span class="hits">25</span>
          
          <code class="ruby">      return Array(param.split(options[:delimiter] || &quot;,&quot;)) if type == Array</code>
        </li>
      
        <li class="covered" data-hits="25" data-linenumber="61">
          <span class="hits">25</span>
          
          <code class="ruby">      return Hash[param.split(options[:delimiter] || &quot;,&quot;).map{|c| c.split(options[:separator] || &quot;:&quot;)}] if type == Hash</code>
        </li>
      
        <li class="covered" data-hits="21" data-linenumber="62">
          <span class="hits">21</span>
          
          <code class="ruby">      return (/(false|f|no|n|0)$/i === param.to_s ? false : (/(true|t|yes|y|1)$/i === param.to_s ? true : nil)) if type == TrueClass || type == FalseClass || type == Boolean</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="63">
          
          
          <code class="ruby">      return nil</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="64">
          
          
          <code class="ruby">    end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="65">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="66">
          <span class="hits">1</span>
          
          <code class="ruby">    def validate!(param, options)</code>
        </li>
      
        <li class="covered" data-hits="67" data-linenumber="67">
          <span class="hits">67</span>
          
          <code class="ruby">      options.each do |key, value|</code>
        </li>
      
        <li class="covered" data-hits="38" data-linenumber="68">
          <span class="hits">38</span>
          
          <code class="ruby">        case key</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="69">
          
          
          <code class="ruby">        when :required</code>
        </li>
      
        <li class="covered" data-hits="3" data-linenumber="70">
          <span class="hits">3</span>
          
          <code class="ruby">          raise InvalidParameterError if value &amp;&amp; param.nil?</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="71">
          
          
          <code class="ruby">        when :blank</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="72">
          
          
          <code class="ruby">          raise InvalidParameterError if !value &amp;&amp; case param</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="73">
          
          
          <code class="ruby">              when String</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="74">
          <span class="hits">1</span>
          
          <code class="ruby">                !(/\S/ === param)</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="75">
          
          
          <code class="ruby">              when Array, Hash</code>
        </li>
      
        <li class="covered" data-hits="2" data-linenumber="76">
          <span class="hits">2</span>
          
          <code class="ruby">                param.empty?</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="77">
          
          
          <code class="ruby">              else</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="78">
          <span class="hits">1</span>
          
          <code class="ruby">                param.nil?</code>
        </li>
      
        <li class="covered" data-hits="5" data-linenumber="79">
          <span class="hits">5</span>
          
          <code class="ruby">            end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="80">
          
          
          <code class="ruby">        when :is</code>
        </li>
      
        <li class="covered" data-hits="2" data-linenumber="81">
          <span class="hits">2</span>
          
          <code class="ruby">          raise InvalidParameterError unless value === param</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="82">
          
          
          <code class="ruby">        when :in, :within, :range</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="83">
          
          
          <code class="ruby">          raise InvalidParameterError unless param.nil? || case value</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="84">
          
          
          <code class="ruby">              when Range</code>
        </li>
      
        <li class="covered" data-hits="4" data-linenumber="85">
          <span class="hits">4</span>
          
          <code class="ruby">                value.include?(param)</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="86">
          
          
          <code class="ruby">              else</code>
        </li>
      
        <li class="covered" data-hits="2" data-linenumber="87">
          <span class="hits">2</span>
          
          <code class="ruby">                Array(value).include?(param)</code>
        </li>
      
        <li class="covered" data-hits="6" data-linenumber="88">
          <span class="hits">6</span>
          
          <code class="ruby">              end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="89">
          
          
          <code class="ruby">        when :min</code>
        </li>
      
        <li class="covered" data-hits="2" data-linenumber="90">
          <span class="hits">2</span>
          
          <code class="ruby">          raise InvalidParameterError unless param.nil? || value &lt;= param</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="91">
          
          
          <code class="ruby">        when :max</code>
        </li>
      
        <li class="covered" data-hits="2" data-linenumber="92">
          <span class="hits">2</span>
          
          <code class="ruby">          raise InvalidParameterError unless param.nil? || value &gt;= param</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="93">
          
          
          <code class="ruby">        when :min_length</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="94">
          <span class="hits">1</span>
          
          <code class="ruby">          raise InvalidParameterError unless param.nil? || value &lt;= param.length</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="95">
          
          
          <code class="ruby">        when :max_length</code>
        </li>
      
        <li class="covered" data-hits="3" data-linenumber="96">
          <span class="hits">3</span>
          
          <code class="ruby">          raise InvalidParameterError unless param.nil? || value &gt;= param.length</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="97">
          
          
          <code class="ruby">        end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="98">
          
          
          <code class="ruby">      end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="99">
          
          
          <code class="ruby">    end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="100">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="101">
          
          
          <code class="ruby">    # ActiveSupport #present? and #blank? without patching Object</code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="102">
          <span class="hits">1</span>
          
          <code class="ruby">    def present?(object)</code>
        </li>
      
        <li class="covered" data-hits="21" data-linenumber="103">
          <span class="hits">21</span>
          
          <code class="ruby">      !blank?(object)</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="104">
          
          
          <code class="ruby">    end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="105">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="106">
          <span class="hits">1</span>
          
          <code class="ruby">    def blank?(object)</code>
        </li>
      
        <li class="covered" data-hits="21" data-linenumber="107">
          <span class="hits">21</span>
          
          <code class="ruby">      object.respond_to?(:empty?) ? object.empty? : !object</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="108">
          
          
          <code class="ruby">    end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="109">
          
          
          <code class="ruby">  end</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="110">
          
          
          <code class="ruby"></code>
        </li>
      
        <li class="covered" data-hits="1" data-linenumber="111">
          <span class="hits">1</span>
          
          <code class="ruby">  helpers Param</code>
        </li>
      
        <li class="never" data-hits="" data-linenumber="112">
          
          
          <code class="ruby">end</code>
        </li>
      
    </ol>
  </pre>
</div>
      
      </div>
    </div>
  </body>
</html>