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.
@@ -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
-