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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ac4c570c39b0419c702aef0756ce4c9687916436d5198f768d8dfdedb9bc5fd
4
- data.tar.gz: 3aac760ce6b4bd5e89750e1540024f531593a4cc627663025322cb0e32d60417
3
+ metadata.gz: '0108c5a48b2cbd994534ba6732f760dec8f8e8becac690d91b3f1960dd6f7836'
4
+ data.tar.gz: c9b8c3c8a7f7ac3d7db5a12133ba3fdcd4815df5b3dab1d35bfaf449518f8d2c
5
5
  SHA512:
6
- metadata.gz: f1e89de14fdacfcd3db0893d0b9e9d00c929da0ba74268d623b235955ed9437e21d2a61454d710886d71aa819625c7ffa8b8f894a69684eace27d51c34d1f05e
7
- data.tar.gz: 954b7c8e764a4c415ba28f34063d7f142876de691cf99c4ce8fc97ad994b2e3adb5faf680cdf4bd7af14b30b6d9a2769fd78fa45ce1b8cc27c7f004bb67a7d51
6
+ metadata.gz: '0068c08576a0d8df023d6990ad691ce73b1d3abd6f3a9cd095b7ae2f9358dc7d33d7ed5d0fdde2503a2829ebeb11ab126961a39d34d12370befbb5814904f7b1'
7
+ data.tar.gz: cbf6fbdd2d1f4a24ba58b14490dfcfc87e1ffc333ab52b0e334b06742679543a794359f16093f56cc78e7a754724ee3e24f70ec7b7277d3ce6d04af3d1f9ae5f
@@ -81,8 +81,12 @@ module Safrano
81
81
  end
82
82
 
83
83
  # needed for ComplexType result
84
- def to_odata_json(_req)
85
- "#{DJ_OPEN}#{@value.odata_h.to_json}#{DJ_CLOSE}"
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
- @namespace ? "#{@namespace}.#{self}" : to_s
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
@@ -69,7 +69,7 @@ module Safrano
69
69
  :Literal
70
70
  when 14
71
71
  :unmatchedQuote
72
- end
72
+ end
73
73
  yield tok, typ
74
74
  break
75
75
  end
@@ -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
@@ -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)
@@ -337,7 +337,7 @@ module Safrano
337
337
  end
338
338
 
339
339
  def function_import(name_p)
340
- name = "#{name_p}"
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! { |k| k.size }.reverse!
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Safrano
4
- VERSION = '0.6.4'
4
+ VERSION = '0.6.6'
5
5
  end
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
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: 2022-12-25 00:00:00.000000000 Z
11
+ date: 2023-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack