apicasso 0.1.6 → 0.2.0

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: 8053255daaad3ecbc6f8b4d14ae1aeb38671b5b9
4
- data.tar.gz: d904f5dbc5d8114b26a26620b9b85410fd6d37d6
3
+ metadata.gz: 623f4bebf4617b89d81b3ef5af3e5ed5db0e19cb
4
+ data.tar.gz: d8431c10ff78ffa0e168bec56ad018227a87f2d8
5
5
  SHA512:
6
- metadata.gz: 02fcc26644d279ba49a58651e7135e644f2477dcb0d6b01988d27a67bd7a3867e1ff8f298273121b3ccff005225a1b44e0186aa8780bbacb8418369b89ee2a21
7
- data.tar.gz: c6c194ff5532e62e6e36d797b143b89520c71fa1b1a470ad1e44343dffede7d740a0cd0a12d190a6bc3125b6030830aea16602513d740f39ebdcd57291344536
6
+ metadata.gz: 9c958b5138df397df95ea4d95dde071fc95e153b20d40401f5d8813adcba0c9c5d9e4aff17488ba56a4ed0a676026c0419dfce1df0b1661c13fb06b4bc991d4f
7
+ data.tar.gz: 167d8058e029c805a004135ca25711dae1fa11740fc4929dfebf5f44abc0eca447bcc0c2106ec1b9112545a622eb2bf6b6cac4bfb952914c132afd720e1d80e6
@@ -100,5 +100,12 @@ module Apicasso
100
100
  authorize! opts[:action], opts[:resource] if opts[:resource].present?
101
101
  authorize! opts[:action], opts[:object] if opts[:object].present?
102
102
  end
103
+
104
+ def set_access_control_headers
105
+ response.headers['Access-Control-Allow-Origin'] = '*'
106
+ response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
107
+ response.headers['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Accept, Authorization, Token, Auth-Token, Email, X-User-Token, X-User-Email'
108
+ response.headers['Access-Control-Max-Age'] = '1728000'
109
+ end
103
110
  end
104
111
  end
@@ -19,7 +19,7 @@ module Apicasso
19
19
  # the page 42 of that collection. Usage:
20
20
  # GET /sites?sort=+name,-updated_at&q[domain_eq]=domain.com&page=42&per_page=42
21
21
  def index
22
- render json: response_json
22
+ render json: index_json
23
23
  end
24
24
 
25
25
  # GET /:resource/1
@@ -78,13 +78,6 @@ module Apicasso
78
78
 
79
79
  private
80
80
 
81
- def set_access_control_headers
82
- response.headers['Access-Control-Allow-Origin'] = '*'
83
- response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
84
- response.headers['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Accept, Authorization, Token, Auth-Token, Email, X-User-Token, X-User-Email'
85
- response.headers['Access-Control-Max-Age'] = '1728000'
86
- end
87
-
88
81
  # Common setup to stablish which model is the resource of this request
89
82
  def set_root_resource
90
83
  @root_resource = params[:resource].classify.constantize
@@ -123,6 +116,13 @@ module Apicasso
123
116
  authorize! :read, resource.name.underscore.to_sym
124
117
  @records = resource.ransack(parsed_query).result
125
118
  reorder_records if params[:sort].present?
119
+ select_fields if params[:select].present?
120
+ end
121
+
122
+ # Selects a fieldset that should be returned, instead of all fields
123
+ # from records.
124
+ def select_fields
125
+ @records = @records.select(*params[:select].split(','))
126
126
  end
127
127
 
128
128
  # Reordering of records which happens when receiving `params[:sort]`
@@ -132,20 +132,50 @@ module Apicasso
132
132
 
133
133
  # Raw paginated records object
134
134
  def paginated_records
135
- @records.accessible_by(current_ability)
136
- .paginate(page: params[:page], per_page: params[:per_page])
135
+ accessible_records
136
+ .paginate(page: params[:page], per_page: params[:per_page])
137
+ end
138
+
139
+ # Records that can be accessed from current Apicasso::Key scope
140
+ # permissions
141
+ def accessible_records
142
+ @records.accessible_by(current_ability).unscope(:order)
143
+ end
144
+
145
+ # The response for index action, which can be a pagination of a record collection
146
+ # or a grouped count of attributes
147
+ def index_json
148
+ if params[:group].present?
149
+ accessible_records.group(params[:group].split(',')).count
150
+ else
151
+ collection_response
152
+ end
137
153
  end
138
154
 
139
155
  # Parsing of `paginated_records` with pagination variables metadata
140
- def response_json
156
+ def built_paginated
141
157
  { entries: entries_json }.merge(pagination_metadata_for(paginated_records))
142
158
  end
143
159
 
160
+ # All records matching current query and it's total
161
+ def built_unpaginated
162
+ { entries: accessible_records, total: accessible_records.size }
163
+ end
164
+
144
165
  # Parsed JSON to be used as response payload
145
166
  def entries_json
146
167
  JSON.parse(paginated_records.to_json(include: parsed_include))
147
168
  end
148
169
 
170
+ # Returns the collection checking if it needs pagination
171
+ def collection_response
172
+ if params[:per_page].to_i == -1
173
+ built_unpaginated
174
+ else
175
+ built_paginated
176
+ end
177
+ end
178
+
149
179
  # Only allow a trusted parameter "white list" through,
150
180
  # based on resource's schema.
151
181
  def object_params
@@ -1,3 +1,3 @@
1
1
  module Apicasso
2
- VERSION = '0.1.6'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apicasso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernando Bellincanta