X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=lib%2Fmcollective%2Faggregate%2Fbase.rb;fp=lib%2Fmcollective%2Faggregate%2Fbase.rb;h=5a59a915d57cebfd9f62f1c1c9654a3bc861e5d0;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/lib/mcollective/aggregate/base.rb b/lib/mcollective/aggregate/base.rb new file mode 100644 index 0000000..5a59a91 --- /dev/null +++ b/lib/mcollective/aggregate/base.rb @@ -0,0 +1,40 @@ +module MCollective + class Aggregate + class Base + attr_accessor :name, :result, :output_name, :action, :aggregate_format, :arguments + + def initialize(output_name, arguments, aggregate_format, action) + @name = self.class.to_s + @output_name = output_name + + # Any additional arguments passed in the ddl after the output field will + # be stored in the arguments array which can be used in the function + @arguments = arguments + @aggregate_format = aggregate_format + @action = action + @result = {:value => nil, :type => nil, :output => output_name} + + startup_hook + end + + ['startup_hook', 'process_result'].each do |method| + define_method method do + raise RuntimeError, "'#{method}' method of function class #{@name} has not yet been implemented" + end + end + + # Stops execution of the function and returns a specific ResultObject, + # aggregate functions will most likely override this but this is the simplest + # case so we might as well default to that + def summarize + raise "Result type is not set while trying to summarize aggregate function results" unless @result[:type] + + result_class(@result[:type]).new(@result, @aggregate_format, @action) + end + + def result_class(type) + Result.const_get("#{type.to_s.capitalize}Result") + end + end + end +end