lib/active_model/serializer/links.rb



module ActiveModel
  class Serializer
    module Links
      extend ActiveSupport::Concern

      included do
        with_options instance_writer: false, instance_reader: true do |serializer|
          serializer.class_attribute :_links # @api private
          self._links ||= {}
        end

        extend ActiveSupport::Autoload
      end

      module ClassMethods
        def inherited(base)
          super
          base._links = _links.dup
        end

        # Define a link on a serializer.
        # @example
        #   link(:self) { resource_url(object) }
        # @example
        #   link(:self) { "http://example.com/resource/#{object.id}" }
        # @example
        #   link :resource, "http://example.com/resource"
        #
        def link(name, value = nil, &block)
          _links[name] = block || value
        end
      end
    end
  end
end