class Kongfigure::Resources::Base

Attributes

id[RW]
kongfigure_ignore_fields[RW]
plugins[RW]
unchanged[RW]
updated[RW]

Public Class Methods

build_all(resources_hash) click to toggle source
# File lib/kongfigure/resources/base.rb, line 21
def self.build_all(resources_hash)
  resources_hash.map do |resource_hash|
    build(resource_hash)
  end
end
new(id, kongfigure_ignore_fields = nil) click to toggle source
# File lib/kongfigure/resources/base.rb, line 6
def initialize(id, kongfigure_ignore_fields = nil)
  @id                       = id
  @kongfigure_ignore_fields = (kongfigure_ignore_fields || []).map { |field| field.split(".") }
  if self.class != Kongfigure::Resources::Plugin && self.class != Kongfigure::Resources::Route
    @kongfigure_ignore_fields.push("id")
  end
  @plugins                  = []
  @updated                  = false
  @unchanged                = false
end

Public Instance Methods

==(other_object) click to toggle source
# File lib/kongfigure/resources/base.rb, line 27
def ==(other_object)
  differences       = deep_diff(other_object.api_attributes, api_attributes, kongfigure_ignore_fields)
  differences_count = differences.flatten.size
  if differences_count > 0
    ap api_attributes
    ap other_object.api_attributes
    ap differences
  end
  differences_count == 0
end
api_name() click to toggle source
# File lib/kongfigure/resources/base.rb, line 54
def api_name
  raise NotImplementedError
end
display_name() click to toggle source
# File lib/kongfigure/resources/base.rb, line 38
def display_name
  identifier
end
has_to_be_deleted?() click to toggle source
# File lib/kongfigure/resources/base.rb, line 50
def has_to_be_deleted?
  @updated == false && @unchanged == false
end
mark_as_unchanged() click to toggle source
# File lib/kongfigure/resources/base.rb, line 46
def mark_as_unchanged
  @unchanged = true
end
mark_as_updated() click to toggle source
# File lib/kongfigure/resources/base.rb, line 42
def mark_as_updated
  @updated = true
end
plugin_allowed?() click to toggle source
# File lib/kongfigure/resources/base.rb, line 17
def plugin_allowed?
  true
end

Private Instance Methods

deep_diff(a, b, ignore_nested_keys=[], level=0) click to toggle source
# File lib/kongfigure/resources/base.rb, line 59
def deep_diff(a, b, ignore_nested_keys=[], level=0)
  ignore_nested_keys = ignore_nested_keys.inject([]) do |ignore_nested_keys, ignore_nested_key|
    current_key = ignore_nested_key[level]
    if a.has_key?(current_key) || b.has_key?(current_key)
      ignore_nested_keys.push(ignore_nested_key[level..ignore_nested_key.size])
    end
    ignore_nested_keys
  end
  ignore_keys = ignore_nested_keys.select {|ignore_nested_key| ignore_nested_key.size == 1}.flatten
  (a.keys | b.keys).each_with_object([]) do |k, diff|
    if a[k] != b[k]
      if a[k].is_a?(Hash) && b[k].is_a?(Hash)
        diff.push(deep_diff(a[k], b[k], ignore_nested_keys, level + 1))
      elsif !ignore_keys.include?(k) && !b[k].nil? && k != "id"
        diff.push([a[k], b[k], k, level])
      end
    end
    diff
  end
end