Module: RestApiDoc

Includes:
FileUtils, Config
Defined in:
lib/restapi_doc.rb,
lib/restapi_doc/config.rb,
lib/restapi_doc/railtie.rb,
lib/restapi_doc/method_doc.rb,
lib/restapi_doc/resource_doc.rb

Defined Under Namespace

Modules: Config Classes: MethodDoc, ParsingException, Railtie, ResourceDoc

Constant Summary collapse

VERSION =
File.read(File.expand_path("../VERSION", File.dirname(__FILE__)))
METHODS =

valid api methods

["GET", "PUT", "DELETE", "POST"]

Instance Method Summary collapse

Methods included from Config

#asset_dir, #config_dir, #config_template_dir, #controller_dir, #form_file_name, #target_dir, #temp_dir, #template_dir

Instance Method Details

#copy_assets!Object



98
99
100
101
# File 'lib/restapi_doc.rb', line 98

def copy_assets!
  # Copy over assets
  cp_r asset_dir, temp_dir
end

#create_structureObject



18
19
20
21
22
23
24
# File 'lib/restapi_doc.rb', line 18

def create_structure
  File.directory?(config_dir) || mkdir(config_dir)
  Dir["#{config_template_dir}/*.*"].each do |template_file|
    target_file = config_dir(File.basename(template_file))
    cp template_file, config_dir if not File.exist? target_file
  end
end

#generate_doc(resource_docs) ⇒ Object

Generates views and their index in a temp directory



57
58
59
60
# File 'lib/restapi_doc.rb', line 57

def generate_doc(resource_docs)
  generate_index_templates(resource_docs)
  copy_assets!
end

#generate_index_templates(resource_docs) ⇒ Object

Creates index template for all resources



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/restapi_doc.rb', line 63

def generate_index_templates(resource_docs)
  restapi_config = YAML.load(File.read("#{config_dir}/restapi_doc.yml"))
  resource_docs.each { |resource| resource.parse_apidoc }
  template = IO.read(template_dir('index.html.haml'))
  parsed = Haml::Engine.new(template).render(Object.new, :project_info => restapi_config, :resource_docs => resource_docs)
  File.open(temp_dir("index.html"), 'w') { |file| file.write parsed }
  
  # Generate detail files
  resource_docs.each do | resource_doc|
   generate_resource_detail_file!(resource_doc)
  end
end

#generate_resource_detail_file!(resource_doc) ⇒ Object

Generate detail files for resource method



77
78
79
80
81
82
83
84
85
86
# File 'lib/restapi_doc.rb', line 77

def generate_resource_detail_file!(resource_doc)
  restapi_config = YAML.load(File.read("#{config_dir}/restapi_doc.yml"))
  Dir.mkdir(temp_dir + "/resources") if (!File.directory?(temp_dir + "/resources"))
  Dir.mkdir(temp_dir + "/resources/" + resource_doc.name) if (!File.directory?(temp_dir + "/resources/" + resource_doc.name))
  resource_doc.resource_methods.each do | method|
    template = IO.read(template_dir('detail.html.haml'))
    parsed = Haml::Engine.new(template).render(Object.new, :project_info => restapi_config, :name => resource_doc.name , :rmethod => method)
    File.open(temp_dir + "/resources/" + resource_doc.name + "/" + method[0] + ".html", 'w') { |file| file.write parsed }
  end
end

#get_controller_infoObject

Reads ‘rake routes’ output and gets the controller info



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/restapi_doc.rb', line 27

def get_controller_info
  controller_info = {}
  routes = Dir.chdir(::Rails.root.to_s) { `rake routes` }
  routes.split("\n").each do |entry|
    begin
      method, url, controller_action = entry.split.slice(-3, 3)
      if METHODS.include? method.upcase
        controller, action = controller_action.split('#')
        controller_info[controller] ||= []
        controller_info[controller] << [action, method, url]
      end
    rescue
    end
  end
  controller_info
end

#get_resourcesObject

Create resources



45
46
47
48
49
50
51
52
53
54
# File 'lib/restapi_doc.rb', line 45

def get_resources
  controller_info = get_controller_info
  resources = []
  controller_info.each do |controller, action_entries|
    controller_location = controller_dir(controller + '_controller.rb')
    controller_base_routes = action_entries
    resources << ResourceDoc.new(controller, action_entries, controller_location)
  end
  resources
end

#move_documentObject

Move document to public



89
90
91
92
93
94
95
96
# File 'lib/restapi_doc.rb', line 89

def move_document
  Dir.mkdir(target_dir) if (!File.directory?(target_dir))
  # Only want to move the .html, .css, .png and .js files, not the .haml templates.
  html_css_files = temp_dir("*.{html,css,js,png}")
  Dir[html_css_files].each { |f| mv f, target_dir }
  mv temp_dir + "/resources", target_dir, :force => true if (File.directory?(temp_dir + "/resources"))
  mv temp_dir + "/assets", target_dir, :force => true if (File.directory?(temp_dir + "/assets"))
end

#remove_structureObject

Removes the generated files



104
105
106
# File 'lib/restapi_doc.rb', line 104

def remove_structure
  rm_rf target_dir
end