Sha256: 2dc94234fd955a9d68cc45579402472d9e11fc734a18e5f8c6514c1499974086

Contents?: true

Size: 1.82 KB

Versions: 5

Compression:

Stored size: 1.82 KB

Contents

require 'json'
require_relative '../concerns/modelable'

module Immoscout
  module Models
    module Actions
      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

          def first
            all.first
          end

          def last
            all.last
          end

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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
immoscout-1.3.1 lib/immoscout/models/actions/contact.rb
immoscout-1.3.0 lib/immoscout/models/actions/contact.rb
immoscout-1.2.0 lib/immoscout/models/actions/contact.rb
immoscout-1.1.0 lib/immoscout/models/actions/contact.rb
immoscout-1.0.0 lib/immoscout/models/actions/contact.rb