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

Version Path
dhs-1.6.0 lib/dhs/concerns/item/save.rb
dhs-1.5.0 lib/dhs/concerns/item/save.rb
dhs-1.4.2 lib/dhs/concerns/item/save.rb
dhs-1.4.1 lib/dhs/concerns/item/save.rb
dhs-1.4.0 lib/dhs/concerns/item/save.rb
dhs-1.3.0 lib/dhs/concerns/item/save.rb
dhs-1.2.0 lib/dhs/concerns/item/save.rb
dhs-1.1.0 lib/dhs/concerns/item/save.rb
dhs-1.0.3 lib/dhs/concerns/item/save.rb
dhs-1.0.2 lib/dhs/concerns/item/save.rb
dhs-1.0.1 lib/dhs/concerns/item/save.rb
dhs-1.0.0 lib/dhs/concerns/item/save.rb