useless-doc 0.4.0 → 0.5.0

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.
@@ -1,8 +1,8 @@
1
1
  module Useless
2
2
  module Doc
3
- class Rack
3
+ class Proxy
4
4
 
5
- # +Doc::Rack::CSS+ serves the stylesheet for the current +Doc::UI+
5
+ # +Doc::Proxy::CSS+ serves the stylesheet for the current +Doc::UI+
6
6
  # iff the request path is '/doc.css'. Otherwise, it passes the request
7
7
  # down the stack.
8
8
  #
@@ -1,8 +1,8 @@
1
1
  module Useless
2
2
  module Doc
3
- class Rack
3
+ class Proxy
4
4
 
5
- # +Doc::Rack::HTML+ is the base application for +Useless::Doc::Rack+.
5
+ # +Doc::Proxy::HTML+ is the base application for +Useless::Doc::Proxy+.
6
6
  # It expects a +Doc::UI+ instance to be set as 'useless.doc.ui', and a
7
7
  # +Doc::Core+ entity to be set as 'useless.doc.subject', and then simply
8
8
  # passes the latter to the former's +#html+ method.
@@ -2,9 +2,9 @@ require 'useless/doc/client'
2
2
 
3
3
  module Useless
4
4
  module Doc
5
- class Rack
5
+ class Proxy
6
6
 
7
- # +Doc::Rack::Subject+ retrieves a +Doc::Core+ entity based upon
7
+ # +Doc::Proxy::Subject+ retrieves a +Doc::Core+ entity based upon
8
8
  # 'useless.doc.url', from a environment-appropriate +Doc::Client+,
9
9
  # and sets it to 'useless.doc.subject'.
10
10
  #
@@ -3,9 +3,9 @@ require 'useless/doc/ui/godel'
3
3
 
4
4
  module Useless
5
5
  module Doc
6
- class Rack
6
+ class Proxy
7
7
 
8
- # +Doc::Rack::UI+ chooses which UI should be used to render the
8
+ # +Doc::Proxy::UI+ chooses which UI should be used to render the
9
9
  # documentation and sets it to 'useless.doc.ui'.
10
10
  #
11
11
  # It could theoretically be chosen via the 'ui' parameter,
@@ -2,9 +2,9 @@ require 'rack/request'
2
2
 
3
3
  module Useless
4
4
  module Doc
5
- class Rack
5
+ class Proxy
6
6
 
7
- # +Doc::Rack::URL+ translates the request URL into the corresponding
7
+ # +Doc::Proxy::URL+ translates the request URL into the corresponding
8
8
  # API URL using the specified 'useless.doc.router'.
9
9
  #
10
10
  class URL
@@ -6,15 +6,15 @@ require 'low/rack/log_level'
6
6
  require 'low/rack/request_logger'
7
7
 
8
8
  require 'useless/doc/router'
9
- require 'useless/doc/rack/ui'
10
- require 'useless/doc/rack/css'
11
- require 'useless/doc/rack/url'
12
- require 'useless/doc/rack/subject'
13
- require 'useless/doc/rack/html'
9
+ require 'useless/doc/proxy/ui'
10
+ require 'useless/doc/proxy/css'
11
+ require 'useless/doc/proxy/url'
12
+ require 'useless/doc/proxy/subject'
13
+ require 'useless/doc/proxy/html'
14
14
 
15
15
  module Useless
16
16
  module Doc
17
- class Rack
17
+ class Proxy
18
18
  def initialize(router = nil)
19
19
  @router = router || Useless::Doc::Router.default
20
20
  end
@@ -35,11 +35,11 @@ module Useless
35
35
  use Low::Rack::RequestLogger, key: 'useless.doc.logger'
36
36
  use ::Rack::CommonLogger
37
37
 
38
- use Useless::Doc::Rack::UI
39
- use Useless::Doc::Rack::CSS
40
- use Useless::Doc::Rack::URL
41
- use Useless::Doc::Rack::Subject
42
- run Useless::Doc::Rack::HTML
38
+ use UI
39
+ use CSS
40
+ use URL
41
+ use Subject
42
+ run HTML
43
43
  end
44
44
  end
45
45
  end
@@ -0,0 +1,85 @@
1
+ require 'sinatra'
2
+
3
+ require 'useless/doc/dsl'
4
+ require 'useless/doc/serialization/dump'
5
+
6
+ module Useless
7
+ module Doc
8
+ module Server
9
+
10
+ # Provides access to the +Doc::DSL+ via the +.doc+ method. The JSON of the
11
+ # API doc that is built will be served via an OPTIONS request to the root.
12
+ # Resource documentation is similarly served via an OPTIONS request to the
13
+ # corresponding path.
14
+ #
15
+ # @example
16
+ # class ResourceApp < Sinatra::Base
17
+ # register Useless::Doc::Sinatra
18
+ #
19
+ # doc 'Resouces API' do
20
+ # url 'resources.useless.io'
21
+ # description 'A place with resources'
22
+ # end
23
+ #
24
+ # doc.get '/some-resources' do
25
+ # description 'Get all of these resources'
26
+ #
27
+ # request do
28
+ # parameter 'page', 'The page of resources to return.'
29
+ # end
30
+ #
31
+ # response do
32
+ # body do
33
+ # attribute 'name', 'The name of the resource.'
34
+ # end
35
+ # end
36
+ # end
37
+ #
38
+ # ...
39
+ #
40
+ # end
41
+ #
42
+ module Sinatra
43
+ def doc=(doc)
44
+ @doc = doc
45
+ end
46
+
47
+ def doc(name = nil, &block)
48
+ @dsl ||= Useless::Doc::DSL::API.new(name: name)
49
+ @dsl.instance_eval(&block) if block_given?
50
+ @dsl
51
+ end
52
+
53
+ def generated_doc
54
+ @doc ||= @dsl.generate if @dsl
55
+ end
56
+
57
+ def self.registered(app)
58
+ app.options '/' do
59
+ if api = self.class.generated_doc
60
+ last_modified api.timestamp
61
+ Useless::Doc::Serialization::Dump.api(api)
62
+ end
63
+ end
64
+
65
+ app.options '/*' do
66
+ if api = self.class.generated_doc
67
+ resource = api.resources.find do |resource|
68
+ resource.path == "/#{params[:splat].first}"
69
+ end
70
+
71
+ if resource
72
+ last_modified api.timestamp
73
+ return Useless::Doc::Serialization::Dump.resource(resource)
74
+ end
75
+ end
76
+
77
+ pass
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ Sinatra.register Useless::Doc::Server::Sinatra
@@ -1,5 +1,5 @@
1
1
  module Useless
2
2
  module Doc
3
- VERSION = '0.4.0'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
data/spec/config.ru CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  require 'uri'
5
5
  require 'useless/doc/router'
6
- require 'useless/doc/rack'
6
+ require 'useless/doc/proxy'
7
7
 
8
8
  class TestRouter
9
9
  include Useless::Doc::Router
@@ -16,4 +16,4 @@ class TestRouter
16
16
  end
17
17
  end
18
18
 
19
- run Useless::Doc::Rack.new(TestRouter.new)
19
+ run Useless::Doc::Proxy.new(TestRouter.new)
@@ -11,7 +11,7 @@ describe Useless::Doc::Client::Standard do
11
11
  it 'should make a normal request if the cache is empty.' do
12
12
  Typhoeus.should_receive(:options).
13
13
  with('http://some-api.granmal.com/some/resource', headers: { 'Accept' => 'application/json' }).
14
- and_return(mock(:response, response_code: 200, response_body: load_document('twonk.json').read))
14
+ and_return(mock(:response, response_code: 200, response_body: load_document('resource.json').read))
15
15
 
16
16
  resource = @client.get('http://some-api.granmal.com/some/resource')
17
17
  resource.path.should == '/twonks/:id'
@@ -32,7 +32,7 @@ describe Useless::Doc::Client::Standard do
32
32
 
33
33
  Typhoeus.should_receive(:options).once.
34
34
  with('http://some-api.granmal.com/some/resource', headers: { 'Accept' => 'application/json' }).
35
- and_return(mock(:response, response_code: 200, response_body: load_document('twonk.json').read))
35
+ and_return(mock(:response, response_code: 200, response_body: load_document('resource.json').read))
36
36
 
37
37
  Typhoeus.should_receive(:options).once.
38
38
  with('http://some-api.granmal.com/some/resource', headers: { 'Accept' => 'application/json', 'If-Modified-Since' => now.httpdate}).
@@ -47,7 +47,7 @@ end
47
47
  describe Useless::Doc::Client::Stub do
48
48
  it 'should serve files from the spec/documents directory' do
49
49
  client = Useless::Doc::Client.stub
50
- resource = client.get('http://anything.useless.io/twonk')
50
+ resource = client.get('http://anything.useless.io/resource')
51
51
  resource.path.should == '/twonks/:id'
52
52
  end
53
53
 
@@ -1,10 +1,10 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper'
2
2
 
3
3
  require 'rack/test'
4
- require 'useless/doc/rack/css'
4
+ require 'useless/doc/proxy/css'
5
5
  require 'useless/doc/ui/godel'
6
6
 
7
- describe Useless::Doc::Rack::CSS do
7
+ describe Useless::Doc::Proxy::CSS do
8
8
  include Rack::Test::Methods
9
9
 
10
10
  def base_app
@@ -16,7 +16,7 @@ describe Useless::Doc::Rack::CSS do
16
16
  def app
17
17
  @app ||= lambda do |env|
18
18
  env['useless.doc.ui'] = Useless::Doc::UI::Godel
19
- Useless::Doc::Rack::CSS.new(base_app).call(env)
19
+ Useless::Doc::Proxy::CSS.new(base_app).call(env)
20
20
  end
21
21
  end
22
22
 
@@ -3,9 +3,9 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
3
3
  require 'rack/test'
4
4
  require 'useless/doc/ui/godel'
5
5
  require 'useless/doc/core/api'
6
- require 'useless/doc/rack/html'
6
+ require 'useless/doc/proxy/html'
7
7
 
8
- describe Useless::Doc::Rack::HTML do
8
+ describe Useless::Doc::Proxy::HTML do
9
9
  include Rack::Test::Methods
10
10
 
11
11
  before(:all) do
@@ -18,7 +18,7 @@ describe Useless::Doc::Rack::HTML do
18
18
  env['useless.doc.ui'] = @ui
19
19
  env['useless.doc.subject'] = @subject
20
20
 
21
- Useless::Doc::Rack::HTML.call(env)
21
+ Useless::Doc::Proxy::HTML.call(env)
22
22
  end
23
23
  end
24
24
 
@@ -1,9 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper'
2
2
 
3
3
  require 'rack/test'
4
- require 'useless/doc/rack/subject'
4
+ require 'useless/doc/proxy/subject'
5
5
 
6
- describe Useless::Doc::Rack::Subject do
6
+ describe Useless::Doc::Proxy::Subject do
7
7
  include Rack::Test::Methods
8
8
 
9
9
  def app
@@ -13,7 +13,7 @@ describe Useless::Doc::Rack::Subject do
13
13
  end
14
14
 
15
15
  env['useless.doc.url'] = 'some.api.com'
16
- Useless::Doc::Rack::Subject.new(base_app).call(env)
16
+ Useless::Doc::Proxy::Subject.new(base_app).call(env)
17
17
  end
18
18
  end
19
19
 
@@ -1,9 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/../../../spec_helper'
2
2
 
3
3
  require 'rack/test'
4
- require 'useless/doc/rack/ui'
4
+ require 'useless/doc/proxy/ui'
5
5
 
6
- describe Useless::Doc::Rack::UI do
6
+ describe Useless::Doc::Proxy::UI do
7
7
  include Rack::Test::Methods
8
8
 
9
9
  def app
@@ -12,7 +12,7 @@ describe Useless::Doc::Rack::UI do
12
12
  [200, {'Content-Type' => 'text/plain'}, [env['useless.doc.ui'].class.name]]
13
13
  end
14
14
 
15
- Useless::Doc::Rack::UI.new(base_app)
15
+ Useless::Doc::Proxy::UI.new(base_app)
16
16
  end
17
17
  end
18
18
 
@@ -2,9 +2,9 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
2
2
 
3
3
  require 'rack/test'
4
4
  require 'useless/doc/router'
5
- require 'useless/doc/rack/url'
5
+ require 'useless/doc/proxy/url'
6
6
 
7
- describe Useless::Doc::Rack::URL do
7
+ describe Useless::Doc::Proxy::URL do
8
8
  include Rack::Test::Methods
9
9
 
10
10
  def app
@@ -14,7 +14,7 @@ describe Useless::Doc::Rack::URL do
14
14
  end
15
15
 
16
16
  env['useless.doc.router'] = Useless::Doc::Router.default
17
- Useless::Doc::Rack::URL.new(base_app).call(env)
17
+ Useless::Doc::Proxy::URL.new(base_app).call(env)
18
18
  end
19
19
  end
20
20
 
@@ -2,14 +2,14 @@ require File.dirname(__FILE__) + '/../../spec_helper'
2
2
 
3
3
  require 'rack/test'
4
4
  require 'useless/doc'
5
- require 'useless/doc/rack'
5
+ require 'useless/doc/proxy'
6
6
  require 'useless/doc/client'
7
7
 
8
- describe Useless::Doc::Rack do
8
+ describe Useless::Doc::Proxy do
9
9
  include Rack::Test::Methods
10
10
 
11
11
  def app
12
- Useless::Doc::Rack.new
12
+ Useless::Doc::Proxy.new
13
13
  end
14
14
 
15
15
  it 'should return a 404 if the JSON cannot be retrieved' do
@@ -49,7 +49,7 @@ describe Useless::Doc::Rack do
49
49
  it 'should return resource HTML if proper JSON is retrieved' do
50
50
  Useless::Doc::Client.stub.should_receive(:get).
51
51
  with('http://some-api.useless.io/some/resource').
52
- and_return(Useless::Doc.load.resource(load_document('twonk.json').read))
52
+ and_return(Useless::Doc.load.resource(load_document('resource.json').read))
53
53
 
54
54
  get 'http://some-api.doc.useless.io/some/resource'
55
55
  last_response.should be_ok
@@ -33,7 +33,7 @@ describe Useless::Doc::Serialization::Load do
33
33
  end
34
34
 
35
35
  it 'should return a Resource instance if resource JSON is provided' do
36
- document = load_document('twonk.json')
36
+ document = load_document('resource.json')
37
37
  resource = Useless::Doc::Serialization::Load.load document.read
38
38
  resource.should be_an_instance_of(Useless::Doc::Core::Resource)
39
39
  end
@@ -68,7 +68,7 @@ describe Useless::Doc::Serialization::Load do
68
68
 
69
69
  describe '.resource' do
70
70
  it 'should parse the specified JSON into a model hierarchy' do
71
- document = load_document('twonk.json')
71
+ document = load_document('resource.json')
72
72
  resource = Useless::Doc::Serialization::Load.resource document.read
73
73
 
74
74
  resource.should be_a Useless::Doc::Core::Resource
@@ -1,13 +1,13 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
2
 
3
3
  require 'rack/test'
4
4
  require 'sinatra/base'
5
- require 'useless/doc/sinatra'
5
+ require 'useless/doc/server/sinatra'
6
6
  require 'useless/doc/serialization/load'
7
7
 
8
- describe Useless::Doc::Sinatra do
8
+ describe Useless::Doc::Server::Sinatra do
9
9
  class DocApp < Sinatra::Base
10
- register Useless::Doc::Sinatra
10
+ register Useless::Doc::Server::Sinatra
11
11
 
12
12
  doc 'Resoruce API' do
13
13
  url 'resource.useless.io'
@@ -118,7 +118,7 @@ describe Useless::Doc::UI::Godel do
118
118
 
119
119
  context 'for a Core::Resource instance' do
120
120
  before(:each) do
121
- json = load_document('twonk.json').read
121
+ json = load_document('resource.json').read
122
122
  router = Useless::Doc::Router.default
123
123
  resource = Useless::Doc.load.resource json
124
124
  result = Useless::Doc::UI::Godel.new(router).html(resource)
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.4.0
4
+ version: 0.5.0
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-03-07 00:00:00.000000000 Z
12
+ date: 2013-03-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oj
@@ -193,16 +193,16 @@ files:
193
193
  - lib/useless/doc/core/resource.rb
194
194
  - lib/useless/doc/core/response.rb
195
195
  - lib/useless/doc/dsl.rb
196
- - lib/useless/doc/rack.rb
197
- - lib/useless/doc/rack/css.rb
198
- - lib/useless/doc/rack/html.rb
199
- - lib/useless/doc/rack/subject.rb
200
- - lib/useless/doc/rack/ui.rb
201
- - lib/useless/doc/rack/url.rb
196
+ - lib/useless/doc/proxy.rb
197
+ - lib/useless/doc/proxy/css.rb
198
+ - lib/useless/doc/proxy/html.rb
199
+ - lib/useless/doc/proxy/subject.rb
200
+ - lib/useless/doc/proxy/ui.rb
201
+ - lib/useless/doc/proxy/url.rb
202
202
  - lib/useless/doc/router.rb
203
203
  - lib/useless/doc/serialization/dump.rb
204
204
  - lib/useless/doc/serialization/load.rb
205
- - lib/useless/doc/sinatra.rb
205
+ - lib/useless/doc/server/sinatra.rb
206
206
  - lib/useless/doc/ui.rb
207
207
  - lib/useless/doc/ui/godel.rb
208
208
  - lib/useless/doc/ui/godel/api.mustache
@@ -213,20 +213,20 @@ files:
213
213
  - spec/config.ru
214
214
  - spec/documents/api.json
215
215
  - spec/documents/domain.json
216
- - spec/documents/twonk.json
216
+ - spec/documents/resource.json
217
217
  - spec/spec_helper.rb
218
218
  - spec/useless/doc/client_spec.rb
219
219
  - spec/useless/doc/dsl_spec.rb
220
- - spec/useless/doc/rack/css_spec.rb
221
- - spec/useless/doc/rack/html_spec.rb
222
- - spec/useless/doc/rack/subject_spec.rb
223
- - spec/useless/doc/rack/ui_spec.rb
224
- - spec/useless/doc/rack/url_spec.rb
225
- - spec/useless/doc/rack_spec.rb
220
+ - spec/useless/doc/proxy/css_spec.rb
221
+ - spec/useless/doc/proxy/html_spec.rb
222
+ - spec/useless/doc/proxy/subject_spec.rb
223
+ - spec/useless/doc/proxy/ui_spec.rb
224
+ - spec/useless/doc/proxy/url_spec.rb
225
+ - spec/useless/doc/proxy_spec.rb
226
226
  - spec/useless/doc/router_spec.rb
227
227
  - spec/useless/doc/serialization/dump_spec.rb
228
228
  - spec/useless/doc/serialization/load_spec.rb
229
- - spec/useless/doc/sinatra_spec.rb
229
+ - spec/useless/doc/server/sinatra_spec.rb
230
230
  - spec/useless/doc/ui/godel_spec.rb
231
231
  - useless-doc.gemspec
232
232
  homepage:
@@ -257,18 +257,18 @@ test_files:
257
257
  - spec/config.ru
258
258
  - spec/documents/api.json
259
259
  - spec/documents/domain.json
260
- - spec/documents/twonk.json
260
+ - spec/documents/resource.json
261
261
  - spec/spec_helper.rb
262
262
  - spec/useless/doc/client_spec.rb
263
263
  - spec/useless/doc/dsl_spec.rb
264
- - spec/useless/doc/rack/css_spec.rb
265
- - spec/useless/doc/rack/html_spec.rb
266
- - spec/useless/doc/rack/subject_spec.rb
267
- - spec/useless/doc/rack/ui_spec.rb
268
- - spec/useless/doc/rack/url_spec.rb
269
- - spec/useless/doc/rack_spec.rb
264
+ - spec/useless/doc/proxy/css_spec.rb
265
+ - spec/useless/doc/proxy/html_spec.rb
266
+ - spec/useless/doc/proxy/subject_spec.rb
267
+ - spec/useless/doc/proxy/ui_spec.rb
268
+ - spec/useless/doc/proxy/url_spec.rb
269
+ - spec/useless/doc/proxy_spec.rb
270
270
  - spec/useless/doc/router_spec.rb
271
271
  - spec/useless/doc/serialization/dump_spec.rb
272
272
  - spec/useless/doc/serialization/load_spec.rb
273
- - spec/useless/doc/sinatra_spec.rb
273
+ - spec/useless/doc/server/sinatra_spec.rb
274
274
  - spec/useless/doc/ui/godel_spec.rb
@@ -1,83 +0,0 @@
1
- require 'sinatra'
2
-
3
- require 'useless/doc/dsl'
4
- require 'useless/doc/serialization/dump'
5
-
6
- module Useless
7
- module Doc
8
-
9
- # Provides access to the +Doc::DSL+ via the +.doc+ method. The JSON of the
10
- # API doc that is built will be served via an OPTIONS request to the root.
11
- # Resource documentation is similarly served via an OPTIONS request to the
12
- # corresponding path.
13
- #
14
- # @example
15
- # class ResourceApp < Sinatra::Base
16
- # register Useless::Doc::Sinatra
17
- #
18
- # doc 'Resouces API' do
19
- # url 'resources.useless.io'
20
- # description 'A place with resources'
21
- # end
22
- #
23
- # doc.get '/some-resources' do
24
- # description 'Get all of these resources'
25
- #
26
- # request do
27
- # parameter 'page', 'The page of resources to return.'
28
- # end
29
- #
30
- # response do
31
- # body do
32
- # attribute 'name', 'The name of the resource.'
33
- # end
34
- # end
35
- # end
36
- #
37
- # ...
38
- #
39
- # end
40
- #
41
- module Sinatra
42
- def doc=(doc)
43
- @doc = doc
44
- end
45
-
46
- def doc(name = nil, &block)
47
- @dsl ||= Useless::Doc::DSL::API.new(name: name)
48
- @dsl.instance_eval(&block) if block_given?
49
- @dsl
50
- end
51
-
52
- def generated_doc
53
- @doc ||= @dsl.generate if @dsl
54
- end
55
-
56
- def self.registered(app)
57
- app.options '/' do
58
- if api = self.class.generated_doc
59
- last_modified api.timestamp
60
- Useless::Doc::Serialization::Dump.api(api)
61
- end
62
- end
63
-
64
- app.options '/*' do
65
- if api = self.class.generated_doc
66
- resource = api.resources.find do |resource|
67
- resource.path == "/#{params[:splat].first}"
68
- end
69
-
70
- if resource
71
- last_modified api.timestamp
72
- return Useless::Doc::Serialization::Dump.resource(resource)
73
- end
74
- end
75
-
76
- pass
77
- end
78
- end
79
- end
80
- end
81
- end
82
-
83
- Sinatra.register Useless::Doc::Sinatra
File without changes