safrano 0.6.4 → 0.6.6

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: 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