class Kongfigure::Synchronizers::Base

Attributes

parent_resource[R]
remote_resources[R]
resources[R]

Public Class Methods

new(http_client, resources, parent_resource=nil) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 8
def initialize(http_client, resources, parent_resource=nil)
  @http_client      = http_client
  @parent_resource  = parent_resource
  @resources        = resources
  @remote_resources = load_all_remote_resources
end

Public Instance Methods

cleanup(remote_resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 54
def cleanup(remote_resource)
  puts "#{parent_resource.nil? ? '' : '  *'}#{'---'.colorize(:red)} #{remote_resource.display_name}"
  path = if parent_resource
    "#{parent_resource.api_name}/#{parent_resource.identifier}/#{resource_api_name}/#{remote_resource.identifier}"
  else
    "#{resource_api_name}/#{remote_resource.identifier}"
  end
  @http_client.delete(path)
end
create(resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 64
def create(resource)
  puts "#{parent_resource.nil? ? '' : '  *'}#{'+++'.colorize(:green)} #{resource.display_name}"
  path = if parent_resource
    "#{parent_resource.api_name}/#{parent_resource.identifier}/#{resource_api_name}"
  else
    "#{resource_api_name}"
  end
  @http_client.post(path, resource.api_attributes.to_json)
end
find(identifier) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 15
def find(identifier)
  module_name = Kongfigure::Resources.const_get(self.class.to_s.split("::").last)
  module_name.build(@http_client.get("#{resource_api_name}/#{identifier}"))
rescue Kongfigure::Errors::ResourceNotFound
  nil
end
synchronize(resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 40
def synchronize(resource)
  synchronize_resource(resource)
  synchronize_plugins(resource)
end
synchronize_all() click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 45
def synchronize_all
  @resources.each do |resource|
    synchronize(resource)
  end
  @remote_resources.each do |remote_resource|
    cleanup(remote_resource) if remote_resource.has_to_be_deleted?
  end
end
synchronize_plugins(resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 35
def synchronize_plugins(resource)
  plugins_synchronizer = Kongfigure::Synchronizers::Plugin.new(@http_client, resource.plugins, resource)
  plugins_synchronizer.synchronize_all
end
synchronize_resource(resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 22
def synchronize_resource(resource)
  remote_resource = find_related_remote_resource(resource)
  if remote_resource.nil?
    create(resource)
  elsif resource == remote_resource
    unchanged(resource)
    remote_resource.mark_as_unchanged
  else
    update(resource, remote_resource)
    remote_resource.mark_as_updated
  end
end
unchanged(resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 74
def unchanged(resource)
  puts "#{parent_resource.nil? ? '' : '  *'}#{'==='.colorize(:blue)} #{resource.display_name}"
end
update(resource, remote_resource) click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 78
def update(resource, remote_resource)
  puts "#{'uuu'.colorize(:yellow)} #{resource.display_name}"
  path = if parent_resource
    "#{parent_resource.api_name}/#{parent_resource.identifier}/#{resource_api_name}/#{remote_resource.identifier}"
  else
    "#{resource_api_name}/#{remote_resource.identifier}"
  end
  @http_client.put(path, resource.api_attributes.to_json)
end

Private Instance Methods

load_all_remote_resources() click to toggle source
# File lib/kongfigure/synchronizers/base.rb, line 89
def load_all_remote_resources
  if parent_resource.nil?
    @http_client.get("#{resource_api_name}")["data"].map do |hash_resource|
      resource_module.build(hash_resource)
    end
  else
    @http_client.get("#{parent_resource.api_name}/#{parent_resource.identifier}/#{resource_api_name}")["data"].map do |hash_resource|
      resource_module.build(hash_resource)
    end
  end
end