1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
# frozen_string_literal: true
module ActiveModelSerializers
module Adapter
class JsonApi
# link
# definition:
# oneOf
# linkString
# linkObject
#
# description:
# A link **MUST** be represented as either: a string containing the link's URL or a link
# object."
# structure:
# if href?
# linkString
# else
# linkObject
# end
#
# linkString
# definition:
# URI
#
# description:
# A string containing the link's URL.
# structure:
# 'http://example.com/link-string'
#
# linkObject
# definition:
# JSON Object
#
# properties:
# href (required) : URI
# meta
# structure:
# {
# href: 'http://example.com/link-object',
# meta: meta,
# }.reject! {|_,v| v.nil? }
class Link
include SerializationContext::UrlHelpers
def initialize(serializer, value)
@_routes ||= nil # handles warning
# actionpack-4.0.13/lib/action_dispatch/routing/route_set.rb:417: warning: instance variable @_routes not initialized
@object = serializer.object
@scope = serializer.scope
# Use the return value of the block unless it is nil.
if value.respond_to?(:call)
@value = instance_eval(&value)
else
@value = value
end
end
def href(value)
@href = value
nil
end
def meta(value)
@meta = value
nil
end
def as_json
return @value if @value
hash = {}
hash[:href] = @href if defined?(@href)
hash[:meta] = @meta if defined?(@meta)
hash.any? ? hash : nil
end
protected
attr_reader :object, :scope
end
end
end
end
|