Sha256: 269602c8515725601edfa4d40b800bfc80c9ffa7c0cf2b34c0e93200e97ec9b7
Contents?: true
Size: 1.42 KB
Versions: 12
Compression:
Stored size: 1.42 KB
Contents
# frozen_string_literal: true require 'active_support' class DHS::Item < DHS::Proxy autoload :EndpointLookup, 'dhs/concerns/item/endpoint_lookup' module Save extend ActiveSupport::Concern included do include EndpointLookup end def save(options = nil) save!(options) rescue DHC::Error false end def save!(options = {}) options = options.present? ? options.dup : {} data = _data._raw.dup url = url_for_persistance!(data, options) create_and_merge_data!( apply_default_creation_options(options, url, data) ) rescue DHC::Error => e self.errors = DHS::Problems::Errors.new(e.response, record) raise e end private def apply_default_creation_options(options, url, data) options = options.merge(method: :post, url: url, body: data) options[:headers] ||= {} options end def create_and_merge_data!(options) response_data = record.request(options) if response_data.present? _data.merge_raw!(response_data.unwrap(:item_created_key)) response_headers = response_data._request.response.headers end if response_headers && response_headers['Location'] location_data = record.request(options.merge(url: response_headers['Location'], method: :get, body: nil)) _data.merge_raw!(location_data.unwrap(:item_created_key)) end true end end end
Version data entries
12 entries across 12 versions & 1 rubygems