rails_api_explorer 0.0.2.pre.1 → 0.0.3.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -4
- data/Rakefile +0 -2
- data/app/assets/javascripts/api_explorer/serialize_object.js +49 -49
- data/app/assets/javascripts/{api_explorer/application.js → api_explorer.js} +1 -3
- data/app/assets/stylesheets/{api_explorer/application.css → api_explorer.css} +0 -0
- data/app/views/api_explorer/explorer/_request.html.erb +1 -3
- data/app/views/api_explorer/explorer/form/_headers.html.erb +0 -2
- data/app/views/api_explorer/explorer/index.html.erb +0 -3
- data/config/routes.rb +0 -1
- data/lib/api_explorer/engine.rb +4 -0
- data/lib/api_explorer/version.rb +1 -1
- data/lib/api_explorer.rb +1 -2
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dacad37d291f229361c45ca9d3e110c4b17f0012
|
4
|
+
data.tar.gz: ff5df9502368e73e237550cb4f1cbc80e51d510b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6a90cf0709ce9c7e1d08fb79277116d4d0a7b1ebb9582d5699217728595363e991b6601ec1e11c775699974e7e24c0282e8d9f23b7e34441e5d2f2993133ee1
|
7
|
+
data.tar.gz: 6013f6dfb5d59b644c9b3218006f81018186dfe57854af33c0aea2fae1c840d51573eec186f6199e07c7ace2eafc5acb61b7380ea0ab58c969735ac19a9b69b6
|
data/README.md
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
# rails_api_explorer
|
2
2
|
|
3
|
-
Provides a simple DSL to describe your API, and let's you mount an interactive sandbox to explore and test it.
|
3
|
+
Provides a simple DSL to describe your JSON API, and let's you mount an interactive sandbox to explore and test it.
|
4
4
|
|
5
5
|
[Here's a demo.](http://rails-api-explorer.herokuapp.com)
|
6
6
|
|
7
|
-
This project is in the early stages of development and missing some features. Pull requests are more than welcome!
|
8
|
-
|
9
7
|
## Installation
|
10
8
|
|
11
9
|
Add this line to your application's Gemfile:
|
@@ -18,8 +16,21 @@ And then execute:
|
|
18
16
|
|
19
17
|
$ bundle
|
20
18
|
|
19
|
+
|
21
20
|
## Usage
|
22
21
|
|
22
|
+
### Assets
|
23
|
+
Include the JavaScript in your `application.js`, make sure to require it *after* jQuery:
|
24
|
+
|
25
|
+
//= require jquery
|
26
|
+
//= require api_explorer
|
27
|
+
|
28
|
+
Include the CSS in `application.css`:
|
29
|
+
|
30
|
+
*= require api_explorer
|
31
|
+
|
32
|
+
|
33
|
+
### Describe your API
|
23
34
|
Describe your API in `config/initializers/api_explorer.rb`:
|
24
35
|
|
25
36
|
```ruby
|
@@ -74,7 +85,7 @@ Then mount it in your `routes.rb`:
|
|
74
85
|
mount ApiExplorer::Engine => '/api/explore', as: 'api_explorer'
|
75
86
|
```
|
76
87
|
|
77
|
-
|
88
|
+
### Access control
|
78
89
|
If you don't want the public to access the explorer, you can provide a lambda that will be executed in the `before_filter` of the controller:
|
79
90
|
|
80
91
|
```ruby
|
@@ -84,6 +95,7 @@ ApiExplorer.auth = lambda do
|
|
84
95
|
end
|
85
96
|
```
|
86
97
|
|
98
|
+
## Notes
|
87
99
|
The explorer is rendered within your application layout and uses bootstrap 3 classes, so it's prettier if you have that included.
|
88
100
|
Bootstrap is optional, but it requires jQuery.
|
89
101
|
|
data/Rakefile
CHANGED
@@ -1,54 +1,54 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
$.fn.serializeObject = function() {
|
2
|
+
var self = this,
|
3
|
+
json = {},
|
4
|
+
push_counters = {},
|
5
|
+
patterns = {
|
6
|
+
"validate": /^[a-zA-Z][a-zA-Z0-9_\-]*(?:\[(?:\d*|[a-zA-Z0-9_\-]+)\])*$/,
|
7
|
+
"key": /[a-zA-Z0-9_\-]+|(?=\[\])/g,
|
8
|
+
"push": /^$/,
|
9
|
+
"fixed": /^\d+$/,
|
10
|
+
"named": /^[a-zA-Z0-9_\-]+$/
|
11
|
+
};
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
this.build = function(base, key, value){
|
14
|
+
base[key] = value;
|
15
|
+
return base;
|
16
|
+
};
|
17
|
+
this.push_counter = function(key){
|
18
|
+
if(push_counters[key] === undefined){
|
19
|
+
push_counters[key] = 0;
|
20
|
+
}
|
21
|
+
return push_counters[key]++;
|
22
|
+
};
|
23
|
+
$.each($(this).serializeArray(), function(){
|
24
|
+
// skip invalid keys
|
25
|
+
if(!patterns.validate.test(this.name)) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
var k,
|
29
|
+
keys = this.name.match(patterns.key),
|
30
|
+
merge = this.value,
|
31
|
+
reverse_key = this.name;
|
32
32
|
|
33
|
-
|
33
|
+
while((k = keys.pop()) !== undefined){
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
// adjust reverse_key
|
36
|
+
reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
}
|
42
|
-
// fixed
|
43
|
-
else if(k.match(patterns.fixed)){
|
44
|
-
merge = self.build([], k, merge);
|
45
|
-
}
|
46
|
-
// named
|
47
|
-
else if(k.match(patterns.named)){
|
48
|
-
merge = self.build({}, k, merge);
|
49
|
-
}
|
38
|
+
// push
|
39
|
+
if(k.match(patterns.push)){
|
40
|
+
merge = self.build([], self.push_counter(reverse_key), merge);
|
50
41
|
}
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
42
|
+
// fixed
|
43
|
+
else if(k.match(patterns.fixed)){
|
44
|
+
merge = self.build([], k, merge);
|
45
|
+
}
|
46
|
+
// named
|
47
|
+
else if(k.match(patterns.named)){
|
48
|
+
merge = self.build({}, k, merge);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
json = $.extend(true, json, merge);
|
52
|
+
});
|
53
|
+
return json;
|
54
|
+
};
|
@@ -10,7 +10,5 @@
|
|
10
10
|
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
11
|
// about supported directives.
|
12
12
|
//
|
13
|
-
//= require jquery
|
14
|
-
//= require jquery_ujs
|
15
13
|
//= require api_explorer/serialize_object
|
16
|
-
//=
|
14
|
+
//= require api_explorer/explorer
|
File without changes
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class="row request" id="node<%= id %>">
|
2
|
-
<%= form_for :request,
|
2
|
+
<%= form_for :request, html: { class: "col-sm-6" } do |f| %>
|
3
3
|
<%= f.hidden_field :method, value: req.method %>
|
4
4
|
<%= f.hidden_field :path, value: req.full_path %>
|
5
5
|
|
@@ -9,7 +9,6 @@
|
|
9
9
|
<% req.url_segments.each do |type, s| %>
|
10
10
|
<% if type == :param %>
|
11
11
|
<%= pf.text_field s, placeholder: ":#{s}" %>
|
12
|
-
<!-- span contenteditable="true" data-ph="<%= ":#{s}" %>" data-name="<%= s %>"></span -->
|
13
12
|
<% else %>
|
14
13
|
<%= raw s %>
|
15
14
|
<% end %>
|
@@ -20,7 +19,6 @@
|
|
20
19
|
<div>
|
21
20
|
<p><%= simple_format req.description %></p>
|
22
21
|
|
23
|
-
<!-- %= render 'api_explorer/explorer/form/url_params', params: req.url_params, f: f % -->
|
24
22
|
<%= render 'api_explorer/explorer/form/headers', request: req, f: f %>
|
25
23
|
<% if req.params.any? %>
|
26
24
|
<fieldset>
|
@@ -6,8 +6,6 @@
|
|
6
6
|
<% @description.headers.each do |h| %>
|
7
7
|
<% next if request.excluded_shared_headers.include?(h.name) %>
|
8
8
|
|
9
|
-
<!--%= hf.label h.name, h.name %-->
|
10
|
-
<!--%= raw " (<a class='shared-link' href='#shared-header-#{h.name}'>shared</a>)" %-->
|
11
9
|
<%= hf.hidden_field h.name, class: "shared header", data: { name: h.name } %>
|
12
10
|
<% end %>
|
13
11
|
<% end %>
|
@@ -3,9 +3,6 @@
|
|
3
3
|
window.api_explorer_base_url = "<%= @description.base_url %>";
|
4
4
|
</script>
|
5
5
|
|
6
|
-
<%= stylesheet_link_tag "api_explorer/application", media: "all" %>
|
7
|
-
<%= javascript_include_tag "api_explorer/application" %>
|
8
|
-
|
9
6
|
<div class="row">
|
10
7
|
<div class="col-sm-12">
|
11
8
|
<h1>Index</h1>
|
data/config/routes.rb
CHANGED
data/lib/api_explorer/engine.rb
CHANGED
data/lib/api_explorer/version.rb
CHANGED
data/lib/api_explorer.rb
CHANGED
@@ -8,12 +8,11 @@ require "api_explorer/request"
|
|
8
8
|
require "api_explorer/dsl"
|
9
9
|
|
10
10
|
module ApiExplorer
|
11
|
-
mattr_accessor :description, :
|
11
|
+
mattr_accessor :description, :auth
|
12
12
|
|
13
13
|
def self.describe(&block)
|
14
14
|
self.description = Description.new("", "", [], [], [])
|
15
15
|
proxy = DescriptionProxy.new(description)
|
16
16
|
proxy.collect(&block)
|
17
|
-
#self.description = Description.new(proxy.path, proxy.children, proxy.shared_headers, proxy.shared_params)
|
18
17
|
end
|
19
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_api_explorer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Hollmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: jquery-rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: sqlite3
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,11 +76,11 @@ files:
|
|
90
76
|
- MIT-LICENSE
|
91
77
|
- README.md
|
92
78
|
- Rakefile
|
93
|
-
- app/assets/javascripts/api_explorer
|
79
|
+
- app/assets/javascripts/api_explorer.js
|
94
80
|
- app/assets/javascripts/api_explorer/explorer.js
|
95
81
|
- app/assets/javascripts/api_explorer/scroll.js
|
96
82
|
- app/assets/javascripts/api_explorer/serialize_object.js
|
97
|
-
- app/assets/stylesheets/api_explorer
|
83
|
+
- app/assets/stylesheets/api_explorer.css
|
98
84
|
- app/assets/stylesheets/api_explorer/explorer.css
|
99
85
|
- app/controllers/api_explorer/application_controller.rb
|
100
86
|
- app/controllers/api_explorer/explorer_controller.rb
|