buttless 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 :gemcutter #"http://rubygems.org"
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", ">= 0"
24
- gem "rdoc", "~> 3.12"
25
- gem "bundler", "~> 1.0.0"
26
- gem "jeweler", "~> 1.8.3"
27
- gem "simplecov", ">= 0"
23
+ gem "shoulda"
24
+ gem "rdoc"
25
+ gem "bundler"
26
+ gem "jeweler"
27
+ gem "simplecov"
28
28
  end
@@ -1,57 +1,98 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (3.2.2)
5
- i18n (~> 0.6)
6
- multi_json (~> 1.0)
7
- addressable (2.2.7)
8
- ansi (1.4.2)
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
- crack (0.3.1)
11
- git (1.2.5)
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
- i18n (0.6.0)
14
- jeweler (1.8.3)
15
- bundler (~> 1.0)
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.6.5)
20
- mime-types (1.18)
21
- minitest (2.11.4)
22
- minitest-reporters (0.5.1)
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
- minitest (~> 2.0)
50
+ builder
51
+ minitest (>= 5.0)
25
52
  ruby-progressbar
26
- multi_json (1.1.0)
27
- pdfkit (0.5.2)
28
- rack (1.4.1)
29
- rack-protection (1.2.0)
30
- rack
31
- rake (0.9.2.2)
32
- rdoc (3.12)
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 (2.1.1)
35
- rest-client (1.6.7)
36
- mime-types (>= 1.16)
37
- ruby-progressbar (0.0.10)
38
- shoulda (3.0.1)
39
- shoulda-context (~> 1.0.0)
40
- shoulda-matchers (~> 1.0.0)
41
- shoulda-context (1.0.0)
42
- shoulda-matchers (1.0.0)
43
- simplecov (0.6.1)
44
- multi_json (~> 1.0)
45
- simplecov-html (~> 0.5.3)
46
- simplecov-html (0.5.3)
47
- sinatra (1.3.2)
48
- rack (~> 1.3, >= 1.3.6)
49
- rack-protection (~> 1.2)
50
- tilt (~> 1.3, >= 1.3.3)
51
- tilt (1.3.3)
52
- webmock (1.8.4)
53
- addressable (>= 2.2.7)
54
- crack (>= 0.1.7)
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 (~> 1.0.0)
103
+ bundler
63
104
  googlecharts
64
- jeweler (~> 1.8.3)
105
+ jeweler
65
106
  json
66
107
  minitest
67
108
  minitest-reporters
68
109
  pdfkit
69
110
  rake
70
- rdoc (~> 3.12)
111
+ rdoc
71
112
  redcarpet
72
113
  rest-client
73
114
  shoulda
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -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.2"
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 = "2012-04-01"
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.require_paths = ["lib"]
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 = 3
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>, ["~> 3.12"])
83
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
84
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
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>, ["~> 3.12"])
102
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
103
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
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>, ["~> 3.12"])
122
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
123
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
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
@@ -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
@@ -1,4 +1,4 @@
1
- source :gemcutter
1
+ source :rubygems
2
2
  gem 'rest-client'
3
3
  gem 'json'
4
4
  gem 'pdfkit'
@@ -11,4 +11,4 @@ gem 'webmock'
11
11
  gem 'rake'
12
12
  gem 'tilt'
13
13
  gem 'minitest-reporters'
14
- gem 'sinatra'
14
+ gem 'sinatra'
@@ -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 => :prepare do
56
- File.open('index.html','w').write(@html)
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 => :prepare do
61
- `/Applications/wkhtmltopdf.app/Contents/MacOS/wkhtmltopdf --page-size A4 --margin-left 20mm --margin-right 20mm --margin-top 20mm --margin-bottom 20mm index.html #{@config["full_title"]}.pdf`
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
- desc "Prepare for generation"
74
- task :prepare do
75
- @home_dir = File.dirname(__FILE__)
76
- Dir.chdir('api-doc')
77
- @root_url = "file://localhost#{Dir.pwd}/"
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
- return "TODO" if name.nil?
94
- name = name.to_s
95
- File.open("#{@home_dir}/json_examples/#{name}.json".downcase,'r').read()
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
@@ -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 method["example_response"] %>
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
+
@@ -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.2
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: 2012-04-01 00:00:00.000000000Z
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: &70236825275100 !ruby/object:Gem::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: *70236825275100
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: &70236825272740 !ruby/object:Gem::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: *70236825272740
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: &70236825269320 !ruby/object:Gem::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: *70236825269320
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: &70236825266120 !ruby/object:Gem::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: *70236825266120
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: &70236825262940 !ruby/object:Gem::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: *70236825262940
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: &70236825255560 !ruby/object:Gem::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: *70236825255560
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: &70236825251340 !ruby/object:Gem::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: *70236825251340
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: &70236825248500 !ruby/object:Gem::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: *70236825248500
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: &70236825244960 !ruby/object:Gem::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: *70236825244960
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: &70236825242740 !ruby/object:Gem::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: *70236825242740
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: &70236825240780 !ruby/object:Gem::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: *70236825240780
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: &70236825238300 !ruby/object:Gem::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: *70236825238300
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: &70236825233960 !ruby/object:Gem::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: *70236825233960
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: &70236825231980 !ruby/object:Gem::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: *70236825231980
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: &70236825230240 !ruby/object:Gem::Requirement
171
- none: false
211
+ requirement: !ruby/object:Gem::Requirement
172
212
  requirements:
173
- - - ~>
213
+ - - ">="
174
214
  - !ruby/object:Gem::Version
175
- version: '3.12'
215
+ version: '0'
176
216
  type: :development
177
217
  prerelease: false
178
- version_requirements: *70236825230240
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: &70236825227900 !ruby/object:Gem::Requirement
182
- none: false
225
+ requirement: !ruby/object:Gem::Requirement
183
226
  requirements:
184
- - - ~>
227
+ - - ">="
185
228
  - !ruby/object:Gem::Version
186
- version: 1.0.0
229
+ version: '0'
187
230
  type: :development
188
231
  prerelease: false
189
- version_requirements: *70236825227900
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: &70236825224760 !ruby/object:Gem::Requirement
193
- none: false
239
+ requirement: !ruby/object:Gem::Requirement
194
240
  requirements:
195
- - - ~>
241
+ - - ">="
196
242
  - !ruby/object:Gem::Version
197
- version: 1.8.3
243
+ version: '0'
198
244
  type: :development
199
245
  prerelease: false
200
- version_requirements: *70236825224760
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: &70236825222800 !ruby/object:Gem::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: *70236825222800
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: 1.8.11
332
+ rubygems_version: 2.2.2
284
333
  signing_key:
285
- specification_version: 3
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
-