safrano 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|