useless-doc 0.2.0 → 0.2.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/lib/useless/doc/core/api.rb +27 -0
- data/lib/useless/doc/rack/proxy.rb +1 -1
- data/lib/useless/doc/serialization/dump.rb +17 -2
- data/lib/useless/doc/serialization/load.rb +24 -2
- data/lib/useless/doc/version.rb +1 -1
- data/spec/documents/api.json +11 -0
- data/spec/useless/doc/serialization/dump_spec.rb +25 -1
- data/spec/useless/doc/serialization/load_spec.rb +11 -0
- metadata +5 -2
@@ -0,0 +1,27 @@
|
|
1
|
+
module Useless
|
2
|
+
module Doc
|
3
|
+
module Core
|
4
|
+
|
5
|
+
# Documentation for an entire API.
|
6
|
+
#
|
7
|
+
# @!attribute [r] description
|
8
|
+
# @return [String] a description of the API.
|
9
|
+
#
|
10
|
+
# @!attribute [r] resources
|
11
|
+
# @return [Array<Resource>] the resources included in the API.
|
12
|
+
#
|
13
|
+
class API
|
14
|
+
|
15
|
+
attr_accessor :url, :description, :resources
|
16
|
+
|
17
|
+
# @param [Hash] attrs corresponds to the class's instance attributes.
|
18
|
+
#
|
19
|
+
def initialize(attrs = {})
|
20
|
+
@url = attrs[:url]
|
21
|
+
@description = attrs[:description]
|
22
|
+
@resources = attrs[:resources]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -18,9 +18,24 @@ module Useless
|
|
18
18
|
hash.is_a?(String) ? hash : Oj.dump(hash)
|
19
19
|
end
|
20
20
|
|
21
|
-
# Converts +
|
21
|
+
# Converts +Core::API+ instance to a JSON representation.
|
22
22
|
#
|
23
|
-
# @param [
|
23
|
+
# @param [Core::API] api the API to be converted to JSON.
|
24
|
+
#
|
25
|
+
# @return [String] a JSON representation of the specified API.
|
26
|
+
#
|
27
|
+
def self.api(api)
|
28
|
+
if api
|
29
|
+
hash_to_json \
|
30
|
+
'url' => api.url,
|
31
|
+
'description' => api.description,
|
32
|
+
'resources' => api.resources.map { |resource| resource(resource) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Converts a +Core::Resource+ instance to a JSON representation.
|
37
|
+
#
|
38
|
+
# @param [Core::Resource] resource the resource to be converted to JSON.
|
24
39
|
#
|
25
40
|
# @return [String] a JSON representation of the specified resource.
|
26
41
|
#
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'oj'
|
2
2
|
|
3
|
+
require 'useless/doc/core/api'
|
3
4
|
require 'useless/doc/core/body'
|
4
5
|
require 'useless/doc/core/header'
|
5
6
|
require 'useless/doc/core/request'
|
@@ -23,12 +24,33 @@ module Useless
|
|
23
24
|
json.is_a?(Hash) ? json : Oj.load(json)
|
24
25
|
end
|
25
26
|
|
26
|
-
# Converts a JSON represntation to an instance of +
|
27
|
+
# Converts a JSON represntation to an instance of +Core::API+
|
28
|
+
#
|
29
|
+
# @param [String, Hash] json the JSON representation to be converted to
|
30
|
+
# an API.
|
31
|
+
#
|
32
|
+
# @return [Core::API] the API corresponding to the specified
|
33
|
+
# JSON.
|
34
|
+
#
|
35
|
+
def self.api(json)
|
36
|
+
hash = json_to_hash json
|
37
|
+
|
38
|
+
resources = (hash['resources'] || []).map do |json|
|
39
|
+
resource json
|
40
|
+
end
|
41
|
+
|
42
|
+
Useless::Doc::Core::API.new \
|
43
|
+
url: hash['url'],
|
44
|
+
description: hash['description'],
|
45
|
+
resources: resources
|
46
|
+
end
|
47
|
+
|
48
|
+
# Converts a JSON represntation to an instance of +Core::Resource+
|
27
49
|
#
|
28
50
|
# @param [String, Hash] json the JSON representation to be converted to
|
29
51
|
# a resource.
|
30
52
|
#
|
31
|
-
# @return [
|
53
|
+
# @return [Core::Resource] the resource corresponding to the specified
|
32
54
|
# JSON.
|
33
55
|
#
|
34
56
|
def self.resource(json)
|
data/lib/useless/doc/version.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
2
|
|
3
|
+
require 'useless/doc/core/api'
|
3
4
|
require 'useless/doc/core/body'
|
4
5
|
require 'useless/doc/core/header'
|
5
6
|
require 'useless/doc/core/request'
|
@@ -21,8 +22,31 @@ describe Useless::Doc::Serialization::Dump do
|
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
25
|
+
describe '.api' do
|
26
|
+
it 'should convert the specified Core::API instance to JSON' do
|
27
|
+
resource = Useless::Doc::Core::Resource.new \
|
28
|
+
path: '/twiddles',
|
29
|
+
description: 'The full lot of twiddles.',
|
30
|
+
requests: []
|
31
|
+
|
32
|
+
api = Useless::Doc::Core::API.new \
|
33
|
+
url: 'twiddles.useless.io',
|
34
|
+
description: 'Pretty much, like, everything you\'re looking for',
|
35
|
+
resources: [resource]
|
36
|
+
|
37
|
+
json = Useless::Doc::Serialization::Dump.api(api)
|
38
|
+
hash = Useless::Doc::Serialization::Load.json_to_hash(json)
|
39
|
+
hash['url'].should == 'twiddles.useless.io'
|
40
|
+
hash['description'].should == 'Pretty much, like, everything you\'re looking for'
|
41
|
+
|
42
|
+
resource_hash = Useless::Doc::Serialization::Load.json_to_hash(hash['resources'][0])
|
43
|
+
resource_hash['path'].should == '/twiddles'
|
44
|
+
resource_hash['description'].should == 'The full lot of twiddles.'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
24
48
|
describe '.resource' do
|
25
|
-
it 'should convert the specified
|
49
|
+
it 'should convert the specified Core::Resource instance into JSON' do
|
26
50
|
get_response_header = Useless::Doc::Core::Header.new \
|
27
51
|
key: 'Type',
|
28
52
|
description: 'The response type.'
|
@@ -16,6 +16,17 @@ describe Useless::Doc::Serialization::Load do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
describe '.api' do
|
20
|
+
it 'should parse the specified JSON into an API instance' do
|
21
|
+
document = load_document('api.json')
|
22
|
+
api = Useless::Doc::Serialization::Load.api document.read
|
23
|
+
api.url.should == 'twonk.useless.io'
|
24
|
+
api.description.should == 'Twonk information. Duh.'
|
25
|
+
api.resources.first.path.should == '/twonks/:id'
|
26
|
+
api.resources.first.description.should == 'The most critical aspect.'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
19
30
|
describe '.resource' do
|
20
31
|
it 'should parse the specified JSON into a model hierarchy' do
|
21
32
|
document = load_document('twonk.json')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: useless-doc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: oj
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- lib/useless/doc.rb
|
155
|
+
- lib/useless/doc/core/api.rb
|
155
156
|
- lib/useless/doc/core/body.rb
|
156
157
|
- lib/useless/doc/core/header.rb
|
157
158
|
- lib/useless/doc/core/request.rb
|
@@ -172,6 +173,7 @@ files:
|
|
172
173
|
- lib/useless/doc/ui/godel/stylesheet.css
|
173
174
|
- lib/useless/doc/ui/godel/template.mustache
|
174
175
|
- lib/useless/doc/version.rb
|
176
|
+
- spec/documents/api.json
|
175
177
|
- spec/documents/twonk.json
|
176
178
|
- spec/spec_helper.rb
|
177
179
|
- spec/useless/doc/dsl_spec.rb
|
@@ -210,6 +212,7 @@ signing_key:
|
|
210
212
|
specification_version: 3
|
211
213
|
summary: For parsing and serving Useless documentation.
|
212
214
|
test_files:
|
215
|
+
- spec/documents/api.json
|
213
216
|
- spec/documents/twonk.json
|
214
217
|
- spec/spec_helper.rb
|
215
218
|
- spec/useless/doc/dsl_spec.rb
|