class Thinreports::Report::Base

Attributes

internal[R]

@return [Thinreports::Report::Internal]

start_page_number[R]

@return [Integer]

Public Class Methods

create(options = {}, &block) click to toggle source

@param options (see initialize) @option options (see initialize) @yield [report] @yieldparam [Thinreports::Report::Base] report @return [Thinreports::Report::Base]

# File lib/thinreports/report/base.rb, line 15
def create(options = {}, &block)
  raise ArgumentError, '#create requires a block' unless block_given?

  report = new(options)
  call_block_in(report, &block)
  report.finalize

  report
end
generate(layout: nil, filename: nil, security: nil, report: {}, generator: {}, &block) click to toggle source

@param layout (see initialize) @param filename (see generate) @param security (see generate) @param [Hash] report ({}) DEPRECATED. Options for Report. @param [Hash] generator ({}) DEPRECATED. Options for Generator. @yield (see .create) @yieldparam (see .create) @return [String]

# File lib/thinreports/report/base.rb, line 33
def generate(layout: nil, filename: nil, security: nil, report: {}, generator: {}, &block)
  raise ArgumentError, '#generate requires a block' unless block_given?

  if report.any? || generator.any?
    warn '[DEPRECATION] :report and :generator argument has been deprecated. ' \
         'Use :layout and :filename, :security argument instead.'
  end

  layout ||= report[:layout]
  filename ||= generator[:filename]
  security ||= generator[:security]

  report = create(layout: layout, &block)
  report.generate(filename: filename, security: security)
end
new(options = {}) click to toggle source

@param [Hash] options @option options [String, nil] :layout (nil)

# File lib/thinreports/report/base.rb, line 70
def initialize(options = {})
  @internal = Report::Internal.new(self, options)
  @start_page_number = 1
end

Public Instance Methods

add_blank_page(options = {}) click to toggle source

@param [Hash] options @option options [Boolean] :count (true) @return [Thinreports::Report::BlankPage]

# File lib/thinreports/report/base.rb, line 133
def add_blank_page(options = {})
  internal.add_page(Report::BlankPage.new(options[:count]))
end
Also aliased as: blank_page
blank_page(options = {})
Alias for: add_blank_page
generate(filename: nil, security: nil) click to toggle source

@param [String] filename @param [Hash] security (see prawnpdf.org/api-docs/2.0/Prawn/Document/Security.html#encrypt_document-instance_method) @return [String] @example Generate PDF data

report.generate # => "%PDF-1.4...."

@example Create a PDF file

report.generate(filename: 'foo.pdf')
# File lib/thinreports/report/base.rb, line 156
def generate(filename: nil, security: nil)
  Thinreports::Generator::PDF.new(self, security: security).generate(filename)
end
layout(id = nil) click to toggle source

@param [Symbol, nil] id @return [Thinreports::Layout::Base]

# File lib/thinreports/report/base.rb, line 140
def layout(id = nil)
  if id
    internal.layout_registry[id] ||
      raise(Thinreports::Errors::UnknownLayoutId)
  else
    internal.default_layout
  end
end
list(id = nil, &block) click to toggle source

@see Thinreports::Core::Shape::Manager::Target#list

# File lib/thinreports/report/base.rb, line 161
def list(id = nil, &block)
  start_new_page if page.nil? || page.finalized?
  page.list(id, &block)
end
on_page_create(&block) click to toggle source

@yield [page] @yieldparam [Thinreports::Report::Page] page @example

report.on_page_create do |page|
  page.item(:header_title).value = 'Title'
end
# File lib/thinreports/report/base.rb, line 81
def on_page_create(&block)
  internal.page_create_handler = block
end
start_new_page(options = {}, &block) click to toggle source

@example

page = report.start_new_page

report.start_new_page do |page|
  page.item(:text).value = 'value'
end

report.use_layout 'foo.tlf', default: true
report.use_layout 'bar.tlf', id: :bar

report.start_new_page                   # Use 'foo.tlf'
report.start_new_page layout: :bar      # Use 'bar.tlf'
report.start_new_page layout: 'boo.tlf' # Use 'boo.tlf'

@param [Hash] options @option options [String, Symbol] :layout (nil) @option options [Boolean] :count (true) @yield [page] @yieldparam [Thinreports::Report::Page] page @return [Thinreports::Report::Page]

# File lib/thinreports/report/base.rb, line 121
def start_new_page(options = {}, &block)
  layout = internal.load_layout(options.delete(:layout))

  raise Thinreports::Errors::NoRegisteredLayoutFound unless layout

  page = internal.add_page(Report::Page.new(self, layout, options))
  call_block_in(page, &block)
end
start_page_number_from(page_number) click to toggle source

@param [Integer] page_number

# File lib/thinreports/report/base.rb, line 86
def start_page_number_from(page_number)
  @start_page_number = page_number
end
use_layout(layout, options = {}) click to toggle source

@param [String] layout filename of layout file @param [Hash] options @option options [Boolean] :default (true) @option options [Symbol] :id (nil) @example

report.use_layout '/path/to/default_layout.tlf' # Default layout
report.use_layout '/path/to/default_layout.tlf', default: true
report.use_layout '/path/to/other_layout', id: :other_layout
# File lib/thinreports/report/base.rb, line 98
def use_layout(layout, options = {})
  internal.register_layout(layout, options)
end