isomorfeus-operation 1.0.0.zeta14 → 1.0.0.zeta15

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: 38fb10ba79914eb1e48b5e42a16bd50ead01a862cda25cd85b45f098b7faf440
4
- data.tar.gz: 383b277430ae8bc41536d001debb2f9af02800d43757742285bd02d4fe7a1930
3
+ metadata.gz: d00f6ffa11f6782136e58a51ba27b03511a8401c9a582c7a195db27e6dd74dd4
4
+ data.tar.gz: bf17412a17c7dd68d6daddea536e854fe85ee1c938eb785afaf2a555bc5a85d3
5
5
  SHA512:
6
- metadata.gz: bbbc04b328ab1d6f2dfd4b45ddb093ab6121e57880ef3b113ab2be61126ea1eeb5f02cefbf581f5e5b7f4510327408d6f8cde02928a08a0a83575f89ff610807
7
- data.tar.gz: 23eec974042c13993bb05f96bd3acc43e65b7a5d0d64e9fbf8203a967c2304918995b6355db3629a92032c823c3307b1192550919420036bade7598bb96e9114
6
+ metadata.gz: 43ae731325bef3667ad4520cc27f11a9a75c2c9f4a16506edd5395c3228409e589512d13065532c13dcc385a2514ee4f59ea068fdfde1fe8c607722a5aad68ad
7
+ data.tar.gz: e6210ac995463e6c44505fa2dd7be525565300e32c70458facfcbd4814b9db37863bc9b42ea3b9b0aa2f731628681d1e0dfb1c9c693d912367106446cb0e62ab
data/README.md CHANGED
@@ -6,53 +6,11 @@ Operations for Isomorfeus.
6
6
  At the [Isomorfeus Framework Project](http://isomorfeus.com)
7
7
 
8
8
  ### Usage
9
- there are 3 kinds of Operations:
10
- - LucidQuickOp
11
- - LucidOperation
12
- - LucidLocalOperation
9
+ Operations use Props like other parts of the system.
10
+ See [the isomorfeus-react props documentation](https://github.com/isomorfeus/isomorfeus-react/blob/master/ruby/docs/props.md#prop-declaration).
13
11
 
14
- ```ruby
15
- class MyQuickOp < LucidQuickOp::Base
16
- prop :a_prop
12
+ There are 3 kinds of Operations:
13
+ - [LucidQuickOp](https://github.com/isomorfeus/isomorfeus-project/blob/master/ruby/isomorfeus-operation/docs/quick_op.md) - Quick simple operation, always executed on the server.
14
+ - [LucidOperation](https://github.com/isomorfeus/isomorfeus-project/blob/master/ruby/isomorfeus-operation/docs/operation.md) - For complex multi-stepped operations, always executed on the server.
15
+ - [LucidLocalOperation](https://github.com/isomorfeus/isomorfeus-project/blob/master/ruby/isomorfeus-operation/docs/operation.md) - For complex multi-stepped operations, always executed locally.
17
16
 
18
- op do
19
- props.a_prop == 'a_value'
20
- # do something
21
- end
22
- end
23
-
24
- MyQuickOp.promise_run(a_prop: 'a_value')
25
-
26
- # or
27
-
28
- MyQuickOp.promise_run(props: { a_prop: 'a_value' })
29
- ```
30
-
31
- Quick remote procedure call, always executed on the server.
32
- LucidOperation too is always executed on the Server. It allows to define Operations in gherkin human language style:
33
- ```ruby
34
- class MyOperation < LucidOperation::Base
35
- prop :a_prop
36
-
37
- procedure <<~TEXT
38
- Given a bird
39
- When it flies
40
- Then be happy
41
- TEXT
42
-
43
- Given /a bird/ do
44
- props.a_prop == 'a_value'
45
- end
46
-
47
- # etc ...
48
- end
49
-
50
- MyOperation.promise_run(a_prop: 'a_value')
51
-
52
- # or
53
-
54
- MyOperation.promise_run(props: { a_prop: 'a_value' })
55
- ```
56
-
57
- LucidLocalOperation is the same as LucidOperation, except its always executed locally, wherever that may be.
58
- Its barely tested so far and no other docs.
@@ -10,13 +10,19 @@ module Isomorfeus
10
10
  if Isomorfeus.valid_operation_class_name?(operation_class_name)
11
11
  operation_class = Isomorfeus.cached_operation_class(operation_class_name)
12
12
  if operation_class
13
- props_json = response_agent.request[operation_class_name]
13
+ props = response_agent.request[operation_class_name]
14
+ props.transform_keys!(&:to_sym)
14
15
  begin
15
- props = Oj.load(props_json, mode: :strict)
16
16
  if Isomorfeus.current_user.authorized?(operation_class, :promise_run, props)
17
- operation_promise = operation_class.promise_run(props)
17
+ operation_promise = operation_class.promise_run(**props)
18
18
  if operation_promise.realized?
19
- response_agent.agent_result = { success: 'ok' , result: operation_promise.value }
19
+ state = operation_promise.resolved? ? :resolved : :rejected
20
+ result_hash = { state => operation_promise.value }
21
+ if operation_promise.error
22
+ e = operation_promise.error
23
+ result_hash[:error] = { message: e.message, class_name: e.class.to_s, back_trace: e.backtrace }
24
+ end
25
+ response_agent.agent_result = { success: 'ok' , result: result_hash }
20
26
  else
21
27
  start = Time.now
22
28
  timeout = false
@@ -30,7 +36,13 @@ module Isomorfeus
30
36
  if timeout
31
37
  response_agent.error = { error: 'Timeout' }
32
38
  else
33
- response_agent.agent_result = { success: 'ok' , result: operation_promise.value }
39
+ state = operation_promise.resolved? ? :resolved : :rejected
40
+ result_hash = { state => operation_promise.value }
41
+ if operation_promise.error
42
+ e = operation_promise.error
43
+ result_hash[:error] = { message: e.message, class_name: e.class.to_s, back_trace: e.backtrace }
44
+ end
45
+ response_agent.agent_result = { success: 'ok' , result: result_hash }
34
46
  end
35
47
  end
36
48
  else
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Operation
3
- VERSION = '1.0.0.zeta14'
3
+ VERSION = '1.0.0.zeta15'
4
4
  end
5
5
  end
@@ -14,17 +14,20 @@ module LucidLocalOperation
14
14
  base.include(LucidOperation::PromiseRun)
15
15
 
16
16
  base.instance_exec do
17
- def promise_run(props_hash = nil, props: nil)
18
- props_hash = props_hash || props
19
- validate_props(props_hash)
20
- self.new(props_hash).promise_run
17
+ def promise_run(**props_hash)
18
+ self.new(**props_hash).promise_run
21
19
  end
22
20
  end
23
21
  end
24
22
 
25
- attr_accessor :props
23
+ attr_reader :props
26
24
  attr_accessor :step_result
27
25
 
26
+ def initialize(**props_hash)
27
+ props_hash = self.class.validated_props(props_hash)
28
+ @props = LucidProps.new(props_hash)
29
+ end
30
+
28
31
  def current_user
29
32
  Isomorfeus.current_user
30
33
  end
@@ -36,14 +36,10 @@ module LucidOperation
36
36
  @finally_defined = true
37
37
  end
38
38
 
39
- def promise_run(props_hash = nil)
40
- props_hash = props_hash || props
41
- validate_props(props_hash)
42
- props_json = Isomorfeus::PropsProxy.new(props_hash).to_json
43
- Isomorfeus::Transport.promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.name, props_json).then do |agent|
44
- if agent.processed
45
- agent.result
46
- else
39
+ def promise_run(**props_hash)
40
+ props = validated_props(props_hash)
41
+ Isomorfeus::Transport.promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.name, props).then do |agent|
42
+ unless agent.processed
47
43
  agent.processed = true
48
44
  if agent.response.key?(:error)
49
45
  `console.error(#{agent.response[:error].to_n})`
@@ -51,6 +47,20 @@ module LucidOperation
51
47
  end
52
48
  agent.result = agent.response[:result]
53
49
  end
50
+ if agent.result.key?(:rejected)
51
+ if agent.result.key?(:error)
52
+ e = agent.result[:error]
53
+ exception_class_name = e[:class_name]
54
+ exception_class = exception_class_name.constantize
55
+ exception = exception_class.new(e[:message])
56
+ exception.set_backtrace(e[:backtrace])
57
+ raise exception
58
+ else
59
+ raise agent.result[:rejected]
60
+ end
61
+ else
62
+ agent.result[:resolved]
63
+ end
54
64
  end
55
65
  end
56
66
  end
@@ -60,16 +70,19 @@ module LucidOperation
60
70
  base.include(LucidOperation::PromiseRun)
61
71
 
62
72
  base.instance_exec do
63
- def promise_run(props_hash = nil)
64
- props_hash = props_hash || props
65
- validate_props(props_hash)
66
- self.new(props_hash).promise_run
73
+ def promise_run(**props_hash)
74
+ self.new(**props_hash).promise_run
67
75
  end
68
76
  end
69
77
 
70
- attr_accessor :props
78
+ attr_reader :props
71
79
  attr_accessor :step_result
72
80
 
81
+ def initialize(**props_hash)
82
+ props_hash = self.class.validated_props(props_hash)
83
+ @props = LucidProps.new(props_hash)
84
+ end
85
+
73
86
  def current_user
74
87
  Isomorfeus.current_user
75
88
  end
@@ -1,9 +1,5 @@
1
1
  module LucidOperation
2
2
  module PromiseRun
3
- def initialize(validated_props_hash)
4
- @props = Isomorfeus::PropsProxy.new(validated_props_hash)
5
- end
6
-
7
3
  def promise_run
8
4
  promise = Promise.new
9
5
  original_promise = promise
@@ -55,10 +51,7 @@ module LucidOperation
55
51
  if match_data
56
52
  matched = true
57
53
 
58
- promise = promise.then do |result|
59
- operation.step_result = result
60
- operation.instance_exec(*match_data, &step[1])
61
- end.fail do |result|
54
+ promise = promise.ensure do |result|
62
55
  operation.step_result = result
63
56
  operation.instance_exec(*match_data, &step[1])
64
57
  end
@@ -8,14 +8,10 @@ module LucidQuickOp
8
8
  def op
9
9
  end
10
10
 
11
- def promise_run(props_hash = nil)
12
- props_hash = props_hash || props
13
- validate_props(props_hash)
14
- props_json = Isomorfeus::PropsProxy.new(props_hash).to_json
15
- Isomorfeus::Transport.promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.name, props_json).then do |agent|
16
- if agent.processed
17
- agent.result
18
- else
11
+ def promise_run(**props_hash)
12
+ props = validated_props(props_hash)
13
+ Isomorfeus::Transport.promise_send_path('Isomorfeus::Operation::Handler::OperationHandler', self.name, props).then do |agent|
14
+ unless agent.processed
19
15
  agent.processed = true
20
16
  if agent.response.key?(:error)
21
17
  `console.error(#{agent.response[:error].to_n})`
@@ -23,6 +19,20 @@ module LucidQuickOp
23
19
  end
24
20
  agent.result = agent.response[:result]
25
21
  end
22
+ if agent.result.key?(:rejected)
23
+ if agent.result.key?(:error)
24
+ e = agent.result[:error]
25
+ exception_class_name = e[:class_name]
26
+ exception_class = exception_class_name.constantize
27
+ exception = exception_class.new(e[:message])
28
+ exception.set_backtrace(e[:backtrace])
29
+ raise exception
30
+ else
31
+ raise agent.result[:rejected]
32
+ end
33
+ else
34
+ agent.result[:resolved]
35
+ end
26
36
  end
27
37
  end
28
38
  end
@@ -34,31 +44,29 @@ module LucidQuickOp
34
44
  @op = block
35
45
  end
36
46
 
37
- def promise_run(props_hash = nil)
38
- props_hash = props_hash || props
39
- validate_props(props_hash)
40
- self.new(props_hash).promise_run
47
+ def promise_run(**props_hash)
48
+ self.new(**props_hash).promise_run
41
49
  end
42
50
  end
43
51
  end
44
52
  end
45
53
 
46
- attr_accessor :props
54
+ attr_reader :props
47
55
 
48
- def initialize(validated_props_hash)
49
- @props = Isomorfeus::PropsProxy.new(validated_props_hash)
50
- @on_fail_track = false
56
+ def initialize(**props_hash)
57
+ props_hash = self.class.validated_props(props_hash)
58
+ @props = LucidProps.new(props_hash)
51
59
  end
52
60
 
53
61
  def promise_run
54
62
  original_promise = Promise.new
55
63
 
56
64
  operation = self
57
- promise = original_promise.then do |result|
58
- operation.instance_exec(&self.class.instance_variable_get(:@op))
65
+ promise = original_promise.then do |_|
66
+ operation.instance_exec(&operation.class.instance_variable_get(:@op))
59
67
  end
60
68
 
61
- original_promise.resolve(true)
69
+ original_promise.resolve
62
70
  promise
63
71
  end
64
72
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-operation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.zeta14
4
+ version: 1.0.0.zeta15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-28 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 16.12.14
75
+ version: 16.12.17
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 16.12.14
82
+ version: 16.12.17
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: isomorfeus-redux
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 1.0.0.zeta14
103
+ version: 1.0.0.zeta15
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 1.0.0.zeta14
110
+ version: 1.0.0.zeta15
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: isomorfeus
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 1.0.0.zeta14
117
+ version: 1.0.0.zeta15
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 1.0.0.zeta14
124
+ version: 1.0.0.zeta15
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: opal-webpack-loader
127
127
  requirement: !ruby/object:Gem::Requirement