lib/gds_api/panopticon/registerer.rb
require 'plek' module GdsApi class Panopticon < GdsApi::Base class Registerer attr_accessor :logger, :owning_app, :rendering_app, :kind def initialize(options) @logger = options[:logger] || GdsApi::Base.logger @owning_app = options[:owning_app] @rendering_app = options[:rendering_app] @kind = options[:kind] || 'custom-application' @panopticon = options[:panopticon] @endpoint_url = options[:endpoint_url] || Plek.current.find("panopticon") @timeout = options[:timeout] || 10 end def record_to_artefact(record) hash = { slug: record.slug, owning_app: owning_app, kind: kind, name: record.title, description: record.description, state: record.state } if rendering_app hash[:rendering_app] = rendering_app end optional_params = [ :need_id, :need_ids, :paths, :prefixes, :public_timestamp, :latest_change_note, :content_id, ] deprecated_params = { section: [:primary_section, :sections] } deprecated_params.each do |attr_name, replacements| if record.respond_to?(attr_name) replacements = Array(replacements) logger.warn "#{attr_name} has been deprecated in favour of #{replacements.join(' and ')}" end end optional_params.each do |attr_name| if record.respond_to? attr_name hash[attr_name] = record.public_send(attr_name) end end hash end # record should respond to #slug and #title, or override #record_to_artefact def register(record) register_artefact(record_to_artefact(record)) end protected def register_artefact(artefact) logger.info "Putting #{artefact[:slug]}" # Error responses here are pretty fatal, so propagate them response = panopticon.put_artefact!(artefact[:slug], artefact) case response.code when 200 logger.info "Updated #{artefact[:slug]}" when 201 logger.info "Created #{artefact[:slug]}" else # Only expect 200 or 201 success codes, but best to have a fallback logger.info "Registered #{artefact[:slug]} (code #{response.code})" end end def panopticon options = { timeout: @timeout } @panopticon ||= GdsApi::Panopticon.new(@endpoint_url, options.merge(panopticon_api_credentials)) end def panopticon_api_credentials Object::const_defined?(:PANOPTICON_API_CREDENTIALS) ? PANOPTICON_API_CREDENTIALS : {} end end end end