Module: Compendium::DSL
- Included in:
- Report
- Defined in:
- lib/compendium/dsl.rb
Class Method Summary
collapse
Instance Method Summary
collapse
-
#filter(*query_names, &block) ⇒ Object
-
#method_missing(name, *args, &block) ⇒ Object
Allow defined queries to be redefined by name, eg: query :main_query main_query { collect_records_here }.
-
#metric(name, *args, &block) ⇒ Object
-
#option(name, *args) ⇒ Object
-
#params_class ⇒ Object
Each Report will have its own descendant of Params in order to safely add validations.
-
#params_class=(klass) ⇒ Object
-
#query(name, opts = {}, &block) ⇒ Object
(also: #chart, #data)
-
#respond_to_missing?(name, *args) ⇒ Boolean
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
Allow defined queries to be redefined by name, eg: query :main_query main_query { collect_records_here }
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/compendium/dsl.rb', line 71
def method_missing(name, *args, &block)
if queries.keys.include?(name.to_sym)
query = queries[name.to_sym]
query.proc = block if block_given?
query.options = args.
return query
end
super
end
|
Class Method Details
.extended(klass) ⇒ Object
8
9
10
11
|
# File 'lib/compendium/dsl.rb', line 8
def self.extended(klass)
klass.inheritable_attr :queries, default: ::Collection[Query]
klass.inheritable_attr :options, default: ::Collection[Option]
end
|
Instance Method Details
#filter(*query_names, &block) ⇒ Object
52
53
54
55
56
57
|
# File 'lib/compendium/dsl.rb', line 52
def filter(*query_names, &block)
query_names.each do |query_name|
raise ArgumentError, "query #{query_name} is not defined" unless queries.key?(query_name)
queries[query_name].add_filter(block)
end
end
|
#metric(name, *args, &block) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/compendium/dsl.rb', line 34
def metric(name, *args, &block)
proc = args.first.is_a?(Proc) ? args.first : block
opts = args.
if opts.key?(:through)
[opts.delete(:through)].flatten.each do |query|
raise ArgumentError, "query #{query} is not defined" unless queries.key?(query)
queries[query].add_metric(name, proc, opts)
end
else
query = define_query("__metric_#{name}", {}, &block)
query.add_metric(name, -> result { result.first }, opts)
end
end
|
#option(name, *args) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/compendium/dsl.rb', line 19
def option(name, *args)
opts = args.
type = args.shift
add_params_validations(name, opts.delete(:validates))
if options[name]
options[name].type = type if type
options[name].default = opts.delete(:default) if opts.key?(:default)
options[name].merge!(opts)
else
options << Compendium::Option.new(opts.merge(name: name, type: type))
end
end
|
#params_class ⇒ Object
Each Report will have its own descendant of Params in order to safely add validations
60
61
62
|
# File 'lib/compendium/dsl.rb', line 60
def params_class
@params_class ||= Class.new(Params)
end
|
#params_class=(klass) ⇒ Object
64
65
66
|
# File 'lib/compendium/dsl.rb', line 64
def params_class=(klass)
@params_class = klass
end
|
#query(name, opts = {}, &block) ⇒ Object
Also known as:
chart, data
13
14
15
|
# File 'lib/compendium/dsl.rb', line 13
def query(name, opts = {}, &block)
define_query(name, opts, &block)
end
|
#respond_to_missing?(name, *args) ⇒ Boolean
82
83
84
85
|
# File 'lib/compendium/dsl.rb', line 82
def respond_to_missing?(name, *args)
return true if queries.keys.include?(name)
super
end
|