jsonapi_actions 0.4.0 → 0.5.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
  SHA256:
3
- metadata.gz: 36ec7e18ffd84c14377409471e3f3dd911d956e0e1d3960dc52113cd51f20923
4
- data.tar.gz: 1d9034c3807d27a04923332af04f1008bd1b9d1af7fa05ced37f5a279f7d26a5
3
+ metadata.gz: fe65b6ed02022e7f5962df4faca6f9326aa69e270ce3a7206d23b604141b03d8
4
+ data.tar.gz: f429a5e20e6caa7f485b25873d30887bde4321e12ff22483505ffce2ded6b249
5
5
  SHA512:
6
- metadata.gz: 4454b8e91c724d5178e80be964bb85e4d214ee5bfcfbb92b67c6522d5f970ec034a2a238f3ab19618cd8073c7856fb9a6d60cfe150d3387e28850f29f9995628
7
- data.tar.gz: 57e35c3a97f5ad2418767ad556f17e1a46d7499b9a6cc0f20a8fa52a190342547a249aad7ee17ce20e617bce7f4cf0ad642b88a7dffbfaf8367bcbad1f04874b
6
+ metadata.gz: 68cf00f70d0727172195ddc306e5b450e83cf003203c94cdbfa85677e4c9fde9dc3853737e17640d6b9546f47287481b240653c03c13bfb72356d5f820ab6770
7
+ data.tar.gz: '0992c33f6b4e04eb049ffef3139dba7b7339ace3ebff6d66a631ab408d52395ca038a4ec47c23b263bde7a83b09b78715659747d00c7edfcf90e3021ace19da6'
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
 
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
+ .ruby-*
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.7.1
1
+ ruby-2.7.4
data/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.5.0] - 2023-02-22
8
+ ### Added
9
+ - Added `serializer_params` method to more easily allow for custom serializer params.
10
+
7
11
  ## [0.2.2] - 2020-05-18
8
12
  ### Fixed
9
13
  - JsonapiActions#json_response uses `defined?` to check for serializer library
data/Gemfile.lock CHANGED
@@ -112,6 +112,8 @@ GEM
112
112
  net-smtp (0.3.3)
113
113
  net-protocol
114
114
  nio4r (2.5.8)
115
+ nokogiri (1.13.9-arm64-darwin)
116
+ racc (~> 1.4)
115
117
  nokogiri (1.13.9-x86_64-darwin)
116
118
  racc (~> 1.4)
117
119
  racc (1.6.0)
@@ -168,6 +170,7 @@ GEM
168
170
  zeitwerk (2.6.6)
169
171
 
170
172
  PLATFORMS
173
+ arm64-darwin-22
171
174
  ruby
172
175
  x86_64-darwin-20
173
176
 
@@ -1,3 +1,3 @@
1
1
  module JsonapiActions
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -74,146 +74,148 @@ module JsonapiActions
74
74
 
75
75
  private
76
76
 
77
- def metadata
78
- {}
79
- end
77
+ def metadata
78
+ {}
79
+ end
80
80
 
81
- def parent_scope(records)
82
- return records if self.class.parent_associations.blank?
81
+ def parent_scope(records)
82
+ return records if self.class.parent_associations.blank?
83
83
 
84
- self.class.parent_associations.each do |parent|
85
- next if params[parent[:param]].blank?
84
+ self.class.parent_associations.each do |parent|
85
+ next if params[parent[:param]].blank?
86
86
 
87
- records = records.joins(parent[:association]) unless parent[:association].blank?
88
- records = if parent[:table]
89
- records.where(parent[:table] => { parent[:attribute] => params[parent[:param]] })
90
- else
91
- records.where(parent[:attribute] => params[parent[:param]])
92
- end
93
- end
87
+ records = records.joins(parent[:association]) unless parent[:association].blank?
88
+ records = if parent[:table]
89
+ records.where(parent[:table] => { parent[:attribute] => params[parent[:param]] })
90
+ else
91
+ records.where(parent[:attribute] => params[parent[:param]])
92
+ end
93
+ end
94
94
 
95
- records
96
- end
95
+ records
96
+ end
97
97
 
98
- def filter(records)
99
- records
100
- end
98
+ def filter(records)
99
+ records
100
+ end
101
101
 
102
- def sort(records)
103
- return records if params[:sort].blank?
104
- order = {}
102
+ def sort(records)
103
+ return records if params[:sort].blank?
104
+ order = {}
105
105
 
106
- params[:sort].split(',').each do |sort|
107
- if sort[0] == '-'
108
- order[sort[1..-1]] = :desc
109
- else
110
- order[sort] = :asc
106
+ params[:sort].split(',').each do |sort|
107
+ if sort[0] == '-'
108
+ order[sort[1..-1]] = :desc
109
+ else
110
+ order[sort] = :asc
111
+ end
111
112
  end
113
+
114
+ return records.order(order)
112
115
  end
113
116
 
114
- return records.order(order)
115
- end
117
+ def paginate(records)
118
+ records.page(page[:number]).per(page[:size])
119
+ end
116
120
 
117
- def paginate(records)
118
- records.page(page[:number]).per(page[:size])
119
- end
121
+ def page
122
+ @page ||= begin
123
+ page = {}
124
+ page[:number] = (params.dig(:page, :number) || 1).to_i
125
+ page[:size] = [[(params.dig(:page, :size) || 20).to_i, 1000].min, 1].max
126
+ page
127
+ end
128
+ end
120
129
 
121
- def page
122
- @page ||= begin
123
- page = {}
124
- page[:number] = (params.dig(:page, :number) || 1).to_i
125
- page[:size] = [[(params.dig(:page, :size) || 20).to_i, 1000].min, 1].max
126
- page
127
- end
128
- end
130
+ def set_record
131
+ @record = model.find(params[:id])
132
+ authorize(@record)
133
+ end
129
134
 
130
- def set_record
131
- @record = model.find(params[:id])
132
- authorize(@record)
133
- end
135
+ def id_param
136
+ params.require(:data).permit(policy(@record).permitted_attributes)[:id]
137
+ end
134
138
 
135
- def id_param
136
- params.require(:data).permit(policy(@record).permitted_attributes)[:id]
137
- end
139
+ def record_params
140
+ params.require(:data).require(:attributes).permit(policy(@record).permitted_attributes)
141
+ end
138
142
 
139
- def record_params
140
- params.require(:data).require(:attributes).permit(policy(@record).permitted_attributes)
141
- end
143
+ def include_param
144
+ if %w[* **].include? params[:include]
145
+ inclusion_map
146
+ else
147
+ params[:include].to_s.split(',').reject(&:blank?).map(&:to_sym)
148
+ end
149
+ end
142
150
 
143
- def include_param
144
- if %w[* **].include? params[:include]
145
- inclusion_map
146
- else
147
- params[:include].to_s.split(',').reject(&:blank?).map(&:to_sym)
151
+ def inclusion_map
152
+ InclusionMapper.new(serializer, include: params[:include]).map
148
153
  end
149
- end
150
154
 
151
- def inclusion_map
152
- InclusionMapper.new(serializer, include: params[:include]).map
153
- end
155
+ def unprocessable_entity(record)
156
+ Rails.logger.debug(record.errors.messages)
157
+ { json: record.errors.messages, status: :unprocessable_entity }
158
+ end
154
159
 
155
- def unprocessable_entity(record)
156
- Rails.logger.debug(record.errors.messages)
157
- { json: record.errors.messages, status: :unprocessable_entity }
158
- end
160
+ def pagination_meta(collection)
161
+ return {} if collection.nil?
159
162
 
160
- def pagination_meta(collection)
161
- return {} if collection.nil?
163
+ {
164
+ current_page: collection.current_page,
165
+ next_page: collection.next_page,
166
+ prev_page: collection.prev_page,
167
+ total_pages: collection.total_pages,
168
+ total_count: collection.total_count
169
+ }
170
+ end
162
171
 
163
- {
164
- current_page: collection.current_page,
165
- next_page: collection.next_page,
166
- prev_page: collection.prev_page,
167
- total_pages: collection.total_pages,
168
- total_count: collection.total_count
169
- }
170
- end
172
+ def model
173
+ self.class.model || self.class.model_name.constantize
174
+ end
171
175
 
172
- def model
173
- self.class.model || self.class.model_name.constantize
174
- end
176
+ def json_response(data, options = {})
177
+ if defined?(JSONAPI::Serializer) || defined?(FastJsonapi)
178
+ {
179
+ json: serializer(data).new(data, options.deep_merge(
180
+ include: include_param,
181
+ meta: metadata,
182
+ params: serializer_params)
183
+ )
184
+ }
175
185
 
176
- def json_response(data, options = {})
177
- if defined?(JSONAPI::Serializer) || defined?(FastJsonapi)
178
- {
179
- json: serializer(data).new(data, options.deep_merge(
180
- include: include_param,
181
- meta: metadata,
182
- params: {
183
- current_user: try(:current_user)
184
- })
185
- )
186
- }
186
+ elsif defined?(ActiveModel::Serializer)
187
+ { json: data }.merge(meta: metadata, include: include_param).merge(options)
187
188
 
188
- elsif defined?(ActiveModel::Serializer)
189
- { json: data }.merge(meta: metadata, include: include_param).merge(options)
189
+ else
190
+ { json: { data: data }.merge(options) }
191
+ end
192
+ end
190
193
 
191
- else
192
- { json: { data: data }.merge(options) }
194
+ def serializer(data = nil)
195
+ serializer_classes = [
196
+ self.class.serializer,
197
+ data.try(:serializer_class),
198
+ "#{data.class.name}Serializer".safe_constantize,
199
+ data.try(:first).try(:serializer_class),
200
+ "#{data.try(:first).class.name}Serializer".safe_constantize
201
+ ].compact
202
+
203
+ if serializer_classes.any?
204
+ serializer_classes.first
205
+ else
206
+ "#{model.name}Serializer".safe_constantize
207
+ end
208
+ rescue NoMethodError, NameError
209
+ raise 'Unknown serializer'
193
210
  end
194
- end
195
211
 
196
- def serializer(data = nil)
197
- serializer_classes = [
198
- self.class.serializer,
199
- data.try(:serializer_class),
200
- "#{data.class.name}Serializer".safe_constantize,
201
- data.try(:first).try(:serializer_class),
202
- "#{data.try(:first).class.name}Serializer".safe_constantize
203
- ].compact
204
-
205
- if serializer_classes.any?
206
- serializer_classes.first
207
- else
208
- "#{model.name}Serializer".safe_constantize
212
+ def serializer_params
213
+ { current_user: try(:current_user) }
209
214
  end
210
- rescue NoMethodError, NameError
211
- raise 'Unknown serializer'
212
- end
213
215
 
214
- def eager_load(records)
215
- records
216
- end
216
+ def eager_load(records)
217
+ records
218
+ end
217
219
  end
218
220
 
219
221
  module ClassMethods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_actions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Pheasey
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-08 00:00:00.000000000 Z
11
+ date: 2023-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
139
  - !ruby/object:Gem::Version
140
140
  version: '0'
141
141
  requirements: []
142
- rubygems_version: 3.1.2
142
+ rubygems_version: 3.1.6
143
143
  signing_key:
144
144
  specification_version: 4
145
145
  summary: Rails JSON:API Controller Actions