tbpgr/tbpgr_utils

View on GitHub
lib/open_classes/numeric/to_digit_html_table.rb

Summary

Maintainability
A
35 mins
Test Coverage
# encoding: utf-8

# Numeric
class Numeric
  # return is digit html table
  #
  # ==== Examples
  #
  # 255 to 256 case
  #
  #   Numeric.to_digit_html_table(255, 256)
  #
  # result
  #
  #   <table>
  #     <tr>
  #       <th>10digit</th>
  #       <th>2digit</th>
  #       <th>8digit</th>
  #       <th>16digit</th>
  #     </tr>
  #     <tr>
  #       <td>255</td>
  #       <td>0000000011111111</td>
  #       <td>377</td>
  #       <td>00ff</td>
  #     </tr>
  #     <tr>
  #       <td>256</td>
  #       <td>0000000100000000</td>
  #       <td>400</td>
  #       <td>0100</td>
  #     </tr>
  #   </table>
  #
  def self.to_digit_html_table(from = 1, to = 10)
    ret = []
    binary_size = to.to_s(2).size - 1
    binary_pad = (binary_size / 8 + 1) * 8
    oct_size = to.to_s(8).size
    hex_size = to.to_s(16).size - 1
    hex_pad = (hex_size / 4 + 1) * 4
    ret << "<table>\n  <tr>\n    <th>10digit</th>\n    <th>2digit</th>\n    <th>8digit</th>\n    <th>16digit</th>\n  </tr>"
    (from..to).each { |i|ret << "  <tr>\n    <td>#{i}</td>\n    <td>#{i.to_s(2).rjust(binary_pad, '0')}</td>\n    <td>#{i.to_s(8).rjust(oct_size, '0')}</td>\n    <td>#{i.to_s(16).rjust(hex_pad, '0')}</td>\n  </tr>" }
    ret.join("\n") + "\n</table>\n"
  end
end