safrano 0.8.1 → 0.8.2
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 +4 -4
- data/lib/core_ext/MatchData/matchlen.rb +14 -0
- data/lib/core_ext/matchdata.rb +3 -0
- data/lib/odata/complex_type.rb +1 -2
- data/lib/odata/entity.rb +0 -1
- data/lib/odata/error.rb +8 -0
- data/lib/odata/model_ext.rb +3 -3
- data/lib/safrano/rack_app.rb +13 -0
- data/lib/safrano/service.rb +54 -5
- data/lib/safrano/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e43512da576932288321a8e821e26fa9c70d578f52562f6a343bfe3c3711bae
|
4
|
+
data.tar.gz: e2c00621b792634355f99d2025fada0d05cd44666516d916aa2546fb72f5157f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ff433c52ec4406198b0988e122213f0af36a8f1a06b2eb1d2ebfc2c3736db5f8c575fa86e04b8ac9801d4d4fb363edc468c3078b3f93c66313497739ffc3c2e
|
7
|
+
data.tar.gz: 59ebba62c9a7e81496a651473fa9469d843409dab4c1703221f897425136fe02439ea400e17124a910de599378056b7b21758815d734c9807778193c791e3286
|
data/lib/odata/complex_type.rb
CHANGED
@@ -215,10 +215,9 @@ module Safrano
|
|
215
215
|
# needed for nested json output
|
216
216
|
# this is a simpler version of model_ext#output_template
|
217
217
|
def self.default_template
|
218
|
-
template = {}
|
218
|
+
template = { meta: EMPTYH, all_values: EMPTYH }
|
219
219
|
expand_e = {}
|
220
220
|
|
221
|
-
template[:all_values] = EMPTYH
|
222
221
|
@props.each do |prop, kl|
|
223
222
|
expand_e[prop] = kl.default_template if kl.respond_to? :default_template
|
224
223
|
end
|
data/lib/odata/entity.rb
CHANGED
@@ -217,7 +217,6 @@ module Safrano
|
|
217
217
|
def odata_patch(req)
|
218
218
|
req.with_parsed_data(self.class) do |data|
|
219
219
|
data.delete('__metadata')
|
220
|
-
|
221
220
|
# validate payload column names
|
222
221
|
if (invalid = self.class.invalid_hash_data?(data))
|
223
222
|
::Safrano::Request::ON_CGST_ERROR.call(req)
|
data/lib/odata/error.rb
CHANGED
@@ -46,6 +46,14 @@ module Safrano
|
|
46
46
|
super(msg, symbname)
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
# invalid response format option
|
51
|
+
class InvalidRespFormatOption < NameError
|
52
|
+
def initialize(opt)
|
53
|
+
msg = "Invalid response format option: #{opt}"
|
54
|
+
super(msg, opt.to_s)
|
55
|
+
end
|
56
|
+
end
|
49
57
|
end
|
50
58
|
|
51
59
|
# used in function import error handling. cf. func import / do_execute_func
|
data/lib/odata/model_ext.rb
CHANGED
@@ -236,9 +236,9 @@ module Safrano
|
|
236
236
|
def output_template(expand_list:,
|
237
237
|
select: Safrano::SelectBase::ALL)
|
238
238
|
|
239
|
-
return @default_template if expand_list.empty? && select.all_props?
|
239
|
+
return @default_template.dup if expand_list.empty? && select.all_props?
|
240
240
|
|
241
|
-
template = {}
|
241
|
+
template = { meta: EMPTYH }
|
242
242
|
expand_e = {}
|
243
243
|
expand_c = {}
|
244
244
|
deferr = []
|
@@ -364,7 +364,7 @@ module Safrano
|
|
364
364
|
EMPTYH = {}.freeze
|
365
365
|
|
366
366
|
def build_default_template
|
367
|
-
@default_template = { all_values: EMPTYH }
|
367
|
+
@default_template = { meta: EMPTYH, all_values: EMPTYH }
|
368
368
|
@default_template[:deferr] = (@nav_entity_attribs&.keys || []) + (@nav_collection_attribs&.keys || EMPTY_ARRAY) if @nav_entity_attribs || @nav_collection_attribs
|
369
369
|
end
|
370
370
|
|
data/lib/safrano/rack_app.rb
CHANGED
@@ -22,6 +22,13 @@ module Safrano
|
|
22
22
|
Safrano::Request.new(env, @service_base).process
|
23
23
|
end
|
24
24
|
|
25
|
+
# needed for testing only ? try to remove this
|
26
|
+
def self.copy(other)
|
27
|
+
copy = Class.new(Safrano::ServerApp) # <---- !!!
|
28
|
+
copy.set_servicebase(other.get_service_base.dup)
|
29
|
+
copy
|
30
|
+
end
|
31
|
+
|
25
32
|
# needed for testing only ? try to remove this
|
26
33
|
def self.enable_batch
|
27
34
|
@service_base.enable_batch
|
@@ -32,6 +39,12 @@ module Safrano
|
|
32
39
|
@service_base.path_prefix path_pr
|
33
40
|
end
|
34
41
|
|
42
|
+
# needed for testing only ? try to remove this
|
43
|
+
|
44
|
+
def self.response_format_options(*args)
|
45
|
+
@service_base.response_format_options(*args)
|
46
|
+
end
|
47
|
+
|
35
48
|
# needed for testing only ? try to remove this
|
36
49
|
def self.get_service_base
|
37
50
|
@service_base
|
data/lib/safrano/service.rb
CHANGED
@@ -12,8 +12,12 @@ require 'set'
|
|
12
12
|
require 'odata/collection'
|
13
13
|
|
14
14
|
module Safrano
|
15
|
-
#
|
15
|
+
# these modules have all methods related to expand/defered output preparation
|
16
16
|
# and will be included in Service class
|
17
|
+
|
18
|
+
METADATA_K = '__metadata'
|
19
|
+
EMPTYH = {}.freeze
|
20
|
+
|
17
21
|
module ExpandHandler
|
18
22
|
PATH_SPLITTER = %r{\A(\w+)/?(.*)\z}.freeze
|
19
23
|
DEFERRED = '__deferred'
|
@@ -40,14 +44,17 @@ module Safrano
|
|
40
44
|
{ uri: entity.uri }
|
41
45
|
end
|
42
46
|
|
43
|
-
EMPTYH = {}.freeze
|
44
|
-
METADATA_K = '__metadata'
|
45
47
|
def get_entity_odata_h(entity:, template:)
|
46
|
-
|
47
|
-
|
48
|
+
hres = {}
|
49
|
+
# finalise the template according to options
|
50
|
+
# (eg. skip metadata and or deferred...)
|
51
|
+
@final_template_func.call(template)
|
48
52
|
|
49
53
|
template.each do |elmt, arg|
|
50
54
|
case elmt
|
55
|
+
when :meta
|
56
|
+
hres[METADATA_K] = entity.metadata_h
|
57
|
+
|
51
58
|
when :all_values
|
52
59
|
hres.merge! entity.casted_values
|
53
60
|
|
@@ -143,6 +150,8 @@ module Safrano
|
|
143
150
|
attr_accessor :function_imports
|
144
151
|
attr_accessor :function_import_keys
|
145
152
|
attr_accessor :type_mappings
|
153
|
+
attr_accessor :final_template_func
|
154
|
+
attr_accessor :response_format_options
|
146
155
|
|
147
156
|
# Instance attributes for specialized Version specific Instances
|
148
157
|
attr_accessor :v1
|
@@ -151,6 +160,12 @@ module Safrano
|
|
151
160
|
# TODO: more elegant design
|
152
161
|
attr_reader :data_service_version
|
153
162
|
|
163
|
+
# for response format options
|
164
|
+
FINAL_TEMPLATE_FUNC_DEFAULT = ->(_template) {}
|
165
|
+
FINAL_TEMPLATE_FUNC_SKIP_META = ->(template) { template.delete(:meta) }
|
166
|
+
FINAL_TEMPLATE_FUNC_SKIP_DEFERR = ->(template) { template.delete(:deferr) }
|
167
|
+
FINAL_TEMPLATE_FUNC_SKIP_META_DEFERR = ->(template) { template.delete(:meta); template.delete(:deferr) }
|
168
|
+
|
154
169
|
def initialize(&block)
|
155
170
|
# Warning: if you add attributes here, you shall need add them
|
156
171
|
# in copy_attribs_to as well
|
@@ -164,6 +179,8 @@ module Safrano
|
|
164
179
|
@function_import_keys = []
|
165
180
|
@cmap = {}
|
166
181
|
@type_mappings = {}
|
182
|
+
@response_format_options = []
|
183
|
+
@final_template_func = FINAL_TEMPLATE_FUNC_DEFAULT
|
167
184
|
# enabled per default starting from 0.6
|
168
185
|
@bugfix_create_response = true
|
169
186
|
instance_eval(&block) if block_given?
|
@@ -214,12 +231,42 @@ module Safrano
|
|
214
231
|
(@v2.xserver_url = @xserver_url) if @v2
|
215
232
|
end
|
216
233
|
|
234
|
+
VALID_RESP_FORMAT_OPTS = [:skip_deferred, :skip_metadata]
|
235
|
+
def valid_resp_format_options(*args)
|
236
|
+
args.map!(&:to_sym)
|
237
|
+
args.each { |arg|
|
238
|
+
raise API::InvalidRespFormatOption.new(arg) unless VALID_RESP_FORMAT_OPTS.include?(arg)
|
239
|
+
}
|
240
|
+
yield(args)
|
241
|
+
end
|
242
|
+
|
243
|
+
def response_format_options(*args)
|
244
|
+
valid_resp_format_options(*args) do |vargs|
|
245
|
+
@response_format_options = vargs.dup
|
246
|
+
process_response_format_options
|
247
|
+
@v1.response_format_options(*vargs) if @v1
|
248
|
+
@v2.response_format_options(*vargs) if @v2
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
217
252
|
# keep the bug active for now, but allow to de-activate the fix
|
218
253
|
def bugfix_create_response(bool)
|
219
254
|
@bugfix_create_response = bool
|
220
255
|
end
|
221
256
|
|
222
257
|
# end public API
|
258
|
+
def process_response_format_options
|
259
|
+
@final_template_func = if (@response_format_options.include?(:skip_metadata) &&
|
260
|
+
@response_format_options.include?(:skip_deferred))
|
261
|
+
FINAL_TEMPLATE_FUNC_SKIP_META_DEFERR
|
262
|
+
elsif @response_format_options.include?(:skip_metadata)
|
263
|
+
FINAL_TEMPLATE_FUNC_SKIP_META
|
264
|
+
elsif @response_format_options.include?(:skip_deferred)
|
265
|
+
FINAL_TEMPLATE_FUNC_SKIP_DEFERR
|
266
|
+
else
|
267
|
+
FINAL_TEMPLATE_FUNC_DEFAULT
|
268
|
+
end
|
269
|
+
end
|
223
270
|
|
224
271
|
def set_uribase
|
225
272
|
@uribase = if @xpath_prefix.empty?
|
@@ -250,6 +297,8 @@ module Safrano
|
|
250
297
|
other.function_imports = @function_imports
|
251
298
|
other.function_import_keys = @function_import_keys
|
252
299
|
other.type_mappings = @type_mappings
|
300
|
+
other.response_format_options = @response_format_options
|
301
|
+
other.final_template_func = @final_template_func
|
253
302
|
other.bugfix_create_response(@bugfix_create_response)
|
254
303
|
other
|
255
304
|
end
|
data/lib/safrano/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: safrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- oz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -187,6 +187,7 @@ files:
|
|
187
187
|
- lib/core_ext/Dir/iter.rb
|
188
188
|
- lib/core_ext/Hash/transform.rb
|
189
189
|
- lib/core_ext/Integer/edm.rb
|
190
|
+
- lib/core_ext/MatchData/matchlen.rb
|
190
191
|
- lib/core_ext/Numeric/convert.rb
|
191
192
|
- lib/core_ext/REXML/Document/output.rb
|
192
193
|
- lib/core_ext/String/convert.rb
|
@@ -197,6 +198,7 @@ files:
|
|
197
198
|
- lib/core_ext/dir.rb
|
198
199
|
- lib/core_ext/hash.rb
|
199
200
|
- lib/core_ext/integer.rb
|
201
|
+
- lib/core_ext/matchdata.rb
|
200
202
|
- lib/core_ext/numeric.rb
|
201
203
|
- lib/core_ext/rexml.rb
|
202
204
|
- lib/core_ext/string.rb
|