apipie-rails 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -2,6 +2,32 @@
2
2
  Changelog
3
3
  ===========
4
4
 
5
+ v0.3.0
6
+ ------
7
+ This should be a backward compatible release. However, the number of new
8
+ significant features deserves new minor version bump.
9
+
10
+ * Rubocop-blessed Ruby 1.9 syntax for generated DSL documentation
11
+ [#318](https://github.com/Apipie/apipie-rails/pull/318) [@burnettk][]
12
+ * load API paths from routes.rb
13
+ [#187](https://github.com/Apipie/apipie-rails/pull/187) [@mtparet][] [@iNecas][]
14
+ * ability to use before_filter instead of overriding the action method
15
+ for validation
16
+ [#306](https://github.com/Apipie/apipie-rails/pull/306) [@dprice-fiksu][]
17
+ * support multi-part data when recording from tests
18
+ [#310](https://github.com/Apipie/apipie-rails/pull/310) [@bradrf][]
19
+ * validate_keys option to raise exception when passing undocumented option
20
+ [#122](https://github.com/Apipie/apipie-rails/pull/122) [@dfharmon][]
21
+ * handle static page generation when the doc_base_url has multiple folders
22
+ [#300](https://github.com/Apipie/apipie-rails/pull/300) [@ryanische][]
23
+ * add ability to markup validator description
24
+ [#282](https://github.com/Apipie/apipie-rails/pull/282) [@exAspArk][]
25
+ * don't specify protocol in Disqus script tag src
26
+ [#285](https://github.com/Apipie/apipie-rails/pull/285) [@chrise86][]
27
+ * fix BooleanValidator to set expected_type as boolean
28
+ [#286](https://github.com/Apipie/apipie-rails/pull/286) [@dustin-rh][]
29
+
30
+
5
31
  v0.2.6
6
32
  ------
7
33
 
@@ -217,5 +243,11 @@ v0.0.15
217
243
  [@exAspArk]: https://github.com/exAspArk
218
244
  [@mourad-ifeelgoods]: https://github.com/mourad-ifeelgoods
219
245
  [@domcleal]: https://github.com/domcleal
220
- [@dustint-rh]: https://github.com/dustint-rh
246
+ [@dustin-rh]: https://github.com/dustin-rh
221
247
  [@RajRoR]: https://github.com/RajRoR
248
+ [@chrise86]: https://github.com/chrise86
249
+ [@ryanische]: https://github.com/ryanische
250
+ [@dfharmon]: https://github.com/dfharmon
251
+ [@bradrf]: https://github.com/bradrf
252
+ [@dprice-fiksu]: https://github.com/dprice-fiksu
253
+ [@burnettk]: https://github.com/burnettk
data/README.rst CHANGED
@@ -7,20 +7,20 @@
7
7
  .. image:: https://codeclimate.com/github/Apipie/apipie-rails.png
8
8
  :target: https://codeclimate.com/github/Apipie/apipie-rails
9
9
 
10
- Apipie-rails is a DSL and Rails engine for documenting you RESTful
10
+ Apipie-rails is a DSL and Rails engine for documenting your RESTful
11
11
  API. Instead of traditional use of ``#comments``, Apipie lets you
12
- describe the code by code. This brings advantages like:
12
+ describe the code, through the code. This brings advantages like:
13
13
 
14
- * no need to learn yet another syntax, you already know Ruby, right?
15
- * possibility reuse the doc for other purposes (such as validation)
16
- * easier to extend and maintain (no string parsing involved)
17
- * possibility to use other sources for documentation purposes (such as
14
+ * No need to learn yet another syntax, you already know Ruby, right?
15
+ * Possibility of reusing the docs for other purposes (such as validation)
16
+ * Easier to extend and maintain (no string parsing involved)
17
+ * Possibility of reusing other sources for documentation purposes (such as
18
18
  routes etc.)
19
19
 
20
- The documentation is available right in your app (by default under
21
- ``/apipie`` path. In development mode, you can see the changes as you
22
- go. It's markup language agnostic and even provides an API for reusing
23
- the documentation data in form of JSON.
20
+ The documentation is available from within your app (by default under the
21
+ ``/apipie`` path.) In development mode, you can see the changes as you
22
+ go. It's markup language agnostic, and even provides an API for reusing
23
+ the documentation data in JSON.
24
24
 
25
25
  Getting started
26
26
  ---------------
@@ -46,12 +46,12 @@ Now you can start documenting your resources and actions (see
46
46
 
47
47
 
48
48
  Run your application and see the result at
49
- ``http://localhost:3000/apipie``. For it's further processing, you can
49
+ ``http://localhost:3000/apipie``. For further processing, you can
50
50
  use ``http://localhost:3000/apipie.json``.
51
51
 
52
- For more comprehensive getting started guide, see
53
- `this demo <https://github.com/iNecas/apipie-demo>`_, that includes
54
- features such as generating documenation from tests, recording examples etc.
52
+ For a more comprehensive getting started guide, see
53
+ `this demo <https://github.com/iNecas/apipie-demo>`_, which includes
54
+ features such as generating documentation from tests, recording examples etc.
55
55
 
56
56
  Screenshots
57
57
  -----------
@@ -88,7 +88,7 @@ Apipie-rails is released under the `MIT License <http://opensource.org/licenses/
88
88
  Resource Description
89
89
  --------------------
90
90
 
91
- You can describe a resource on controller level. The description is introduced by calling
91
+ You can describe a resource on the controller level. The description is introduced by calling
92
92
  ``resource_description do ... end``.
93
93
 
94
94
  Inheritance is supported, so you can specify common params for group of controllers in their parent
@@ -97,13 +97,13 @@ class.
97
97
  The following keywords are available (all are optional):
98
98
 
99
99
  resource_id
100
- How will the resource be referenced in Apipie (paths, ``see`` command etc.), by default `controller_name.downcase` is used.
100
+ How the resource will be referenced in Apipie (paths, ``see`` command etc.); by default `controller_name.downcase` is used.
101
101
 
102
102
  name
103
103
  Human readable name of resource. By default ``class.name.humanize`` is used.
104
104
 
105
105
  short (also short_description)
106
- Short description of the resource (it's shown on both list of resources and resource details)
106
+ Short description of the resource (it's shown on both the list of resources, and resource details)
107
107
 
108
108
  desc (also description and full_description)
109
109
  Full description of the resource (shown only in resource details)
@@ -112,20 +112,20 @@ param
112
112
  Common params for all methods defined in controller/child controllers.
113
113
 
114
114
  api_base_url
115
- What url is the resource available under.
115
+ What URL is the resource available under.
116
116
 
117
117
  api_versions (also api_version)
118
118
  What versions does the controller define the resource. (See `Versioning`_ for details.)
119
119
 
120
120
  formats
121
- request / response formats.
121
+ Request / response formats.
122
122
 
123
123
  error
124
- Describe every possible error that can happen what calling all
124
+ Describe every possible error that can happen when calling all
125
125
  methods defined in controller. HTTP response code and description can be provided.
126
126
 
127
127
  app_info
128
- In case of versioning, this sets app info description on per_version basis.
128
+ In case of versioning, this sets app info description on a per_version basis.
129
129
 
130
130
  meta
131
131
  Hash or array with custom metadata.
@@ -180,13 +180,22 @@ Method Description
180
180
  Then describe methods available to your API.
181
181
 
182
182
  api
183
- Say how is this method exposed and provide short description.
183
+ Describe how this method is exposed, and provide a short description.
184
184
  The first parameter is HTTP method (one of :GET/:POST/:PUT/:DELETE).
185
- The second parameter is relative URL path which is mapped to this
186
- method. The last parameter is methods short description.
187
- You can use this +api+ method more than once for one method. It could
185
+ The second parameter is the relative URL path which is mapped to this
186
+ method. The last parameter is the methods short description.
187
+ You can use this +api+ method more than once per method. It could
188
188
  be useful when there are more routes mapped to it.
189
189
 
190
+ When providing just one argument (description), or no argument at all,
191
+ the paths will be loaded from the routes.rb file.
192
+
193
+ api!
194
+ Provide a short description and additional option.
195
+ The last parameter is the methods short description.
196
+ The paths will be loaded from routes.rb file. See
197
+ `Rails Routes Integration`_ for more details.
198
+
190
199
  api_versions (also api_version)
191
200
  What version(s) does the action belong to. (See `Versioning`_ for details.)
192
201
 
@@ -197,19 +206,19 @@ formats
197
206
  Method level request / response formats.
198
207
 
199
208
  error
200
- Describe each possible error that can happen what calling this
209
+ Describe each possible error that can happen while calling this
201
210
  method. HTTP response code and description can be provided.
202
211
 
203
212
  description
204
- Full method description which will be converted to HTML by
213
+ Full method description, which will be converted into HTML by the
205
214
  chosen markup language processor.
206
215
 
207
216
  example
208
- Provide example of server response, whole communication or response type.
217
+ Provide an example of the server response; whole communication or response type.
209
218
  It will be formatted as code.
210
219
 
211
220
  see
212
- Provide reference to another method, this has to be string with
221
+ Provide reference to another method, this has to be a string with
213
222
  controller_name#method_name.
214
223
 
215
224
  meta
@@ -220,6 +229,12 @@ Example:
220
229
 
221
230
  .. code:: ruby
222
231
 
232
+ # The simplest case: just load the paths from routes.rb
233
+ api!
234
+ def index
235
+ end
236
+
237
+ # More complex example
223
238
  api :GET, "/users/:id", "Show user profile"
224
239
  error :code => 401, :desc => "Unauthorized"
225
240
  error :code => 404, :desc => "Not Found", :meta => {:anything => "you can think of"}
@@ -245,14 +260,14 @@ Example:
245
260
  Parameter Description
246
261
  ---------------------
247
262
 
248
- Use ``param`` to describe every possible parameter. You can use Hash validator
249
- in cooperation with block given to param method to describe nested parameters.
263
+ Use ``param`` to describe every possible parameter. You can use the Hash validator
264
+ in conjunction with a block given to the param method to describe nested parameters.
250
265
 
251
266
  name
252
- The first argument is parameter name as a symbol.
267
+ The first argument is the parameter name as a symbol.
253
268
 
254
269
  validator
255
- Second parameter is parameter validator, choose one from section `Validators`_
270
+ Second parameter is the parameter validator, choose one from section `Validators`_
256
271
 
257
272
  desc
258
273
  Parameter description.
@@ -261,10 +276,10 @@ required
261
276
  Set this true/false to make it required/optional. Default is optional
262
277
 
263
278
  allow_nil
264
- Set true is ``nil`` can be passed for this param.
279
+ Setting this to true means that ``nil`` can be passed.
265
280
 
266
281
  as
267
- Use by the processing functionality to change the name of a key params.
282
+ Used by the processing functionality to change the name of a key params.
268
283
 
269
284
  meta
270
285
  Hash or array with custom metadata.
@@ -291,10 +306,9 @@ DRY with param_group
291
306
  --------------------
292
307
 
293
308
  Often, params occur together in more actions. Typically, most of the
294
- params for ``create`` and ``update`` actions are common for both of
295
- them.
309
+ params for ``create`` and ``update`` actions are shared between them.
296
310
 
297
- This params can be extracted with ``def_param_group`` and
311
+ These params can be extracted with ``def_param_group`` and
298
312
  ``param_group`` keywords.
299
313
 
300
314
  The definition is looked up in the scope of the controller. If the
@@ -342,7 +356,7 @@ Example:
342
356
  Action Aware params
343
357
  -------------------
344
358
 
345
- In CRUD operations, this pattern occurs quite often: params that need
359
+ In CRUD operations, this pattern occurs quite often - params that need
346
360
  to be set are:
347
361
 
348
362
  * for create action: ``required => true`` and ``allow_nil => false``
@@ -389,7 +403,7 @@ In this case, ``user[name]`` will be not be allowed nil for all
389
403
  actions and required only for ``create`` and ``create_admin``. Params
390
404
  with ``allow_nil`` set explicitly don't have this value changed.
391
405
 
392
- Action awareness is being inherited from ancestors (in terms of
406
+ Action awareness is inherited from ancestors (in terms of
393
407
  nested params).
394
408
 
395
409
  Concerns
@@ -399,12 +413,12 @@ Sometimes, the actions are not defined in the controller class
399
413
  directly but included from a module instead. You can load the Apipie
400
414
  DSL into the module by extending it with ``Apipie::DSL::Concern``.
401
415
 
402
- The module can be used in more controllers. Therefore there is a way
403
- how to substitute parts of the documentation in the module with controller
404
- specific values. The substitutions can be stated explicitly with
416
+ The module can be used in more controllers. Therefore there is a way to
417
+ substitute parts of the documentation in the module with controller
418
+ specific values. These substitutions can be stated explicitly with
405
419
  ``apipie_concern_subst(:key => "value")`` (needs to be called before
406
420
  the module is included to take effect). The substitutions are
407
- performed in paths and descriptions of APIs and names and descriptions
421
+ performed in the paths and descriptions of APIs and names and descriptions
408
422
  of params.
409
423
 
410
424
  There are some default substitutions available:
@@ -476,13 +490,13 @@ Example
476
490
  Configuration Reference
477
491
  =========================
478
492
 
479
- Create configuration file in e.g. ``/config/initializers/apipie.rb``.
480
- You can set application name, footer text, API and documentation base URL
493
+ Create a configuration file in e.g. ``/config/initializers/apipie.rb``.
494
+ You can set the application name, footer text, API and documentation base URL
481
495
  and turn off validations. You can also choose your favorite markup language
482
- of full descriptions.
496
+ for full descriptions.
483
497
 
484
498
  app_name
485
- Name of your application used in breadcrumbs navigation.
499
+ Name of your application; used in breadcrumbs navigation.
486
500
 
487
501
  copyright
488
502
  Copyright information (shown in page footer).
@@ -497,7 +511,12 @@ default_version
497
511
  Default API version to be used (1.0 by default)
498
512
 
499
513
  validate
500
- Parameters validation is turned off when set to false.
514
+ Parameters validation is turned off when set to false. When set to
515
+ ``:explicitly``, you must invoke parameter validation yourself by calling
516
+ controller method ``apipie_validations`` (typically in a before_filter).
517
+ When set to ``:implicitly`` (or just true), your controller's action
518
+ methods are wrapped with generated methods which call ``apipie_validations``,
519
+ and then call the action method. (``:implicitly`` by default)
501
520
 
502
521
  validate_value
503
522
  Check the value of params against specified validators (true by
@@ -506,21 +525,30 @@ validate_value
506
525
  validate_presence
507
526
  Check the params presence against the documentation.
508
527
 
528
+ validate_keys
529
+ Check the received params to ensure they are defined in the API. (false by default)
530
+
509
531
  process_params
510
- Process and extract parameter defined from the params of the request
532
+ Process and extract the parameter defined from the params of the request
511
533
  to the api_params variable
512
534
 
513
535
  app_info
514
536
  Application long description.
515
537
 
516
538
  reload_controllers
517
- Set to enable/disable reloading controllers (and the documentation with it), by default enabled in development.
539
+ Set to enable/disable reloading controllers (and the documentation with it). Enabled by default in development.
518
540
 
519
541
  api_controllers_matcher
520
542
  For reloading to work properly you need to specify where your API controllers are. Can be an array if multiple paths are needed
521
543
 
522
544
  api_routes
523
- Set if your application uses custom API router, different from Rails default
545
+ Set if your application uses a custom API router, different from the Rails
546
+ default
547
+
548
+ routes_formatter
549
+ An object providing the translation from the Rails routes to the
550
+ format usable in the documentation when using the `api!` keyword. By
551
+ default, the ``Apipie::RoutesFormatter`` is used.
524
552
 
525
553
  markup
526
554
  You can choose markup language for descriptions of your application,
@@ -553,11 +581,11 @@ show_all_examples
553
581
  Set this to true to set show_in_doc=1 in all recorded examples
554
582
 
555
583
  link_extension
556
- The extension to use for API pages ('.html' by default). Link extensions
584
+ The extension to use for API pages ('.html' by default). Link extensions
557
585
  in static API docs cannot be changed from '.html'.
558
586
 
559
587
  languages
560
- List of languages API documentation should be translated into. Empty list by default.
588
+ List of languages the API documentation should be translated into. Empty by default.
561
589
 
562
590
  default_locale
563
591
  Locale used for generating documentation when no specific locale is set.
@@ -571,7 +599,7 @@ locale
571
599
  config.locale = lambda { |loc| loc ? FastGettext.set_locale(loc) : FastGettext.locale }
572
600
 
573
601
  translate
574
- Pass proc to translate strings using localization library your project uses.
602
+ Pass proc to translate strings using the localization library your project uses.
575
603
  For example see `Localization`_
576
604
 
577
605
  Example:
@@ -605,21 +633,51 @@ checksum_path
605
633
  update_checksum
606
634
  If set to true, the checksum is recalculated with every documentation_reload call
607
635
 
636
+ ========================
637
+ Rails Routes Integration
638
+ ========================
639
+
640
+ Apipie is able to load the information about the paths based on the
641
+ routes defined in the Rails application, by using the `api!` keyword
642
+ in the DSL.
643
+
644
+ It should be usable out of box, however, one might want
645
+ to do some customization (such as omitting some implicit parameters in
646
+ the path etc.). For this kind of customizations one can create a new
647
+ formatter and pass as the ``Apipie.configuration.routes_formatter``
648
+ option, like this:
649
+
650
+ .. code:: ruby
651
+
652
+ class MyFormatter < Apipie::RailsFormatter
653
+ def format_path(route)
654
+ super.gsub(/\(.*?\)/, '').gsub('//','') # hide all implicit parameters
655
+ end
656
+ end
657
+
658
+ Apipie.configure do |config|
659
+ ...
660
+ config.routes_formatter = MyFormatter.new
661
+ ...
662
+ end
663
+
664
+ A similar way can be used to influence things like order, or a description
665
+ of the loaded APIs, even omitting some paths if needed.
666
+
608
667
  ============
609
668
  Processing
610
669
  ============
611
670
 
612
- The goal is to extract and pre process parameters of the request.
671
+ The goal is to extract and pre-process parameters of the request.
613
672
 
614
- For example Rails, by default, transforms empty array to nil value,
615
- you want perhaps to transform it again to an empty array. Or you
673
+ For example Rails, by default, transforms an empty array to nil value. Perhaps
674
+ you want to transform it again into an empty array. Or you
616
675
  want to support an enumeration type (comma separated values) and
617
- you want automatically transform this string to an array.
676
+ you want to automatically transform this string into an array.
618
677
 
619
- To use it, set processing_value configuration variable to true.
620
- In your action, use api_params variable instead of params.
678
+ To use it, set the ``process_params`` configuration variable to true.
621
679
 
622
- Also by using `as` you can separate your API parameters
680
+ Also by using ``as`` you can separate your API parameter
623
681
  names from the names you are using inside your code.
624
682
 
625
683
  To implement it, you just have to write a process_value
@@ -637,21 +695,32 @@ For an enumeration type:
637
695
  Validators
638
696
  ============
639
697
 
640
- Every parameter needs to have associated validator. For now there are some
641
- basic validators. You can always provide your own to reach complex
698
+ Every parameter needs to have an associated validator. For now there are some
699
+ basic validators. You can always provide your own to achieve complex
642
700
  results.
643
701
 
644
702
  If validations are enabled (default state) the parameters of every
645
- request are validated. If the value is wrong a +ArgumentError+ exception
646
- is raised and can be rescued and processed. It contains some description
647
- of parameter value expectations. Validations can be turned off
648
- in configuration file.
703
+ request are validated. If the value is wrong an +ArgumentError+ exception
704
+ is raised and can be rescued and processed. It contains a description
705
+ of the parameter value expectations. Validations can be turned off
706
+ in the configuration file.
649
707
 
708
+ Parameter validation normally happens after before_filters, just before
709
+ your controller method is invoked. If you prefer to control when parameter
710
+ validation occurs, set the configuration parameter ``validate`` to ``:explicitly``.
711
+ You must then call the ``apipie_validations`` method yourself, e.g.:
712
+
713
+ .. code:: ruby
714
+
715
+ before_filter: :apipie_validations
716
+
717
+ This is useful if you have before_filters which use parameter values: just add them
718
+ after the ``apipie_validations`` before_filter.
650
719
 
651
720
  TypeValidator
652
721
  -------------
653
722
  Check the parameter type. Only String, Hash and Array are supported
654
- for the sake of simplicity. Read more to to find out how to add
723
+ for the sake of simplicity. Read more to find out how to add
655
724
  your own validator.
656
725
 
657
726
  .. code:: ruby
@@ -672,7 +741,7 @@ Check parameter value against given regular expression.
672
741
  EnumValidator
673
742
  --------------
674
743
 
675
- Check if parameter value is included given array.
744
+ Check if parameter value is included in the given array.
676
745
 
677
746
  .. code:: ruby
678
747
 
@@ -682,11 +751,11 @@ Check if parameter value is included given array.
682
751
  ProcValidator
683
752
  -------------
684
753
 
685
- If you need more complex validation and you know you won't reuse it you
686
- can use Proc/lambda validator. Provide your own Proc taking value
687
- of parameter as the only argument. Return true if value pass validation
688
- or return some text about what is wrong. _Don't use the keyword *return*
689
- if you provide instance of Proc (with lambda it is ok), just use the last
754
+ If you need more complex validation and you know you won't reuse it, you
755
+ can use the Proc/lambda validator. Provide your own Proc, taking the value
756
+ of the parameter as the only argument. Return true if value passes validation
757
+ or return some text about what is wrong otherwise. _Don't use the keyword *return*
758
+ if you provide an instance of Proc (with lambda it is ok), just use the last
690
759
  statement return property of ruby.
691
760
 
692
761
  .. code:: ruby
@@ -699,7 +768,7 @@ statement return property of ruby.
699
768
  HashValidator
700
769
  -------------
701
770
 
702
- You can describe hash parameters in depth if you provide a block with
771
+ You can describe hash parameters in depth if you provide a block with a
703
772
  description of nested values.
704
773
 
705
774
  .. code:: ruby
@@ -714,8 +783,8 @@ description of nested values.
714
783
  NilValidator
715
784
  ------------
716
785
 
717
- In fact there is any NilValidator but setting it to nil can be used to
718
- override parameters described on resource level.
786
+ In fact there isn't any NilValidator, but setting it to nil can be used to
787
+ override parameters described on the resource level.
719
788
 
720
789
  .. code:: ruby
721
790
 
@@ -733,10 +802,10 @@ Additional options
733
802
  ~~~~~~~~~~~~~~~~~
734
803
 
735
804
  of
736
- Specify the type of items. if not given it accepts an array of any item type
805
+ Specify the type of items. If not given it accepts an array of any item type
737
806
 
738
807
  in
739
- Specifiy an array of valid items value.
808
+ Specify an array of valid item values.
740
809
 
741
810
  Examples
742
811
  ~~~~~~~~
@@ -770,7 +839,7 @@ The retrieving of valid items can be deferred until needed using a lambda. It is
770
839
  NestedValidator
771
840
  -------------
772
841
 
773
- You can describe nested parameters in depth if you provide a block with
842
+ You can describe nested parameters in depth if you provide a block with a
774
843
  description of nested values.
775
844
 
776
845
  .. code:: ruby
@@ -786,18 +855,18 @@ Adding custom validator
786
855
  -----------------------
787
856
 
788
857
  Only basic validators are included but it is really easy to add your own.
789
- Create new initializer with subclass of Apipie::Validator::BaseValidator.
790
- Two methods are required to implement - instance method
858
+ Create a new initializer with a subclass of Apipie::Validator::BaseValidator.
859
+ Two methods are required to implement this - instance method
791
860
  <tt>validate(value)</tt> and class method
792
861
  <tt>build(param_description, argument, options, block)</tt>.
793
862
 
794
- When searching for validator +build+ method of every subclass of
795
- Apipie::Validator::BaseValidator is called. The first one whitch return
863
+ When searching for the validator +build+ method, every subclass of
864
+ Apipie::Validator::BaseValidator is called. The first one that returns the
796
865
  constructed validator object is used.
797
866
 
798
867
  Example: Adding IntegerValidator
799
868
 
800
- We want to check if parameter value is an integer like this:
869
+ We want to check if the parameter value is an integer like this:
801
870
 
802
871
  .. code:: ruby
803
872
 
@@ -834,10 +903,10 @@ Parameters of the build method:
834
903
 
835
904
  param_description
836
905
  Instance of Apipie::ParamDescription contains all
837
- given informations about validated parameter.
906
+ given information about the validated parameter.
838
907
 
839
908
  argument
840
- Specified validator, in our example it is +Integer+
909
+ Specified validator; in our example it is +Integer+
841
910
 
842
911
  options
843
912
  Hash with specified options, for us just ``{:desc => "Company ID"}``
@@ -852,7 +921,7 @@ block
852
921
 
853
922
  Every resource/method can belong to one or more versions. The version is
854
923
  specified with the `api_version` DSL keyword. When not specified,
855
- the resource belong to `config.default_version` ("1.0" by default)
924
+ the resource belongs to `config.default_version` ("1.0" by default)
856
925
 
857
926
  .. code:: ruby
858
927
 
@@ -869,14 +938,14 @@ the resource belong to `config.default_version` ("1.0" by default)
869
938
  api :GET, "/api/users/", "List: users", :deprecated => true
870
939
 
871
940
  In the example above we say the whole controller/resource is defined
872
- for versions "1" and "2", but we override this with explicitly saying
873
- `index` belongs only to version "1". Also inheritance works (therefore
874
- we can specify the api_version for the parent controller and all
875
- children will know about that). Routes can be flagged as deprecated
941
+ for versions "1" and "2", but we override this by explicitly saying
942
+ `index` belongs only to version "1". Also, inheritance works (therefore
943
+ we can specify the api_version for the parent controller, and all
944
+ children will know about that). Routes can be flagged as deprecated,
876
945
  and an annotation will be added to them when viewing in the API
877
946
  documentation.
878
947
 
879
- From the Apipie API perspective, the resources belong to version.
948
+ From the Apipie API perspective, the resources belong to the version.
880
949
  With versioning, there are paths like this provided by apipie:
881
950
 
882
951
  .. code::
@@ -884,16 +953,16 @@ With versioning, there are paths like this provided by apipie:
884
953
  /apipie/1/users/index
885
954
  /apipie/2/users/index
886
955
 
887
- When not specifying the version explicitly in the path (or in dsl),
956
+ When not specifying the version explicitly in the path (or in DSL),
888
957
  default version (`Apipie.configuration.default_version`) is used
889
- instead ("1.0" by default). Therefore, the application that doesn't
958
+ instead ("1.0" by default). Therefore, an application that doesn't
890
959
  need versioning should work as before.
891
960
 
892
- The static page generator takes version parameter (or uses default).
961
+ The static page generator takes a version parameter (or uses default).
893
962
 
894
- You can specify the versions for the examples, with `versions`
963
+ You can specify the versions for the examples, with the `versions`
895
964
  keyword. It specifies the versions the example is used for. When not
896
- specified, it's shown in all versions with given method.
965
+ specified, it's shown in all versions with the given method.
897
966
 
898
967
  When referencing or quering the resource/method descripion, this
899
968
  format should be used: "version#resource#method". When not specified,
@@ -906,7 +975,7 @@ the default version is used instead.
906
975
 
907
976
  The default markup language is `RDoc
908
977
  <http://rdoc.rubyforge.org/RDoc/Markup.html>`_. It can be changed in
909
- config file (``config.markup=``) to one of these:
978
+ the config file (``config.markup=``) to one of these:
910
979
 
911
980
  Markdown
912
981
  Use Apipie::Markup::Markdown.new. You need Maruku gem.
@@ -914,8 +983,8 @@ Markdown
914
983
  Textile
915
984
  Use Apipie::Markup::Textile.new. You need RedCloth gem.
916
985
 
917
- Or provide you own object with ``to_html(text)`` method.
918
- For inspiration this is how Textile markup usage looks like:
986
+ Or provide you own object with a ``to_html(text)`` method.
987
+ For inspiration, this is how Textile markup usage is implemented:
919
988
 
920
989
  .. code:: ruby
921
990
 
@@ -934,13 +1003,13 @@ Localization
934
1003
 
935
1004
  Apipie has support for localized API documentation in both formats (JSON and HTML).
936
1005
  Apipie uses the library I18n for localization of itself.
937
- Check ``config/locales`` directory for available translation.
1006
+ Check ``config/locales`` directory for available translations.
938
1007
 
939
- Major part of strings in the documentation comes from the API.
940
- As prefferences about localization libraries differs among project, Apipie needs to know how to set locale for your project
941
- and how to translate a string using library your project use. That can be done using lambdas in configuration.
1008
+ A major part of strings in the documentation comes from the API.
1009
+ As preferences regarding localization libraries differ amongst project, Apipie needs to know how to set the locale for your project,
1010
+ and how to translate a string using the library your project uses. That can be done using lambdas in configuration.
942
1011
 
943
- Sample configuration when your project use FastGettext
1012
+ Sample configuration when your project uses FastGettext
944
1013
 
945
1014
 
946
1015
  .. code:: ruby
@@ -959,7 +1028,7 @@ Sample configuration when your project use FastGettext
959
1028
  end
960
1029
  end
961
1030
 
962
- And the strings in API documentation needs to be marked with the ``N_()`` function
1031
+ And the strings in the API documentation need to be marked with the ``N_()`` function
963
1032
 
964
1033
  .. code:: ruby
965
1034
 
@@ -968,7 +1037,7 @@ And the strings in API documentation needs to be marked with the ``N_()`` functi
968
1037
 
969
1038
 
970
1039
 
971
- When your project use I18n, localization related configuration could look like as follows
1040
+ When your project use I18n, localization related configuration could appear as follows
972
1041
 
973
1042
  .. code:: ruby
974
1043
 
@@ -986,7 +1055,7 @@ When your project use I18n, localization related configuration could look like a
986
1055
  end
987
1056
  end
988
1057
 
989
- And the strings in API documentation needs to be in the form of translation keys
1058
+ And the strings in the API documentation needs to be in the form of translation keys
990
1059
 
991
1060
  .. code:: ruby
992
1061
 
@@ -994,12 +1063,12 @@ And the strings in API documentation needs to be in the form of translation keys
994
1063
  param :session, String, :desc => "user_is_logged_in", :required => true
995
1064
 
996
1065
 
997
- The localized versions of the documentation are distinguished by languge in the filename.
1066
+ The localized versions of the documentation are distinguished by language in the filename.
998
1067
  E.g. ``doc/apidoc/apidoc.cs.html`` is static documentation in the Czech language.
999
1068
  If the language is missing, e.g. ``doc/apidoc/apidoc.html``,
1000
1069
  the documentation is localized with the ``default_locale``.
1001
1070
 
1002
- The dynamic documentation follows the same schema. The ``http://localhost:3000/apidoc/v1.cs.html`` is documentation for version '1' of the API in the Czech language. For JSON description of the API applies the same: ``http://localhost:3000/apidoc/v1.cs.json``
1071
+ The dynamic documentation follows the same schema. The ``http://localhost:3000/apidoc/v1.cs.html`` is documentation for version '1' of the API in the Czech language. For JSON descriptions, the API applies the same format: ``http://localhost:3000/apidoc/v1.cs.json``
1003
1072
 
1004
1073
 
1005
1074
  ================
@@ -1016,19 +1085,19 @@ This will copy the Apipie views to ``app/views/apipie/apipies`` and
1016
1085
  ==============
1017
1086
 
1018
1087
  To generate a static version of documentation (perhaps to put it on
1019
- project site or something) run ``rake apipie:static`` task. It will
1020
- create set of html files (multi-pages, single-page, plain) in your doc
1021
- directory. If you prefer a json version run ``rake apipie:static_json``.
1022
- By default the documentation for default API version is
1023
- used, you can specify the version with ``rake apipie:static[2.0]``
1088
+ your project site or something), run the ``rake apipie:static`` task. It will
1089
+ create a set of HTML files (multi-pages, single-page, plain) in your doc
1090
+ directory. If you prefer a JSON version run ``rake apipie:static_json``.
1091
+ By default the documentation for the default API version is
1092
+ used. You can specify the version with ``rake apipie:static[2.0]``
1024
1093
 
1025
1094
  When you want to avoid any unnecessary computation in production mode,
1026
1095
  you can generate a cache with ``rake apipie:cache`` and configure the
1027
1096
  app to use it in production with ``config.use_cache = Rails.env.production?``
1028
1097
 
1029
- If, for some complex casese, you need to generate/re-generate just part of the cache
1098
+ If, for some complex cases, you need to generate/re-generate just part of the cache
1030
1099
  use ``rake apipie:cache cache_part=index`` resp. ``rake apipie:cache cache_part=resources``
1031
- To generate it to different location for further processing use ``rake apipie:cache OUT=/tmp/apipie_cache``.
1100
+ To generate it for different locations for further processing use ``rake apipie:cache OUT=/tmp/apipie_cache``.
1032
1101
 
1033
1102
  ===================
1034
1103
  JSON checksums
@@ -1036,7 +1105,7 @@ To generate it to different location for further processing use ``rake apipie:ca
1036
1105
 
1037
1106
  If the API client needs to be sure that the JSON didn't changed, add
1038
1107
  the ``ApipieChecksumInHeaders`` middleware in your rails app.
1039
- It can add checksum of entiere JSON document in the response headers.
1108
+ It can add a checksum of the entire JSON document in the response headers.
1040
1109
 
1041
1110
  .. code::
1042
1111
 
@@ -1062,7 +1131,7 @@ And in your apipie initializer allow checksum calculation
1062
1131
  By default the header is added to responses for ``config.doc_base_url`` and ``/api``.
1063
1132
  It can be changed in configuration (see `Configuration Reference`_ for details).
1064
1133
 
1065
- The checksum calculation is lazy, done with first request. If you run with ``use_cache = true``,
1134
+ The checksum calculation is lazy, and done with the first request. If you run with ``use_cache = true``,
1066
1135
  do not forget to run the rake task ``apipie:cache``.
1067
1136
 
1068
1137
 
@@ -1078,18 +1147,18 @@ Documentation Bootstrapping
1078
1147
 
1079
1148
  Let's say you have an application without REST API documentation.
1080
1149
  However you have a set of tests that are run against this API. A lot
1081
- of information is already included in this tests, it just needs to be
1150
+ of information is already included in these tests, it just needs to be
1082
1151
  extracted somehow. Luckily, Apipie provides such a feature.
1083
1152
 
1084
1153
  When running the tests, set the ``APIPIE_RECORD=params`` environment
1085
- variable or call ``Apipie.record('params')`` from specs starter. You can either use it with functional tests
1154
+ variable or call ``Apipie.record('params')`` from specs starter. You can either use it with functional tests:
1086
1155
 
1087
1156
  .. code::
1088
1157
 
1089
1158
  APIPIE_RECORD=params rake test:functionals
1090
1159
 
1091
1160
  or you can run your server with this param, in case you run the tests
1092
- against running server
1161
+ against running server:
1093
1162
 
1094
1163
  .. code::
1095
1164
 
@@ -1103,8 +1172,8 @@ Examples Recording
1103
1172
  ------------------
1104
1173
 
1105
1174
  You can also use the tests to generate up-to-date examples for your
1106
- code. Similarly to the bootstrapping, you can use it with functional
1107
- tests or a running server, setting ``APIPIE_RECORD=examples`` or by calling ``Apipie.record('examples')`` in your specs starter.
1175
+ code. Similar to the bootstrapping process, you can use it with functional
1176
+ tests or a running server, setting ``APIPIE_RECORD=examples`` or calling ``Apipie.record('examples')`` in your specs starter.
1108
1177
 
1109
1178
  .. code::
1110
1179
 
@@ -1113,13 +1182,17 @@ tests or a running server, setting ``APIPIE_RECORD=examples`` or by calling ``Ap
1113
1182
 
1114
1183
  The data is written into ``doc/apipie_examples.yml``. By default,
1115
1184
  only the first example is shown for each action. You can customize
1116
- this by setting ``show_in_doc`` attribute at each example.
1185
+ this by setting the ``show_in_doc`` attribute at each example.
1186
+
1187
+ You can add a title to the examples (useful when showing more than
1188
+ one example per method) by adding a 'title' attribute.
1117
1189
 
1118
1190
  .. code::
1119
1191
 
1120
1192
  --- !omap
1121
1193
  - announcements#index:
1122
1194
  - !omap
1195
+ - title: This is a custom title for this example
1123
1196
  - verb: :GET
1124
1197
  - path: /api/blabla/1
1125
1198
  - versions:
@@ -1165,8 +1238,8 @@ And then configure RSpec in this way:
1165
1238
  config.filter_run :show_in_doc => true if ENV['APIPIE_RECORD']
1166
1239
  end
1167
1240
 
1168
- This way, when running in recording mode, only the tests that has been marked with the
1169
- ``:show_in_doc`` metadata will be ran, and hence only those will be used as examples.
1241
+ This way, when running in recording mode, only the tests that have been marked with the
1242
+ ``:show_in_doc`` metadata will be run, and hence only those will be used as examples.
1170
1243
 
1171
1244
  ====================
1172
1245
  Bindings Generator
@@ -1174,18 +1247,18 @@ This way, when running in recording mode, only the tests that has been marked wi
1174
1247
 
1175
1248
  In earlier versions (<= 0.0.13), there was a simple client generator
1176
1249
  as a part of Apipie gem. As more features and users came to Apipie,
1177
- more and more there was a need for changes on per project basis. It's
1250
+ there was a greater need for changes on a per project basis. It's
1178
1251
  hard (or even impossible) to provide a generic solution for the client
1179
- code. We also don't want to tell you what's the rigth way to do it
1252
+ code. We also don't want to tell you what's the right way to do it
1180
1253
  (what gems to use, how the API should look like etc.).
1181
1254
 
1182
- Therefore you can't generate a client code directly by a rake task in
1255
+ Therefore you can't generate client code directly by a rake task in
1183
1256
  further versions.
1184
1257
 
1185
- There is, however, even better and more flexible way to reuse your API
1258
+ There is, however, an even better and more flexible way to reuse your API
1186
1259
  documentation for this purpose: using the API the Apipie
1187
- provides in the generator code. You can inspire by
1188
- `Foreman API bindings <https://github.com/mbacovsky/foreman_api>`_ that
1260
+ provides in the generator code. Check out
1261
+ `Foreman API bindings <https://github.com/mbacovsky/foreman_api>`_, as they
1189
1262
  use exactly this approach. You also don't need to run the service,
1190
1263
  provided it uses Apipie as a backend.
1191
1264
 
@@ -1196,8 +1269,8 @@ And if you write one on your own, don't hesitate to share it with us!
1196
1269
  Disqus Integration
1197
1270
  ====================
1198
1271
 
1199
- You can get a `Disqus <http://www.disqus.com>`_ discussion for the
1200
- right into your documentation. Just set the credentials in Apipie
1272
+ You can setup `Disqus <http://www.disqus.com>`_ discussion within
1273
+ your documentation. Just set the credentials in the Apipie
1201
1274
  configuration:
1202
1275
 
1203
1276
  .. code:: ruby