apicasso 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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