Sha256: 7f33557a37c6e824e10b539cc1b5f283da164f1c0efc98065d30c7c957392007

Contents?: true

Size: 1.44 KB

Versions: 21

Compression:

Stored size: 1.44 KB

Contents

module JSONAPIonify::Api
  module Base::Documentation
    Link = Struct.new(:title, :href)

    def self.extended(klass)
      klass.class_eval do
        extend JSONAPIonify::InheritedAttributes
        inherited_array_attribute :links
      end
    end

    def documentation_order(resources_in_order)
      @documentation_order = resources_in_order
    end

    def link(title, href)
      links << Link.new(title, href)
    end

    def title(title)
      @title = title
    end

    def description(description)
      @description = description
    end

    def documentation_output(request)
      cache_store.fetch(resource_signature) do
        JSONAPIonify::Documentation.new(documentation_object(request)).result
      end
    end

    def resources_in_order
      indexes = @documentation_order || []
      resources.sort_by(&:name).sort_by do |resource|
        indexes.map(&:to_s).index(resource.type) || indexes.length
      end
    end

    def documentation_object(request)
      base_url = URI.parse(request.url).tap do |uri|
        uri.query = nil
        uri.path.chomp! request.path_info
        uri.path.chomp! '/docs'
      end.to_s
      OpenStruct.new(
        links:       links,
        title:       @title || self.name,
        base_url:    base_url,
        description: JSONAPIonify::Documentation.render_markdown(@description || ''),
        resources:   resources_in_order.map { |r| r.documentation_object base_url }
      )
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
jsonapionify-0.12.8 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.7 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.5 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.4 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.3 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.2 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.1 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.12.0 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.11 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.10 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.9 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.8 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.7 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.6 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.5 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.11.0 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.10.2 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.10.1 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.10.0 lib/jsonapionify/api/base/documentation.rb
jsonapionify-0.9.3 lib/jsonapionify/api/base/documentation.rb