Sha256: f39d9f073a72806ce3a7dee2a7d4732a078df059c675a619131285000039c18c

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

module JSONAPIonify::Api
  class Relationship::One < Relationship

    prepend_class do
      rel = self.rel
      remove_action :list, :create

      class << self
        undef_method :list
      end

      define_singleton_method(:show) do |**options, &block|
        options[:prepend] = 'relationships'
        define_action(:show, 'GET', '', nil, :resource_identifier, **options, &block).response status: 200 do |context|
          context.response_object[:data] = build_resource_identifier(context.instance)
          context.response_object.to_json
        end
      end

      define_singleton_method(:replace) do |**options, &block|
        options[:prepend] = 'relationships'
        define_action(:replace, 'PATCH', '', nil, :resource_identifier, **options, &block).response status: 200 do |context|
          context.owner_context.reset(:instance)
          context.reset(:instance)
          context.response_object[:data] = build_resource_identifier(context.instance)
          context.response_object.to_json
        end
      end

      context :instance do |context|
        context.owner_context.instance.send(rel.name)
      end

      show
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jsonapionify-0.9.0 lib/jsonapionify/api/relationship/one.rb