gumiho 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 421a54bca859b8958330490d21fb78d2827f4b3f
4
+ data.tar.gz: 1b48177a716cf8aee17805ffe010d4dee80cc619
5
+ SHA512:
6
+ metadata.gz: 5316f7fb5e2a5b346a1314302540374567f50b1b6fc353c8b1936576bf346caf6fc2ee5903d50b006b5df5d5302f2e46d3b6b566328e26396d3b5a1091a86227
7
+ data.tar.gz: a7e2d82593e1142821d0ce71894ed85152ad929e17d0235255c8e028a074b6be0062f2364b0e846e831a31f8b9493c1070b0a184df3f923126dd5ff54b3a99bc
Binary file
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gumiho.gemspec
4
+ gemspec
5
+ gem 'awesome_print'
@@ -0,0 +1,21 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gumiho (0.0.1)
5
+ choice (~> 0.1.6)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ awesome_print (1.2.0)
11
+ choice (0.1.6)
12
+ rake (10.1.0)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ awesome_print
19
+ bundler (~> 1.3)
20
+ gumiho!
21
+ rake
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 IvaDobreva
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,19 @@
1
+ # Gumiho
2
+
3
+ Easily create RESTful API documentation
4
+
5
+ ##Table of contents
6
+ - [Installation] (#instalattion)
7
+ - [Usage](#usage)
8
+ -[Settings](#settings)
9
+
10
+ ## Installation
11
+
12
+ $ gem install gumiho
13
+
14
+ ## Usage
15
+
16
+ After installing gumiho you need to have running API.
17
+
18
+ ##Settings
19
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'generate_doc'
4
+ require_relative '../lib/gumiho/command_line_params'
5
+
6
+ module Gumiho
7
+
8
+ command_line = get_cl_params
9
+ export_dir = command_line[:export]
10
+ document = Gumiho::generate_documentation(command_line, export_dir)
11
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gumiho/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "gumiho"
8
+ spec.version = '0.0.2'
9
+ spec.authors = ["IvaDobreva"]
10
+ spec.email = ["iva95dobreva@gmail.com"]
11
+ spec.description = %q{Ruby gem for creating online RESTful API documentation with possibility to test different HTTP requests}
12
+ spec.summary = %q{Create API documentation}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = 'gumiho-export'
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+
24
+ spec.add_runtime_dependency "choice", "~> 0.1.6"
25
+ end
@@ -0,0 +1,20 @@
1
+ # http | list
2
+ generate_strategy: 'http'
3
+
4
+ methods: [ 'GET', 'POST', 'DELETE', 'PUT' ]
5
+
6
+ http:
7
+ hostname: '0.0.0.0'
8
+ port: '4000'
9
+ path: '/v1/routes'
10
+
11
+ #
12
+ # http://0.0.0.0:3000/v1
13
+
14
+ report:
15
+ document_headers: false
16
+ document_status: true
17
+
18
+ template:
19
+ '/home/iva/GEM/lib/generate_doc/template.html.erb'
20
+
@@ -0,0 +1,80 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'gumiho/route_methods'
3
+ require 'gumiho/path_config'
4
+ require 'gumiho/generate_response.rb'
5
+ require 'yaml'
6
+
7
+ module Gumiho
8
+
9
+ extend self
10
+
11
+ def generate_documentation(params, export_dir)
12
+ #Checks for command line parameters and load them
13
+
14
+ #Check for config file
15
+ if params[:config]
16
+
17
+ if File.file?(params[:config])
18
+ #parses yaml config file and creates PathConfig
19
+ yaml = YAML.load_file(params[:config])
20
+
21
+ path_conf = PathConfig.new(yaml['generate_strategy'],
22
+ yaml['http']['hostname'],
23
+ yaml['http']['port'],
24
+ yaml['http']['path'])
25
+ template_file = yaml['template']
26
+ else
27
+
28
+ abort('Wrong file')
29
+
30
+ end
31
+
32
+ else
33
+
34
+ #Creates new PathConfig object with following params
35
+ path_conf = PathConfig.new(params[:protocol], params[:hostname],
36
+ params[:port], params[:route])
37
+
38
+ template_file = params[:template]
39
+ end
40
+
41
+ routes_hash = routes_get(path_conf.build_path)
42
+ response = []
43
+
44
+ routes_hash.each do |route|
45
+
46
+ if route_filter(route['path'])==false
47
+ path = path_conf.build_path(route['path'])
48
+
49
+ params[:methods].each do |method|
50
+ case method
51
+ when 'GET'
52
+ response << { :method => 'GET',
53
+ :url => path,
54
+ :response => get_method(path)
55
+ } if route['method'].downcase == 'get'
56
+ when 'POST'
57
+ response << { :method => 'POST',
58
+ :url => path,
59
+ :response => post_method(path)
60
+ } if route['method'].downcase == 'post'
61
+ when 'PUT'
62
+ response << { :method => 'PUT',
63
+ :url => path,
64
+ :response => put_method(path)
65
+ } if route['method'].downcase == 'put'
66
+ when 'DELETE'
67
+ response << { :method => 'DELETE',
68
+ :url => path,
69
+ :response => delete_method(path)
70
+ } if route['method'].downcase == 'delete'
71
+ end
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ generate_response(response, template_file, export_dir)
78
+
79
+ end
80
+ end
@@ -0,0 +1,76 @@
1
+ require 'choice'
2
+
3
+ module Gumiho
4
+
5
+ def get_cl_params
6
+
7
+ spec = Gem::Specification.find_by_name("gumiho")
8
+ gem_root = spec.gem_dir
9
+ template = gem_root + "/lib/gumiho/template/template.html.erb"
10
+
11
+ Choice.options do
12
+ header ''
13
+ header 'Specific options:'
14
+
15
+ option :config do
16
+ short '-c'
17
+ long '--config'
18
+ desc 'Add config file'
19
+ default nil
20
+ end
21
+
22
+ option :methods do
23
+ short '-m'
24
+ long '--method'
25
+ desc 'Add GET, POST, PUT, DELETE methods'
26
+ default ['GET', 'POST', 'PUT', 'DELETE']
27
+ end
28
+
29
+ option :protocol do
30
+ short '-pr'
31
+ long '--protocol'
32
+ desc 'Change current protocol'
33
+ default 'http'
34
+ end
35
+
36
+ option :hostname do
37
+ short '-h'
38
+ long '--host'
39
+ desc 'Change current hostname'
40
+ default '0.0.0.0'
41
+ end
42
+
43
+ option :port do
44
+ short '-p'
45
+ long '--port'
46
+ desc 'Change current port'
47
+ default '4000'
48
+ end
49
+
50
+ option :route do
51
+ short '-r'
52
+ long '--route'
53
+ desc 'Change current route'
54
+ default '/v1/routes'
55
+ end
56
+
57
+ option :template do
58
+ short '-t'
59
+ long '--template'
60
+ desc 'Add report template file'
61
+ default template
62
+ end
63
+
64
+ option :export do
65
+ short '-e'
66
+ long '--export'
67
+ desc 'Export path'
68
+ default './report.html'
69
+ end
70
+ end
71
+
72
+ Choice.choices
73
+ end
74
+
75
+
76
+ end
@@ -0,0 +1,54 @@
1
+ require 'awesome_print'
2
+ require 'erb'
3
+ require 'json'
4
+
5
+ module Gumiho
6
+
7
+ def generate_response(response, template_file, export_dir)
8
+ template = File.open(template_file, 'r').read
9
+ erb = ERB.new(template)
10
+ File.open(File.join(File.dirname(export_dir), File.basename(export_dir)), 'w+') {
11
+ |file| file.write(erb.result(binding))
12
+ }
13
+ end
14
+
15
+ ###Methods used in the template file
16
+ def parse_response(response, template_param)
17
+ params = template_param.split('.')
18
+ result = response
19
+ params.each do |param|
20
+ result = result[param] if result.class == Hash
21
+ end
22
+
23
+ result
24
+ end
25
+
26
+ ######CHECK HTTTP REQUEST STATUS !!!!!
27
+ def check_status(response, template_param)
28
+ status = parse_response(response, template_param)
29
+ end
30
+ ######
31
+
32
+ def map_array(response, template_param)
33
+ result = Array.new
34
+ data = parse_response(response, template_param)
35
+
36
+ #Checks for wrong or empty array
37
+ if data.class == Array and data.empty? == false
38
+ result.push(data)
39
+ end
40
+
41
+ result.each do |param|
42
+ # ap param
43
+ param.each do |one_param|
44
+ yield one_param
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ def map_string(response, template_param)
51
+ data = parse_response(response, template_param)
52
+ end
53
+
54
+ end
@@ -0,0 +1,23 @@
1
+
2
+ module Gumiho
3
+
4
+ class PathConfig
5
+
6
+ attr_reader :hostname, :port, :protocol
7
+
8
+ def initialize(protocol, hostname, port, path)
9
+ @protocol = protocol
10
+ @hostname = hostname
11
+ @port = port
12
+ @path = path
13
+ end
14
+
15
+ #Builds path from given params
16
+ def build_path(other=nil)
17
+ return @route = "#{@protocol}://#{@hostname}:#{@port}#{@path}" if other==nil
18
+ return @route = "#{@protocol}://#{@hostname}:#{@port}#{other}"
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,107 @@
1
+ require 'net/http'
2
+ require 'json'
3
+ require 'awesome_print'
4
+
5
+ module JSON
6
+ def self.is_json?(foo)
7
+ begin
8
+ return false unless foo.is_a?(String)
9
+ JSON.parse(foo).all?
10
+ rescue JSON::ParserError
11
+ false
12
+ end
13
+ end
14
+ end
15
+
16
+
17
+ module Gumiho
18
+
19
+ def print_processing_url_method(url, method)
20
+ puts "Processing URL: #{url} via method #{method}"
21
+ end
22
+
23
+ def check_if_json(response_body)
24
+ if JSON.is_json?(response_body)
25
+ json_data = JSON.parse(response_body)
26
+ end
27
+ end
28
+
29
+ #Without doc true
30
+ def routes_get(path)
31
+ uri = URI(path)
32
+
33
+ # uri.query = URI.encode_www_form()
34
+ http = Net::HTTP.new(uri.host, uri.port)
35
+
36
+ print_processing_url_method(uri, 'GET')
37
+
38
+ response = http.get(uri)
39
+
40
+ #Checks if JSON response is right
41
+ check_if_json(response.body)
42
+ end
43
+
44
+ # GET request
45
+ def get_method(path)
46
+ uri = URI(path)
47
+
48
+ uri.query = URI.encode_www_form({ :doc => true })
49
+ http = Net::HTTP.new(uri.host, uri.port)
50
+
51
+ print_processing_url_method(uri, 'GET')
52
+
53
+ response = http.get(uri)
54
+
55
+ #Checks if JSON response is right
56
+ check_if_json(response.body)
57
+
58
+ end
59
+
60
+ #POST request
61
+ def post_method(path)
62
+
63
+ uri = URI(path)
64
+
65
+ request = Net::HTTP::Post.new(uri.path)
66
+
67
+ request.set_form_data({:doc=>true})
68
+
69
+ response = Net::HTTP.start(uri.hostname, uri.port) do |http|
70
+ http.request(request)
71
+ end
72
+ print_processing_url_method(uri, 'POST')
73
+ check_if_json(response.body)
74
+ end
75
+
76
+ #PUT request
77
+ def put_method(path)
78
+ uri = URI(path)
79
+ http = Net::HTTP.new(uri.host, uri.port)
80
+
81
+ print_processing_url_method(uri, 'PUT')
82
+
83
+ request = Net::HTTP::Put.new(path)
84
+ request.set_form_data({:doc=>true })
85
+ response = http.request(request)
86
+
87
+ check_if_json(response.body)
88
+ end
89
+
90
+ #DELETE request
91
+ def delete_method(path)
92
+ uri = URI(path)
93
+ http = Net::HTTP.new(uri.host, uri.port)
94
+
95
+ print_processing_url_method(uri, 'DELETE')
96
+
97
+ response = http.delete(path)
98
+
99
+ check_if_json(response.body)
100
+ end
101
+
102
+ #Example filter for routes containing given substring used in generate_doc
103
+ def route_filter(path)
104
+ path.include? 'time'
105
+ end
106
+
107
+ end
@@ -0,0 +1,68 @@
1
+
2
+ toggleResult = function(button) {
3
+ form.find('.result').toggle('slow')
4
+
5
+ if($(button).html() == 'Hide') {
6
+ $(button).html('Show')
7
+ } else {
8
+ $(button).html('Hide')
9
+ }
10
+ }
11
+
12
+ tryMe = function(method, url, button){
13
+ form = $(button).parent()
14
+ inputs = form.find('input')
15
+ data = {}
16
+ param_url = url
17
+ inputs.each(function(index) {
18
+
19
+ if(url.indexOf(':' + $(this).attr('name')) >= 0) {
20
+ url=url.replace(':' + $(this).attr('name'), $(this).val())
21
+ } else {
22
+ data[$(this).attr('name')] = $(this).val()
23
+ }
24
+
25
+ })
26
+
27
+
28
+ $.ajax({
29
+ type: method,
30
+ url: url,
31
+ data: data,
32
+ dataType: 'json',
33
+ crossDomain: true,
34
+
35
+ success: function( data, textStatus, jqXHR ){
36
+ console.log(data);
37
+ str = JSON.stringify(data, undefined, 4)
38
+ form.find('.result').show()
39
+ form.find('.requested_url').html(url)
40
+ form.find('.response_box').html(str)
41
+ form.find('.response_headers').html(jqXHR.getAllResponseHeaders())
42
+ form.find('.response_code').html(jqXHR.status)
43
+
44
+ if(form.find('button[onclick="toggleResult(this)"]').length==0) {
45
+ form.append('<button onclick="toggleResult(this)" type="button">Hide</button>')
46
+ }
47
+ },
48
+ error: function(data) {
49
+ inputs.each(function(index){
50
+ if(param_url.indexOf(':' + $(this).attr('name'))>=0) {
51
+ input_name = 'input[name='+$(this).attr('name')+']'
52
+ form.find(input_name).val('required').css('color', 'red')
53
+ }
54
+ })
55
+
56
+ inputs.focus(function() {
57
+ if($(this).val()=='required') {
58
+ $(this).animate({color:'red'}, 100, function() {
59
+ $(this).val('').css('color', 'black')
60
+ })
61
+ }
62
+ })
63
+
64
+ }
65
+ })
66
+
67
+ }
68
+
@@ -0,0 +1,84 @@
1
+
2
+ div.main {
3
+ width: 1000px;
4
+ margin: auto;}
5
+
6
+ .box {
7
+ display: block;
8
+ padding: 10px 10px;
9
+ font-size: 14px;
10
+ color: #1a2f43;
11
+ margin: 25px;
12
+ background-color:#dddddd;
13
+ border-color: black;
14
+ border-radius: 5px;}
15
+
16
+ .method {
17
+ background-color:#6fc717;
18
+ padding: 10px 10px;
19
+ border-radius: 5px;
20
+ padding: 10px 10px;
21
+ color: #fff;
22
+ font-weight:bold;}
23
+
24
+ .response_box {
25
+ display: block;
26
+ padding: 10px;
27
+ background-color: white;
28
+ height: 250px;
29
+ overflow: auto;
30
+ border-radius: 5px;}
31
+
32
+ .params {
33
+ border-collapse: collapse;
34
+ width: 100%;
35
+ border-bottom: 1px solid #889098;}
36
+
37
+ .params td, th {border-top: 1px solid #889098;}
38
+
39
+ .failed {
40
+ font-weight:bold;
41
+ color: #bb132a;
42
+ font-size: 16px;}
43
+
44
+ .method_failed {
45
+ background-color:#bb132a;
46
+ padding: 10px 10px;
47
+ border-radius: 5px;
48
+ padding: 10px 10px;
49
+ color: #fff;
50
+ font-weight:bold;}
51
+
52
+ .requested_url {
53
+ background-color: white;
54
+ height: 20px;
55
+ border-radius: 5px;
56
+ padding: 10px;
57
+ overflow: auto;
58
+ display: block;}
59
+
60
+ .description {
61
+ display: block;
62
+ padding: 12px 0px;}
63
+
64
+ .response_headers {
65
+ background-color: white;
66
+ padding: 10px;
67
+ height: 100px;
68
+ overflow: auto;
69
+ border-radius: 5px;
70
+ display: block;}
71
+
72
+ .result {
73
+ display: none;}
74
+
75
+ .response_h {
76
+ font-weight: bold;}
77
+
78
+ .response_code {
79
+ display: block;
80
+ background-color: white;
81
+ padding: 10px;
82
+ height: 20px;
83
+ overflow: auto;
84
+ border-radius: 5px;}
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Generated Documentation</title>
5
+
6
+ <link rel="stylesheet" type="text/css" href=<%=Gem::Specification.find_by_name("gumiho").gem_dir + "/lib/generate_doc/style/template_style.css" %>>
7
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
8
+ <script type="text/javascript" src=<%=Gem::Specification.find_by_name("gumiho").gem_dir + "/lib/generate_doc/javascript/template_script.js" %>> </script>
9
+ </head>
10
+
11
+ <body>
12
+ <br>
13
+ <div class="main">
14
+ <ul class="items">
15
+ <% response.each do |res| %>
16
+ <% if check_status(res[:response], 'metadata.status') == 'ok' %>
17
+ <li class="box">
18
+ <span class="method"><%= res[:method] %></span>
19
+ <span class="url"><b><%= res[:url] %> </b></span>
20
+ <span class="description"><b>Description:</b> <%= map_string(res[:response], 'data.description') %> </span>
21
+ <form>
22
+ <table class ="params">
23
+ <tr>
24
+ <th><b>Name</b></th>
25
+ <th><b>Value</b></th>
26
+ <th><b>Require</b></th>
27
+ <th><b>Type</b></th>
28
+ <th><b>Description</b></th>
29
+ </tr>
30
+ <% map_array(res[:response], 'data.params') do |param_data| %>
31
+ <tr>
32
+ <td><%= name = map_string(param_data,'name') %></td>
33
+ <td><input type="text" name=<%= name %> ></td>
34
+ <td><%= map_string(param_data,'required') %></td>
35
+ <td><%= map_string(param_data,'type') %></td>
36
+ <td><%= map_string(param_data,'desc') %></td>
37
+ </tr>
38
+ <% end %>
39
+ </table>
40
+ <div class="result">
41
+ <span class="response_h">Requested url</span>
42
+ <pre class="requested_url"></pre>
43
+ <span class="response_h">Response body</span>
44
+ <pre class="response_box" ></pre>
45
+ <span class="response_h">Response headers</span>
46
+ <pre class="response_headers"></pre>
47
+ <span class="response_h">Response status</span>
48
+ <pre class='response_code'></pre>
49
+ </div>
50
+ <button onclick="tryMe('<%= res[:method] %>', '<%= res[:url] %>', this)" type="button">Try it out</button>
51
+ </form>
52
+ </li>
53
+ <% else %>
54
+ <li class="box">
55
+ <span class="method_failed"><%= res[:method] %></span>
56
+ <span class="url"><b><%= res[:url] %> </b></span>
57
+ <p class="failed">Request FAILED.</p>
58
+ </li>
59
+ <% end %>
60
+ <% end %>
61
+ </ul>
62
+ </div>
63
+ </body>
64
+ </html>
@@ -0,0 +1,3 @@
1
+ module Gumiho
2
+ VERSION = "0.0.2"
3
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gumiho
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - IvaDobreva
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: choice
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.6
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.6
55
+ description: Ruby gem for creating online RESTful API documentation with possibility
56
+ to test different HTTP requests
57
+ email:
58
+ - iva95dobreva@gmail.com
59
+ executables:
60
+ - gumiho-export
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".README.md.swp"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/gumiho-export
71
+ - gumiho.gemspec
72
+ - lib/config.yml
73
+ - lib/generate_doc.rb
74
+ - lib/gumiho/command_line_params.rb
75
+ - lib/gumiho/generate_response.rb
76
+ - lib/gumiho/path_config.rb
77
+ - lib/gumiho/route_methods.rb
78
+ - lib/gumiho/template/javascript/template_script.js
79
+ - lib/gumiho/template/style/template_style.css
80
+ - lib/gumiho/template/template.html.erb
81
+ - lib/gumiho/version.rb
82
+ - pkg/generate_doc-0.0.1.gem
83
+ homepage: ''
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.2.2
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Create API documentation
107
+ test_files: []