Sha256: 2a57e350ff7553d83b39caa006f7818f037a5f66eff805f4f0135e1441c6e78c

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module Immoscout
  module Models
    module Actions
      # Actions to work with contacts.
      module Contact
        extend ActiveSupport::Concern

        included do
          include Immoscout::Models::Concerns::Modelable

          self.unpack_collection = proc do |hash|
            hash
              .fetch('common.realtorContactDetailsList', {})
              .fetch('realtorContactDetails', nil)
          end

          def save
            response =
              if id
                api.put("user/#{api.user_name}/contact/#{id}", as_json)
              else
                api.post("user/#{api.user_name}/contact", as_json)
              end

            handle_response(response)
            self.id = id_from_response(response) unless id
            self
          end

          def destroy
            response = api.delete("user/#{api.user_name}/contact/#{id}")
            handle_response(response)
            self
          end
        end

        class_methods do
          def find(id)
            response = api.get("user/#{api.user_name}/contact/#{id}")
            handle_response(response)
            from_raw(response.body)
          end

          def find_by(hash)
            external_id = hash.symbolize_keys.fetch(:external_id)
            find("ext-#{external_id}")
          end

          def all
            response = api.get("user/#{api.user_name}/contact")
            handle_response(response)
            objects = unpack_collection.call(response.body)
            objects.map { |object| new(object) }
          end
          delegate :first, to: :all
          delegate :last, to: :all

          def create(hash)
            instance = new(hash)
            instance.save
            instance
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
immoscout-1.9.0 lib/immoscout/models/actions/contact.rb
immoscout-1.8.1 lib/immoscout/models/actions/contact.rb
immoscout-1.8.0 lib/immoscout/models/actions/contact.rb