Module: ApipieDslHelper

Includes:
ActionView::Helpers::TagHelper
Included in:
ApipieDsl::ApipieDslsController
Defined in:
app/helpers/apipie_dsl_helper.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.in_section?(section, klass) ⇒ Boolean

Returns:

  • (Boolean)

Raises:



136
137
138
139
140
141
142
# File 'app/helpers/apipie_dsl_helper.rb', line 136

def self.in_section?(section, klass)
  class_desc = ApipieDSL.get_class_description(klass)
  raise ApipieDSL::Error, "Cannot find #{klass} description" if class_desc.nil?
  return true if section.empty?

  class_desc.sections.include?(section)
end

Instance Method Details

#apipie_dsl_example(source, output = nil) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'app/helpers/apipie_dsl_helper.rb', line 37

def apipie_dsl_example(source, output = nil)
  text = (:p, _('Example input:')) +
    (:pre, source, class: 'wiki')

  if output.present?
    text += (:p, _('Example output:')) +
      (:pre, output, class: 'wiki')
  end

  text.html_safe
end

#apipie_dsl_menuObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/helpers/apipie_dsl_helper.rb', line 21

def apipie_dsl_menu
  (:ul, class: 'breadcrumb') do
    content = dsl_sections.map do |section|
      (:li, class: section == @section ? 'active' : '') do
        link_to(_(section.titleize), @doc[:doc_url] + section_ext(section) + @doc[:link_extension])
      end
    end.join(' | ').html_safe

    unless ApipieDSL.configuration.help_layout.nil?
      content += (:li, class: "pull-right #{'active' if @section == 'help'}") do
        link_to(_('Help'), @doc[:doc_url] + section_ext('help') + @doc[:link_extension])
      end
    end
  end
end

#apipie_erb_wrap(content, mode: :loud, open_trim: false, close_trim: false) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'app/helpers/apipie_dsl_helper.rb', line 49

def apipie_erb_wrap(content, mode: :loud, open_trim: false, close_trim: false)
  case mode
  when :loud
    "<%= #{content} #{close_trim ? '-' : ''}%>"
  when :comment
    "<%# #{content} #{close_trim ? '-' : ''}%>"
  else
    "<%#{open_trim ? '-' : ''} #{content} #{close_trim ? '-' : ''}%>"
  end
end

#class_references(obj, version, link_extension) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'app/helpers/apipie_dsl_helper.rb', line 104

def class_references(obj, version, link_extension)
  # Try to convert to a constant in case of LazyValidator usage
  # Will raise const missing exception in case of wrong usage of the method
  if obj.is_a?(String)
    ref = ApipieDSL.refs[version][ApipieDSL.get_class_name(obj)]
    return "<a href='#{ref.doc_url(ref.sections.first)}#{link_extension}'>#{obj}</a>" if ref

    obj = ApipieDSL.configuration.rails? ? obj.constantize : obj.split('::').reduce(::Module, :const_get)
  end
  return obj.to_s unless [::Module, ::Class, ::Array].include?(obj.class)

  refs = [obj].flatten.map do |o|
    next o unless [::Module, ::Class].include?(o.class)

    referenced = ApipieDSL.refs[version][ApipieDSL.get_class_name(o)]
    next o if referenced.nil?

    "<a href='#{referenced.doc_url(referenced.sections.first)}#{link_extension}'>#{o}</a>"
  end
  return refs.first if refs.size < 2

  refs
end

#current_version(classes) ⇒ Object



148
149
150
151
152
153
154
155
156
157
# File 'app/helpers/apipie_dsl_helper.rb', line 148

def current_version(classes)
  case classes
  when Array
    classes.first[:version]
  when Hash
    classes.values.first[:version]
  else
    raise ApipieDSL::Error, "Cannot find current version for #{classes}"
  end
end

#dsl_sectionsObject



128
129
130
# File 'app/helpers/apipie_dsl_helper.rb', line 128

def dsl_sections
  ApipieDSL.configuration.sections
end

#escaped_method_name(method, options = {}) ⇒ Object



15
16
17
18
19
# File 'app/helpers/apipie_dsl_helper.rb', line 15

def escaped_method_name(method, options = {})
  options[:escaping] ||= ''
  options[:pattern] ||= /[?]/
  return method.gsub(options[:pattern], options[:escaping]) if method.is_a?(String)
end

#heading(title, level = 1) ⇒ Object



9
10
11
12
13
# File 'app/helpers/apipie_dsl_helper.rb', line 9

def heading(title, level = 1)
  ("h#{level}") do
    title
  end
end

#in_section?(section, klass) ⇒ Boolean

Returns:

  • (Boolean)


132
133
134
# File 'app/helpers/apipie_dsl_helper.rb', line 132

def in_section?(section, klass)
  ApipieDslHelper.in_section?(section, klass)
end

#method_signature(method_desc) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'app/helpers/apipie_dsl_helper.rb', line 75

def method_signature(method_desc)
  return "#{method_desc[:name]}" if method_desc[:params].empty?

  params = method_desc[:params].map do |param|
    default = resolve_default(param[:default])
    case param[:type]
    when 'required'
      param[:name].to_s
    when 'optional'
      if param[:expected_type] == 'list'
        "*#{param[:name]}"
      elsif param[:expected_type] == 'kwlist'
        "**#{param[:name]}"
      else
        "#{param[:name]} = #{default}"
      end
    when 'keyword'
      "#{param[:name]}: #{default}"
    end
  end.compact.join(', ')

  block_param = method_desc[:params].find { |p| p[:type] == 'block' }

  signature_parts = [method_desc[:name]]
  signature_parts << "(#{params})" unless params.empty?
  signature_parts << " #{block_param[:schema]}" if block_param
  signature_parts.join
end

#render_helpObject



159
160
161
# File 'app/helpers/apipie_dsl_helper.rb', line 159

def render_help
  render template: ApipieDSL.configuration.help_layout
end

#resolve_default(default) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/helpers/apipie_dsl_helper.rb', line 60

def resolve_default(default)
  case default
  when nil
    'nil'
  when ''
    "\"\""
  when Symbol
    ":#{default}"
  when String
    "\"#{default}\""
  else
    default
  end
end

#section_ext(section) ⇒ Object



144
145
146
# File 'app/helpers/apipie_dsl_helper.rb', line 144

def section_ext(section)
  "/#{section}"
end