module Sinatra::ChassisExtraHelpers

Public Instance Methods

active(path) click to toggle source

Public: Compares a string to the request path.

path - String to compare against the request path

Exmaple

Requested URL: http://localhost:4567/hello/world
active('hello')
# => 'active'
active('goodbye')
# => ''

Returns a Sting: ‘active’ if there’s a match, ” if not.

# File lib/sinatra/chassis/helpers.rb, line 98
def active path
  path = Array[path] unless path.kind_of? Array
  match = false
  path.each { |p| match = true if request.path_info.include?(p) }
  'active' if match
end
alert() click to toggle source

Public: Displays an alert unless flash if nil. flash empties itself after the first request after it’s set. To use, set flash to a String.

Example

<%= alert %>

Returns a div with an id of ‘alert’ and containing the contents of flash, or if flash if nil, returns nothing.

# File lib/sinatra/chassis/helpers.rb, line 114
def alert
  "<div id='alert'>#{flash[:alert]}</div>" if flash[:alert]
end
date_select(date, options = {}) click to toggle source

Public: Converts a Date to select form fields. All generated fields have classes of month_select, day_select, or year_select. None of the options are required, but they are all recommended.

select_name - name attr for fields, appended with '_day', '_month', or '_year'
  select_id - id attr for fields, appended with '_day', '_month', or '_year'

select_class - class attr for fields, appended with ‘_day’, ‘_month’, or ‘_year’

start_year - first year to use in year select (default: 3 years ago)
  end_year - last year to use in year select (default: 3 years from now)
 day_first - Boolean to show the day before the month (default: false)
month_name - Boolean to display month names (default: false)

Example

date_select(
  DateTime.now
  select_class: 'your_class',
  select_id: 'your_id',
  select_name: 'your_name',
  start_year: 1999,
  end_year: 2021,
  day_first: true,
  month_name: false
)

Returns select fields as a String.

# File lib/sinatra/chassis/helpers.rb, line 156
def date_select date, options = {}
  options[:select_name]  ||= ''
  options[:select_id]    ||= ''
  options[:select_class] ||= ''
  
  unless options[:select_id] == ''
    day_id   = " id='#{options[:select_id]}_day'"
    month_id = " id='#{options[:select_id]}_month'"
    year_id  = " id='#{options[:select_id]}_year'"
  else
    day_id   = ''
    month_id = ''
    year_id  = ''
  end
  
  unless options[:select_name] == ''
    day_name   = " name='#{options[:select_name]}_day'"
    month_name = " name='#{options[:select_name]}_month'"
    year_name  = " name='#{options[:select_name]}_year'"
  else
    day_name   = ''
    month_name = ''
    year_name  = ''
  end
  
  options[:day_first]    ||= false
  options[:start_year]   ||= Time.now.strftime('%Y').to_i - 3
  options[:end_year]     ||= Time.now.strftime('%Y').to_i + 3
  options[:month_name]   ||= false
  
  options[:start_year] = date.strftime('%Y').to_i if date.strftime('%Y').to_i < options[:start_year]
  options[:end_year]   = date.strftime('%Y').to_i if date.strftime('%Y').to_i > options[:end_year]
  
  months = [
    { num: '01', name: 'January'   },
    { num: '02', name: 'February'  },
    { num: '03', name: 'March'     },
    { num: '04', name: 'April'     },
    { num: '05', name: 'May'       },
    { num: '06', name: 'June'      },
    { num: '07', name: 'July'      },
    { num: '08', name: 'August'    },
    { num: '09', name: 'September' },
    { num: '10', name: 'October'   },
    { num: '11', name: 'November'  },
    { num: '12', name: 'December'  }
  ]
  
  day = "<select class='day_select #{options[:select_class]}'#{day_id}#{day_name}'>"
    (1..31).each do |d|
      day << "<option value='#{d}' #{'selected' if d == date.strftime('%d').to_i}>#{d}</option>"
    end
  day << "</select>"
  
  month = "<select class='month_select #{options[:select_class]}'#{month_id}#{month_name}>"
    months.each do |m|
      options[:month_name] ? d = m[:name] : d = m[:num]
      month << "<option value='#{m[:num]}' #{'selected' if m[:num] == date.strftime('%m')}>#{d}</option>"
    end    
  month << "</select>"
  
  year = "<select class='year_select #{options[:select_class]}'#{year_id}#{year_name}>"
    (options[:start_year]..options[:end_year]).each do |y|
      year << "<option value='#{y}' #{'selected' if y == date.strftime('%Y').to_i}>#{y}</option>"
    end
  year << "</select>"
  
  if options[:day_first]
    return "#{day} #{month} #{year}"
  else
    return "#{month} #{day} #{year}"
  end
end
hidden() click to toggle source

Public: Hides an HTML element. Useful in combination with inline true/false comparators.

Example

<div style="<%= hidden unless session[:user] %>">Hello, world!</div>

Returns a String of CSS.

# File lib/sinatra/chassis/helpers.rb, line 126
def hidden
  'display: none;'
end
numeric?(x) click to toggle source

Public: Checks if the argument can be evaluated numerically.

Example

numeric?('1')
# => true

numeric?('hello')
# => false

Returns true/false.

# File lib/sinatra/chassis/helpers.rb, line 19
def numeric? x
  true if Float(x) rescue false
end
titleize(x) click to toggle source

Public: Uppercases the first letter of each word.

Example

titleize('hello world')
# => 'Hello World'

Returns a String.

# File lib/sinatra/chassis/helpers.rb, line 79
def titleize x
  title = ''
  x.to_s.split(' ').each { |s| title << s.capitalize + ' ' }
  title
end
truncate(x, options = {}) click to toggle source

Public: Truncates a String or Number.

         x - String or Number to truncate
word_count - Integer number of words to return if x is a String (default: 100)
end_string - String appended to the end of the returned String if
             the original x String is longer than word_count (default: '...')
   decimal - Integer number of maximum places after decimal if x is a Number (default: 1)

trailing_zeros - Boolean to decide if a returned Number should keep the

        trailing 0's as a String (default: false)
round - Boolean to decide if a number should be rounded (default: true)

Examples

truncate('Lorem ipsum dolor sit amet.', word_count: 3, end_string: '...')
# => 'Lorem ipsum dolor...'

truncate(1.234000, decimal: 1)
# => 1.2
truncate(1.234000, decimal: 5)
# => 1.234
truncate(1.234000, decimal: 5, trailing_zeros: true)
# => '1.23400'

Returns a String or Float.

# File lib/sinatra/chassis/helpers.rb, line 49
def truncate x, options = {}
  options[:word_count]     ||= 100
  options[:end_string]     ||= '...'
  options[:decimal]        ||= 2
  options[:trailing_zeros] ||= false
  options[:round]          ||= true
  
  if x.kind_of? String
    return if x == nil
    words = x.split()
    return words[0..(options[:word_count]-1)].join(' ') + (words.length > options[:word_count] ? options[:end_string] : '')
  elsif numeric? x
    if options[:round] == true
      number = "%.#{options[:decimal]}f" % x.round(options[:decimal])
    else
      number = "%.#{options[:decimal]}f" % x.to_f
    end
    number = number.to_f unless options[:trailing_zeros]
    return number
  end
end