Sha256: a47a09193dff9955e835aaca6d8bf2cdf9fb772cc2ac0e811d7d9ea9a1ce68b7

Contents?: true

Size: 1.16 KB

Versions: 10

Compression:

Stored size: 1.16 KB

Contents

module JSONAPIonify::Api
  module Resource::Definitions::Attributes

    def self.extended(klass)
      klass.class_eval do
        extend JSONAPIonify::InheritedAttributes
        extend JSONAPIonify::Types
        inherited_array_attribute :attributes
        delegate :id_attribute, :attributes, to: :class

        context(:fields, readonly: true) do |params:|
          params['fields']&.map do |type, fields|
            [type, fields.split(',')]
          end&.to_h
        end
      end
    end

    def id(sym)
      define_singleton_method :id_attribute do
        sym
      end
    end

    def attribute(name, type, description = '', **options, &block)
      Attribute.new(
        name, type, description, **options, &block
      ).tap do |new_attribute|
        attributes.delete(new_attribute)
        attributes << new_attribute
      end
    end

    def remove_attribute(name)
      attributes.delete_if { |attr| attr.name == name.to_sym }
    end

    def builder(&block)
      context :builder, readonly: true, persisted: true do |context|
        proc do |resource, instance|
          block.call resource, instance, context
        end
      end
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.9 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.8 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.7 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.5 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.4 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.3 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.2 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.1 lib/jsonapionify/api/resource/definitions/attributes.rb
jsonapionify-0.12.0 lib/jsonapionify/api/resource/definitions/attributes.rb