Class: Compendium::Report

Inherits:
Object
  • Object
show all
Extended by:
DSL
Defined in:
lib/compendium/report.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DSL

extended, metric, option, query

Constructor Details

#initialize(params = {}) ⇒ Report

Returns a new instance of Report.



15
16
17
18
19
20
# File 'lib/compendium/report.rb', line 15

def initialize(params = {})
  @params = Params.new(params, options)

  # When creating a new report, map each query back to the report
  queries.each { |q| q.report = self }
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object (private)



39
40
41
42
43
44
45
46
47
# File 'lib/compendium/report.rb', line 39

def method_missing(name, *args, &block)
  prefix = name.to_s.sub(/(?:_results|\?)\Z/, '').to_sym

  return queries[name] if queries.keys.include?(name)
  return results[prefix] if name.to_s.end_with? '_results' and queries.keys.include?(prefix)
  return params[name] if options.keys.include?(name)
  return !!params[prefix] if name.to_s.end_with? '?' and options.keys.include?(prefix)
  super
end

Instance Attribute Details

#paramsObject

Returns the value of attribute params.



7
8
9
# File 'lib/compendium/report.rb', line 7

def params
  @params
end

#resultsObject

Returns the value of attribute results.



7
8
9
# File 'lib/compendium/report.rb', line 7

def results
  @results
end

Class Method Details

.inherited(report) ⇒ Object



11
12
13
# File 'lib/compendium/report.rb', line 11

def self.inherited(report)
  Compendium.reports << report
end

Instance Method Details

#metricsObject



31
32
33
# File 'lib/compendium/report.rb', line 31

def metrics
  Collection[Metric, queries.map{ |q| q.metrics.to_a }.flatten]
end

#run(context = nil) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/compendium/report.rb', line 22

def run(context = nil)
  self.context = context
  self.results = {}

  queries.each{ |q| self.results[q.name] = q.run(params, ContextWrapper.wrap(context, self)) }

  self
end