Class: DK::Reporter

Inherits:
Object
  • Object
show all
Defined in:
lib/draftking/reporter.rb

Overview

Generate report of object data

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Reporter

Returns a new instance of Reporter.



7
8
9
10
11
12
13
# File 'lib/draftking/reporter.rb', line 7

def initialize(opts)
  @objects = opts[:objects]
  @title   = build_title(opts)
  @rows    = opts[:rows]
  @fields  = @rows ? nil : populate_fields(opts[:fields], @objects.first)
  @headers = populate_headers(opts[:headers])
end

Instance Attribute Details

#fieldsObject

Returns the value of attribute fields.



6
7
8
# File 'lib/draftking/reporter.rb', line 6

def fields
  @fields
end

#headersObject

Returns the value of attribute headers.



6
7
8
# File 'lib/draftking/reporter.rb', line 6

def headers
  @headers
end

#lastObject

Returns the value of attribute last.



6
7
8
# File 'lib/draftking/reporter.rb', line 6

def last
  @last
end

#objectsObject

Returns the value of attribute objects.



6
7
8
# File 'lib/draftking/reporter.rb', line 6

def objects
  @objects
end

#rowsObject

Returns the value of attribute rows.



6
7
8
# File 'lib/draftking/reporter.rb', line 6

def rows
  @rows
end

#titleObject

Returns the value of attribute title.



6
7
8
# File 'lib/draftking/reporter.rb', line 6

def title
  @title
end

Instance Method Details

#build_title(opts) ⇒ Object

Report Title

Parameters:

  • opts (:simulate)
    Boolean

    Show simulation indicator

  • opts (:title)
    String

    Report Title



18
19
20
# File 'lib/draftking/reporter.rb', line 18

def build_title(opts)
  "#{opts[:title]}#{"\n" + REPORT_SIM if opts[:simulate]}"
end

#populate_fields(fields, obj = nil) ⇒ [Symbol]

Determine Field List

Parameters:

  • fields ([Symbol])

    Field Symbol Array

  • obj (Object) (defaults to: nil)

    Example Object

Returns:

  • ([Symbol])

    Field List



26
27
28
29
30
31
32
33
# File 'lib/draftking/reporter.rb', line 26

def populate_fields(fields, obj = nil)
  # Report all fields, unless specified.
  return fields if fields
  obj.instance_variables.map do |x|
    x = x.to_s.delete('@')
    obj.respond_to?(x) ? x : nil
  end.compact if obj
end

#populate_headers(headers) ⇒ [String]

Determine Display Headers

Parameters:

  • headers ([String])

    Column Headers

Returns:

  • ([String])


38
39
40
41
42
# File 'lib/draftking/reporter.rb', line 38

def populate_headers(headers)
  # Use field names as headers, unless specified
  return headers if headers
  return @fields.map(&:to_s) if @fields
end

#populate_report_rowsObject

Collect report data



45
46
47
48
49
50
51
52
# File 'lib/draftking/reporter.rb', line 45

def populate_report_rows
  # Read data based on field list
  return if @rows
  @rows = []
  @objects.each do |object|
    @rows << @fields.map { |field| object.send(field.to_sym) }
  end
end

#showObject Also known as: to_s

Display Report



55
56
57
58
59
# File 'lib/draftking/reporter.rb', line 55

def show
  populate_report_rows
  opts = { rows: @rows, headings: @headers || [], title: @title }
  puts Terminal::Table.new(opts) unless @rows.empty?
end