safrano 0.6.4 → 0.6.6
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/odata/complex_type.rb +7 -4
- data/lib/odata/error.rb +17 -0
- data/lib/odata/filter/token.rb +1 -1
- data/lib/odata/function_import.rb +17 -0
- data/lib/odata/request/json.rb +2 -5
- data/lib/safrano/service.rb +2 -2
- data/lib/safrano/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0108c5a48b2cbd994534ba6732f760dec8f8e8becac690d91b3f1960dd6f7836'
|
4
|
+
data.tar.gz: c9b8c3c8a7f7ac3d7db5a12133ba3fdcd4815df5b3dab1d35bfaf449518f8d2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0068c08576a0d8df023d6990ad691ce73b1d3abd6f3a9cd095b7ae2f9358dc7d33d7ed5d0fdde2503a2829ebeb11ab126961a39d34d12370befbb5814904f7b1'
|
7
|
+
data.tar.gz: cbf6fbdd2d1f4a24ba58b14490dfcfc87e1ffc333ab52b0e334b06742679543a794359f16093f56cc78e7a754724ee3e24f70ec7b7277d3ce6d04af3d1f9ae5f
|
data/lib/odata/complex_type.rb
CHANGED
@@ -81,8 +81,12 @@ module Safrano
|
|
81
81
|
end
|
82
82
|
|
83
83
|
# needed for ComplexType result
|
84
|
-
def to_odata_json(
|
85
|
-
|
84
|
+
def to_odata_json(req)
|
85
|
+
t = self.class.klassmod.output_template
|
86
|
+
innerh = req.service.get_entity_odata_h(entity: @value, template: t)
|
87
|
+
innerj = innerh.to_json
|
88
|
+
|
89
|
+
"#{DJ_OPEN}#{innerj}#{DJ_CLOSE}"
|
86
90
|
end
|
87
91
|
|
88
92
|
# wrapper
|
@@ -105,7 +109,6 @@ module Safrano
|
|
105
109
|
end
|
106
110
|
|
107
111
|
def to_odata_json(req)
|
108
|
-
# "#{DJ_OPEN}#{{ RESULTSK => coll.map { |c| c.odata_h } }.to_json}#{DJ_CLOSE}"
|
109
112
|
template = self.class.klassmod.output_template
|
110
113
|
# TODO: Error handling if database contains binary BLOB data that cant be
|
111
114
|
# interpreted as UTF-8 then JSON will fail here
|
@@ -226,7 +229,7 @@ module Safrano
|
|
226
229
|
end
|
227
230
|
|
228
231
|
def self.type_name
|
229
|
-
|
232
|
+
namespace ? "#{namespace}.#{self}" : to_s
|
230
233
|
end
|
231
234
|
|
232
235
|
def initialize
|
data/lib/odata/error.rb
CHANGED
@@ -48,6 +48,13 @@ module Safrano
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
# used in function import error handling. cf. func import / do_execute_func
|
52
|
+
def self.with_error(result)
|
53
|
+
if result.respond_to?(:error) && (err = result.error)
|
54
|
+
yield err
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
51
58
|
# base module for HTTP errors, when used as a Error Class
|
52
59
|
module ErrorClass
|
53
60
|
include ::Safrano::Contract::Invalid
|
@@ -94,10 +101,20 @@ module Safrano
|
|
94
101
|
# generic http 500 server err
|
95
102
|
class ServerError
|
96
103
|
extend ErrorClass
|
104
|
+
include ErrorInstance
|
97
105
|
HTTP_CODE = 500
|
98
106
|
@msg = 'Server error'
|
99
107
|
end
|
100
108
|
|
109
|
+
class ServiceOperationError
|
110
|
+
extend ErrorClass
|
111
|
+
include ErrorInstance
|
112
|
+
HTTP_CODE = 500
|
113
|
+
def initialize(msg:, sopname: nil)
|
114
|
+
@msg = "Error in service operation #{sopname}: #{msg}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
101
118
|
# for outputing Sequel exceptions that we could not prevent
|
102
119
|
class SequelExceptionError < ServerError
|
103
120
|
include ErrorInstance
|
data/lib/odata/filter/token.rb
CHANGED
@@ -18,6 +18,7 @@ module Safrano
|
|
18
18
|
def initialize(name)
|
19
19
|
@name = name
|
20
20
|
@http_method = 'GET'
|
21
|
+
@use_contract = false
|
21
22
|
end
|
22
23
|
|
23
24
|
def allowed_transitions
|
@@ -52,6 +53,10 @@ module Safrano
|
|
52
53
|
end
|
53
54
|
alias auto_query_params auto_query_parameters
|
54
55
|
|
56
|
+
def use_contract
|
57
|
+
@use_contract = true
|
58
|
+
end
|
59
|
+
|
55
60
|
def return(klassmod, &proc)
|
56
61
|
raise('Please provide a code block') unless block_given?
|
57
62
|
|
@@ -159,6 +164,18 @@ module Safrano
|
|
159
164
|
def do_execute_func(req)
|
160
165
|
with_transition_validated(req) do
|
161
166
|
result = @proc.call(**@funcparams)
|
167
|
+
|
168
|
+
# (application-)error handling
|
169
|
+
# the result is an Error object or class
|
170
|
+
|
171
|
+
# Note: Sequel::Error exceptions are already
|
172
|
+
# handled on rack app level (cf. the call methode )
|
173
|
+
Safrano::with_error(result) do |error|
|
174
|
+
@error = error
|
175
|
+
return [nil, :error, @error] # this is return from do_execute_func !
|
176
|
+
end
|
177
|
+
|
178
|
+
# non error case
|
162
179
|
[@returning.do_execute_func_result(result, req, @auto_query_params), :run]
|
163
180
|
end
|
164
181
|
end
|
data/lib/odata/request/json.rb
CHANGED
@@ -14,12 +14,9 @@ module Safrano
|
|
14
14
|
|
15
15
|
def self.cast_values_in(resd, typ)
|
16
16
|
typ.db_schema.each do |f, props|
|
17
|
-
metadata = typ.cols_metadata[f]
|
18
|
-
|
19
17
|
case props[:type]
|
20
18
|
when :datetime, :date
|
21
19
|
fstr = f.to_s
|
22
|
-
# resd[fstr] = Time.parse(resd[f]) if resd[fstr]
|
23
20
|
resd[fstr] = Sequel.datetime_class.from_edm_json(resd[fstr]) if resd[fstr]
|
24
21
|
end
|
25
22
|
end
|
@@ -48,7 +45,7 @@ module Safrano
|
|
48
45
|
|
49
46
|
if (defered = resd[:__deferred])
|
50
47
|
defered.symbolize_keys!
|
51
|
-
elsif meta = resd[:__metadata]
|
48
|
+
elsif (meta = resd[:__metadata])
|
52
49
|
meta.symbolize_keys!
|
53
50
|
|
54
51
|
# type is normally namespaced ! --> split.last is the class
|
@@ -101,7 +98,7 @@ module Safrano
|
|
101
98
|
|
102
99
|
if (defered = resd[:__deferred])
|
103
100
|
defered.symbolize_keys!
|
104
|
-
elsif meta = resd[:__metadata]
|
101
|
+
elsif (meta = resd[:__metadata])
|
105
102
|
meta.symbolize_keys!
|
106
103
|
|
107
104
|
typ = get_class_from_meta(meta)
|
data/lib/safrano/service.rb
CHANGED
@@ -337,7 +337,7 @@ module Safrano
|
|
337
337
|
end
|
338
338
|
|
339
339
|
def function_import(name_p)
|
340
|
-
name =
|
340
|
+
name = name_p.to_s
|
341
341
|
funcimp = Safrano::FunctionImport(name)
|
342
342
|
@function_imports[name] = funcimp
|
343
343
|
@function_import_keys << name
|
@@ -366,7 +366,7 @@ module Safrano
|
|
366
366
|
|
367
367
|
# need to be sorted by size too
|
368
368
|
def set_funcimports_sorted
|
369
|
-
@function_import_keys.sort_by!
|
369
|
+
@function_import_keys.sort_by!(&:size).reverse!
|
370
370
|
end
|
371
371
|
# to be called at end of publishing block to ensure we get the right names
|
372
372
|
# and additionally build the list of valid attribute path's used
|
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.6.
|
4
|
+
version: 0.6.6
|
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: 2023-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|