Module: Cubicle::Aggregation::Dsl

Included in:
Cubicle::Aggregation
Defined in:
lib/cubicle/aggregation/dsl.rb

Instance Method Summary collapse

Instance Method Details

#aggregation(*member_list) ⇒ Object



118
119
120
121
# File 'lib/cubicle/aggregation/dsl.rb', line 118

def aggregation(*member_list)
  member_list = member_list[0] if member_list[0].is_a?(Array)
  aggregations << member_list
end

#average(*args) ⇒ Object Also known as: avg



52
53
54
55
56
57
58
59
# File 'lib/cubicle/aggregation/dsl.rb', line 52

def average(*args)
  options = args.extract_options!
  options[:aggregation_method] = :average
  measure(*(args << options))
  #Averaged fields need a count of non-null values to properly calculate the average
  args[0] = "#{args[0]}_count".to_sym
  count *args
end

#average_duration(*args) ⇒ Object Also known as: avg_duration



76
77
78
# File 'lib/cubicle/aggregation/dsl.rb', line 76

def average_duration(*args)
  duration(*args)
end

#bucketize(dimension_name, source_measure_name, bucket_range, options = {}, &block) ⇒ Object Also known as: categorize



111
112
113
114
115
# File 'lib/cubicle/aggregation/dsl.rb', line 111

def bucketize(dimension_name, source_measure_name, bucket_range, options={}, &block)
  source_measure = measures[source_measure_name]
  raise "#{source_measure_name} does not appear to be a valid measure name. bucketize/categorize declarations must be placed AFTER any measures it uses have been defined." unless source_measure
  dimensions << BucketizedDimension.new(dimension_name, source_measure, bucket_range, options, &block) 
end

#count(*args) ⇒ Object



46
47
48
49
50
# File 'lib/cubicle/aggregation/dsl.rb', line 46

def count(*args)
  options = args.extract_options!
  options[:aggregation_method] = :count
  measure(*(args << options))
end

#define(name, expression) ⇒ Object



131
132
133
# File 'lib/cubicle/aggregation/dsl.rb', line 131

def define(name,expression)
  named_expressions[name] = expression 
end

#difference(member_name, left, right) ⇒ Object



107
108
109
# File 'lib/cubicle/aggregation/dsl.rb', line 107

def difference(member_name, left, right)
  measures << Difference.new(member_name,left,right)
end

#dimension(*args) ⇒ Object



18
19
20
21
# File 'lib/cubicle/aggregation/dsl.rb', line 18

def dimension(*args)
  dimensions << Cubicle::Dimension.new(*args)
  dimensions[-1]
end

#dimensions(*args) ⇒ Object



27
28
29
30
31
32
# File 'lib/cubicle/aggregation/dsl.rb', line 27

def dimensions(*args)
  return (@dimensions ||= Cubicle::MemberList.new) if args.length < 1
  args = args[0] if args.length == 1 && args[0].is_a?(Array)
  args.each {|dim| dimension dim }
  @dimensions
end

#duration(*args) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/cubicle/aggregation/dsl.rb', line 68

def duration(*args)
  options = args.extract_options!
  options[:in] ||= durations_in
  args << options
  measures << (dur = Duration.new(*args))
  count("#{dur.name}_count".to_sym, :expression=>dur.expression, :condition=>dur.condition) if dur.aggregation_method == :average
end

#duration_since(*args) ⇒ Object Also known as: age_since, elapsed



87
88
89
90
91
92
# File 'lib/cubicle/aggregation/dsl.rb', line 87

def duration_since(*args)
  options = args.extract_options!
  ms1 = args.length > 1 ? args.delete_at(1) : args.shift
  options[ms1] = :now
  duration(*(args<<options))
end

#durations_in(unit_of_time = nil) ⇒ Object Also known as: duration_unit



96
97
98
99
# File 'lib/cubicle/aggregation/dsl.rb', line 96

def durations_in(unit_of_time = nil)
  return (@duration_unit ||= :seconds) unless unit_of_time
  @duration_unit = unit_of_time.to_s.pluralize.to_sym
end

#measure(*args) ⇒ Object



34
35
36
37
# File 'lib/cubicle/aggregation/dsl.rb', line 34

def measure(*args)
  measures << Measure.new(*args)
  measures[-1]
end

#measures(*args) ⇒ Object



39
40
41
42
43
44
# File 'lib/cubicle/aggregation/dsl.rb', line 39

def measures(*args)
  return (@measures ||= Cubicle::MemberList.new) if args.length < 1
  args = args[0] if args.length == 1 && args[0].is_a?(Array)
  args.each {|m| measure m}
  @measures
end

#named_expressionsObject



23
24
25
# File 'lib/cubicle/aggregation/dsl.rb', line 23

def named_expressions
  return @named_expressions ||= OrderedHashWithIndifferentAccess.new 
end

#ratio(member_name, numerator, denominator) ⇒ Object



103
104
105
# File 'lib/cubicle/aggregation/dsl.rb', line 103

def ratio(member_name, numerator, denominator)
  measures << Ratio.new(member_name, numerator, denominator)
end

#source_collection_name(collection_name = nil) ⇒ Object Also known as: source_collection_name=



5
6
7
8
# File 'lib/cubicle/aggregation/dsl.rb', line 5

def source_collection_name(collection_name = nil)
  return @source_collection = collection_name if collection_name
  @source_collection ||= name.chomp("Cubicle").chomp("Cube").chomp("Aggregation").underscore.pluralize
end

#sum(*args) ⇒ Object



62
63
64
65
66
# File 'lib/cubicle/aggregation/dsl.rb', line 62

def sum(*args)
  options = args.extract_options!
  options[:aggregation_method] = :sum
  measure(*(args << options))
end

#target_collection_name(collection_name = nil) ⇒ Object Also known as: target_collection_name=



11
12
13
14
15
# File 'lib/cubicle/aggregation/dsl.rb', line 11

def target_collection_name(collection_name = nil)
  return nil if transient?
  return @target_name = collection_name if collection_name
  @target_name ||= "cubicle.fact.#{name.blank? ? source_collection_name : name.underscore}"
end

#time_dimension(*args) ⇒ Object Also known as: time_dimension=, date, time



123
124
125
126
# File 'lib/cubicle/aggregation/dsl.rb', line 123

def time_dimension(*args)
  return (@time_dimension ||= nil) unless args.length > 0
  @time_dimension = dimension(*args)
end

#total_duration(*args) ⇒ Object



81
82
83
84
85
# File 'lib/cubicle/aggregation/dsl.rb', line 81

def total_duration(*args)
  options = args.extract_options!
  options[:aggregation_method] = :sum
  duration(*(args<<options))
end