Skip to content

DSL for creating clean CSV, XLSX, and PDF reports in Ruby. Uses xlsx_writer, prawn and pdftk internally.

License

Notifications You must be signed in to change notification settings

seamusabshere/report

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Report

DSL for creating clean CSV, XLSX, and PDF reports in Ruby.

Extracted from Brighter Planet's corporate reporting system.

Usage

class FleetReport < Report
  table 'Cars' do
    head do
      row 'Report type', :description
      row 'Batchfile', :batchfile
    end
    body do
      rows :vehicles, ['car']
      column 'Vehicle ID', :id
      column 'CO2 score', :carbon
      column 'CO2 units', 'kg'
      column 'Fuel grade'
      column 'Fuel volume'
      column 'Odometer'
      column 'City'
      column 'State'
      column 'Postal code', :zip_code
      column 'Country'
      column 'Methodology'
    end
  end

  table 'Trucks' do
    head do
      row 'Report type', :description
      row 'Batchfile', :batchfile
    end
    body do
      rows :vehicles, ['truck']
      column 'Vehicle ID', :id
      column 'CO2 score', :carbon
      column 'CO2 units', 'kg'
      column 'Fuel grade'
      column 'Fuel volume'
      column 'Odometer'
      column 'City'
      column 'State'
      column 'Postal code', :zip_code
      column 'Country'
      column 'Methodology'
    end
  end

  format_pdf(
    :document => { :page_layout => :landscape },
    :head => {:width => (10*72)},
    :body => {:width => (10*72), :header => true}
  )

  format_xlsx do |xlsx|
    xlsx.header.right.contents = 'Corporate Reporting Program'
    xlsx.page_setup.top = 1.5
    xlsx.page_setup.header = 0
    xlsx.page_setup.footer = 0
  end

  attr_reader :batchfile

  def initialize(batchfile)
    @batchfile = batchfile
  end

  def description
    'Fleet sustainability report'
  end

  def vehicles(type)
    @batchfile.vehicles.where(:type => type)
  end
end

b = Batchfile.first
fr = FleetReport.new(b)
fr.pdf.path
fr.csv.paths # note one file per table
fr.xlsx.path

Real-world usage

Brighter Planet logo

We use report for corporate reporting products at Brighter Planet and in production at

Inspirations

dynamicreports

http://dynamicreports.rubyforge.org/

class OrdersReport < DynamicReports::Report
  title "Orders Report"
  subtitle "All orders recorded in database"
  columns :total, :created_at

  chart :total_vs_quantity do
    columns :total, :quantity
    label_column "created_at"
  end
end

# in the controller
def orders
  @orders = Order.find(:all, :limit => 25)
  render :text => OrdersReport.on(@orders).to_html, :layout => "application"
end

reportbuilder

http://ruby-statsample.rubyforge.org/reportbuilder/

require "reportbuilder"    
rb=ReportBuilder.new do
  text("2")
  section(:name=>"Section 1") do
    table(:name=>"Table", :header=>%w{id name}) do
      row([1,"John"])
    end
  end
  preformatted("Another Text")
end
rb.name="Html output"
puts rb.to_html

Copyright

Copyright 2012 Brighter Planet, Inc.

About

DSL for creating clean CSV, XLSX, and PDF reports in Ruby. Uses xlsx_writer, prawn and pdftk internally.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages