jsonapi_actions 0.4.0 → 0.5.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
  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