apipony 0.0.4 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +205 -3
- data/Rakefile +3 -7
- data/app/assets/stylesheets/apipony/styles.scss +153 -27
- data/app/views/apipony/application/_attribute.html.erb +42 -0
- data/app/views/apipony/application/_footer.html.erb +8 -0
- data/app/views/apipony/application/_header.html.erb +8 -0
- data/app/views/apipony/application/_method.html.erb +1 -0
- data/app/views/apipony/application/_request.html.erb +37 -0
- data/app/views/apipony/application/_response.html.erb +30 -0
- data/app/views/apipony/application/_sidebar.html.erb +16 -0
- data/app/views/apipony/application/index.html.erb +60 -0
- data/app/views/layouts/apipony/application.html.erb +22 -0
- data/lib/apipony.rb +19 -0
- data/lib/apipony/documentation.rb +24 -0
- data/lib/apipony/endpoint.rb +24 -3
- data/lib/apipony/engine.rb +2 -0
- data/lib/apipony/example_response.rb +9 -0
- data/lib/apipony/parameter.rb +3 -2
- data/lib/apipony/request.rb +17 -4
- data/lib/apipony/response.rb +47 -5
- data/lib/apipony/response_attribute.rb +130 -0
- data/lib/apipony/section.rb +11 -2
- data/lib/apipony/version.rb +3 -1
- metadata +42 -19
- data/app/views/apipony/application/index.html.haml +0 -74
- data/app/views/layouts/apipony/application.html.haml +0 -12
- data/config/initializers/haml.rb +0 -1
@@ -0,0 +1,130 @@
|
|
1
|
+
##
|
2
|
+
# A class used to describe an attribute in a response.
|
3
|
+
class Apipony::ResponseAttribute
|
4
|
+
@type_definitions = {}
|
5
|
+
##
|
6
|
+
# Allow a common subobject definition for code reuse.
|
7
|
+
# Probably use the `subtype` method in the `subtype` method of the DSL
|
8
|
+
# `define` DSL instead.
|
9
|
+
def self.define_type(name, type)
|
10
|
+
@type_definitions[name] = type
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Get a list of predefined subtypes.
|
15
|
+
# Probably use the `
|
16
|
+
def self.defined_subtypes
|
17
|
+
@type_definitions
|
18
|
+
end
|
19
|
+
##
|
20
|
+
# Get a subtype with the given name.
|
21
|
+
def self.get_defined(name)
|
22
|
+
@type_definitions[name]
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_accessor :name, :type, :description, :attributes, :choices
|
26
|
+
def initialize(name,
|
27
|
+
type: :string,
|
28
|
+
description: "",
|
29
|
+
array: false,
|
30
|
+
example: nil,
|
31
|
+
&block)
|
32
|
+
@name = name
|
33
|
+
@description = description
|
34
|
+
@type = type
|
35
|
+
@array = array
|
36
|
+
@example = example
|
37
|
+
if block_given?
|
38
|
+
instance_eval(&block)
|
39
|
+
## This attribute is of a predefined subtype
|
40
|
+
elsif (subtype = self.class.get_defined(@type))
|
41
|
+
@attributes = subtype.attributes
|
42
|
+
# If the subtype is an array, this is also an array
|
43
|
+
@array = subtype.is_array? unless @array
|
44
|
+
@is_subtype = true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Build an example from this object
|
50
|
+
def example
|
51
|
+
sub = nil
|
52
|
+
if is_object? || is_subtype?
|
53
|
+
sub = Hash[@attributes.select(&:example).map{|a| [a.name, a.example]}]
|
54
|
+
elsif is_enum?
|
55
|
+
sub = choices.first.name
|
56
|
+
else
|
57
|
+
sub = @example
|
58
|
+
end
|
59
|
+
##
|
60
|
+
# If we have an example an are an array
|
61
|
+
if sub and is_array?
|
62
|
+
[sub]
|
63
|
+
else
|
64
|
+
sub
|
65
|
+
end
|
66
|
+
end
|
67
|
+
##
|
68
|
+
# Is this attribute an array?
|
69
|
+
# Note that marking an attribute as an array does not over-ride the top-level
|
70
|
+
# type. For example, a definition like:
|
71
|
+
# attribute :aliases, type: :string, array: true
|
72
|
+
# denotates an array of strings. Also note that subattributes are not
|
73
|
+
# over-ridden. This lets you make an array of objects.
|
74
|
+
# attribute :users, type: :object, array: true do
|
75
|
+
# attribute :id, type: :integer
|
76
|
+
# attribute :name, type: :integer
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
def is_array?
|
80
|
+
!! @array
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# See if this attribute is a reference to a predefined subtype.
|
85
|
+
def is_subtype?
|
86
|
+
!! @is_subtype
|
87
|
+
end
|
88
|
+
|
89
|
+
def use_defined(type)
|
90
|
+
a = self.class.get_defined(name)
|
91
|
+
raise "Tried to use an undefined subtype" unless a
|
92
|
+
##
|
93
|
+
# Shallow clone so we can alias the name
|
94
|
+
a = a.clone
|
95
|
+
a.name = as
|
96
|
+
add_subattribute a
|
97
|
+
end
|
98
|
+
|
99
|
+
def attribute(name, **params, &block)
|
100
|
+
add_subattribute self.class.new(name, **params, &block)
|
101
|
+
end
|
102
|
+
|
103
|
+
def is_object?
|
104
|
+
@type == :object
|
105
|
+
end
|
106
|
+
|
107
|
+
def is_enum?
|
108
|
+
@type == :enum
|
109
|
+
end
|
110
|
+
|
111
|
+
def choice(name, **params)
|
112
|
+
@choices ||= []
|
113
|
+
@type = :enum
|
114
|
+
@choices << EnumChoice.new(name, **params)
|
115
|
+
end
|
116
|
+
|
117
|
+
class EnumChoice
|
118
|
+
attr_accessor :name, :description
|
119
|
+
def initialize(name, description: "")
|
120
|
+
@name = name
|
121
|
+
@description = description
|
122
|
+
end
|
123
|
+
end
|
124
|
+
private
|
125
|
+
def add_subattribute atr
|
126
|
+
@attributes ||= []
|
127
|
+
@type = :object
|
128
|
+
@attributes << atr
|
129
|
+
end
|
130
|
+
end
|
data/lib/apipony/section.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
+
##
|
2
|
+
# A section is a way to logically separate your endpoints. All endpoints in
|
3
|
+
# a section should be related in some way.
|
1
4
|
class Apipony::Section
|
2
|
-
|
3
|
-
|
5
|
+
##
|
6
|
+
# What to call this endpoint. This will show up on the generated page.
|
7
|
+
attr_accessor :title
|
8
|
+
##
|
9
|
+
# :nodoc:
|
10
|
+
# This contains an array of endpoints added with the `endpoint` method of the
|
11
|
+
# DSL
|
12
|
+
attr_accessor :endpoints
|
4
13
|
def initialize(title, &block)
|
5
14
|
@title = title
|
6
15
|
@endpoints = []
|
data/lib/apipony/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apipony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Novikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-04 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: 4.2.4
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: haml-rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.9.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.9.0
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: sass
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +66,34 @@ dependencies:
|
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: 1.3.11
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: faker
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,18 +189,26 @@ files:
|
|
175
189
|
- app/assets/stylesheets/apipony/application.css
|
176
190
|
- app/assets/stylesheets/apipony/styles.scss
|
177
191
|
- app/controllers/apipony/application_controller.rb
|
178
|
-
- app/views/apipony/application/
|
179
|
-
- app/views/
|
180
|
-
-
|
192
|
+
- app/views/apipony/application/_attribute.html.erb
|
193
|
+
- app/views/apipony/application/_footer.html.erb
|
194
|
+
- app/views/apipony/application/_header.html.erb
|
195
|
+
- app/views/apipony/application/_method.html.erb
|
196
|
+
- app/views/apipony/application/_request.html.erb
|
197
|
+
- app/views/apipony/application/_response.html.erb
|
198
|
+
- app/views/apipony/application/_sidebar.html.erb
|
199
|
+
- app/views/apipony/application/index.html.erb
|
200
|
+
- app/views/layouts/apipony/application.html.erb
|
181
201
|
- config/routes.rb
|
182
202
|
- lib/apipony.rb
|
183
203
|
- lib/apipony/base.rb
|
184
204
|
- lib/apipony/documentation.rb
|
185
205
|
- lib/apipony/endpoint.rb
|
186
206
|
- lib/apipony/engine.rb
|
207
|
+
- lib/apipony/example_response.rb
|
187
208
|
- lib/apipony/parameter.rb
|
188
209
|
- lib/apipony/request.rb
|
189
210
|
- lib/apipony/response.rb
|
211
|
+
- lib/apipony/response_attribute.rb
|
190
212
|
- lib/apipony/section.rb
|
191
213
|
- lib/apipony/version.rb
|
192
214
|
- lib/generators/apipony/install/templates/initializer.rb
|
@@ -216,3 +238,4 @@ signing_key:
|
|
216
238
|
specification_version: 4
|
217
239
|
summary: Easy Rails API documentation.
|
218
240
|
test_files: []
|
241
|
+
has_rdoc:
|
@@ -1,74 +0,0 @@
|
|
1
|
-
%header
|
2
|
-
.container
|
3
|
-
= link_to @documentation.title, root_path, class: 'title'
|
4
|
-
- if main_app.root_path
|
5
|
-
= link_to 'Back to site', main_app.root_path, class: 'back'
|
6
|
-
%main
|
7
|
-
.container
|
8
|
-
.row
|
9
|
-
.col-3
|
10
|
-
- @documentation.sections.each do |section|
|
11
|
-
%h4= section.title
|
12
|
-
%ul
|
13
|
-
- section.endpoints.each do |endpoint|
|
14
|
-
%li
|
15
|
-
%h5
|
16
|
-
= link_to root_path(:anchor => endpoint.id) do
|
17
|
-
%span.method{ :class => endpoint.method }<
|
18
|
-
= endpoint.method
|
19
|
-
= endpoint.url
|
20
|
-
.col-9
|
21
|
-
- @documentation.sections.each do |section|
|
22
|
-
.section
|
23
|
-
%h2= section.title
|
24
|
-
- section.endpoints.each do |endpoint|
|
25
|
-
.endpoint{ :id => endpoint.id }
|
26
|
-
%h3
|
27
|
-
%span.method{ :class => endpoint.method }<
|
28
|
-
= endpoint.method
|
29
|
-
= endpoint.url
|
30
|
-
- if endpoint.description
|
31
|
-
.description= endpoint.description
|
32
|
-
- if endpoint.request || endpoint.response
|
33
|
-
- if endpoint.request
|
34
|
-
.request
|
35
|
-
%h4 Request:
|
36
|
-
- if endpoint.request.params
|
37
|
-
.panel
|
38
|
-
.title Parameters
|
39
|
-
%table.table
|
40
|
-
- endpoint.request.params.each do |param|
|
41
|
-
%tr.param
|
42
|
-
%td.name
|
43
|
-
= param.name
|
44
|
-
%td.type
|
45
|
-
= param.type
|
46
|
-
%td.required
|
47
|
-
- if param.required
|
48
|
-
%i.fa.fa-check-square-o{ :title => 'Required' }
|
49
|
-
- else
|
50
|
-
%i.fa.fa-square-o{ :title => 'Optional' }
|
51
|
-
%td.example
|
52
|
-
= param.example
|
53
|
-
- if endpoint.request.headers
|
54
|
-
.panel
|
55
|
-
.title Headers
|
56
|
-
%pre.code= JSON.pretty_generate(endpoint.request.headers)
|
57
|
-
- if endpoint.response
|
58
|
-
.response
|
59
|
-
%h4
|
60
|
-
Response:
|
61
|
-
= endpoint.response.status
|
62
|
-
- if endpoint.response.body
|
63
|
-
.panel
|
64
|
-
.title Body
|
65
|
-
%pre.code= JSON.pretty_generate(endpoint.response.body)
|
66
|
-
- if endpoint.response.headers
|
67
|
-
.panel
|
68
|
-
.title Headers
|
69
|
-
%pre.code= JSON.pretty_generate(endpoint.response.headers)
|
70
|
-
%footer
|
71
|
-
.container
|
72
|
-
= link_to 'https://github.com/droptheplot/apipony' do
|
73
|
-
%i.fa.fa-github
|
74
|
-
Apipony
|
@@ -1,12 +0,0 @@
|
|
1
|
-
!!!
|
2
|
-
%html
|
3
|
-
%head
|
4
|
-
%title Apipony
|
5
|
-
%link{ :href => '//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/styles/github.min.css', :rel => 'stylesheet' }/
|
6
|
-
%link{ :href => 'https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css', :rel => 'stylesheet' }/
|
7
|
-
= stylesheet_link_tag 'apipony/application', media: 'all'
|
8
|
-
%script{ :src => '//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/highlight.min.js' }
|
9
|
-
= javascript_include_tag 'apipony/application'
|
10
|
-
= csrf_meta_tags
|
11
|
-
%body
|
12
|
-
= yield
|
data/config/initializers/haml.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'haml-rails'
|