buttless 0.0.1
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.
- data/.document +5 -0
- data/Gemfile +28 -0
- data/Gemfile.lock +77 -0
- data/LICENSE.txt +20 -0
- data/README_old.rdoc +19 -0
- data/Rakefile +60 -0
- data/VERSION +1 -0
- data/bin/buttless +18 -0
- data/buttless.gemspec +127 -0
- data/lib/buttless.rb +0 -0
- data/lib/template/.DS_Store +0 -0
- data/lib/template/Gemfile +14 -0
- data/lib/template/Gemfile.lock +53 -0
- data/lib/template/Rakefile +96 -0
- data/lib/template/api-doc/.DS_Store +0 -0
- data/lib/template/api-doc/images/logo.png +0 -0
- data/lib/template/api-doc/index.html +230 -0
- data/lib/template/api-doc/index.md.erb +125 -0
- data/lib/template/api-doc/report.css +152 -0
- data/lib/template/api-doc/screen.css +6 -0
- data/lib/template/api-doc/template.html.erb +16 -0
- data/lib/template/code_samples/prthw.md.erb +1 -0
- data/lib/template/config.yaml +5 -0
- data/lib/template/database.yaml +50 -0
- data/lib/template/install +0 -0
- data/lib/template/json_examples/funky_stuff.json +4 -0
- data/lib/template/json_examples/funky_stuff_info.json +1 -0
- data/lib/template/json_examples/funky_thing.json +1 -0
- data/lib/template/json_examples/post_ok.json +3 -0
- data/lib/template/readme.textile +122 -0
- data/lib/template/server/config.ru +47 -0
- data/lib/template/test/test_helper.rb +33 -0
- data/lib/template/test/test_stuff.rb +15 -0
- data/readme.textile +50 -0
- data/test/helper.rb +18 -0
- data/test/test_buttless.rb +7 -0
- metadata +287 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
h1. My Buttless API
|
|
2
|
+
|
|
3
|
+
Congratulations, you've just started using Buttless to design, document and develop against your API.
|
|
4
|
+
|
|
5
|
+
Buttless lets you design an API, generate docs, and develop against it in minutes. No need to have a real back-end in place.
|
|
6
|
+
|
|
7
|
+
See the "Buttless home page":https://github.com/tobinharris/buttless for more info.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
h2. About
|
|
11
|
+
|
|
12
|
+
Buttless is pretty simple. It's structured like this:
|
|
13
|
+
|
|
14
|
+
* You define your API end points, parameters and descriptions in the @database.yml@ file
|
|
15
|
+
* You add example responses in the @/json_examples@ folder
|
|
16
|
+
* You add tests for the API, if you want to, in the @/test@ folder.
|
|
17
|
+
|
|
18
|
+
Creating and modifying your API's design takes seconds or minutes once you get the hang of it.
|
|
19
|
+
|
|
20
|
+
After that, you can:
|
|
21
|
+
|
|
22
|
+
* Run a web server which will serve up your designed API with example data to develop against
|
|
23
|
+
* Generate pretty PDF's documenting your API to give to developers to build the real deal against
|
|
24
|
+
* Generate pretty HTML documenting for your API
|
|
25
|
+
* Run tests the real API, to make sure it's being developed according to your design
|
|
26
|
+
|
|
27
|
+
h2. Getting Started
|
|
28
|
+
|
|
29
|
+
h3. Install Gems
|
|
30
|
+
|
|
31
|
+
Install necessary gems.
|
|
32
|
+
|
|
33
|
+
<pre>
|
|
34
|
+
bundle install
|
|
35
|
+
</pre>
|
|
36
|
+
|
|
37
|
+
h3. Add an API definition to the database.yml file
|
|
38
|
+
|
|
39
|
+
<pre>
|
|
40
|
+
---
|
|
41
|
+
- resource: Funky Thing
|
|
42
|
+
methods:
|
|
43
|
+
- path: /api/funky/thing
|
|
44
|
+
resolves_to: /api/funky/thing/info.json
|
|
45
|
+
method: GET
|
|
46
|
+
precis: |
|
|
47
|
+
Returns information about the thing.
|
|
48
|
+
description: |
|
|
49
|
+
parameters:
|
|
50
|
+
example_response: funky_thing
|
|
51
|
+
</pre>
|
|
52
|
+
|
|
53
|
+
h3. Add an example JSON response file
|
|
54
|
+
|
|
55
|
+
<pre>
|
|
56
|
+
# /json_examples/funky_thing.json
|
|
57
|
+
|
|
58
|
+
{"id": 2, "name": "Funky Thing"}
|
|
59
|
+
</pre>
|
|
60
|
+
|
|
61
|
+
h3. Generate the HTML or PDF docs
|
|
62
|
+
|
|
63
|
+
Your API is defined, now generate the HTML docs using:
|
|
64
|
+
|
|
65
|
+
<pre>
|
|
66
|
+
rake html
|
|
67
|
+
open api-doc/index.html
|
|
68
|
+
</pre>
|
|
69
|
+
|
|
70
|
+
Here's a sample:
|
|
71
|
+
|
|
72
|
+
!http://puu.sh/nobh!
|
|
73
|
+
|
|
74
|
+
Note it includes the curl statement, API index, descriptions and parameters.
|
|
75
|
+
|
|
76
|
+
Or, you can generate a similar PDF using
|
|
77
|
+
|
|
78
|
+
<pre>
|
|
79
|
+
rake pdf
|
|
80
|
+
open api-doc/funky-thing.pdf
|
|
81
|
+
</pre>
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
h3. Run a fake API in a web server
|
|
86
|
+
|
|
87
|
+
<pre>
|
|
88
|
+
cd server
|
|
89
|
+
thin start
|
|
90
|
+
</pre>
|
|
91
|
+
|
|
92
|
+
You're API is now available as a web server. So, without a line of code, you can now do:
|
|
93
|
+
|
|
94
|
+
<pre>
|
|
95
|
+
curl http://localhost:3000/api/funky/stuff
|
|
96
|
+
</pre>
|
|
97
|
+
|
|
98
|
+
Which outputs
|
|
99
|
+
|
|
100
|
+
<pre>
|
|
101
|
+
[
|
|
102
|
+
{"id": 1, "name": "Funky 1"},
|
|
103
|
+
{"id": 2, "name": "Funky 2"}
|
|
104
|
+
]
|
|
105
|
+
</pre>
|
|
106
|
+
|
|
107
|
+
That response was the example JSON file referenced in your documentation.
|
|
108
|
+
|
|
109
|
+
This is handy if your an iPhone developer, cause you can define your own API, develop against it, and then once you're ready, ask a server-side developer to build the real API!
|
|
110
|
+
|
|
111
|
+
h5. Define some tests for the API
|
|
112
|
+
|
|
113
|
+
It's easier to write API's if you have test cases setup to cover what is needed by the client. Simply add these to the ./test/ folder and then:
|
|
114
|
+
|
|
115
|
+
<pre>
|
|
116
|
+
rake test
|
|
117
|
+
</pre>
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'minitest/autorun'
|
|
2
|
+
require 'webmock/minitest'
|
|
3
|
+
require 'minitest/pride'
|
|
4
|
+
require 'minitest/reporters'
|
|
5
|
+
require 'rest-client'
|
|
6
|
+
require 'json'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
module MiniTest
|
|
10
|
+
module Reporters
|
|
11
|
+
class SpecReporter
|
|
12
|
+
private
|
|
13
|
+
def print_test_with_time(test)
|
|
14
|
+
total_time = Time.now - runner.test_start_time
|
|
15
|
+
print(" %s (%.2fs)" % [test.gsub(/test_|[0-9]{4,4}|_/,' ').strip, total_time])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
MiniTest::Unit.runner = MiniTest::SuiteRunner.new
|
|
23
|
+
MiniTest::Unit.runner.reporters << MiniTest::Reporters::SpecReporter.new
|
|
24
|
+
|
|
25
|
+
def prepare
|
|
26
|
+
@examples_dir = File.dirname(__FILE__) + "/../json_examples/"
|
|
27
|
+
@localhost = "http://192.168.1.3/api"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def json(data)
|
|
31
|
+
JSON.parse(data)
|
|
32
|
+
end
|
|
33
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/test_helper.rb"
|
|
2
|
+
|
|
3
|
+
describe "When accessing THe Funky" do
|
|
4
|
+
describe "using resource Funky" do
|
|
5
|
+
|
|
6
|
+
it "should allow reading of thing" do
|
|
7
|
+
skip
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should allow reading of stuff" do
|
|
11
|
+
skip
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
data/readme.textile
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
h1. Buttless
|
|
2
|
+
|
|
3
|
+
h2. Design, document and develop against API's in minutes without a back-end.
|
|
4
|
+
|
|
5
|
+
I wrote Buttless because "Engine Room Apps":http://engineroomapps.com often have to develop an iPhone app or web site without having the backend API or in place yet. This is pretty common when you're back-end developers are not in the office, or if you're waiting for your client's team to get on to it!
|
|
6
|
+
|
|
7
|
+
With Buttless, you can do the following pretty quickly:
|
|
8
|
+
|
|
9
|
+
# Define an API (resources, methods, parameters) using a simple YAML file
|
|
10
|
+
# Define example JSON results that the API would send back
|
|
11
|
+
# Generate pretty HTML and PDF documents for that defined API, which include usage instructions with CURL
|
|
12
|
+
# Run a web server which creates a pretend backend for your API, so if you're an iPhone developer you have something to code against instantly
|
|
13
|
+
|
|
14
|
+
h2. Getting Started
|
|
15
|
+
|
|
16
|
+
Install the gem
|
|
17
|
+
|
|
18
|
+
<pre>
|
|
19
|
+
gem install buttless
|
|
20
|
+
</pre>
|
|
21
|
+
|
|
22
|
+
Then go to your usual code folder and type
|
|
23
|
+
|
|
24
|
+
<pre>
|
|
25
|
+
buttless my-first-api
|
|
26
|
+
</pre>
|
|
27
|
+
|
|
28
|
+
Congrats, you've just started defining your API, and will be soon able to generate docs and develop against it.
|
|
29
|
+
|
|
30
|
+
Now to "learn how to work with your API":https://github.com/tobinharris/buttless/blob/master/lib/template/readme.textile.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
h2. Contributing to buttless
|
|
34
|
+
|
|
35
|
+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
|
36
|
+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
|
37
|
+
* Fork the project.
|
|
38
|
+
* Start a feature/bugfix branch.
|
|
39
|
+
* Commit and push until you are happy with your contribution.
|
|
40
|
+
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
|
41
|
+
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
|
42
|
+
|
|
43
|
+
h2. Copyright
|
|
44
|
+
|
|
45
|
+
Copyright (c) 2012 Tobin Harris. See LICENSE.txt for
|
|
46
|
+
further details.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
data/test/helper.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler'
|
|
3
|
+
begin
|
|
4
|
+
Bundler.setup(:default, :development)
|
|
5
|
+
rescue Bundler::BundlerError => e
|
|
6
|
+
$stderr.puts e.message
|
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
|
8
|
+
exit e.status_code
|
|
9
|
+
end
|
|
10
|
+
require 'test/unit'
|
|
11
|
+
require 'shoulda'
|
|
12
|
+
|
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
15
|
+
require 'buttless'
|
|
16
|
+
|
|
17
|
+
class Test::Unit::TestCase
|
|
18
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: buttless
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Tobin Harris
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-04-01 00:00:00.000000000Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rest-client
|
|
16
|
+
requirement: &70116055586520 !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: *70116055586520
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: json
|
|
27
|
+
requirement: &70116055585380 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
29
|
+
requirements:
|
|
30
|
+
- - ! '>='
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: *70116055585380
|
|
36
|
+
- !ruby/object:Gem::Dependency
|
|
37
|
+
name: pdfkit
|
|
38
|
+
requirement: &70116055584240 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
40
|
+
requirements:
|
|
41
|
+
- - ! '>='
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
44
|
+
type: :runtime
|
|
45
|
+
prerelease: false
|
|
46
|
+
version_requirements: *70116055584240
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: activesupport
|
|
49
|
+
requirement: &70116055583200 !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
type: :runtime
|
|
56
|
+
prerelease: false
|
|
57
|
+
version_requirements: *70116055583200
|
|
58
|
+
- !ruby/object:Gem::Dependency
|
|
59
|
+
name: minitest
|
|
60
|
+
requirement: &70116055581980 !ruby/object:Gem::Requirement
|
|
61
|
+
none: false
|
|
62
|
+
requirements:
|
|
63
|
+
- - ! '>='
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '0'
|
|
66
|
+
type: :runtime
|
|
67
|
+
prerelease: false
|
|
68
|
+
version_requirements: *70116055581980
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: googlecharts
|
|
71
|
+
requirement: &70116055580500 !ruby/object:Gem::Requirement
|
|
72
|
+
none: false
|
|
73
|
+
requirements:
|
|
74
|
+
- - ! '>='
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: *70116055580500
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
81
|
+
name: array_stats
|
|
82
|
+
requirement: &70116055573340 !ruby/object:Gem::Requirement
|
|
83
|
+
none: false
|
|
84
|
+
requirements:
|
|
85
|
+
- - ! '>='
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '0'
|
|
88
|
+
type: :runtime
|
|
89
|
+
prerelease: false
|
|
90
|
+
version_requirements: *70116055573340
|
|
91
|
+
- !ruby/object:Gem::Dependency
|
|
92
|
+
name: redcarpet
|
|
93
|
+
requirement: &70116055572220 !ruby/object:Gem::Requirement
|
|
94
|
+
none: false
|
|
95
|
+
requirements:
|
|
96
|
+
- - ! '>='
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '0'
|
|
99
|
+
type: :runtime
|
|
100
|
+
prerelease: false
|
|
101
|
+
version_requirements: *70116055572220
|
|
102
|
+
- !ruby/object:Gem::Dependency
|
|
103
|
+
name: webmock
|
|
104
|
+
requirement: &70116055570620 !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ! '>='
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
type: :runtime
|
|
111
|
+
prerelease: false
|
|
112
|
+
version_requirements: *70116055570620
|
|
113
|
+
- !ruby/object:Gem::Dependency
|
|
114
|
+
name: rake
|
|
115
|
+
requirement: &70116055569540 !ruby/object:Gem::Requirement
|
|
116
|
+
none: false
|
|
117
|
+
requirements:
|
|
118
|
+
- - ! '>='
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: '0'
|
|
121
|
+
type: :runtime
|
|
122
|
+
prerelease: false
|
|
123
|
+
version_requirements: *70116055569540
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: tilt
|
|
126
|
+
requirement: &70116055567060 !ruby/object:Gem::Requirement
|
|
127
|
+
none: false
|
|
128
|
+
requirements:
|
|
129
|
+
- - ! '>='
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :runtime
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: *70116055567060
|
|
135
|
+
- !ruby/object:Gem::Dependency
|
|
136
|
+
name: minitest-reporters
|
|
137
|
+
requirement: &70116055559540 !ruby/object:Gem::Requirement
|
|
138
|
+
none: false
|
|
139
|
+
requirements:
|
|
140
|
+
- - ! '>='
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: '0'
|
|
143
|
+
type: :runtime
|
|
144
|
+
prerelease: false
|
|
145
|
+
version_requirements: *70116055559540
|
|
146
|
+
- !ruby/object:Gem::Dependency
|
|
147
|
+
name: sinatra
|
|
148
|
+
requirement: &70116055558580 !ruby/object:Gem::Requirement
|
|
149
|
+
none: false
|
|
150
|
+
requirements:
|
|
151
|
+
- - ! '>='
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: '0'
|
|
154
|
+
type: :runtime
|
|
155
|
+
prerelease: false
|
|
156
|
+
version_requirements: *70116055558580
|
|
157
|
+
- !ruby/object:Gem::Dependency
|
|
158
|
+
name: shoulda
|
|
159
|
+
requirement: &70116055557600 !ruby/object:Gem::Requirement
|
|
160
|
+
none: false
|
|
161
|
+
requirements:
|
|
162
|
+
- - ! '>='
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: '0'
|
|
165
|
+
type: :development
|
|
166
|
+
prerelease: false
|
|
167
|
+
version_requirements: *70116055557600
|
|
168
|
+
- !ruby/object:Gem::Dependency
|
|
169
|
+
name: rdoc
|
|
170
|
+
requirement: &70116055556580 !ruby/object:Gem::Requirement
|
|
171
|
+
none: false
|
|
172
|
+
requirements:
|
|
173
|
+
- - ~>
|
|
174
|
+
- !ruby/object:Gem::Version
|
|
175
|
+
version: '3.12'
|
|
176
|
+
type: :development
|
|
177
|
+
prerelease: false
|
|
178
|
+
version_requirements: *70116055556580
|
|
179
|
+
- !ruby/object:Gem::Dependency
|
|
180
|
+
name: bundler
|
|
181
|
+
requirement: &70116055555460 !ruby/object:Gem::Requirement
|
|
182
|
+
none: false
|
|
183
|
+
requirements:
|
|
184
|
+
- - ~>
|
|
185
|
+
- !ruby/object:Gem::Version
|
|
186
|
+
version: 1.0.0
|
|
187
|
+
type: :development
|
|
188
|
+
prerelease: false
|
|
189
|
+
version_requirements: *70116055555460
|
|
190
|
+
- !ruby/object:Gem::Dependency
|
|
191
|
+
name: jeweler
|
|
192
|
+
requirement: &70116055554460 !ruby/object:Gem::Requirement
|
|
193
|
+
none: false
|
|
194
|
+
requirements:
|
|
195
|
+
- - ~>
|
|
196
|
+
- !ruby/object:Gem::Version
|
|
197
|
+
version: 1.8.3
|
|
198
|
+
type: :development
|
|
199
|
+
prerelease: false
|
|
200
|
+
version_requirements: *70116055554460
|
|
201
|
+
- !ruby/object:Gem::Dependency
|
|
202
|
+
name: simplecov
|
|
203
|
+
requirement: &70116055553020 !ruby/object:Gem::Requirement
|
|
204
|
+
none: false
|
|
205
|
+
requirements:
|
|
206
|
+
- - ! '>='
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0'
|
|
209
|
+
type: :development
|
|
210
|
+
prerelease: false
|
|
211
|
+
version_requirements: *70116055553020
|
|
212
|
+
description: Buttless gives you a way to quickly flesh out an API in detail. It generates
|
|
213
|
+
sexy documentation. And, you can quickly run the API and simulate various scenarios
|
|
214
|
+
without neededing a backend.
|
|
215
|
+
email: tobin@tobinharris.com
|
|
216
|
+
executables:
|
|
217
|
+
- buttless
|
|
218
|
+
extensions: []
|
|
219
|
+
extra_rdoc_files:
|
|
220
|
+
- LICENSE.txt
|
|
221
|
+
- README_old.rdoc
|
|
222
|
+
files:
|
|
223
|
+
- .document
|
|
224
|
+
- Gemfile
|
|
225
|
+
- Gemfile.lock
|
|
226
|
+
- LICENSE.txt
|
|
227
|
+
- README_old.rdoc
|
|
228
|
+
- Rakefile
|
|
229
|
+
- VERSION
|
|
230
|
+
- bin/buttless
|
|
231
|
+
- buttless.gemspec
|
|
232
|
+
- lib/buttless.rb
|
|
233
|
+
- lib/template/.DS_Store
|
|
234
|
+
- lib/template/Gemfile
|
|
235
|
+
- lib/template/Gemfile.lock
|
|
236
|
+
- lib/template/Rakefile
|
|
237
|
+
- lib/template/api-doc/.DS_Store
|
|
238
|
+
- lib/template/api-doc/images/logo.png
|
|
239
|
+
- lib/template/api-doc/index.html
|
|
240
|
+
- lib/template/api-doc/index.md.erb
|
|
241
|
+
- lib/template/api-doc/report.css
|
|
242
|
+
- lib/template/api-doc/screen.css
|
|
243
|
+
- lib/template/api-doc/template.html.erb
|
|
244
|
+
- lib/template/code_samples/prthw.md.erb
|
|
245
|
+
- lib/template/config.yaml
|
|
246
|
+
- lib/template/database.yaml
|
|
247
|
+
- lib/template/install
|
|
248
|
+
- lib/template/json_examples/funky_stuff.json
|
|
249
|
+
- lib/template/json_examples/funky_stuff_info.json
|
|
250
|
+
- lib/template/json_examples/funky_thing.json
|
|
251
|
+
- lib/template/json_examples/post_ok.json
|
|
252
|
+
- lib/template/readme.textile
|
|
253
|
+
- lib/template/server/config.ru
|
|
254
|
+
- lib/template/test/test_helper.rb
|
|
255
|
+
- lib/template/test/test_stuff.rb
|
|
256
|
+
- readme.textile
|
|
257
|
+
- test/helper.rb
|
|
258
|
+
- test/test_buttless.rb
|
|
259
|
+
homepage: http://github.com/tobinharris/buttless
|
|
260
|
+
licenses:
|
|
261
|
+
- MIT
|
|
262
|
+
post_install_message:
|
|
263
|
+
rdoc_options: []
|
|
264
|
+
require_paths:
|
|
265
|
+
- lib
|
|
266
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
267
|
+
none: false
|
|
268
|
+
requirements:
|
|
269
|
+
- - ! '>='
|
|
270
|
+
- !ruby/object:Gem::Version
|
|
271
|
+
version: '0'
|
|
272
|
+
segments:
|
|
273
|
+
- 0
|
|
274
|
+
hash: -4276506953416819614
|
|
275
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
|
+
none: false
|
|
277
|
+
requirements:
|
|
278
|
+
- - ! '>='
|
|
279
|
+
- !ruby/object:Gem::Version
|
|
280
|
+
version: '0'
|
|
281
|
+
requirements: []
|
|
282
|
+
rubyforge_project:
|
|
283
|
+
rubygems_version: 1.8.11
|
|
284
|
+
signing_key:
|
|
285
|
+
specification_version: 3
|
|
286
|
+
summary: Design, document and develop against an API without having a backend.
|
|
287
|
+
test_files: []
|