Module: Cubicle::Aggregation::Dsl
- Included in:
- Cubicle::Aggregation
- Defined in:
- lib/cubicle/aggregation/dsl.rb
Instance Method Summary collapse
- #aggregation(*member_list) ⇒ Object
- #average(*args) ⇒ Object (also: #avg)
- #average_duration(*args) ⇒ Object (also: #avg_duration)
- #bucketize(dimension_name, source_measure_name, bucket_range, options = {}, &block) ⇒ Object (also: #categorize)
- #count(*args) ⇒ Object
- #define(name, expression) ⇒ Object
- #difference(member_name, left, right) ⇒ Object
- #dimension(*args) ⇒ Object
- #dimensions(*args) ⇒ Object
- #duration(*args) ⇒ Object
- #duration_since(*args) ⇒ Object (also: #age_since, #elapsed)
- #durations_in(unit_of_time = nil) ⇒ Object (also: #duration_unit)
- #measure(*args) ⇒ Object
- #measures(*args) ⇒ Object
- #named_expressions ⇒ Object
- #ratio(member_name, numerator, denominator) ⇒ Object
- #source_collection_name(collection_name = nil) ⇒ Object (also: #source_collection_name=)
- #sum(*args) ⇒ Object
- #target_collection_name(collection_name = nil) ⇒ Object (also: #target_collection_name=)
- #time_dimension(*args) ⇒ Object (also: #time_dimension=, #date, #time)
- #total_duration(*args) ⇒ Object
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) = args. [:aggregation_method] = :average measure(*(args << )) #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, ={}, &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, , &block) end |
#count(*args) ⇒ Object
46 47 48 49 50 |
# File 'lib/cubicle/aggregation/dsl.rb', line 46 def count(*args) = args. [:aggregation_method] = :count measure(*(args << )) 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) = args. [:in] ||= durations_in args << 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) = args. ms1 = args.length > 1 ? args.delete_at(1) : args.shift [ms1] = :now duration(*(args<<)) 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_expressions ⇒ Object
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) = args. [:aggregation_method] = :sum measure(*(args << )) 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) = args. [:aggregation_method] = :sum duration(*(args<<)) end |