apipie-rails 0.0.23 → 0.0.24
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/CHANGELOG +9 -0
- data/README.rst +10 -1
- data/app/controllers/apipie/apipies_controller.rb +10 -1
- data/app/views/apipie/apipies/apipie_404.html.erb +3 -1
- data/lib/apipie/application.rb +2 -0
- data/lib/apipie/configuration.rb +2 -1
- data/lib/apipie/dsl_definition.rb +13 -0
- data/lib/apipie/extractor.rb +3 -1
- data/lib/apipie/extractor/recorder.rb +5 -3
- data/lib/apipie/extractor/writer.rb +2 -2
- data/lib/apipie/param_description.rb +1 -1
- data/lib/apipie/static_dispatcher.rb +10 -1
- data/lib/apipie/version.rb +1 -1
- data/lib/generators/apipie/views_generator.rb +11 -0
- data/lib/tasks/apipie.rake +6 -1
- data/spec/controllers/users_controller_spec.rb +6 -0
- data/spec/dummy/app/controllers/users_controller.rb +7 -0
- data/spec/dummy/doc/users/desc_from_file.md +1 -0
- data/spec/lib/param_description_spec.rb +1 -1
- metadata +7 -3
data/CHANGELOG
CHANGED
@@ -2,6 +2,15 @@
|
|
2
2
|
Changelog
|
3
3
|
===========
|
4
4
|
|
5
|
+
v0.0.24
|
6
|
+
-------
|
7
|
+
|
8
|
+
* fix DOS vulnerability for running in production without use_cache
|
9
|
+
* ability to load descriptions from external files
|
10
|
+
* improved examples extractor
|
11
|
+
* fixed deprecation warnings in Rails 4
|
12
|
+
* using StandardError instead of Exception for errors
|
13
|
+
|
5
14
|
v0.0.23
|
6
15
|
-------
|
7
16
|
|
data/README.rst
CHANGED
@@ -781,11 +781,20 @@ For inspiration this is how Textile markup usage looks like:
|
|
781
781
|
end
|
782
782
|
|
783
783
|
|
784
|
+
================
|
785
|
+
Modifying Views
|
786
|
+
================
|
787
|
+
|
788
|
+
To modify the views of your documentation, run ``rails g apipie:views``.
|
789
|
+
This will copy the Apipie views to ``app/views/apipie/apipies`` and
|
790
|
+
``app/views/layouts/apipie``.
|
791
|
+
|
792
|
+
|
784
793
|
==============
|
785
794
|
Static files
|
786
795
|
==============
|
787
796
|
|
788
|
-
To generate static version of documentation (perhaps to put it on
|
797
|
+
To generate a static version of documentation (perhaps to put it on
|
789
798
|
project site or something) run ``rake apipie:static`` task. It will
|
790
799
|
create set of html files (multi-pages, single-page, plain) in your doc
|
791
800
|
directory. By default the documentation for default API version is
|
@@ -28,10 +28,19 @@ module Apipie
|
|
28
28
|
@doc = Apipie.to_json(params[:version], params[:resource], params[:method])
|
29
29
|
|
30
30
|
format.json do
|
31
|
-
|
31
|
+
if @doc
|
32
|
+
render :json => @doc
|
33
|
+
else
|
34
|
+
head :not_found
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
38
|
format.html do
|
39
|
+
unless @doc
|
40
|
+
render 'apipie_404', :status => 404
|
41
|
+
return
|
42
|
+
end
|
43
|
+
|
35
44
|
@versions = Apipie.available_versions
|
36
45
|
@doc = @doc[:docs]
|
37
46
|
if @doc[:resources].blank?
|
data/lib/apipie/application.rb
CHANGED
@@ -225,6 +225,8 @@ module Apipie
|
|
225
225
|
|
226
226
|
def to_json(version, resource_name, method_name)
|
227
227
|
|
228
|
+
return unless resource_descriptions.has_key?(version)
|
229
|
+
|
228
230
|
_resources = if resource_name.blank?
|
229
231
|
# take just resources which have some methods because
|
230
232
|
# we dont want to show eg ApplicationController as resource
|
data/lib/apipie/configuration.rb
CHANGED
@@ -4,7 +4,7 @@ module Apipie
|
|
4
4
|
attr_accessor :app_name, :app_info, :copyright, :markup, :disqus_shortname,
|
5
5
|
:api_base_url, :doc_base_url, :required_by_default, :layout,
|
6
6
|
:default_version, :debug, :version_in_url, :namespaced_resources,
|
7
|
-
:validate, :validate_value, :validate_presence, :authenticate
|
7
|
+
:validate, :validate_value, :validate_presence, :authenticate, :doc_path
|
8
8
|
|
9
9
|
|
10
10
|
alias_method :validate?, :validate
|
@@ -123,6 +123,7 @@ module Apipie
|
|
123
123
|
@debug = false
|
124
124
|
@version_in_url = true
|
125
125
|
@namespaced_resources = false
|
126
|
+
@doc_path = "doc"
|
126
127
|
end
|
127
128
|
end
|
128
129
|
end
|
@@ -144,6 +144,18 @@ module Apipie
|
|
144
144
|
alias :description :desc
|
145
145
|
alias :full_description :desc
|
146
146
|
|
147
|
+
# describe next method with document in given path
|
148
|
+
# in convension, these doc located under "#{Rails.root}/doc"
|
149
|
+
# Example:
|
150
|
+
# document "hello_world.md"
|
151
|
+
# def hello_world
|
152
|
+
# puts "hello world"
|
153
|
+
# end
|
154
|
+
def document path
|
155
|
+
content = File.open(File.join(Rails.root, Apipie.configuration.doc_path, path)).read
|
156
|
+
desc content
|
157
|
+
end
|
158
|
+
|
147
159
|
# Describe available request/response formats
|
148
160
|
#
|
149
161
|
# formats ['json', 'jsonp', 'xml']
|
@@ -152,6 +164,7 @@ module Apipie
|
|
152
164
|
_apipie_dsl_data[:formats] = formats
|
153
165
|
end
|
154
166
|
|
167
|
+
|
155
168
|
# Describe possible errors
|
156
169
|
#
|
157
170
|
# Example:
|
data/lib/apipie/extractor.rb
CHANGED
@@ -46,7 +46,7 @@ module Apipie
|
|
46
46
|
def parse_data(data)
|
47
47
|
return nil if data.to_s =~ /^\s*$/
|
48
48
|
JSON.parse(data)
|
49
|
-
rescue
|
49
|
+
rescue StandardError => e
|
50
50
|
data
|
51
51
|
end
|
52
52
|
|
@@ -98,9 +98,10 @@ module Apipie
|
|
98
98
|
Apipie::Extractor.call_recorder.analyse_env(env)
|
99
99
|
response = block.call
|
100
100
|
Apipie::Extractor.call_recorder.analyse_response(response)
|
101
|
+
Apipie::Extractor.call_finished
|
101
102
|
response
|
102
103
|
ensure
|
103
|
-
Apipie::Extractor.
|
104
|
+
Apipie::Extractor.clean_call_recorder
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
@@ -112,9 +113,10 @@ module Apipie
|
|
112
113
|
def process_with_api_recording(*args) # action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
|
113
114
|
ret = process_without_api_recording(*args)
|
114
115
|
Apipie::Extractor.call_recorder.analyze_functional_test(self)
|
116
|
+
Apipie::Extractor.call_finished
|
115
117
|
ret
|
116
118
|
ensure
|
117
|
-
Apipie::Extractor.
|
119
|
+
Apipie::Extractor.clean_call_recorder
|
118
120
|
end
|
119
121
|
end
|
120
122
|
|
@@ -140,9 +140,9 @@ module Apipie
|
|
140
140
|
|
141
141
|
class ActionDescriptionUpdater
|
142
142
|
|
143
|
-
class ControllerNotFound <
|
143
|
+
class ControllerNotFound < StandardError; end
|
144
144
|
|
145
|
-
class ActionNotFound <
|
145
|
+
class ActionNotFound < StandardError; end
|
146
146
|
|
147
147
|
def initialize(controller, action)
|
148
148
|
@controller = controller
|
@@ -61,7 +61,7 @@ module Apipie
|
|
61
61
|
return true if @allow_nil && value.nil?
|
62
62
|
unless @validator.valid?(value)
|
63
63
|
error = @validator.error
|
64
|
-
error = ParamError.new(error) unless error.is_a?
|
64
|
+
error = ParamError.new(error) unless error.is_a? StandardError
|
65
65
|
raise error
|
66
66
|
end
|
67
67
|
end
|
@@ -27,10 +27,19 @@ module Apipie
|
|
27
27
|
|
28
28
|
def ext
|
29
29
|
@ext ||= begin
|
30
|
-
ext =
|
30
|
+
ext = cache_extension
|
31
31
|
"{,#{ext},/index#{ext}}"
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
def cache_extension
|
36
|
+
if ::ActionController::Base.respond_to?(:default_static_extension)
|
37
|
+
::ActionController::Base.default_static_extension
|
38
|
+
else
|
39
|
+
::ActionController::Base.page_cache_extension
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
34
43
|
end
|
35
44
|
|
36
45
|
class StaticDispatcher
|
data/lib/apipie/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
module Apipie
|
2
|
+
class ViewsGenerator < ::Rails::Generators::Base
|
3
|
+
source_root File.expand_path("../../../../app/views", __FILE__)
|
4
|
+
desc 'Copy Apipie views to your application'
|
5
|
+
|
6
|
+
def copy_views
|
7
|
+
directory 'apipie', 'app/views/apipie'
|
8
|
+
directory 'layouts/apipie', 'app/views/layouts/apipie'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/tasks/apipie.rake
CHANGED
@@ -58,8 +58,13 @@ namespace :apipie do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
# Attempt to use the Rails application views, otherwise default to built in views
|
61
62
|
def renderer
|
62
|
-
|
63
|
+
if File.directory?("#{Rails.root}/app/views/apipie/apipies")
|
64
|
+
ActionView::Base.new("#{Rails.root}/app/views/apipie/apipies")
|
65
|
+
else
|
66
|
+
ActionView::Base.new(File.expand_path("../../../app/views/apipie/apipies", __FILE__))
|
67
|
+
end
|
63
68
|
end
|
64
69
|
|
65
70
|
def render_page(file_name, template, variables, layout = 'apipie')
|
@@ -393,6 +393,12 @@ GET /users/15
|
|
393
393
|
404
|
394
394
|
EOS2
|
395
395
|
end
|
396
|
+
|
397
|
+
describe "document" do
|
398
|
+
it "should be able to load document from markup file" do
|
399
|
+
Apipie.get_method_description(UsersController, :desc_from_file).full_description.should include("description from document")
|
400
|
+
end
|
401
|
+
end
|
396
402
|
end
|
397
403
|
|
398
404
|
describe "param description" do
|
@@ -248,4 +248,11 @@ class UsersController < ApplicationController
|
|
248
248
|
def see_another
|
249
249
|
render :text => 'This is very similar to create action'
|
250
250
|
end
|
251
|
+
|
252
|
+
|
253
|
+
api :GET, '/users/desc_from_file', 'desc from file'
|
254
|
+
document 'users/desc_from_file.md'
|
255
|
+
def desc_from_file
|
256
|
+
render :text => 'document from file action'
|
257
|
+
end
|
251
258
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
description from document
|
@@ -24,7 +24,7 @@ describe Apipie::ParamDescription do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should pick type validator" do
|
27
|
-
Apipie::Validator::BaseValidator.
|
27
|
+
Apipie::Validator::BaseValidator.should_receive(:find).and_return(:validator_instance)
|
28
28
|
param = Apipie::ParamDescription.new(method_desc, :param, String)
|
29
29
|
param.validator.should == :validator_instance
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apipie-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-10-30 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -190,6 +190,7 @@ files:
|
|
190
190
|
- lib/generators/apipie/install/README
|
191
191
|
- lib/generators/apipie/install/install_generator.rb
|
192
192
|
- lib/generators/apipie/install/templates/initializer.rb.erb
|
193
|
+
- lib/generators/apipie/views_generator.rb
|
193
194
|
- lib/tasks/apipie.rake
|
194
195
|
- rel-eng/packages/.readme
|
195
196
|
- rel-eng/packages/rubygem-apipie-rails
|
@@ -232,6 +233,7 @@ files:
|
|
232
233
|
- spec/dummy/config/routes.rb
|
233
234
|
- spec/dummy/db/.gitkeep
|
234
235
|
- spec/dummy/doc/apipie_examples.yml
|
236
|
+
- spec/dummy/doc/users/desc_from_file.md
|
235
237
|
- spec/dummy/public/404.html
|
236
238
|
- spec/dummy/public/422.html
|
237
239
|
- spec/dummy/public/500.html
|
@@ -271,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
273
|
version: '0'
|
272
274
|
requirements: []
|
273
275
|
rubyforge_project:
|
274
|
-
rubygems_version: 1.8.
|
276
|
+
rubygems_version: 1.8.23
|
275
277
|
signing_key:
|
276
278
|
specification_version: 3
|
277
279
|
summary: Rails REST API documentation tool
|
@@ -314,6 +316,7 @@ test_files:
|
|
314
316
|
- spec/dummy/config/routes.rb
|
315
317
|
- spec/dummy/db/.gitkeep
|
316
318
|
- spec/dummy/doc/apipie_examples.yml
|
319
|
+
- spec/dummy/doc/users/desc_from_file.md
|
317
320
|
- spec/dummy/public/404.html
|
318
321
|
- spec/dummy/public/422.html
|
319
322
|
- spec/dummy/public/500.html
|
@@ -333,3 +336,4 @@ test_files:
|
|
333
336
|
- spec/lib/resource_description_spec.rb
|
334
337
|
- spec/lib/validator_spec.rb
|
335
338
|
- spec/spec_helper.rb
|
339
|
+
has_rdoc:
|