class Copperegg::Revealmetrics::MetricGroup

Attributes

frequency[RW]
label[RW]
metrics[RW]
name[RW]

Public Instance Methods

load_attributes(attributes) click to toggle source
# File lib/copperegg/revealmetrics/metric_group.rb, line 11
def load_attributes(attributes)
  @metrics = []
  attributes.each do |name, value|
    if name.to_s == "id"
      @id = value
    elsif !respond_to?("#{name}=")
      next
    elsif value.to_s == "metrics"
      @metrics = value.map { |v| Metric.new(v) }
    else
      send "#{name}=", value
    end
  end
end
to_hash() click to toggle source
# File lib/copperegg/revealmetrics/metric_group.rb, line 26
def to_hash
  self.instance_variables.reduce({}) do |memo, variable|
    value = instance_variable_get(variable)
    if variable.to_s == "@metrics"
      memo[variable.to_s.sub("@", "")] = value.map(&:to_hash)
    elsif variable.to_s != "@error"
      memo[variable.to_s.sub("@", "")] = value
    end
    memo
  end
end
valid?() click to toggle source
# File lib/copperegg/revealmetrics/metric_group.rb, line 38
def valid?
  @error = nil
  if self.name.nil? || self.name.to_s.strip.empty?
    @error = "Name can't be blank."
  elsif self.metrics.nil? || self.metrics.empty?
    @error = "You must define at least one metric."
  else
    self.metrics = self.metrics.map { |metric| metric.is_a?(Hash) ? Metric.new(metric) : metric }
    self.metrics.each do |metric|
      if !metric.is_a?(Metric)
        @error = "Metric expected."
        break
      elsif !metric.valid?
        @error = metric.error
        break
      else
        metric.send(:remove_instance_variable, :@position) if (metric.instance_variables.include?(:@position) || metric.instance_variables.include?("@position")) && !self.persisted?
      end
    end
  end
  @error.nil?
end

Private Instance Methods

create() click to toggle source
# File lib/copperegg/revealmetrics/metric_group.rb, line 63
def create
  response = self.class.request(:request_type => "get", :id => self.name, :show_hidden => true)
  if response.code == "200"
    json = JSON.parse(response.body)
    metric_group = self.class.new(json)
    @id = self.name
    # needs_update = self.label != metric_group.label || self.frequency != metric_group.frequency || self.metrics.length != metric_group.metrics.length || self.metrics.map(&:name).sort != metric_group.metrics.map {|m| m["name"]}.sort
    if true #needs_update
      self.class.request(self.to_hash.merge(:id => @id, :is_hidden => 0, :request_type => "put", :show_hidden => true))
    else
      response
    end
  else
    self.class.request(self.to_hash.merge(:request_type => "post"))
  end
end