Sha256: 9c5dd78d740ce9403c0687422fbf16466ecada2baa59a1d3094422d66a591b98

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

require 'intercom/traits/api_resource'

module Intercom
  module ApiOperations
    module Save

      module ClassMethods
        PARAMS_NOT_PROVIDED = Object.new
        def create(params = PARAMS_NOT_PROVIDED)
          if self.ancestors.include?(Intercom::Contact) && params == PARAMS_NOT_PROVIDED
            params = Hash.new
          elsif params == PARAMS_NOT_PROVIDED
            raise ArgumentError, '.create requires 1 parameter'
          end

          instance = self.new(params)
          instance.mark_fields_as_changed!(params.keys)
          instance.save
        end
      end

      def self.included(base)
        base.extend(ClassMethods)
      end

      def save
        collection_name = Utils.resource_class_to_collection_name(self.class)
        if id_present? && !posted_updates?
          response = Intercom.put("/#{collection_name}/#{id}", to_submittable_hash)
        else
          response = Intercom.post("/#{collection_name}", to_submittable_hash.merge(identity_hash))
        end
        from_response(response) if response # may be nil we received back a 202
      end

      def identity_hash
        respond_to?(:identity_vars) ? SliceableHash.new(to_hash).slice(*(identity_vars.map(&:to_s))) : {}
      end

      private

      def id_present?
        id && id.to_s != ''
      end

      def posted_updates?
        respond_to?(:update_verb) && update_verb == 'post'
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
cogniteev-intercom-2.5.4 lib/intercom/api_operations/save.rb
intercom-2.5.4 lib/intercom/api_operations/save.rb