class Graffable::App
Private Instance Methods
assert_group(group_name)
click to toggle source
# File lib/graffable/app.rb, line 217 def assert_group(group_name) group = @groups.detect { |g| group_name == g[:name] } halt 404, "Report group not found: #{group_name}" unless group group end
assert_report(group, report_name)
click to toggle source
# File lib/graffable/app.rb, line 223 def assert_report(group, report_name) reports = @db[:reports].where( group_id: group[:id] ).all report = reports.detect { |r| report_name == r[:name] } halt 404, "Report not found: #{report_name}" unless report report end
redirect_with_warning(path, message)
click to toggle source
# File lib/graffable/app.rb, line 230 def redirect_with_warning(path, message) flash[:warning] = message redirect to(path) end
return_csv( dataset, params = {} )
click to toggle source
# File lib/graffable/app.rb, line 235 def return_csv( dataset, params = {} ) defaults = { max: -1 } opts = defaults.merge params data = [ %w( date label value ).to_csv ] values = {} dataset.each do |row| date = %i( year month day hour ).collect { |k| row[k] }.compact.join('-') label = row[:label] || '' value = row[:value].to_i values[date] ||= {} values[date][label] = value end values = values.sort.reverse.slice( 0 .. opts[:max] - 1 ).reverse if opts[:max] > - 1 values.each do |tuple| date = tuple.first pairs = tuple.last pairs.each_pair do |label, value| data << [ date, label, value ].to_csv end end content_type :text return data.join end
return_json( dataset, params = {} )
click to toggle source
# File lib/graffable/app.rb, line 263 def return_json( dataset, params = {} ) defaults = { max: -1 } opts = defaults.merge params data = {} date_mapping = {} values = {} dataset.each do |row| date = %i( year month day hour ).collect { |k| row[k] }.compact.join('-') label = row[:label] || '' value = row[:value].to_i date_mapping[date] = opts[:date_formatter].call row[:year], row[:month], row[:day], row[:hour] unless date_mapping.key?(date) values[date] ||= {} values[date][label] = value end values = values.sort.reverse.slice( 0 .. opts[:max] - 1 ).reverse if opts[:max] > - 1 values.each do |tuple| date = date_mapping[ tuple.first ] pairs = tuple.last pairs.each_pair do |label, value| unless data.key?(label) data[label] = { data: [], total: 0 } data[label][:label] = label unless label.empty? end data[label][:data].push [ date, value ] data[label][:total] = data[label][:total] + value data[label][:label] = "#{label} (#{ data[label][:total] })" unless label.empty? end end content_type :json return { data: data.values }.to_json end