resting_pug 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7d99d102f6977a7fce1ac74ae7b1489d95273d7
4
- data.tar.gz: ba714667deb6cfc2bc48a39085bf1f18a2954845
3
+ metadata.gz: 927bf0f8f98d894ab8421feb896b4a64b44f35eb
4
+ data.tar.gz: aae8c437373e4c033ba0dc2490a71a6e9e1064f1
5
5
  SHA512:
6
- metadata.gz: 062416d0fe7ee490e6ddd9cfb7b7b3fe8cd94d738a5579e0d8801794dd940012a9c3ccf456b223e42a2d41cc4c5f82d0d61857c7d62663378748fff484e9f487
7
- data.tar.gz: ebb18d667055f77993629cb8320920e410fed4b221dde060ab0709a267ceb11d46701ad1e168bf70708ac88e2c478a69e06b127ef6dab818d71520dc9007356b
6
+ metadata.gz: 9fbce2102a15bb5ca3c3cbb74417cfb7fb2edeb16f1bc333067cb0e48a8a83be69fc7269e380d9207a357ea1b57f33f0bdba45ed1f0a7a3f4d8d5a48fc3249c7
7
+ data.tar.gz: 9fd83245c3efaad741b2b61cd6f43130a2c407d5e9a1746327ada9fc6b273f23a013c7e9ed196203cc0c42ab12a37c2d649e9119bf54756a93ace75cea2a8c32
data/README.md CHANGED
@@ -1,15 +1,79 @@
1
1
 
2
2
  <h1 align="center">
3
3
  <br>
4
- <a href="https://korolvs.github.com/resting_pug"><img src="https://korolvs.github.com/resting_pug/resting_pug.png" alt="Markdownify" width="80%"></a>
4
+ <a href="https://korolvs.github.com/resting_pug"><img src="https://korolvs.github.com/resting_pug/logo.svg" alt="Logo" width="80%"></a>
5
5
  <br>
6
6
  </h1>
7
7
 
8
- # Basic Overview
8
+ [![Gem Version](https://badge.fury.io/rb/resting_pug.svg)](https://badge.fury.io/rb/resting_pug)
9
+ [![Maintainability](https://api.codeclimate.com/v1/badges/e53c62ffa3ee4cba3895/maintainability)](https://codeclimate.com/github/korolvs/resting_pug/maintainability)
10
+ [![Build Status](https://travis-ci.org/korolvs/resting_pug.svg?branch=master)](https://travis-ci.org/korolvs/resting_pug)
11
+ [![codecov](https://codecov.io/gh/korolvs/resting_pug/branch/master/graph/badge.svg)](https://codecov.io/gh/korolvs/resting_pug)
12
+
13
+ ## Table of Contents
14
+
15
+ - [What is Resting Pug?](#what-is-resting-pug)
16
+ - [Why should I use it?](#why-should-i-use-it)
17
+ - [Installation](#installation)
18
+ - [Usage](#usage)
19
+ - [Created actions and thing that you can customize](#created-actions-and-things-you-can-customize)
20
+ - [Create](#create)
21
+ - [Update](#update)
22
+ - [Destroy](#destroy)
23
+ - [Show](#show)
24
+ - [Index](#index)
25
+ - [Contributing](#contributing)
26
+ - [Changelog](#changelog)
27
+ - [License](#license)
28
+
29
+ ## What is Resting Pug?
9
30
  Resting Pug allows you to create a JSON API with just adding one line to your controller and fully customize it with overriding small and simple helper methods.
10
31
 
32
+ ## Why should I use it?
33
+ Often when you want to try a new idea or create a simple app you want to implement basic features very fast.
34
+ Resting Pug allows you to do it with just couple lines of code.
35
+ But even though it is small and simple(and because it is small and simple) you can vastly customize created API.
36
+ Attributes user can see, attributes user can edit, number of items on page, how to render items and errors - thats just a small part of things you can change overriding basic Resting Pug methods.
37
+
38
+ ## Installation
39
+ Add this line to your application's Gemfile:
40
+
41
+ ```ruby
42
+ gem 'resting_pug'
43
+ ```
44
+
45
+ And then execute:
46
+ ```bash
47
+ $ bundle
48
+ ```
49
+
11
50
  ## Usage
12
- Include ```RestingPug::Base``` into controller to add CRUD actions to it:
51
+
52
+ **1. Create a model that will be accesible through API:**
53
+
54
+ ```ruby
55
+ class Book < ApplicationRecord
56
+ validates :title, presence: true, length: { minimum: 3 }
57
+ validates :author, presence: true, length: { minimum: 3 }
58
+ end
59
+ ```
60
+
61
+ ```ruby
62
+ class CreateBooks < ActiveRecord::Migration
63
+ def change
64
+ create_table :books do |t|
65
+ t.string :title
66
+ t.string :author
67
+ t.integer :year
68
+ t.integer :rating
69
+
70
+ t.timestamps
71
+ end
72
+ end
73
+ end
74
+ ```
75
+
76
+ **2. Create a new controller and include ```RestingPug::Base``` into it to add CRUD actions:**
13
77
 
14
78
  ```ruby
15
79
  class BooksController < ApplicationController
@@ -25,7 +89,7 @@ class ApplicationController < ActionController::Base
25
89
  end
26
90
  ```
27
91
 
28
- Don't forget to add a route to ```config/routes.rb```
92
+ **3. Don't forget to add a route to ```config/routes.rb```**
29
93
 
30
94
  ```ruby
31
95
  Rails.application.routes.draw do
@@ -33,20 +97,162 @@ Rails.application.routes.draw do
33
97
  end
34
98
  ```
35
99
 
36
- ## Installation
37
- Add this line to your application's Gemfile:
100
+ **4. Enjoy your new API and don't hesitate to change it whatever you want!**
101
+
102
+ ## List of actions and things that you can customize
103
+ Actions created after including ```RestingPug::Base```:
104
+
105
+ ### Create
38
106
 
39
- ```ruby
40
- gem 'resting_pug'
41
107
  ```
108
+ Request:
109
+ POST http://your.awesome/api/books
110
+ {
111
+ "name": "11/22/63",
112
+ "author": "Stephen King"
113
+ }
114
+
115
+ Response:
116
+ 200 OK
117
+ {
118
+ "book": {
119
+ "id": 1,
120
+ "name": "11/22/63",
121
+ "author": "Stephen King"
122
+ }
123
+ }
124
+ ```
125
+
126
+ Things you can customize:
127
+
128
+ - override [permitted_fields_for_create](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_create) to set which params can be set in a new subject
129
+ - override [permitted_fields_for_show](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_show) to set which params will be shown in response
130
+ - override [render_subject](https://korolvs.github.com/resting_pug/0.1.1/render/render_subject) to set how subject will be rendered
131
+ - override [render_errors](https://korolvs.github.com/resting_pug/0.1.1/render/render_errors) to set how errors will be rendered
132
+ - override [subject_model](https://korolvs.github.com/resting_pug/0.1.1/subject/subject_model) to set what model will be created
133
+ - override [create_chain](https://korolvs.github.com/resting_pug/0.1.1/chains/create_chain) to add or remove methods which will be called while creating a subject
134
+ - override [decide_what_to_render](https://korolvs.github.com/resting_pug/0.1.1/render/decide_what_to_render) to set how it will be decided what to render in response
135
+
136
+ ### Update
137
+
138
+ ```
139
+ Request:
140
+ PATCH http://your.awesome/api/books/1
141
+ {
142
+ "name": "The Green Mile",
143
+ }
144
+
145
+ Response:
146
+ 200 OK
147
+ {
148
+ "book": {
149
+ "id": 1,
150
+ "name": "The Green Mile",
151
+ "author": "Stephen King"
152
+ }
153
+ }
154
+ ```
155
+
156
+ Things you can customize:
157
+
158
+ - override [permitted_fields_for_update](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_update) to set which params can be updated
159
+ - override [permitted_fields_for_show](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_show) to set which params will be shown in response
160
+ - override [render_subject](https://korolvs.github.com/resting_pug/0.1.1/render/render_subject) to set how subject will be rendered
161
+ - override [render_errors](https://korolvs.github.com/resting_pug/0.1.1/render/render_errors) to set how errors will be rendered
162
+ - override [render_not_found](https://korolvs.github.com/resting_pug/0.1.1/render/render_not_found) to set what to render when subject with ID from params is not found
163
+ - override [subject_model](https://korolvs.github.com/resting_pug/0.1.1/subject/subject_model) to set what model will be updated
164
+ - override [update_chain](https://korolvs.github.com/resting_pug/0.1.1/chains/update_chain) to add or remove methods which will be called while updating a subject
165
+ - override [decide_what_to_render](https://korolvs.github.com/resting_pug/0.1.1/render/decide_what_to_render) to set how it will be decided what to render in response
166
+
167
+ ### Destroy
168
+
169
+ ```
170
+ Request:
171
+ DELETE http://your.awesome/api/books/1
172
+
173
+ Response:
174
+ 204 No Content
175
+ ```
176
+
177
+ Things you can customize:
178
+
179
+ - override [destroy_subject](https://korolvs.github.com/resting_pug/0.1.1/subject/destroy_subject) to set how it will be destroyed
180
+ - override [render_nothing](https://korolvs.github.com/resting_pug/0.1.1/render/render_nothing) to set what to render when subject is destroyed
181
+ - override [render_errors](https://korolvs.github.com/resting_pug/0.1.1/render/render_errors) to set how errors will be rendered
182
+ - override [render_not_found](https://korolvs.github.com/resting_pug/0.1.1/render/render_not_found) to set what to render when subject with ID from params is not found
183
+ - override [subject_model](https://korolvs.github.com/resting_pug/0.1.1/subject/subject_model) to set what model will be deleted
184
+ - override [destroy_chain](https://korolvs.github.com/resting_pug/0.1.1/chains/destroy_chain) to add or remove methods which will be called while deleting a subject
185
+
186
+ ### Show
42
187
 
43
- And then execute:
44
- ```bash
45
- $ bundle
46
188
  ```
189
+ Request:
190
+ GET http://your.awesome/api/books/1
191
+
192
+ Response:
193
+ 200 OK
194
+ {
195
+ "book": {
196
+ "id": 1,
197
+ "name": "The Green Mile",
198
+ "author": "Stephen King"
199
+ }
200
+ }
201
+ ```
202
+
203
+ Things you can customize:
204
+
205
+ - override [permitted_fields_for_show](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_show) to set which params will be shown in response
206
+ - override [render_subject](https://korolvs.github.com/resting_pug/0.1.1/render/render_subject) to set how subject will be rendered
207
+ - override [render_not_found](https://korolvs.github.com/resting_pug/0.1.1/render/render_not_found) to set what to render when subject with ID from params is not found
208
+ - override [subject_model](https://korolvs.github.com/resting_pug/0.1.1/subject/subject_model) to set what model will be shown
209
+ - override [show_chain](https://korolvs.github.com/resting_pug/0.1.1/chains/show_chain) to add or remove methods which will be called while updating a subject
210
+
211
+ ### Index
212
+
213
+ ```
214
+ Request:
215
+ GET http://your.awesome/api/books
216
+ GET http://your.awesome/api/books?filter[author]="King"
217
+ GET http://your.awesome/api/books?filter[author][]="King"&filter[author][]="Kesey"
218
+ GET http://your.awesome/api/books?sort=-id,name,-author
219
+ GET http://your.awesome/api/books?page=3&per_page=10
220
+ GET http://your.awesome/api/books?filter[author]="King"&sort=-id?page=3&per_page=10
221
+
222
+ Response:
223
+ 200 OK
224
+ {
225
+ "books": [{
226
+ "id": 2,
227
+ "name": "The Green Mile",
228
+ "author": "Stephen King"
229
+ }, {
230
+ "id": 1,
231
+ "name": "11/22/63",
232
+ "author": "Stephen King"
233
+ }]
234
+ }
235
+ ```
236
+
237
+ Things you can customize:
238
+
239
+ - override [permitted_fields_for_show](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_show) to set which params will be shown in response
240
+ - override [permitted_fields_for_filter](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_filter) to set which params can be used for filtering
241
+ - override [permitted_fields_for_sort](https://korolvs.github.com/resting_pug/0.1.1/params/permitted_fields_for_sort) to set which params can be used for sorting
242
+ - override [default_sort_params](https://korolvs.github.com/resting_pug/0.1.1/params/default_sort_params) to set default sort params
243
+ - override [per_page_default](https://korolvs.github.com/resting_pug/0.1.1/params/per_page_default) to set default per_page param
244
+ - override [per_page_range](https://korolvs.github.com/resting_pug/0.1.1/params/per_page_range) to set minimum and maximum possible per_page value
245
+ - override [render_subjects](https://korolvs.github.com/resting_pug/0.1.1/render/render_subjects) to set how subjects will be rendered
246
+ - override [subject_model](https://korolvs.github.com/resting_pug/0.1.1/subject/subject_model) to set what model will be shown
247
+ - override [index_chain](https://korolvs.github.com/resting_pug/0.1.1/chains/index_chain) to add or remove methods which will be called while updating a subject
47
248
 
48
249
  ## Contributing
49
- Contribution directions go here.
250
+ You're encouraged to submit [pull requests](https://github.com/korolvs/resting_pug/pulls), [propose features and discuss issues](https://github.com/korolvs/resting_pug/issues).
251
+
252
+ See [CONTRIBUTING](CONTRIBUTING.md)
253
+
254
+ ## Changelog
255
+ To see what has changed in recent versions of Resting Pug, see the [CHANGELOG](CHANGELOG.md).
50
256
 
51
257
  ## License
52
258
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -20,4 +20,6 @@ end
20
20
 
21
21
 
22
22
  require 'bundler/gem_tasks'
23
-
23
+ require 'rspec/core/rake_task'
24
+ RSpec::Core::RakeTask.new('spec')
25
+ task default: :spec
@@ -1,5 +1,6 @@
1
1
  module RestingPug
2
- # Describes basic CRUD actions
2
+ # Describes basic CRUD actions.
3
+ # Each action is represented by a chain of methods definied in {Chains} module.
3
4
  # @see https://en.wikipedia.org/wiki/Create,_read,_update_and_delete
4
5
  # @used_in {Base.included}
5
6
  module Actions
@@ -22,13 +23,13 @@ module RestingPug
22
23
  # }
23
24
  # }
24
25
  # @note You can sustomize creating action:
25
- # - override {Subject#subject_model} to set what model will be created
26
- # - override {Chains#create_chain} to add or remove methods which will be called while creating a subject
27
- # - override {Params#permitted_fields_for_create} to set which params can be set in a new subject
28
- # - override {Params#permitted_fields_for_show} to set which params will be shown in response
29
- # - override {Render#decide_what_to_render} to set how it will be decided what to render in response
30
- # - override {Render#render_subject} to set how subject will be rendered
31
- # - override {Render#render_errors} to set how errors will be rendered
26
+ # - override {Params#permitted_fields_for_create permitted_fields_for_create} to set which params can be set in a new subject
27
+ # - override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
28
+ # - override {Render#render_subject render_subject} to set how subject will be rendered
29
+ # - override {Render#render_errors render_errors} to set how errors will be rendered
30
+ # - override {Subject#subject_model subject_model} to set what model will be created
31
+ # - override {Chains#create_chain create_chain} to add or remove methods which will be called while creating a subject
32
+ # - override {Render#decide_what_to_render decide_what_to_render} to set how it will be decided what to render in response
32
33
  # @use {#run_chain}
33
34
  # @use {Chains#create_chain}
34
35
  def create
@@ -53,14 +54,14 @@ module RestingPug
53
54
  # }
54
55
  # }
55
56
  # @note You can sustomize creating action:
56
- # - override {Subject#subject_model} to set what model will be updated
57
- # - override {Chains#update_chain} to add or remove methods which will be called while updating a subject
58
- # - override {Params#permitted_fields_for_update} to set which params can be updated
59
- # - override {Params#permitted_fields_for_show} to set which params will be shown in response
60
- # - override {Render#decide_what_to_render} to set how it will be decided what to render in response
61
- # - override {Render#render_subject} to set how subject will be rendered
62
- # - override {Render#render_errors} to set how errors will be rendered
63
- # - override {Render#render_not_found} to set what to render when subject with ID from params is not found
57
+ # - override {Params#permitted_fields_for_update permitted_fields_for_update} to set which params can be updated
58
+ # - override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
59
+ # - override {Render#render_subject render_subject} to set how subject will be rendered
60
+ # - override {Render#render_errors render_errors} to set how errors will be rendered
61
+ # - override {Render#render_not_found render_not_found} to set what to render when subject with ID from params is not found
62
+ # - override {Subject#subject_model subject_model} to set what model will be updated
63
+ # - override {Chains#update_chain update_chain} to add or remove methods which will be called while updating a subject
64
+ # - override {Render#decide_what_to_render decide_what_to_render} to set how it will be decided what to render in response
64
65
  # @use {#run_chain}
65
66
  # @use {Chains#update_chain}
66
67
  def update
@@ -75,12 +76,12 @@ module RestingPug
75
76
  # Response:
76
77
  # 204 No Content
77
78
  # @note You can sustomize creating action:
78
- # - override {Subject#subject_model} to set what model will be deleted
79
- # - override {Chains#destroy_chain} to add or remove methods which will be called while deleting a subject
80
- # - override {Subject#destroy_subject} to set how it will be destroyed
81
- # - override {Render#render_nothing} to set what to render when subject is destroyed
82
- # - override {Render#render_errors} to set how errors will be rendered
83
- # - override {Render#render_not_found} to set what to render when subject with ID from params is not found
79
+ # - override {Subject#destroy_subject destroy_subject} to set how it will be destroyed
80
+ # - override {Render#render_nothing render_nothing} to set what to render when subject is destroyed
81
+ # - override {Render#render_errors render_errors} to set how errors will be rendered
82
+ # - override {Render#render_not_found render_not_found} to set what to render when subject with ID from params is not found
83
+ # - override {Subject#subject_model subject_model} to set what model will be deleted
84
+ # - override {Chains#destroy_chain destroy_chain} to add or remove methods which will be called while deleting a subject
84
85
  # @use {#run_chain}
85
86
  # @use {Chains#destroy_chain}
86
87
  def destroy
@@ -102,11 +103,11 @@ module RestingPug
102
103
  # }
103
104
  # }
104
105
  # @note You can sustomize creating action:
105
- # - override {Subject#subject_model} to set what model will be shown
106
- # - override {Chains#show_chain} to add or remove methods which will be called while updating a subject
107
- # - override {Params#permitted_fields_for_show} to set which params will be shown in response
108
- # - override {Render#render_subject} to set how subject will be rendered
109
- # - override {Render#render_not_found} to set what to render when subject with ID from params is not found
106
+ # - override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
107
+ # - override {Render#render_subject render_subject} to set how subject will be rendered
108
+ # - override {Render#render_not_found render_not_found} to set what to render when subject with ID from params is not found
109
+ # - override {Subject#subject_model subject_model} to set what model will be shown
110
+ # - override {Chains#show_chain show_chain} to add or remove methods which will be called while updating a subject
110
111
  # @use {#run_chain}
111
112
  # @use {Chains#show_chain}
112
113
  def show
@@ -140,15 +141,15 @@ module RestingPug
140
141
  # }]
141
142
  # }
142
143
  # @note You can sustomize creating action:
143
- # - override {Subject#subject_model} to set what model will be shown
144
- # - override {Chains#index_chain} to add or remove methods which will be called while updating a subject
145
- # - override {Params#permitted_fields_for_show} to set which params will be shown in response
146
- # - override {Params#permitted_fields_for_filter} to set which params can be used for filtering
147
- # - override {Params#permitted_fields_for_sort} to set which params can be used for sorting
148
- # - override {Params#default_sort_params} to set default sort params
149
- # - override {Params#per_page_default} to set default per_page param
150
- # - override {Params#per_page_range} to set minimum and maximum possible per_page value
151
- # - override {Render#render_subjects} to set how subjects will be rendered
144
+ # - override {Params#permitted_fields_for_show permitted_fields_for_show} to set which params will be shown in response
145
+ # - override {Params#permitted_fields_for_filter permitted_fields_for_filter} to set which params can be used for filtering
146
+ # - override {Params#permitted_fields_for_sort permitted_fields_for_sort} to set which params can be used for sorting
147
+ # - override {Params#default_sort_params default_sort_params} to set default sort params
148
+ # - override {Params#per_page_default per_page_default} to set default per_page param
149
+ # - override {Params#per_page_range per_page_range} to set minimum and maximum possible per_page value
150
+ # - override {Render#render_subjects render_subjects} to set how subjects will be rendered
151
+ # - override {Subject#subject_model subject_model} to set what model will be shown
152
+ # - override {Chains#index_chain index_chain} to add or remove methods which will be called while updating a subject
152
153
  # @use {#run_chain}
153
154
  # @use {Chains#index_chain}
154
155
  def index
@@ -159,6 +160,11 @@ module RestingPug
159
160
 
160
161
  # Executes each method in a chain one by one
161
162
  # @param chain [Array] array of methods to execute
163
+ # @used_in {#create}
164
+ # @used_in {#update}
165
+ # @used_in {#destroy}
166
+ # @used_in {#show}
167
+ # @used_in {#index}
162
168
  def run_chain(chain)
163
169
  chain.each do |action|
164
170
  self.send(action)
@@ -6,6 +6,7 @@ require_relative './params'
6
6
  require_relative './modificators'
7
7
  require 'will_paginate/active_record'
8
8
 
9
+ # A simple and fully customizable way to create an API in your Rails application
9
10
  module RestingPug
10
11
  # Main module
11
12
  module Base
@@ -9,6 +9,16 @@ module RestingPug
9
9
  # @used_in {Actions#create}
10
10
  # @use {Subject#create_subject}
11
11
  # @use {Render#decide_what_to_render}
12
+ # @example
13
+ # class BooksController < ApplicationController
14
+ # include RestingPug::Base
15
+ #
16
+ # private
17
+ # # Override a create chain adding logging to the end
18
+ # def create_chain
19
+ # super + [:log_creating_subject]
20
+ # end
21
+ # end
12
22
  def create_chain
13
23
  [:create_subject, :decide_what_to_render]
14
24
  end
@@ -19,6 +29,16 @@ module RestingPug
19
29
  # @use {Subject#fetch_subject}
20
30
  # @use {Subject#update_subject}
21
31
  # @use {Render#decide_what_to_render}
32
+ # @example
33
+ # class BooksController < ApplicationController
34
+ # include RestingPug::Base
35
+ #
36
+ # private
37
+ # # Override an update chain adding logging to the end
38
+ # def update_chain
39
+ # super + [:log_updating_subject]
40
+ # end
41
+ # end
22
42
  def update_chain
23
43
  [:fetch_subject, :update_subject, :decide_what_to_render]
24
44
  end
@@ -28,6 +48,16 @@ module RestingPug
28
48
  # @used_in {Actions#destroy}
29
49
  # @use {Subject#fetch_subject}
30
50
  # @use {Subject#destroy_subject}
51
+ # @example
52
+ # class BooksController < ApplicationController
53
+ # include RestingPug::Base
54
+ #
55
+ # private
56
+ # # Override a destroy chain adding logging to the end
57
+ # def destroy_chain
58
+ # super + [:log_destroying_subject]
59
+ # end
60
+ # end
31
61
  def destroy_chain
32
62
  [:fetch_subject, :destroy_subject]
33
63
  end
@@ -37,6 +67,16 @@ module RestingPug
37
67
  # @used_in {Actions#show}
38
68
  # @use {Subject#fetch_subject}
39
69
  # @use {Render#render_subject}
70
+ # @example
71
+ # class BooksController < ApplicationController
72
+ # include RestingPug::Base
73
+ #
74
+ # private
75
+ # # Override a show chain adding logging to the end
76
+ # def show_chain
77
+ # super + [:log_showing_subject]
78
+ # end
79
+ # end
40
80
  def show_chain
41
81
  [:fetch_subject, :render_subject]
42
82
  end
@@ -49,6 +89,16 @@ module RestingPug
49
89
  # @use {Modificators#sort_subjects}
50
90
  # @use {Modificators#paginate_subjects}
51
91
  # @use {Render#render_subjects}
92
+ # @example
93
+ # class BooksController < ApplicationController
94
+ # include RestingPug::Base
95
+ #
96
+ # private
97
+ # # Override an index chain adding logging to the end
98
+ # def index_chain
99
+ # super + [:log_indexing_subjects]
100
+ # end
101
+ # end
52
102
  def index_chain
53
103
  [:fetch_subjects, :filter_subjects, :sort_subjects, :paginate_subjects, :render_subjects]
54
104
  end
@@ -8,6 +8,16 @@ module RestingPug
8
8
  # @note Override this method to change pagination of subjects
9
9
  # @used_in {Chains#index_chain}
10
10
  # @use {Params#pagination_params}
11
+ # @example
12
+ # class BooksController < ApplicationController
13
+ # include RestingPug::Base
14
+ #
15
+ # private
16
+ # # Override a paginate_subjects method to use kaminari instead of will_paginate
17
+ # def paginate_subjects
18
+ # @subjects = @subjects.page(pagination_params[:page]).per(pagination_params[:per_page])
19
+ # end
20
+ # end
11
21
  def paginate_subjects
12
22
  @subjects = @subjects.paginate(page: pagination_params[:page], per_page: pagination_params[:per_page])
13
23
  end
@@ -16,6 +26,16 @@ module RestingPug
16
26
  # @note Override this method to change sorting of subjects
17
27
  # @used_in {Chains#index_chain}
18
28
  # @use {Params#sort_params}
29
+ # @example
30
+ # class BooksController < ApplicationController
31
+ # include RestingPug::Base
32
+ #
33
+ # private
34
+ # # Override a sort_subjects method to remove default ordering beforehand.
35
+ # def sort_subjects
36
+ # @subjects = @subjects.reorder(nil).order(sort_params)
37
+ # end
38
+ # end
19
39
  def sort_subjects
20
40
  @subjects = @subjects.order(sort_params)
21
41
  end
@@ -23,7 +43,17 @@ module RestingPug
23
43
  # Filters subjects using filter params
24
44
  # @note Override this method to change how subjects are filtered
25
45
  # @used_in {Chains#index_chain}
26
- # @use {Params#pagination_params}
46
+ # @use {Params#filter_params}
47
+ # @example
48
+ # class BooksController < ApplicationController
49
+ # include RestingPug::Base
50
+ #
51
+ # private
52
+ # # Override a filter_subjects method to remove default scope beforehand.
53
+ # def filter_subjects
54
+ # @subjects = @subjects.unscoped.where(filter_params)
55
+ # end
56
+ # end
27
57
  def filter_subjects
28
58
  @subjects = @subjects.where(filter_params)
29
59
  end
@@ -8,50 +8,95 @@ module RestingPug
8
8
 
9
9
  # Returns an array with all fields that API can use
10
10
  # @note Override this method to add or remove fields that you don't want API to use.
11
- # @return [Array] of symbols representing attributes
12
11
  # @used_in {#permitted_fields_for_show}
13
12
  # @used_in {#permitted_fields_for_create}
14
13
  # @used_in {#permitted_fields_for_update}
15
14
  # @used_in {#permitted_fields_for_sort}
16
15
  # @used_in {#permitted_fields_for_filter}
17
16
  # @use {Subject#subject_model}
17
+ # @example
18
+ # class BooksController < ApplicationController
19
+ # include RestingPug::Base
20
+ #
21
+ # private
22
+ # # Override a permitted_fields method to use only :id and :title
23
+ # def permitted_fields
24
+ # [:id, :title]
25
+ # end
26
+ # end
18
27
  def permitted_fields
19
28
  subject_model.column_names.map(&:to_sym)
20
29
  end
21
30
 
22
31
  # Returns an array with all fields that API will show
23
32
  # @note Override this method to add or remove fields that you don't want API to show.
24
- # @return [Array] of symbols representing attributes
25
33
  # @used_in {Render#render_subject}
26
34
  # @used_in {Render#render_subjects}
27
35
  # @use {#permitted_fields}
36
+ # @example
37
+ # class BooksController < ApplicationController
38
+ # include RestingPug::Base
39
+ #
40
+ # private
41
+ # # Override a permitted_fields_for_show method to show every permitted attribute except :title
42
+ # def permitted_fields_for_show
43
+ # permitted_fields - [:title]
44
+ # end
45
+ # end
28
46
  def permitted_fields_for_show
29
47
  permitted_fields
30
48
  end
31
49
 
32
50
  # Returns an array with all fields that API will allow to use while creating a subject
33
51
  # @note Override this method to add or remove fields that you don't want API to use for creating.
34
- # @return [Array] of symbols representing attributes
35
52
  # @used_in {#params_for_create}
36
53
  # @use {#permitted_fields}
54
+ # @example
55
+ # class BooksController < ApplicationController
56
+ # include RestingPug::Base
57
+ #
58
+ # private
59
+ # # Override a permitted_fields_for_create method to use every permitted attribute except :title
60
+ # def permitted_fields_for_create
61
+ # permitted_fields - [:title]
62
+ # end
63
+ # end
37
64
  def permitted_fields_for_create
38
65
  permitted_fields - [:id, :created_at, :updated_at]
39
66
  end
40
67
 
41
68
  # Returns an array with all fields that API will allow to use while updating a subject
42
69
  # @note Override this method to add or remove fields that you don't want API to use for updating.
43
- # @return [Array] of symbols representing attributes
44
70
  # @used_in {#params_for_update}
45
71
  # @use {#permitted_fields}
72
+ # @example
73
+ # class BooksController < ApplicationController
74
+ # include RestingPug::Base
75
+ #
76
+ # private
77
+ # # Override a permitted_fields_for_update method to use every permitted attribute except :title
78
+ # def permitted_fields_for_update
79
+ # permitted_fields - [:title]
80
+ # end
81
+ # end
46
82
  def permitted_fields_for_update
47
83
  permitted_fields - [:id, :created_at, :updated_at]
48
84
  end
49
85
 
50
86
  # Returns an array with all fields that API will allow to use while sorting subjects
51
87
  # @note Override this method to add or remove fields that you don't want API to use for sorting.
52
- # @return [Array] of symbols representing attributes
53
88
  # @used_in {#sort_params}
54
89
  # @use {#permitted_fields}
90
+ # @example
91
+ # class BooksController < ApplicationController
92
+ # include RestingPug::Base
93
+ #
94
+ # private
95
+ # # Override a permitted_fields_for_sort method to use every permitted attribute except :title
96
+ # def permitted_fields_for_sort
97
+ # permitted_fields - [:title]
98
+ # end
99
+ # end
55
100
  def permitted_fields_for_sort
56
101
  permitted_fields
57
102
  end
@@ -59,10 +104,19 @@ module RestingPug
59
104
  # Returns an array with all fields that API will allow to use while filtering subjects by single value
60
105
  # @note Override this method to add or remove fields that you don't want API to use for filtering by single value.
61
106
  # If you want to change attributes that can be filtered by arrays of values check {#permitted_fields_for_filter_arrays}
62
- # @return [Array] of symbols representing attributes
63
107
  # @used_in {#permitted_fields_for_filter_arrays}
64
108
  # @used_in {#permitted_fields_for_filter_with_arrays}
65
109
  # @use {#permitted_fields}
110
+ # @example
111
+ # class BooksController < ApplicationController
112
+ # include RestingPug::Base
113
+ #
114
+ # private
115
+ # # Override a permitted_fields_for_sort method to use every permitted attribute except :title
116
+ # def permitted_fields_for_sort
117
+ # permitted_fields - [:title]
118
+ # end
119
+ # end
66
120
  def permitted_fields_for_filter
67
121
  permitted_fields - [:created_at, :updated_at]
68
122
  end
@@ -70,16 +124,24 @@ module RestingPug
70
124
  # Returns an array with all fields that API will allow to use while filtering subjects by array of values
71
125
  # @note Override this method to add or remove fields that you don't want API to use for filtering by array of values.
72
126
  # If you want to change attributes that can be filtered by single value check {#permitted_fields_for_filter}
73
- # @return [Array] of symbols representing attributes
74
127
  # @used_in {#permitted_fields_for_filter_with_arrays}
75
128
  # @use {#permitted_fields_for_filter}
129
+ # @example
130
+ # class BooksController < ApplicationController
131
+ # include RestingPug::Base
132
+ #
133
+ # private
134
+ # # Override a permitted_fields_for_filter_arrays method to use only :id and :title
135
+ # def permitted_fields_for_filter_arrays
136
+ # { id: [], title: []}
137
+ # end
138
+ # end
76
139
  def permitted_fields_for_filter_arrays
77
140
  permitted_fields_for_filter.map { |field| { field => [] } }
78
141
  end
79
142
 
80
143
  # Returns an array with all fields that API will allow to use while filtering subjects both by single values and by array of values
81
144
  # @note To set fields that can be used check {#permitted_fields_for_filter} and {#permitted_fields_for_filter_arrays}
82
- # @return [Array] of symbols representing attributes
83
145
  # @used_in {#filter_params}
84
146
  # @use {#permitted_fields_for_filter}
85
147
  # @use {#permitted_fields_for_filter_arrays}
@@ -90,8 +152,8 @@ module RestingPug
90
152
  # PARAMS
91
153
 
92
154
  # Returns strong parameters which are used in creating action
93
- # @note Override {#permitted_fields_for_create} to set allowed fields.
94
- # Override {Subject#subject_model_sym} to change the root attrubute of params.
155
+ # @note Override {#permitted_fields_for_create permitted_fields_for_create} to set allowed fields.
156
+ # Override {Subject#subject_model_sym subject_model_sym} to change the root attrubute of params.
95
157
  # @see http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters
96
158
  # @used_in {Subject#create_subject}
97
159
  # @use {Subject#subject_model_sym}
@@ -101,8 +163,8 @@ module RestingPug
101
163
  end
102
164
 
103
165
  # Returns strong parameters which are used in updating action
104
- # @note Override {#permitted_fields_for_update} to set allowed fields.
105
- # Override {Subject#subject_model_sym} to change the root attrubute of params.
166
+ # @note Override {#permitted_fields_for_update permitted_fields_for_update} to set allowed fields.
167
+ # Override {Subject#subject_model_sym subject_model_sym} to change the root attrubute of params.
106
168
  # @see http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters
107
169
  # @used_in {Subject#update_subject}
108
170
  # @use {Subject#subject_model_sym}
@@ -114,7 +176,7 @@ module RestingPug
114
176
  # FILTERING
115
177
 
116
178
  # Returns strong parameters which are used for filtering subjects
117
- # @note Override {#permitted_fields_for_filter} and {permitted_fields_for_filter_arrays} to set allowed fields.
179
+ # @note Override {#permitted_fields_for_filter permitted_fields_for_filter} and {#permitted_fields_for_filter_arrays permitted_fields_for_filter_arrays} to set allowed fields.
118
180
  # @see http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters
119
181
  # @used_in {Modificators#filter_subjects}
120
182
  # @use {#permitted_fields_for_filter_with_arrays}
@@ -125,8 +187,8 @@ module RestingPug
125
187
  # SORT
126
188
 
127
189
  # Transforms a string like "-id,name" to a hash { id: :desc, name: :asc }
128
- # @note Override {#permitted_fields_for_sort} to set allowed fields to sort.
129
- # Override {#default_sort_params} to set default sort params.
190
+ # @note Override {#permitted_fields_for_sort permitted_fields_for_sort} to set allowed fields to sort.
191
+ # Override {#default_sort_params default_sort_params} to set default sort params.
130
192
  # @used_in {Modificators#sort_subjects}
131
193
  # @use {#permitted_fields_for_sort}
132
194
  # @use {#default_sort_params}
@@ -151,9 +213,19 @@ module RestingPug
151
213
  end
152
214
 
153
215
  # Returns a hash with default sorting params
154
- # @note Override {#permitted_fields_for_sort} to set allowed fields to sort.
216
+ # @note Override {#permitted_fields_for_sort permitted_fields_for_sort} to set allowed fields to sort.
155
217
  # @see http://guides.rubyonrails.org/active_record_querying.html#ordering
156
218
  # @used_in {#sort_params}
219
+ # @example
220
+ # class BooksController < ApplicationController
221
+ # include RestingPug::Base
222
+ #
223
+ # private
224
+ # # Override a default_sort_params to set default sorting to sorted descending by title
225
+ # def default_sort_params
226
+ # { title: :desc }
227
+ # end
228
+ # end
157
229
  def default_sort_params
158
230
  {id: :desc}
159
231
  end
@@ -161,8 +233,8 @@ module RestingPug
161
233
  # PAGINATION
162
234
 
163
235
  # Handles pagination params and return a hash like { page: 1, per_page: 10 }
164
- # @note Override {#per_page_range} to set minimum and maximum per_page param.
165
- # Override {#per_page_default} to set default per_page param.
236
+ # @note Override {#per_page_range per_page_range} to set minimum and maximum per_page param.
237
+ # Override {#per_page_default per_page_default} to set default per_page param.
166
238
  # @used_in {Modificators#paginate_subjects}
167
239
  # @use {#per_page_range}
168
240
  # @use {#per_page_default}
@@ -172,18 +244,38 @@ module RestingPug
172
244
  return { page: page, per_page: per_page }
173
245
  end
174
246
 
175
- # Returns a hash minimum and maximum per_page param like { page: 1, per_page: 10 }
176
- # @note Override {#per_page_default} to set default per_page param.
247
+ # Returns a hash with minimum and maximum per_page param like { page: 1, per_page: 10 }
248
+ # @note Override {#per_page_default per_page_default} to set default per_page param.
177
249
  # @used_in {#pagination_params}
250
+ # @example
251
+ # class BooksController < ApplicationController
252
+ # include RestingPug::Base
253
+ #
254
+ # private
255
+ # # Override a per_page_range to set minimum possible value for per_page 10 and maximum 20
256
+ # def per_page_range
257
+ # { min: 10, max: 20 }
258
+ # end
259
+ # end
178
260
  def per_page_range
179
261
  { min: 5, max: 100 }
180
262
  end
181
263
 
182
264
  # Returns a default per_page param
183
- # @note Override {#per_page_range} to set minimum and maximum per_page param
265
+ # @note Override {#per_page_range per_page_range} to set minimum and maximum per_page param
184
266
  # @used_in {#pagination_params}
267
+ # @example
268
+ # class BooksController < ApplicationController
269
+ # include RestingPug::Base
270
+ #
271
+ # private
272
+ # # Override a per_page_default to set default page size to 15
273
+ # def per_page_default
274
+ # 15
275
+ # end
276
+ # end
185
277
  def per_page_default
186
278
  10
187
279
  end
188
280
  end
189
- end
281
+ end
@@ -5,11 +5,25 @@ module RestingPug
5
5
  protected
6
6
 
7
7
  # Calls {#render_subject} if subject is valid and {#render_errors} otherwise
8
- # @note Override {#render_subject} and {#render_errors} to change rendering behaviour
8
+ # @note Override {#render_subject render_subject} and {#render_errors render_errors} to change rendering behaviour
9
9
  # @used_in {Chains#create_chain}
10
10
  # @used_in {Chains#update_chain}
11
11
  # @use {#render_subject}
12
12
  # @use {#render_errors}
13
+ # @example
14
+ # class BooksController < ApplicationController
15
+ # include RestingPug::Base
16
+ #
17
+ # private
18
+ # # Override a decide_what_to_render to render something special if @subject id is 3
19
+ # def decide_what_to_render
20
+ # if @subject.valid?
21
+ # @subject.id == 3 ? render_something_special : render_subject
22
+ # else
23
+ # render_errors
24
+ # end
25
+ # end
26
+ # end
13
27
  def decide_what_to_render
14
28
  if @subject.valid?
15
29
  render_subject
@@ -20,23 +34,43 @@ module RestingPug
20
34
 
21
35
  # Renders json with a subject
22
36
  # @note Override this method to add more complicated logic of rendering.
23
- # Override {Subject#subject_model_sym} to change root attribute.
24
- # Override {Params#permitted_fields_for_show} to change shown attributes.
37
+ # Override {Subject#subject_model_sym subject_model_sym} to change root attribute.
38
+ # Override {Params#permitted_fields_for_show permitted_fields_for_show} to change shown attributes.
25
39
  # @used_in {#decide_what_to_render}
26
40
  # @used_in {Chains#show_chain}
27
41
  # @use {Subject#subject_model_sym}
28
42
  # @use {Params#permitted_fields_for_show}
43
+ # @example
44
+ # class BooksController < ApplicationController
45
+ # include RestingPug::Base
46
+ #
47
+ # private
48
+ # # Override a render_subject to render without a root object
49
+ # def render_subject
50
+ # render json: @subject.as_json(only: permitted_fields_for_show)
51
+ # end
52
+ # end
29
53
  def render_subject
30
54
  render json: { subject_model_sym => @subject.as_json(only: permitted_fields_for_show) }
31
55
  end
32
56
 
33
57
  # Renders json with subjects
34
58
  # @note Override this method to add more complicated logic of rendering.
35
- # Override {Subject#subject_model_sym_plural} to change root attribute.
36
- # Override {Params#permitted_fields_for_show} to change shown attributes.
59
+ # Override {Subject#subject_model_sym_plural subject_model_sym_plural} to change root attribute.
60
+ # Override {Params#permitted_fields_for_show permitted_fields_for_show} to change shown attributes.
37
61
  # @used_in {Chains#index_chain}
38
62
  # @use {Subject#subject_model_sym_plural}
39
63
  # @use {Params#permitted_fields_for_show}
64
+ # @example
65
+ # class BooksController < ApplicationController
66
+ # include RestingPug::Base
67
+ #
68
+ # private
69
+ # # Override a render_subjects to render with 'items' as a root object
70
+ # def render_subjects
71
+ # render json: { items: @subjects.as_json(only: permitted_fields_for_show) }
72
+ # end
73
+ # end
40
74
  def render_subjects
41
75
  render json: { subject_model_sym_plural => @subjects.as_json(only: permitted_fields_for_show) }
42
76
  end
@@ -44,6 +78,16 @@ module RestingPug
44
78
  # Renders empty response
45
79
  # @note Override this method to add more complicated logic of rendering.
46
80
  # @used_in {Subject#destroy_subject}
81
+ # @example
82
+ # class BooksController < ApplicationController
83
+ # include RestingPug::Base
84
+ #
85
+ # private
86
+ # # Override a render_nothing to render with status 200
87
+ # def render_nothing
88
+ # render json: {}, status: 200
89
+ # end
90
+ # end
47
91
  def render_nothing
48
92
  render json: {}, status: 204
49
93
  end
@@ -51,6 +95,16 @@ module RestingPug
51
95
  # Renders errors
52
96
  # @note Override this method to add more complicated logic of rendering.
53
97
  # @used_in {#decide_what_to_render}
98
+ # @example
99
+ # class BooksController < ApplicationController
100
+ # include RestingPug::Base
101
+ #
102
+ # private
103
+ # # Override a render_errors to render with status 400
104
+ # def render_errors
105
+ # render json: { errors: @subject.errors }, status: 400
106
+ # end
107
+ # end
54
108
  def render_errors
55
109
  render json: { errors: @subject.errors }, status: 422
56
110
  end
@@ -58,15 +112,35 @@ module RestingPug
58
112
  # Renders error when required params are missing
59
113
  # @note Override this method to add more complicated logic of rendering.
60
114
  # @used_in {Base.included}
115
+ # @example
116
+ # class BooksController < ApplicationController
117
+ # include RestingPug::Base
118
+ #
119
+ # private
120
+ # # Override a render_param_missing to render with status 422
121
+ # def render_param_missing
122
+ # render json: { errors: { subject_model_sym => ['param is missing'] } }, status: 422
123
+ # end
124
+ # end
61
125
  def render_param_missing
62
126
  render json: { errors: { subject_model_sym => ['param is missing'] } }, status: 400
63
127
  end
64
128
 
65
- # Renders error when required params are missing
129
+ # Renders error when required object is not found
66
130
  # @note Override this method to add more complicated logic of rendering.
67
131
  # @used_in {Base.included}
132
+ # @example
133
+ # class BooksController < ApplicationController
134
+ # include RestingPug::Base
135
+ #
136
+ # private
137
+ # # Override a render_not_found to render with message 'Not found'
138
+ # def render_not_found
139
+ # render json: { message: 'Not found' }, status: 404
140
+ # end
141
+ # end
68
142
  def render_not_found
69
143
  render json: {}, status: 404
70
144
  end
71
145
  end
72
- end
146
+ end
@@ -12,6 +12,16 @@ module RestingPug
12
12
  # @used_in {#fetch_subject}
13
13
  # @used_in {#fetch_subjects}
14
14
  # @used_in {Params#permitted_fields}
15
+ # @example
16
+ # class BooksController < ApplicationController
17
+ # include RestingPug::Base
18
+ #
19
+ # private
20
+ # # Override a subject_model to use Novel as a model
21
+ # def subject_model
22
+ # Novel
23
+ # end
24
+ # end
15
25
  def subject_model
16
26
  controller_name.classify.constantize
17
27
  end
@@ -23,6 +33,16 @@ module RestingPug
23
33
  # @used_in {Params#params_for_update}
24
34
  # @used_in {Render#render_subject}
25
35
  # @used_in {Render#render_param_missing}
36
+ # @example
37
+ # class BooksController < ApplicationController
38
+ # include RestingPug::Base
39
+ #
40
+ # private
41
+ # # Override a subject_model to use :novel as a symbol used in params and rendering
42
+ # def subject_model_sym
43
+ # :novel
44
+ # end
45
+ # end
26
46
  def subject_model_sym
27
47
  subject_model.to_s.underscore.to_sym
28
48
  end
@@ -31,6 +51,16 @@ module RestingPug
31
51
  # @note Override this method to get another root JSON response.
32
52
  # @use {#subject_model}
33
53
  # @used_in {Render#render_subjects}
54
+ # @example
55
+ # class BooksController < ApplicationController
56
+ # include RestingPug::Base
57
+ #
58
+ # private
59
+ # # Override a subject_model_sym_plural to use :novels as a symbol used in index action
60
+ # def subject_model_sym_plural
61
+ # :novels
62
+ # end
63
+ # end
34
64
  def subject_model_sym_plural
35
65
  subject_model.to_s.pluralize.underscore.to_sym
36
66
  end
@@ -40,6 +70,16 @@ module RestingPug
40
70
  # @used_in {Chains#create_chain}
41
71
  # @use {#subject_model}
42
72
  # @use {Params#params_for_create}
73
+ # @example
74
+ # class BooksController < ApplicationController
75
+ # include RestingPug::Base
76
+ #
77
+ # private
78
+ # # Override a create_subject to create only if title is not 'None'
79
+ # def create_subject
80
+ # @subject = subject_model.create(params_for_create) unless params_for_create[:title] == 'None'
81
+ # end
82
+ # end
43
83
  def create_subject
44
84
  @subject = subject_model.create(params_for_create)
45
85
  end
@@ -48,6 +88,16 @@ module RestingPug
48
88
  # @note Override this method to add some custom logic to updating process.
49
89
  # @used_in {Chains#update_chain}
50
90
  # @use {Params#params_for_update}
91
+ # @example
92
+ # class BooksController < ApplicationController
93
+ # include RestingPug::Base
94
+ #
95
+ # private
96
+ # # Override a update_subject to update only if title is not 'None'
97
+ # def update_subject
98
+ # @subject.update(params_for_update) unless params_for_update[:title] == 'None'
99
+ # end
100
+ # end
51
101
  def update_subject
52
102
  @subject.update(params_for_update)
53
103
  end
@@ -57,6 +107,20 @@ module RestingPug
57
107
  # @used_in {Chains#destroy_chain}
58
108
  # @use {Render#render_nothing}
59
109
  # @use {Render#render_errors}
110
+ # @example
111
+ # class BooksController < ApplicationController
112
+ # include RestingPug::Base
113
+ #
114
+ # private
115
+ # # Override a destroy_subject to destroy only if title is not 'None'
116
+ # def destroy_subject
117
+ # if @subject.title != 'None' && @subject.destroy
118
+ # render_nothing
119
+ # else
120
+ # render_errors
121
+ # end
122
+ # end
123
+ # end
60
124
  def destroy_subject
61
125
  if @subject.destroy
62
126
  render_nothing
@@ -72,6 +136,16 @@ module RestingPug
72
136
  # @used_in {Chains#destroy_chain}
73
137
  # @used_in {Chains#show_chain}
74
138
  # @use {#subject_model}
139
+ # @example
140
+ # class BooksController < ApplicationController
141
+ # include RestingPug::Base
142
+ #
143
+ # private
144
+ # # Override a fetch_subject to return a default subject if requested is not found
145
+ # def fetch_subject
146
+ # @subject = subject_model.find_by_id(params[:id]) || default_subject
147
+ # end
148
+ # end
75
149
  def fetch_subject
76
150
  @subject = subject_model.find(params[:id])
77
151
  end
@@ -80,6 +154,16 @@ module RestingPug
80
154
  # @note Override this method to add some custom logic to fetching process.
81
155
  # @used_in {Chains#index_chain}
82
156
  # @use {#subject_model}
157
+ # @example
158
+ # class BooksController < ApplicationController
159
+ # include RestingPug::Base
160
+ #
161
+ # private
162
+ # # Override a fetch_subjects to return subject where title is not 'None'
163
+ # def fetch_subjects
164
+ # @subjects = subject_model.where.not(title: 'None')
165
+ # end
166
+ # end
83
167
  def fetch_subjects
84
168
  @subjects = subject_model.all
85
169
  end
@@ -1,3 +1,4 @@
1
1
  module RestingPug
2
- VERSION = '0.1.0'
2
+ # Actual version
3
+ VERSION = '0.1.1'
3
4
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resting_pug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Slava Korolev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-02 00:00:00.000000000 Z
11
+ date: 2017-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: will_paginate
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
27
  - !ruby/object:Gem::Dependency
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: codecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: Resting Pug allows you to create a JSON API with just adding one line
112
126
  to your controller and fully customize it with overriding small and simple helper
113
127
  methods.