Sha256: 3608543c6a3b2a7bce477b3ba2ebbf1a1519c17190bf08b18ea137fe922f494e

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module AbsorbApi
  class Record
    delegate :connection, :get, :put, :patch, :post, :delete, to: :api
    delegate :in_parallel, to: :connection

    def initialize(params = {})
      params.each do |attr, value|
        next unless respond_to?("#{attr.to_s.underscore}=")

        public_send("#{attr.to_s.underscore}=", value)
      end

      yield self if block_given?
    end

    class << self
      def find(id)
        raise ResourceNotFound if id.blank?

        new(api.get("#{to_s.demodulize.pluralize}/#{id}"))
      end

      def all
        objs = api.get(to_s.demodulize.pluralize).map do |attrs|
          new(attrs)
        end

        Collection.new(objs, klass: to_s.demodulize)
      end

      def with_relationships
        include Relations
      end

      def can_create
        include Create
      end

      def can_search
        include Where
      end

      private

      def api
        AbsorbApi::Api.new
      end
    end

    private

    def api
      @api ||= AbsorbApi::Api.new
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
absorb_api-0.9.3 lib/absorb_api/record.rb
absorb_api-0.9.2 lib/absorb_api/record.rb
absorb_api-0.9.1 lib/absorb_api/record.rb