# view helpers
module Sinatra::ViewHelpers
def pretty_hash(hash)
begin
Marshal::dump(hash)
h(hash.to_yaml).gsub(" ", " ")
rescue Exception => e # errors from Marshal or YAML
# Object couldn't be dumped, perhaps because of singleton methods -- this is the fallback
h(object.inspect)
end
end
# TODO: improve this
def number_to_human_size(number, precision = 2)
number = begin
Float(number)
rescue ArgumentError, TypeError
return number
end
case
when number.to_i == 1 then
"1 Byte"
when number < 1024 then
"%d Bytes" % number
when number < 1048576 then
"%.#{precision}f KB" % (number / 1024)
when number < 1073741824 then
"%.#{precision}f MB" % (number / 1048576)
when number < 1099511627776 then
"%.#{precision}f GB" % (number / 1073741824)
else
"%.#{precision}f TB" % (number / 1099511627776)
end.sub(/([0-9]\.\d*?)0+ /, '\1 ' ).sub(/\. /,' ')
rescue
nil
end
def text_field_tag(object, name, options = {})
value = ""
value = options.delete(:value) if options[:value]
value = object.send name if object && object.respond_to?(name)
attr = []
options.each do |key, val|
attr << "#{key}='#{val}'"
end
""
end
def submit_tag(name, value, options = {})
attr = []
options.each do |key, val|
attr << "#{key}='#{val}'"
end
""
end
def check_box_tag(object, name, options = {})
value = nil
value = options.delete(:value) if options[:value]
value = object.send name if object && object.respond_to?(name)
attr = []
options.each do |key, val|
attr << "#{key}='#{val}'"
end
""
end
def label_tag(object, name, label, options = {})
attr = []
options.each do |key, val|
attr << "#{key}='#{val}'"
end
""
end
def select_tag(object, name, options_array, options = {})
value = nil
value = options.delete(:value) if options[:value]
value = object.send name if object && object.respond_to?(name)
attr = []
options.each do |key, val|
attr << "#{key}='#{val}'"
end
select_tag = []
select_tag << ""
select_tag.join("\n")
end
end