Module: ApipieDSL::TasksUtils

Defined in:
lib/apipie_dsl/tasks_utils.rb

Class Method Summary collapse

Class Method Details

.copy_jscss(dest) ⇒ Object



119
120
121
122
123
# File 'lib/apipie_dsl/tasks_utils.rb', line 119

def self.copy_jscss(dest)
  src = File.expand_path('../../app/public/apipie_dsl', __dir__)
  FileUtils.mkdir_p dest
  FileUtils.cp_r "#{src}/.", dest
end

.generate_class_pages(version, file_base, doc, include_json = false, lang = nil, section = nil) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/apipie_dsl/tasks_utils.rb', line 70

def self.generate_class_pages(version, file_base, doc, include_json = false, lang = nil, section = nil)
  doc[:docs][:classes].each do |class_name, class_desc|
    next unless ApipieDslHelper.in_section?(section, class_name)

    class_file_base = File.join(file_base, class_desc[:id])
    FileUtils.mkdir_p(File.dirname(class_file_base)) unless File.exist?(File.dirname(class_file_base))

    doc = ApipieDSL.docs(version, class_name, nil, lang, section)
    doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : '.html')
    render_page("#{class_file_base}#{lang_ext(lang)}.html", 'class',
                doc: doc[:docs], klass: doc[:docs][:classes].first,
                language: lang, languages: ApipieDSL.configuration.languages)
    File.open("#{class_file_base}#{lang_ext(lang)}.json", 'w') { |f| f << doc.to_json } if include_json
  end
end

.generate_help_page(file_base, doc, show_versions = false, lang = nil) ⇒ Object



106
107
108
109
110
111
112
113
# File 'lib/apipie_dsl/tasks_utils.rb', line 106

def self.generate_help_page(file_base, doc, show_versions = false, lang = nil)
  versions = show_versions && ApipieDSL.available_versions
  section_file = "#{file_base}/help"
  FileUtils.mkdir_p(File.dirname(section_file)) unless File.exist?(File.dirname(section_file))
  render_page("#{section_file}#{lang_ext(lang)}.html", 'custom_help',
  doc: doc[:docs], versions: versions, language: lang,
  languages: ApipieDSL.configuration.languages, section: 'help')
end

.generate_index_page(file_base, doc, include_json = false, show_versions = false, lang = nil, section = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/apipie_dsl/tasks_utils.rb', line 60

def self.generate_index_page(file_base, doc, include_json = false, show_versions = false, lang = nil, section = nil)
  versions = show_versions && ApipieDSL.available_versions
  section_file = "#{file_base}/#{section}"
  FileUtils.mkdir_p(File.dirname(section_file)) unless File.exist?(File.dirname(section_file))
  render_page("#{section_file}#{lang_ext(lang)}.html",
  'index', doc: doc[:docs], versions: versions, language: lang,
           languages: ApipieDSL.configuration.languages, section: section)
  File.open("#{file_base}#{lang_ext(lang)}.json", 'w') { |f| f << doc.to_json } if include_json
end

.generate_json_page(file_base, doc, lang = nil) ⇒ Object



8
9
10
11
12
13
# File 'lib/apipie_dsl/tasks_utils.rb', line 8

def self.generate_json_page(file_base, doc, lang = nil)
  FileUtils.mkdir_p(file_base) unless File.exist?(file_base)

  filename = "schema_apipie_dsl#{lang_ext(lang)}.json"
  File.open("#{file_base}/#{filename}", 'w') { |file| file.write(JSON.pretty_generate(doc)) }
end

.generate_method_pages(version, file_base, doc, include_json = false, lang = nil, section = nil) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/apipie_dsl/tasks_utils.rb', line 86

def self.generate_method_pages(version, file_base, doc, include_json = false, lang = nil, section = nil)
  doc[:docs][:classes].each do |class_name, class_params|
    next unless ApipieDslHelper.in_section?(section, class_name)

    class_params[:methods].each do |method|
      method_file_base = File.join(file_base, class_name.to_s, method[:name].to_s)
      FileUtils.mkdir_p(File.dirname(method_file_base)) unless File.exist?(File.dirname(method_file_base))

      doc = ApipieDSL.docs(version, class_name, method[:name], lang, section)
      doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : '.html')
      render_page("#{method_file_base}#{lang_ext(lang)}.html", 'method',
                  doc: doc[:docs], klass: doc[:docs][:classes].first,
                  method: doc[:docs][:classes].first[:methods].first,
                  language: lang, languages: ApipieDSL.configuration.languages)

      File.open("#{method_file_base}#{lang_ext(lang)}.json", 'w') { |f| f << doc.to_json } if include_json
    end
  end
end

.generate_one_page(file_base, doc, lang = nil) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/apipie_dsl/tasks_utils.rb', line 44

def self.generate_one_page(file_base, doc, lang = nil)
  FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))

  render_page("#{file_base}/#{File.basename(file_base)}-onepage#{lang_ext(lang)}.html", 'static',
              doc: doc[:docs], language: lang,
              languages: ApipieDSL.configuration.languages)
end

.generate_plain_page(file_base, doc, lang = nil) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/apipie_dsl/tasks_utils.rb', line 52

def self.generate_plain_page(file_base, doc, lang = nil)
  FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))

  render_page("#{file_base}/#{File.basename(file_base)}-plain#{lang_ext(lang)}.html", 'plain',
              { doc: doc[:docs], language: lang,
                languages: ApipieDSL.configuration.languages }, nil)
end

.lang_ext(lang = nil) ⇒ Object



115
116
117
# File 'lib/apipie_dsl/tasks_utils.rb', line 115

def self.lang_ext(lang = nil)
  lang ? ".#{lang}" : ''
end

.render_page(file_name, template, variables, layout = 'apipie_dsl') ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/apipie_dsl/tasks_utils.rb', line 34

def self.render_page(file_name, template, variables, layout = 'apipie_dsl')
  File.open(file_name, 'w') do |f|
    variables.each do |var, val|
      renderer.instance_variable_set("@#{var}", val)
    end
    f.write(renderer.render(template: template.to_s,
                            layout: (layout && "apipie_dsl/#{layout}")))
  end
end

.rendererObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/apipie_dsl/tasks_utils.rb', line 15

def self.renderer
  return @renderer if @renderer

  base_paths = [File.expand_path('../../app/views/apipie_dsl/apipie_dsls', __dir__)]
  if ApipieDSL.configuration.rails?
    base_paths.unshift("#{Rails.root}/app/views") if File.directory?("#{Rails.root}/app/views")
    base_paths.unshift("#{Rails.root}/app/views/apipie_dsl/apipie_dsls") if File.directory?("#{Rails.root}/app/views/apipie_dsl/apipie_dsls")
  end
  layouts_paths = [File.expand_path('../../app/views/layouts', __dir__)]
  if ApipieDSL.configuration.rails? && File.directory?("#{Rails.root}/app/views/layouts/apipie_dsl")
    layouts_paths.unshift("#{Rails.root}/app/views/layouts")
  end
  paths = ActionView::PathSet.new(base_paths + layouts_paths)
  lookup_context = ActionView::LookupContext.new(paths)
  @renderer = ActionView::Base.with_empty_template_cache.new(lookup_context, {}, nil)
  @renderer.singleton_class.send(:include, ::ApipieDslHelper)
  @renderer
end

.with_loaded_documentationObject



125
126
127
128
# File 'lib/apipie_dsl/tasks_utils.rb', line 125

def self.with_loaded_documentation
  ApipieDSL.reload_documentation
  yield
end