buttless 0.0.2 → 0.0.3
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.
- checksums.yaml +7 -0
- data/Gemfile +6 -6
- data/Gemfile.lock +87 -46
- data/VERSION +1 -1
- data/buttless.gemspec +16 -15
- data/lib/buttless.rb +89 -0
- data/lib/template/Gemfile +2 -2
- data/lib/template/Rakefile +18 -68
- data/lib/template/api-doc/images/logo.png +0 -0
- data/lib/template/api-doc/index.md.erb +12 -6
- data/lib/template/config.ru +62 -0
- data/readme.textile +3 -0
- metadata +138 -89
- data/lib/template/server/config.ru +0 -47
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: d8b0bbd7631e65f91bef84a11c044dd48774a52f
|
|
4
|
+
data.tar.gz: c63361b44033ad6ba351bbd4c591d752b0bbe127
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 00cefe2d6f2ab9a09ad004b200ff03ff85815da5dfd9da59088c847eba275483ef4c75fb76eed93ec3f5416bf1ceb0b4d22fb13bb3b8488cae5e2909b49d68c7
|
|
7
|
+
data.tar.gz: 351856469e8d6ec2c20d3196df9d34bbcc6b0cce32f1a28b8349e89386d59b56e514bf58035a984e0c51c4c42023ec0ac45e439e0cf5d36fd023137a2d903282
|
data/Gemfile
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
source :
|
|
1
|
+
source :rubygems #"http://rubygems.org"
|
|
2
2
|
# Add dependencies required to use your gem here.
|
|
3
3
|
# Example:
|
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
|
@@ -20,9 +20,9 @@ gem 'sinatra'
|
|
|
20
20
|
# Add dependencies to develop your gem here.
|
|
21
21
|
# Include everything needed to run rake, tests, features, etc.
|
|
22
22
|
group :development do
|
|
23
|
-
gem "shoulda"
|
|
24
|
-
gem "rdoc"
|
|
25
|
-
gem "bundler"
|
|
26
|
-
gem "jeweler"
|
|
27
|
-
gem "simplecov"
|
|
23
|
+
gem "shoulda"
|
|
24
|
+
gem "rdoc"
|
|
25
|
+
gem "bundler"
|
|
26
|
+
gem "jeweler"
|
|
27
|
+
gem "simplecov"
|
|
28
28
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,57 +1,98 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
activesupport (
|
|
5
|
-
i18n (~> 0.6)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
activesupport (4.1.6)
|
|
5
|
+
i18n (~> 0.6, >= 0.6.9)
|
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
|
7
|
+
minitest (~> 5.1)
|
|
8
|
+
thread_safe (~> 0.1)
|
|
9
|
+
tzinfo (~> 1.1)
|
|
10
|
+
addressable (2.3.6)
|
|
11
|
+
ansi (1.4.3)
|
|
9
12
|
array_stats (0.6.0)
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
builder (3.2.2)
|
|
14
|
+
crack (0.4.2)
|
|
15
|
+
safe_yaml (~> 1.0.0)
|
|
16
|
+
descendants_tracker (0.0.4)
|
|
17
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
18
|
+
docile (1.1.5)
|
|
19
|
+
faraday (0.9.0)
|
|
20
|
+
multipart-post (>= 1.2, < 3)
|
|
21
|
+
git (1.2.8)
|
|
22
|
+
github_api (0.12.1)
|
|
23
|
+
addressable (~> 2.3)
|
|
24
|
+
descendants_tracker (~> 0.0.4)
|
|
25
|
+
faraday (~> 0.8, < 0.10)
|
|
26
|
+
hashie (>= 3.2)
|
|
27
|
+
multi_json (>= 1.7.5, < 2.0)
|
|
28
|
+
nokogiri (~> 1.6.3)
|
|
29
|
+
oauth2
|
|
12
30
|
googlecharts (1.6.8)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
31
|
+
hashie (3.3.1)
|
|
32
|
+
highline (1.6.21)
|
|
33
|
+
i18n (0.6.11)
|
|
34
|
+
jeweler (2.0.1)
|
|
35
|
+
builder
|
|
36
|
+
bundler (>= 1.0)
|
|
16
37
|
git (>= 1.2.5)
|
|
38
|
+
github_api
|
|
39
|
+
highline (>= 1.6.15)
|
|
40
|
+
nokogiri (>= 1.5.10)
|
|
17
41
|
rake
|
|
18
42
|
rdoc
|
|
19
|
-
json (1.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
43
|
+
json (1.8.1)
|
|
44
|
+
jwt (1.0.0)
|
|
45
|
+
mime-types (2.3)
|
|
46
|
+
mini_portile (0.6.0)
|
|
47
|
+
minitest (5.4.1)
|
|
48
|
+
minitest-reporters (1.0.5)
|
|
23
49
|
ansi
|
|
24
|
-
|
|
50
|
+
builder
|
|
51
|
+
minitest (>= 5.0)
|
|
25
52
|
ruby-progressbar
|
|
26
|
-
multi_json (1.1
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
53
|
+
multi_json (1.10.1)
|
|
54
|
+
multi_xml (0.5.5)
|
|
55
|
+
multipart-post (2.0.0)
|
|
56
|
+
netrc (0.7.7)
|
|
57
|
+
nokogiri (1.6.3.1)
|
|
58
|
+
mini_portile (= 0.6.0)
|
|
59
|
+
oauth2 (1.0.0)
|
|
60
|
+
faraday (>= 0.8, < 0.10)
|
|
61
|
+
jwt (~> 1.0)
|
|
62
|
+
multi_json (~> 1.3)
|
|
63
|
+
multi_xml (~> 0.5)
|
|
64
|
+
rack (~> 1.2)
|
|
65
|
+
pdfkit (0.6.2)
|
|
66
|
+
rack (1.5.2)
|
|
67
|
+
rake (10.3.2)
|
|
68
|
+
rdoc (4.1.2)
|
|
33
69
|
json (~> 1.4)
|
|
34
|
-
redcarpet (
|
|
35
|
-
rest-client (1.
|
|
36
|
-
mime-types (>= 1.16)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
simplecov
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
70
|
+
redcarpet (3.1.2)
|
|
71
|
+
rest-client (1.7.2)
|
|
72
|
+
mime-types (>= 1.16, < 3.0)
|
|
73
|
+
netrc (~> 0.7)
|
|
74
|
+
ruby-progressbar (1.5.1)
|
|
75
|
+
safe_yaml (1.0.3)
|
|
76
|
+
shoulda (3.5.0)
|
|
77
|
+
shoulda-context (~> 1.0, >= 1.0.1)
|
|
78
|
+
shoulda-matchers (>= 1.4.1, < 3.0)
|
|
79
|
+
shoulda-context (1.2.1)
|
|
80
|
+
shoulda-matchers (2.7.0)
|
|
81
|
+
activesupport (>= 3.0.0)
|
|
82
|
+
simplecov (0.9.0)
|
|
83
|
+
docile (~> 1.1.0)
|
|
84
|
+
multi_json
|
|
85
|
+
simplecov-html (~> 0.8.0)
|
|
86
|
+
simplecov-html (0.8.0)
|
|
87
|
+
sinatra (1.0)
|
|
88
|
+
rack (>= 1.0)
|
|
89
|
+
thread_safe (0.3.4)
|
|
90
|
+
tilt (2.0.1)
|
|
91
|
+
tzinfo (1.2.2)
|
|
92
|
+
thread_safe (~> 0.1)
|
|
93
|
+
webmock (1.18.0)
|
|
94
|
+
addressable (>= 2.3.6)
|
|
95
|
+
crack (>= 0.3.2)
|
|
55
96
|
|
|
56
97
|
PLATFORMS
|
|
57
98
|
ruby
|
|
@@ -59,15 +100,15 @@ PLATFORMS
|
|
|
59
100
|
DEPENDENCIES
|
|
60
101
|
activesupport
|
|
61
102
|
array_stats
|
|
62
|
-
bundler
|
|
103
|
+
bundler
|
|
63
104
|
googlecharts
|
|
64
|
-
jeweler
|
|
105
|
+
jeweler
|
|
65
106
|
json
|
|
66
107
|
minitest
|
|
67
108
|
minitest-reporters
|
|
68
109
|
pdfkit
|
|
69
110
|
rake
|
|
70
|
-
rdoc
|
|
111
|
+
rdoc
|
|
71
112
|
redcarpet
|
|
72
113
|
rest-client
|
|
73
114
|
shoulda
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.3
|
data/buttless.gemspec
CHANGED
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
+
# stub: buttless 0.0.3 ruby lib
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |s|
|
|
7
8
|
s.name = "buttless"
|
|
8
|
-
s.version = "0.0.
|
|
9
|
+
s.version = "0.0.3"
|
|
9
10
|
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
|
+
s.require_paths = ["lib"]
|
|
11
13
|
s.authors = ["Tobin Harris"]
|
|
12
|
-
s.date = "
|
|
14
|
+
s.date = "2014-09-14"
|
|
13
15
|
s.description = "Buttless gives you a way to quickly flesh out an API in detail. It generates sexy documentation. And, you can quickly run the API and simulate various scenarios without neededing a backend."
|
|
14
16
|
s.email = "tobin@tobinharris.com"
|
|
15
17
|
s.executables = ["buttless"]
|
|
@@ -40,6 +42,7 @@ Gem::Specification.new do |s|
|
|
|
40
42
|
"lib/template/api-doc/screen.css",
|
|
41
43
|
"lib/template/api-doc/template.html.erb",
|
|
42
44
|
"lib/template/code_samples/prthw.md.erb",
|
|
45
|
+
"lib/template/config.ru",
|
|
43
46
|
"lib/template/config.yaml",
|
|
44
47
|
"lib/template/database.yaml",
|
|
45
48
|
"lib/template/install",
|
|
@@ -48,7 +51,6 @@ Gem::Specification.new do |s|
|
|
|
48
51
|
"lib/template/json_examples/funky_thing.json",
|
|
49
52
|
"lib/template/json_examples/post_ok.json",
|
|
50
53
|
"lib/template/readme.textile",
|
|
51
|
-
"lib/template/server/config.ru",
|
|
52
54
|
"lib/template/test/test_helper.rb",
|
|
53
55
|
"lib/template/test/test_stuff.rb",
|
|
54
56
|
"readme.textile",
|
|
@@ -57,12 +59,11 @@ Gem::Specification.new do |s|
|
|
|
57
59
|
]
|
|
58
60
|
s.homepage = "http://github.com/tobinharris/buttless"
|
|
59
61
|
s.licenses = ["MIT"]
|
|
60
|
-
s.
|
|
61
|
-
s.rubygems_version = "1.8.11"
|
|
62
|
+
s.rubygems_version = "2.2.2"
|
|
62
63
|
s.summary = "Design, document and develop against an API without having a backend."
|
|
63
64
|
|
|
64
65
|
if s.respond_to? :specification_version then
|
|
65
|
-
s.specification_version =
|
|
66
|
+
s.specification_version = 4
|
|
66
67
|
|
|
67
68
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
68
69
|
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
|
@@ -79,9 +80,9 @@ Gem::Specification.new do |s|
|
|
|
79
80
|
s.add_runtime_dependency(%q<minitest-reporters>, [">= 0"])
|
|
80
81
|
s.add_runtime_dependency(%q<sinatra>, [">= 0"])
|
|
81
82
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
|
82
|
-
s.add_development_dependency(%q<rdoc>, ["
|
|
83
|
-
s.add_development_dependency(%q<bundler>, ["
|
|
84
|
-
s.add_development_dependency(%q<jeweler>, ["
|
|
83
|
+
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
|
84
|
+
s.add_development_dependency(%q<bundler>, [">= 0"])
|
|
85
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
85
86
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
|
86
87
|
else
|
|
87
88
|
s.add_dependency(%q<rest-client>, [">= 0"])
|
|
@@ -98,9 +99,9 @@ Gem::Specification.new do |s|
|
|
|
98
99
|
s.add_dependency(%q<minitest-reporters>, [">= 0"])
|
|
99
100
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
|
100
101
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
101
|
-
s.add_dependency(%q<rdoc>, ["
|
|
102
|
-
s.add_dependency(%q<bundler>, ["
|
|
103
|
-
s.add_dependency(%q<jeweler>, ["
|
|
102
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
|
103
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
|
104
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
104
105
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
|
105
106
|
end
|
|
106
107
|
else
|
|
@@ -118,9 +119,9 @@ Gem::Specification.new do |s|
|
|
|
118
119
|
s.add_dependency(%q<minitest-reporters>, [">= 0"])
|
|
119
120
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
|
120
121
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
121
|
-
s.add_dependency(%q<rdoc>, ["
|
|
122
|
-
s.add_dependency(%q<bundler>, ["
|
|
123
|
-
s.add_dependency(%q<jeweler>, ["
|
|
122
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
|
123
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
|
124
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
124
125
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
|
125
126
|
end
|
|
126
127
|
end
|
data/lib/buttless.rb
CHANGED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'RedCarpet'
|
|
2
|
+
class Buttless
|
|
3
|
+
def initialize(home_dir, host="http://127.0.0.1:9292")
|
|
4
|
+
@home_dir = home_dir
|
|
5
|
+
@host = host
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def config
|
|
9
|
+
reload_data()
|
|
10
|
+
@config
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def host
|
|
14
|
+
@host
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def generate_html(with_base=false)
|
|
18
|
+
Dir.chdir(@home_dir)
|
|
19
|
+
Dir.chdir('api-doc')
|
|
20
|
+
@root_url = with_base ? "file://localhost#{Dir.pwd}/" : "./"
|
|
21
|
+
reload_data()
|
|
22
|
+
doc = Tilt.new("index.md.erb").render(self, :db=>@db, :helper=>Helper.new, :config=>@config)
|
|
23
|
+
md = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(render_options={}), extensions={:tables=>true})
|
|
24
|
+
#toc = Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC.new())
|
|
25
|
+
@content = md.render(doc)
|
|
26
|
+
|
|
27
|
+
@html = ERB.new(File.open('template.html.erb','r').read()).result(binding())
|
|
28
|
+
@html = @html.gsub(/root_url/,@root_url)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def reload_data
|
|
32
|
+
@config = YAML::load(File.open("#{@home_dir}/config.yaml"))
|
|
33
|
+
@db = YAML::load(File.open("#{@home_dir}/database.yaml"))
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def example(name)
|
|
38
|
+
return "TODO" if name.nil?
|
|
39
|
+
name = name.to_s
|
|
40
|
+
File.open("#{@home_dir}/json_examples/#{name}.json".downcase,'r').read()
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class Helper
|
|
46
|
+
def example_path(method, ip=nil)
|
|
47
|
+
path = method["path"]
|
|
48
|
+
params = []
|
|
49
|
+
method["parameters"].each do |p|
|
|
50
|
+
is_in_path = path.include?(":#{p['name']}")
|
|
51
|
+
next if not is_in_path and (p["optional"] or p["type"]=="POST" or (p["type"].nil? and method["method"] == "POST"))
|
|
52
|
+
if path.include?(":#{p['name']}")
|
|
53
|
+
path = path.gsub(":#{p['name']}", p["example"].to_s)
|
|
54
|
+
next
|
|
55
|
+
else
|
|
56
|
+
params << "#{p["name"]}=#{p["example"]}"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end unless method["parameters"].nil?
|
|
60
|
+
|
|
61
|
+
api_call = "#{path}?#{params.join('&')}"
|
|
62
|
+
#puts "**** WARNING **** \n Method length is #{api_call.length}, which is greater than 19 so won't work on some embedded devices: #{api_call}" if "#{path}?#{params.join('&')}".length > 19
|
|
63
|
+
"#{ip}#{api_call}"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def example_curl(method, ip="http://0.0.0.0:3000", no=3)
|
|
67
|
+
unparsed_path = method["path"]
|
|
68
|
+
puts unparsed_path
|
|
69
|
+
path = example_path(method, ip)
|
|
70
|
+
i = 0
|
|
71
|
+
params = []
|
|
72
|
+
method["parameters"].select{|p|p["type"]=="POST" || (p["type"].nil? && method["method"]=="POST")}.each do |p|
|
|
73
|
+
is_in_path = unparsed_path.include?(":#{p['name']}")
|
|
74
|
+
puts ":#{p['name']} in path #{unparsed_path}? #{is_in_path}"
|
|
75
|
+
break unless (i < no or p["optional"] == false)
|
|
76
|
+
i=i+1 unless p["optional"] == false
|
|
77
|
+
if ! is_in_path
|
|
78
|
+
params << "#{p["name"]}=#{p["example"]}"
|
|
79
|
+
else
|
|
80
|
+
#path.gsub!(":#{p['name']}", p["example"].to_s)
|
|
81
|
+
end
|
|
82
|
+
end if method["parameters"]
|
|
83
|
+
data = nil
|
|
84
|
+
unless params.empty?
|
|
85
|
+
data = "--data \"#{params.join(" \\ \n&")} \" "
|
|
86
|
+
end
|
|
87
|
+
"curl -v #{data.nil? ? '' : "\\\n #{data}"}\\\n#{path}".chomp('?')
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/template/Gemfile
CHANGED
data/lib/template/Rakefile
CHANGED
|
@@ -1,45 +1,12 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
|
+
require 'yaml'
|
|
2
3
|
require "bundler/setup"
|
|
3
4
|
require 'rake/testtask'
|
|
4
5
|
require 'pdfkit'
|
|
5
6
|
require 'redcarpet'
|
|
6
7
|
require 'erb'
|
|
7
8
|
require 'tilt'
|
|
8
|
-
|
|
9
|
-
class Helper
|
|
10
|
-
def example_path(method, ip=nil)
|
|
11
|
-
path = method["path"]
|
|
12
|
-
params = []
|
|
13
|
-
method["parameters"].each do |p|
|
|
14
|
-
next if p["optional"] or p["type"]=="POST"
|
|
15
|
-
if path.include?(":#{p['name']}")
|
|
16
|
-
path.gsub!(":#{p['name']}", p["example"].to_s)
|
|
17
|
-
next
|
|
18
|
-
end
|
|
19
|
-
params << "#{p["name"]}=#{p["example"]}"
|
|
20
|
-
end unless method["parameters"].nil?
|
|
21
|
-
|
|
22
|
-
api_call = "#{path}?#{params.join('&')}"
|
|
23
|
-
#puts "**** WARNING **** \n Method length is #{api_call.length}, which is greater than 19 so won't work on some embedded devices: #{api_call}" if "#{path}?#{params.join('&')}".length > 19
|
|
24
|
-
"#{ip}#{api_call}"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def example_curl(method, ip="http://192.168.1.3", no=2)
|
|
28
|
-
path = example_path(method, ip)
|
|
29
|
-
i = 0
|
|
30
|
-
params = []
|
|
31
|
-
method["parameters"].select{|p|p["type"]=="POST"}.each do |p|
|
|
32
|
-
break unless i < no or p["optional"] == false
|
|
33
|
-
i=i+1
|
|
34
|
-
params << "#{p["name"]}=#{p["example"]}"
|
|
35
|
-
end if method["parameters"]
|
|
36
|
-
data = nil
|
|
37
|
-
unless params.empty?
|
|
38
|
-
data = "--data \"#{params.join('&')}\" \\\n"
|
|
39
|
-
end
|
|
40
|
-
"curl -v #{data.nil? ? '' : "\\\n #{data}"} #{path}".chomp('?')
|
|
41
|
-
end
|
|
42
|
-
end
|
|
9
|
+
require 'buttless'
|
|
43
10
|
|
|
44
11
|
Rake::TestTask.new do |t|
|
|
45
12
|
t.pattern = "test/test_*.rb"
|
|
@@ -52,45 +19,28 @@ desc "Generate HTML and PDF"
|
|
|
52
19
|
task :gen => [:html, :pdf]
|
|
53
20
|
|
|
54
21
|
desc "Generate HTML docs"
|
|
55
|
-
task :html
|
|
56
|
-
|
|
22
|
+
task :html do
|
|
23
|
+
prepare()
|
|
24
|
+
html = @buttless.generate_html()
|
|
25
|
+
File.open('index.html','w').write(html)
|
|
57
26
|
end
|
|
58
27
|
|
|
59
28
|
desc "Generate PDF docs"
|
|
60
|
-
task :pdf => :
|
|
61
|
-
|
|
62
|
-
#`wkhtmltopdf --page-size A4 --margin-left 20mm --margin-right 20mm --margin-top 20mm --margin-bottom 20mm index.html #{@config["full_title"]}.pdf`
|
|
63
|
-
|
|
64
|
-
# PDFKit.configure do |config|
|
|
65
|
-
# config.root_url = @root_url
|
|
66
|
-
# end
|
|
67
|
-
#
|
|
68
|
-
# kit = PDFKit.new(@html, :page_size => 'A4') #:print_media_type => true,
|
|
69
|
-
# kit.stylesheets << 'report.css'
|
|
70
|
-
# file = kit.to_file("#{@config["full_title"]}.pdf")
|
|
29
|
+
task :pdf => :html do
|
|
30
|
+
# Just print index.html from chrome!
|
|
31
|
+
#`wkhtmltopdf --page-size A4 --margin-left 20mm --margin-right 20mm --margin-top 20mm --margin-bottom 20mm index.html #{@buttless.config["full_title"]}.pdf`
|
|
71
32
|
end
|
|
72
33
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
@
|
|
78
|
-
|
|
79
|
-
@config = YAML::load( File.open( "#{@home_dir}/config.yaml" ) )
|
|
80
|
-
@db = YAML::load( File.open( "#{@home_dir}/database.yaml" ) )
|
|
81
|
-
|
|
82
|
-
doc = Tilt.new("index.md.erb").render(self, :db=>@db, :helper=>Helper.new, :config=>@config)
|
|
83
|
-
md = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(render_options={}), extensions={:tables=>true})
|
|
84
|
-
#toc = Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC.new())
|
|
85
|
-
@content = md.render(doc)
|
|
86
|
-
|
|
87
|
-
@html = ERB.new(File.open('template.html.erb','r').read()).result(binding())
|
|
88
|
-
@html = @html.gsub(/root_url/,@root_url)
|
|
89
|
-
|
|
34
|
+
|
|
35
|
+
def prepare
|
|
36
|
+
root = "#{File.dirname(__FILE__)}"
|
|
37
|
+
b = Buttless.new(root)
|
|
38
|
+
@buttless = b
|
|
39
|
+
@config = b.config
|
|
90
40
|
end
|
|
91
41
|
|
|
92
42
|
def example(name)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
43
|
+
return "TODO" if name.nil?
|
|
44
|
+
name = name.to_s
|
|
45
|
+
File.open("#{@home_dir}/json_examples/#{name}.json".downcase,'r').read()
|
|
96
46
|
end
|
|
Binary file
|
|
@@ -74,6 +74,11 @@ API Documentation
|
|
|
74
74
|
|
|
75
75
|
<%= method["precis"] %>
|
|
76
76
|
|
|
77
|
+
#### Using this API
|
|
78
|
+
|
|
79
|
+
<%= method["description"] %>
|
|
80
|
+
|
|
81
|
+
|
|
77
82
|
<% if method["parameters"] %>
|
|
78
83
|
#### Paramters
|
|
79
84
|
|
|
@@ -99,22 +104,23 @@ API Documentation
|
|
|
99
104
|
#### Example request:
|
|
100
105
|
|
|
101
106
|
<pre>
|
|
102
|
-
<%= helper.example_curl(method)%>
|
|
107
|
+
<%= helper.example_curl(method,host)%>
|
|
103
108
|
</pre>
|
|
104
109
|
|
|
105
110
|
<% if method["resolves_to"] %>
|
|
106
111
|
This API resolves to <code><%= method["resolves_to"]%></code>.
|
|
107
112
|
<% end %>
|
|
108
113
|
|
|
114
|
+
<% if method["http_basic"] || method["http_basic"] == 1 %>
|
|
115
|
+
<i>Note: This method uses HTTP BASIC authentication</i>
|
|
116
|
+
<% end %>
|
|
117
|
+
|
|
109
118
|
#### Example response:
|
|
110
119
|
|
|
111
|
-
<pre>
|
|
112
|
-
<%= example
|
|
120
|
+
<pre style="max-height: 600px; overflow: scroll;">
|
|
121
|
+
<%= example(method["example_response"]) %>
|
|
113
122
|
</pre>
|
|
114
123
|
|
|
115
|
-
#### Using this API
|
|
116
|
-
|
|
117
|
-
<%= method["description"] %>
|
|
118
124
|
|
|
119
125
|
<% end %>
|
|
120
126
|
<% end %>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'sinatra/base'
|
|
2
|
+
require 'yaml'
|
|
3
|
+
require 'buttless'
|
|
4
|
+
@home_dir = File.dirname(__FILE__)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Create new Sinatra controller
|
|
8
|
+
controller = Sinatra.new do
|
|
9
|
+
enable :logging
|
|
10
|
+
set :root, './api-doc/'
|
|
11
|
+
configure do
|
|
12
|
+
set :views, ''
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Loop through our API database
|
|
18
|
+
# setting up the sinatra app dynamically
|
|
19
|
+
map('/') do
|
|
20
|
+
run Sinatra.new(controller) {
|
|
21
|
+
|
|
22
|
+
root = "#{File.dirname(__FILE__)}"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
controller.set :root, "#{root}/api-doc"
|
|
26
|
+
controller.set :public_folder, "#{root}/api-doc"
|
|
27
|
+
|
|
28
|
+
get('/docs') {
|
|
29
|
+
buttless = Buttless.new(root, "#{request.scheme}://#{request.host}#{request.port != 80 ? ":#{request.port }": 0}")
|
|
30
|
+
html = buttless.generate_html
|
|
31
|
+
html
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@db = YAML::load(File.open("./database.yaml"))
|
|
35
|
+
@db.each do |resource|
|
|
36
|
+
resource["methods"].each do |method|
|
|
37
|
+
#next if method["path"] =~ /comfort_/
|
|
38
|
+
puts "Configuring #{method["path"]}"
|
|
39
|
+
|
|
40
|
+
# map the path of the API method
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# if it's a POST method
|
|
44
|
+
if method["method"] == "POST"
|
|
45
|
+
post(method["path"]) {
|
|
46
|
+
content_type :json
|
|
47
|
+
File.open("#{root}/json_examples/#{method["example_response"]}.json".downcase, 'r').read
|
|
48
|
+
}
|
|
49
|
+
else
|
|
50
|
+
get(method["path"]) {
|
|
51
|
+
content_type :json
|
|
52
|
+
File.open("#{root}/json_examples/#{method['example_response']}.json".downcase, 'r').read
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
data/readme.textile
CHANGED
|
@@ -29,6 +29,9 @@ Congrats, you've just started defining your API, and will be soon able to genera
|
|
|
29
29
|
|
|
30
30
|
Now to "learn how to work with your API":https://github.com/tobinharris/buttless/blob/master/lib/template/readme.textile.
|
|
31
31
|
|
|
32
|
+
h2. TODO
|
|
33
|
+
|
|
34
|
+
* Make default method GET
|
|
32
35
|
|
|
33
36
|
h2. Contributing to buttless
|
|
34
37
|
|
metadata
CHANGED
|
@@ -1,214 +1,267 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: buttless
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.0.3
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Tobin Harris
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2014-09-14 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rest-client
|
|
16
|
-
requirement:
|
|
17
|
-
none: false
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
17
|
+
- - ">="
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
19
|
version: '0'
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
25
27
|
- !ruby/object:Gem::Dependency
|
|
26
28
|
name: json
|
|
27
|
-
requirement:
|
|
28
|
-
none: false
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
30
|
requirements:
|
|
30
|
-
- -
|
|
31
|
+
- - ">="
|
|
31
32
|
- !ruby/object:Gem::Version
|
|
32
33
|
version: '0'
|
|
33
34
|
type: :runtime
|
|
34
35
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
36
41
|
- !ruby/object:Gem::Dependency
|
|
37
42
|
name: pdfkit
|
|
38
|
-
requirement:
|
|
39
|
-
none: false
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
40
44
|
requirements:
|
|
41
|
-
- -
|
|
45
|
+
- - ">="
|
|
42
46
|
- !ruby/object:Gem::Version
|
|
43
47
|
version: '0'
|
|
44
48
|
type: :runtime
|
|
45
49
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
47
55
|
- !ruby/object:Gem::Dependency
|
|
48
56
|
name: activesupport
|
|
49
|
-
requirement:
|
|
50
|
-
none: false
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
51
58
|
requirements:
|
|
52
|
-
- -
|
|
59
|
+
- - ">="
|
|
53
60
|
- !ruby/object:Gem::Version
|
|
54
61
|
version: '0'
|
|
55
62
|
type: :runtime
|
|
56
63
|
prerelease: false
|
|
57
|
-
version_requirements:
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
58
69
|
- !ruby/object:Gem::Dependency
|
|
59
70
|
name: minitest
|
|
60
|
-
requirement:
|
|
61
|
-
none: false
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
62
72
|
requirements:
|
|
63
|
-
- -
|
|
73
|
+
- - ">="
|
|
64
74
|
- !ruby/object:Gem::Version
|
|
65
75
|
version: '0'
|
|
66
76
|
type: :runtime
|
|
67
77
|
prerelease: false
|
|
68
|
-
version_requirements:
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: googlecharts
|
|
71
|
-
requirement:
|
|
72
|
-
none: false
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
86
|
requirements:
|
|
74
|
-
- -
|
|
87
|
+
- - ">="
|
|
75
88
|
- !ruby/object:Gem::Version
|
|
76
89
|
version: '0'
|
|
77
90
|
type: :runtime
|
|
78
91
|
prerelease: false
|
|
79
|
-
version_requirements:
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
80
97
|
- !ruby/object:Gem::Dependency
|
|
81
98
|
name: array_stats
|
|
82
|
-
requirement:
|
|
83
|
-
none: false
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
84
100
|
requirements:
|
|
85
|
-
- -
|
|
101
|
+
- - ">="
|
|
86
102
|
- !ruby/object:Gem::Version
|
|
87
103
|
version: '0'
|
|
88
104
|
type: :runtime
|
|
89
105
|
prerelease: false
|
|
90
|
-
version_requirements:
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
91
111
|
- !ruby/object:Gem::Dependency
|
|
92
112
|
name: redcarpet
|
|
93
|
-
requirement:
|
|
94
|
-
none: false
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
95
114
|
requirements:
|
|
96
|
-
- -
|
|
115
|
+
- - ">="
|
|
97
116
|
- !ruby/object:Gem::Version
|
|
98
117
|
version: '0'
|
|
99
118
|
type: :runtime
|
|
100
119
|
prerelease: false
|
|
101
|
-
version_requirements:
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
102
125
|
- !ruby/object:Gem::Dependency
|
|
103
126
|
name: webmock
|
|
104
|
-
requirement:
|
|
105
|
-
none: false
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
106
128
|
requirements:
|
|
107
|
-
- -
|
|
129
|
+
- - ">="
|
|
108
130
|
- !ruby/object:Gem::Version
|
|
109
131
|
version: '0'
|
|
110
132
|
type: :runtime
|
|
111
133
|
prerelease: false
|
|
112
|
-
version_requirements:
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
113
139
|
- !ruby/object:Gem::Dependency
|
|
114
140
|
name: rake
|
|
115
|
-
requirement:
|
|
116
|
-
none: false
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
117
142
|
requirements:
|
|
118
|
-
- -
|
|
143
|
+
- - ">="
|
|
119
144
|
- !ruby/object:Gem::Version
|
|
120
145
|
version: '0'
|
|
121
146
|
type: :runtime
|
|
122
147
|
prerelease: false
|
|
123
|
-
version_requirements:
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0'
|
|
124
153
|
- !ruby/object:Gem::Dependency
|
|
125
154
|
name: tilt
|
|
126
|
-
requirement:
|
|
127
|
-
none: false
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
156
|
requirements:
|
|
129
|
-
- -
|
|
157
|
+
- - ">="
|
|
130
158
|
- !ruby/object:Gem::Version
|
|
131
159
|
version: '0'
|
|
132
160
|
type: :runtime
|
|
133
161
|
prerelease: false
|
|
134
|
-
version_requirements:
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - ">="
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0'
|
|
135
167
|
- !ruby/object:Gem::Dependency
|
|
136
168
|
name: minitest-reporters
|
|
137
|
-
requirement:
|
|
138
|
-
none: false
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
139
170
|
requirements:
|
|
140
|
-
- -
|
|
171
|
+
- - ">="
|
|
141
172
|
- !ruby/object:Gem::Version
|
|
142
173
|
version: '0'
|
|
143
174
|
type: :runtime
|
|
144
175
|
prerelease: false
|
|
145
|
-
version_requirements:
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - ">="
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0'
|
|
146
181
|
- !ruby/object:Gem::Dependency
|
|
147
182
|
name: sinatra
|
|
148
|
-
requirement:
|
|
149
|
-
none: false
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
150
184
|
requirements:
|
|
151
|
-
- -
|
|
185
|
+
- - ">="
|
|
152
186
|
- !ruby/object:Gem::Version
|
|
153
187
|
version: '0'
|
|
154
188
|
type: :runtime
|
|
155
189
|
prerelease: false
|
|
156
|
-
version_requirements:
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - ">="
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '0'
|
|
157
195
|
- !ruby/object:Gem::Dependency
|
|
158
196
|
name: shoulda
|
|
159
|
-
requirement:
|
|
160
|
-
none: false
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
198
|
requirements:
|
|
162
|
-
- -
|
|
199
|
+
- - ">="
|
|
163
200
|
- !ruby/object:Gem::Version
|
|
164
201
|
version: '0'
|
|
165
202
|
type: :development
|
|
166
203
|
prerelease: false
|
|
167
|
-
version_requirements:
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - ">="
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0'
|
|
168
209
|
- !ruby/object:Gem::Dependency
|
|
169
210
|
name: rdoc
|
|
170
|
-
requirement:
|
|
171
|
-
none: false
|
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
|
172
212
|
requirements:
|
|
173
|
-
- -
|
|
213
|
+
- - ">="
|
|
174
214
|
- !ruby/object:Gem::Version
|
|
175
|
-
version: '
|
|
215
|
+
version: '0'
|
|
176
216
|
type: :development
|
|
177
217
|
prerelease: false
|
|
178
|
-
version_requirements:
|
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - ">="
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '0'
|
|
179
223
|
- !ruby/object:Gem::Dependency
|
|
180
224
|
name: bundler
|
|
181
|
-
requirement:
|
|
182
|
-
none: false
|
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
|
183
226
|
requirements:
|
|
184
|
-
- -
|
|
227
|
+
- - ">="
|
|
185
228
|
- !ruby/object:Gem::Version
|
|
186
|
-
version:
|
|
229
|
+
version: '0'
|
|
187
230
|
type: :development
|
|
188
231
|
prerelease: false
|
|
189
|
-
version_requirements:
|
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
+
requirements:
|
|
234
|
+
- - ">="
|
|
235
|
+
- !ruby/object:Gem::Version
|
|
236
|
+
version: '0'
|
|
190
237
|
- !ruby/object:Gem::Dependency
|
|
191
238
|
name: jeweler
|
|
192
|
-
requirement:
|
|
193
|
-
none: false
|
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
|
194
240
|
requirements:
|
|
195
|
-
- -
|
|
241
|
+
- - ">="
|
|
196
242
|
- !ruby/object:Gem::Version
|
|
197
|
-
version:
|
|
243
|
+
version: '0'
|
|
198
244
|
type: :development
|
|
199
245
|
prerelease: false
|
|
200
|
-
version_requirements:
|
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
247
|
+
requirements:
|
|
248
|
+
- - ">="
|
|
249
|
+
- !ruby/object:Gem::Version
|
|
250
|
+
version: '0'
|
|
201
251
|
- !ruby/object:Gem::Dependency
|
|
202
252
|
name: simplecov
|
|
203
|
-
requirement:
|
|
204
|
-
none: false
|
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
|
205
254
|
requirements:
|
|
206
|
-
- -
|
|
255
|
+
- - ">="
|
|
207
256
|
- !ruby/object:Gem::Version
|
|
208
257
|
version: '0'
|
|
209
258
|
type: :development
|
|
210
259
|
prerelease: false
|
|
211
|
-
version_requirements:
|
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
261
|
+
requirements:
|
|
262
|
+
- - ">="
|
|
263
|
+
- !ruby/object:Gem::Version
|
|
264
|
+
version: '0'
|
|
212
265
|
description: Buttless gives you a way to quickly flesh out an API in detail. It generates
|
|
213
266
|
sexy documentation. And, you can quickly run the API and simulate various scenarios
|
|
214
267
|
without neededing a backend.
|
|
@@ -220,7 +273,7 @@ extra_rdoc_files:
|
|
|
220
273
|
- LICENSE.txt
|
|
221
274
|
- README_old.rdoc
|
|
222
275
|
files:
|
|
223
|
-
- .document
|
|
276
|
+
- ".document"
|
|
224
277
|
- Gemfile
|
|
225
278
|
- Gemfile.lock
|
|
226
279
|
- LICENSE.txt
|
|
@@ -242,6 +295,7 @@ files:
|
|
|
242
295
|
- lib/template/api-doc/screen.css
|
|
243
296
|
- lib/template/api-doc/template.html.erb
|
|
244
297
|
- lib/template/code_samples/prthw.md.erb
|
|
298
|
+
- lib/template/config.ru
|
|
245
299
|
- lib/template/config.yaml
|
|
246
300
|
- lib/template/database.yaml
|
|
247
301
|
- lib/template/install
|
|
@@ -250,7 +304,6 @@ files:
|
|
|
250
304
|
- lib/template/json_examples/funky_thing.json
|
|
251
305
|
- lib/template/json_examples/post_ok.json
|
|
252
306
|
- lib/template/readme.textile
|
|
253
|
-
- lib/template/server/config.ru
|
|
254
307
|
- lib/template/test/test_helper.rb
|
|
255
308
|
- lib/template/test/test_stuff.rb
|
|
256
309
|
- readme.textile
|
|
@@ -259,29 +312,25 @@ files:
|
|
|
259
312
|
homepage: http://github.com/tobinharris/buttless
|
|
260
313
|
licenses:
|
|
261
314
|
- MIT
|
|
315
|
+
metadata: {}
|
|
262
316
|
post_install_message:
|
|
263
317
|
rdoc_options: []
|
|
264
318
|
require_paths:
|
|
265
319
|
- lib
|
|
266
320
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
267
|
-
none: false
|
|
268
321
|
requirements:
|
|
269
|
-
- -
|
|
322
|
+
- - ">="
|
|
270
323
|
- !ruby/object:Gem::Version
|
|
271
324
|
version: '0'
|
|
272
|
-
segments:
|
|
273
|
-
- 0
|
|
274
|
-
hash: 1452091441489891932
|
|
275
325
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
|
-
none: false
|
|
277
326
|
requirements:
|
|
278
|
-
- -
|
|
327
|
+
- - ">="
|
|
279
328
|
- !ruby/object:Gem::Version
|
|
280
329
|
version: '0'
|
|
281
330
|
requirements: []
|
|
282
331
|
rubyforge_project:
|
|
283
|
-
rubygems_version:
|
|
332
|
+
rubygems_version: 2.2.2
|
|
284
333
|
signing_key:
|
|
285
|
-
specification_version:
|
|
334
|
+
specification_version: 4
|
|
286
335
|
summary: Design, document and develop against an API without having a backend.
|
|
287
336
|
test_files: []
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
require 'sinatra/base'
|
|
2
|
-
|
|
3
|
-
@home_dir = File.dirname(__FILE__) + '/../'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
# Create new Sinatra controller
|
|
8
|
-
controller = Sinatra.new do
|
|
9
|
-
enable :logging
|
|
10
|
-
set :root, '../api-doc/'
|
|
11
|
-
configure do
|
|
12
|
-
set :views, ''
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Loop through our API database
|
|
18
|
-
# setting up the sinatra app dynamically
|
|
19
|
-
map('/') do
|
|
20
|
-
run Sinatra.new(controller){
|
|
21
|
-
@db = YAML::load( File.open( "../database.yaml" ) )
|
|
22
|
-
@db.each do |resource|
|
|
23
|
-
resource["methods"].each do |method|
|
|
24
|
-
#next if method["path"] =~ /comfort_/
|
|
25
|
-
puts "Configuring #{method["path"]}"
|
|
26
|
-
|
|
27
|
-
# map the path of the API method
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# if it's a POST method
|
|
31
|
-
if method["method"] == "POST"
|
|
32
|
-
post(method["path"]){
|
|
33
|
-
content_type :json
|
|
34
|
-
File.open("../json_examples/#{method["example_response"]}.json".downcase,'r').read
|
|
35
|
-
}
|
|
36
|
-
else
|
|
37
|
-
get(method["path"]){
|
|
38
|
-
content_type :json
|
|
39
|
-
File.open("../json_examples/#{method['example_response']}.json".downcase,'r').read
|
|
40
|
-
}
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
}
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
|