rest_framework 0.6.2 → 0.6.3

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: 207b074408e0f95dd2d289abdd7d048f66f44d38f795b45b51245af28376a1c4
4
- data.tar.gz: 67729758c21dd7627419248801d85f929188c64f2b20dba9095938a9650259da
3
+ metadata.gz: 9310e248327d207a68953d1f629bb9c094c860ee7fe50f1ada4cb87e88e1da43
4
+ data.tar.gz: c7ffe0f8ef8bf0c0f26b7d918cccbd91c9b1650f144c7ba071d9f9db0c2b4a2b
5
5
  SHA512:
6
- metadata.gz: 8dd2c8c6209b04ffa77fe1506906332c9beb3e87ee60bad2f348ab5331258b46fe66fc3ced5048b66472c424b84132746fbca650b82faa87415c1a36b41c16c2
7
- data.tar.gz: d04ceada0800c54161cfaeccb3d43251c3ae3bd5c629a937da058c0be640c0287453ac3338744d36e0290aea536b4987f56e76b0ace999580bd90adbd14d85c1
6
+ metadata.gz: 49c1bd1aa35b97b3543ffe3a66b1eb8a19fe339f996483071be1cb6817aa3f8d4848ff90f0b5bd7e20769c9c1c028f605de1e8251cb80bd2fcfb979ec10de2bd
7
+ data.tar.gz: 1c5e9ef47b970fd883023ac2eb11b3febabfb83d929908de28553b46a668c2136286bef4873f489e5fa263959cbf33a8b8cecef6bce7ace29926983566cad94a
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.2
1
+ 0.6.3
@@ -101,53 +101,48 @@ class RESTFramework::NativeSerializer < RESTFramework::BaseSerializer
101
101
  return controller_serializer || @controller.class.try(:native_serializer_config)
102
102
  end
103
103
 
104
- # Helper to filter (mutate) a single subconfig for specific keys.
105
- def self.filter_subcfg(subcfg, except: nil, only: nil, additive: false)
106
- return subcfg unless except || only
107
- return subcfg unless subcfg || additive
108
- raise "Cannot pass `only` and `additive` to filter_subcfg." if only && additive
104
+ # Helper to filter a single subconfig for specific keys. By default, keys from `fields` are
105
+ # removed from the provided `subcfg`. There are two (mutually exclusive) options to adjust the
106
+ # behavior:
107
+ #
108
+ # `add`: Add any `fields` to the `subcfg` which aren't already in the `subcfg`.
109
+ # `only`: Remove any values found in the `subcfg` not in `fields`.
110
+ def self.filter_subcfg(subcfg, fields:, add: false, only: false)
111
+ raise "`add` and `only` conflict with one another" if add && only
112
+
113
+ # Don't process nil `subcfg`s.
114
+ return subcfg unless subcfg
109
115
 
110
116
  if subcfg.is_a?(Array)
111
- subcfg = subcfg.map(&:to_sym)
112
- if except
113
- if additive
114
- # Only add fields which are not already included.
115
- subcfg += except - subcfg
116
- else
117
- subcfg -= except
118
- end
117
+ subcfg = subcfg.transform_values(&:to_sym)
118
+
119
+ if add
120
+ # Only add fields which are not already included.
121
+ subcfg += fields - subcfg
119
122
  elsif only
120
- # Ignore `additive` in an `only` context, since it could causing data leaking.
121
- unless additive
122
- subcfg.select! { |c| c.in?(only) }
123
- end
123
+ subcfg.select! { |c| c.in?(fields) }
124
+ else
125
+ subcfg -= fields
124
126
  end
125
127
  elsif subcfg.is_a?(Hash)
126
- # Additive doesn't make sense in a hash context since we wouldn't know the values.
127
- unless additive
128
- if except
129
- subcfg.symbolize_keys!
130
- subcfg.reject! { |k, _v| k.in?(except) }
131
- elsif only
132
- subcfg.symbolize_keys!
133
- subcfg.select! { |k, _v| k.in?(only) }
134
- end
135
- end
136
- elsif !subcfg
137
- if additive && except
138
- subcfg = except
128
+ subcfg = subcfg.symbolize_keys
129
+
130
+ if add
131
+ # Add doesn't make sense in a hash context since we wouldn't know the values.
132
+ elsif only
133
+ subcfg.select! { |k, _v| k.in?(fields) }
134
+ else
135
+ subcfg.reject! { |k, _v| k.in?(fields) }
139
136
  end
140
137
  else # Subcfg is a single element (assume string/symbol).
141
138
  subcfg = subcfg.to_sym
142
139
 
143
- if except
144
- if subcfg.in?(except)
145
- subcfg = [] unless additive
146
- elsif additive
147
- subcfg = [subcfg, *except]
148
- end
149
- elsif only && !additive && !subcfg.in?(only) # Protect only/additive data-leaking.
150
- subcfg = []
140
+ if add
141
+ subcfg = subcfg.in?(fields) ? fields : [subcfg, *fields]
142
+ elsif only
143
+ subcfg = subcfg.in?(fields) ? subcfg : []
144
+ else
145
+ subcfg = subcfg.in?(fields) ? [] : subcfg
151
146
  end
152
147
  end
153
148
 
@@ -166,14 +161,16 @@ class RESTFramework::NativeSerializer < RESTFramework::BaseSerializer
166
161
  unless except.empty?
167
162
  # Filter `only`, `except` (additive), `include`, `methods`, and `serializer_methods`.
168
163
  if cfg[:only]
169
- cfg[:only] = self.class.filter_subcfg(cfg[:only], except: except)
164
+ cfg[:only] = self.class.filter_subcfg(cfg[:only], fields: except)
165
+ elsif cfg[:except]
166
+ cfg[:except] = self.class.filter_subcfg(cfg[:except], fields: except, add: true)
170
167
  else
171
- cfg[:except] = self.class.filter_subcfg(cfg[:except], except: except, additive: true)
168
+ cfg[:except] = except
172
169
  end
173
- cfg[:include] = self.class.filter_subcfg(cfg[:include], except: except)
174
- cfg[:methods] = self.class.filter_subcfg(cfg[:methods], except: except)
170
+ cfg[:include] = self.class.filter_subcfg(cfg[:include], fields: except)
171
+ cfg[:methods] = self.class.filter_subcfg(cfg[:methods], fields: except)
175
172
  cfg[:serializer_methods] = self.class.filter_subcfg(
176
- cfg[:serializer_methods], except: except
173
+ cfg[:serializer_methods], fields: except
177
174
  )
178
175
  end
179
176
  elsif only_param && only = @controller.request.query_parameters[only_param].presence
@@ -186,13 +183,17 @@ class RESTFramework::NativeSerializer < RESTFramework::BaseSerializer
186
183
 
187
184
  # Filter `only`, `except` (additive), `include`, and `methods`.
188
185
  if cfg[:only]
189
- cfg[:only] = self.class.filter_subcfg(cfg[:only], only: only)
186
+ cfg[:only] = self.class.filter_subcfg(cfg[:only], fields: only, only: true)
187
+ elsif cfg[:except]
188
+ cfg[:except] = self.class.filter_subcfg(cfg[:except], fields: except_cols, add: true)
190
189
  else
191
- cfg[:except] = self.class.filter_subcfg(cfg[:except], except: except_cols, additive: true)
190
+ cfg[:only] = only
192
191
  end
193
- cfg[:include] = self.class.filter_subcfg(cfg[:include], only: only)
194
- cfg[:methods] = self.class.filter_subcfg(cfg[:methods], only: only)
195
- cfg[:serializer_methods] = self.class.filter_subcfg(cfg[:serializer_methods], only: only)
192
+ cfg[:include] = self.class.filter_subcfg(cfg[:include], fields: only, only: true)
193
+ cfg[:methods] = self.class.filter_subcfg(cfg[:methods], fields: only, only: true)
194
+ cfg[:serializer_methods] = self.class.filter_subcfg(
195
+ cfg[:serializer_methods], fields: only, only: true
196
+ )
196
197
  end
197
198
  end
198
199
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregory N. Schmit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-15 00:00:00.000000000 Z
11
+ date: 2022-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails