Sha256: 31cbe1aee15b20f9fcf0e258540d1d0327dde0033fe84e27decdefd0f6d2b323

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true
module Dayman
  class Resource
    attr_accessor :id, :attributes, :relationships

    class << self
      extend Forwardable

      attr_accessor :site

      def_delegators :request,
        :all,
        :fields,
        :filter,
        :find,
        :includes,
        :select,
        :sort,
        :where

      def path
        name.underscore.pluralize
      end

      def has_one(relationship_name)
        attr_accessor relationship_name
      end

      def has_many(relationship_name)
        instance_variable_name = "@#{relationship_name}".to_sym

        define_method(relationship_name) do
          if instance_variable_defined?(instance_variable_name)
            instance_variable_get(instance_variable_name)
          else
            instance_variable_set(instance_variable_name, [])
          end
        end
      end

      private

      def request
        Request.new(self)
      end
    end

    def initialize(id: nil, attributes: {})
      @id = id
      @attributes = attributes
    end

    def method_missing(name, *args, &block)
      attributes.key?(name) ? attributes[name] : super
    end

    def respond_to_missing?(name, include_private = false)
      attributes.key?(name) || super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dayman-0.1.1 lib/dayman/resource.rb