Module: JSONAPIonify::Api::Base::Documentation

Included in:
JSONAPIonify::Api::Base
Defined in:
lib/jsonapionify/api/base/documentation.rb

Defined Under Namespace

Classes: Link

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(klass) ⇒ Object



5
6
7
8
9
10
# File 'lib/jsonapionify/api/base/documentation.rb', line 5

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

Instance Method Details

#description(description) ⇒ Object



24
25
26
# File 'lib/jsonapionify/api/base/documentation.rb', line 24

def description(description)
  @description = description
end

#documentation_object(request) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/jsonapionify/api/base/documentation.rb', line 41

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

#documentation_order(resources_in_order) ⇒ Object



12
13
14
# File 'lib/jsonapionify/api/base/documentation.rb', line 12

def documentation_order(resources_in_order)
  @documentation_order = resources_in_order
end

#documentation_output(request) ⇒ Object



28
29
30
31
32
# File 'lib/jsonapionify/api/base/documentation.rb', line 28

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


16
17
18
# File 'lib/jsonapionify/api/base/documentation.rb', line 16

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

#resources_in_orderObject



34
35
36
37
38
39
# File 'lib/jsonapionify/api/base/documentation.rb', line 34

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

#title(title) ⇒ Object



20
21
22
# File 'lib/jsonapionify/api/base/documentation.rb', line 20

def title(title)
  @title = title
end