isomorfeus-data 1.0.0.zeta14 → 1.0.0.zeta15
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/README.md +1 -0
- data/lib/isomorfeus/data/attribute_support.rb +21 -13
- data/lib/isomorfeus/data/config.rb +41 -37
- data/lib/isomorfeus/data/generic_class_api.rb +20 -42
- data/lib/isomorfeus/data/generic_instance_api.rb +52 -8
- data/lib/isomorfeus/data/handler/generic.rb +25 -5
- data/lib/isomorfeus/data/version.rb +1 -1
- data/lib/isomorfeus-data.rb +1 -0
- data/lib/isomorfeus_data/lucid_data/edge/mixin.rb +1 -1
- data/lib/isomorfeus_data/lucid_data/graph/mixin.rb +2 -2
- data/lib/isomorfeus_data/lucid_data/hash/mixin.rb +15 -15
- data/lib/isomorfeus_data/lucid_data/node/mixin.rb +1 -1
- data/lib/isomorfeus_data/lucid_data/query/mixin.rb +19 -23
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5892f945be6dc4dbca02003669dd3c2a1b21d91a615758100ef0be3d721eacfc
|
4
|
+
data.tar.gz: 657b5dc1d817833c68f97fff026e69e3f85348400bce5bed565a9b8b5a950189
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd5e0a7b0d9e63288238b916225669ed6ae17357145afaa36990d0fc3e908ecf1088f179b93c56bbe1d68ff76ec70164b4a38bab7235ba17bb1b018b6689196a
|
7
|
+
data.tar.gz: 54b1606d43f61b0ecc0d24c0652a89549225f43dff50cd73b8da78f91fb474f85d77b0ba53ce7775953ad25ef5df0af1384f6839ad5e1358c9055ad8610d4a99
|
data/README.md
CHANGED
@@ -22,6 +22,7 @@ Data must then be shaped (usually in to a Hash or Array) to fit the Isomorfeus D
|
|
22
22
|
|
23
23
|
- [Core Concepts](https://github.com/isomorfeus/isomorfeus-project/blob/master/ruby/isomorfeus-data/docs/concepts.md)
|
24
24
|
- [Common API](https://github.com/isomorfeus/isomorfeus-project/blob/master/ruby/isomorfeus-data/docs/common_api.md)
|
25
|
+
- [Data Policy](https://github.com/isomorfeus/isomorfeus-project/blob/master/ruby/isomorfeus-data/docs/data_policy.md)
|
25
26
|
|
26
27
|
### Available Classes
|
27
28
|
|
@@ -102,26 +102,30 @@ module Isomorfeus
|
|
102
102
|
}
|
103
103
|
end
|
104
104
|
|
105
|
-
def
|
105
|
+
def attributes
|
106
106
|
raw_attributes = Redux.fetch_by_path(*@_store_path)
|
107
107
|
hash = Hash.new(raw_attributes)
|
108
108
|
hash.merge!(@_changed_attributes) if @_changed_attributes
|
109
109
|
hash
|
110
110
|
end
|
111
111
|
|
112
|
+
def native_attributes
|
113
|
+
Redux.fetch_by_path(*@_store_path)
|
114
|
+
end
|
115
|
+
|
112
116
|
def _get_selected_attributes
|
113
|
-
|
117
|
+
sel_attributes = attributes.dup
|
114
118
|
if @_selected_attributes && !@_selected_attributes.empty?
|
115
|
-
|
119
|
+
sel_attributes.each_key do |attr|
|
116
120
|
unless @_selected_attributes.include?(attr) || @_selected_attributes.include?(attr)
|
117
|
-
|
121
|
+
sel_attributes.delete(attr)
|
118
122
|
end
|
119
123
|
end
|
120
124
|
end
|
121
125
|
if @_excluded_attributes && !@_excluded_attributes.empty?
|
122
|
-
@_excluded_attributes.each { |attr|
|
126
|
+
@_excluded_attributes.each { |attr| sel_attributes.delete(attr) }
|
123
127
|
end
|
124
|
-
|
128
|
+
sel_attributes
|
125
129
|
end
|
126
130
|
else
|
127
131
|
base.instance_exec do
|
@@ -140,26 +144,30 @@ module Isomorfeus
|
|
140
144
|
end
|
141
145
|
end
|
142
146
|
|
143
|
-
def
|
147
|
+
def attributes
|
148
|
+
@_raw_attributes
|
149
|
+
end
|
150
|
+
|
151
|
+
def native_attributes
|
144
152
|
@_raw_attributes
|
145
153
|
end
|
146
154
|
|
147
155
|
def _get_selected_attributes
|
148
|
-
|
156
|
+
sel_attributes = attributes.transform_keys(&:to_s)
|
149
157
|
self.class.attribute_conditions.each do |attr, options|
|
150
|
-
|
158
|
+
sel_attributes.delete(attr.to_s) if options[:server_only]
|
151
159
|
end
|
152
160
|
if @_selected_attributes && !@_selected_attributes.empty?
|
153
|
-
|
161
|
+
sel_attributes.each_key do |attr|
|
154
162
|
unless @_selected_attributes.include?(attr.to_sym) || @_selected_attributes.include?(attr)
|
155
|
-
|
163
|
+
sel_attributes.delete(attr)
|
156
164
|
end
|
157
165
|
end
|
158
166
|
end
|
159
167
|
if @_excluded_attributes && !@_excluded_attributes.empty?
|
160
|
-
@_excluded_attributes.each { |attr|
|
168
|
+
@_excluded_attributes.each { |attr| sel_attributes.delete(attr.to_s) }
|
161
169
|
end
|
162
|
-
|
170
|
+
sel_attributes
|
163
171
|
end
|
164
172
|
end
|
165
173
|
end
|
@@ -55,43 +55,47 @@ module Isomorfeus
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def prepare_arango_database
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
58
|
+
unless arango_configured?
|
59
|
+
STDOUT.puts "ArangoDB not configured, not preparing things, not using ArangoDB"
|
60
|
+
return
|
61
|
+
end
|
62
|
+
arango_options = if Isomorfeus.production? then Isomorfeus.arango_production
|
63
|
+
elsif Isomorfeus.development? then Isomorfeus.arango_development
|
64
|
+
elsif Isomorfeus.test? then Isomorfeus.arango_test
|
65
|
+
end
|
66
|
+
arango_options = {}.merge(arango_options)
|
67
|
+
database = arango_options.delete(:database)
|
68
|
+
Arango.connect_to(**arango_options)
|
69
|
+
db = nil
|
70
|
+
begin
|
71
|
+
opened_db = Arango.current_server.get_database(database)
|
72
|
+
db = opened_db.name
|
73
|
+
rescue Exception => e
|
74
|
+
db = nil
|
75
|
+
unless e.message.include?('database not found')
|
76
|
+
Isomorfeus.raise_error(message: "Can't check if database '#{database}' exists.")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
unless db
|
80
|
+
begin
|
81
|
+
Arango.current_server.create_database(database)
|
82
|
+
rescue Exception => e
|
83
|
+
Isomorfeus.raise_error(message: "Can't create database '#{database}' (#{e.message}).\nPlease make sure database '#{database}' exists.")
|
84
|
+
end
|
85
|
+
begin
|
86
|
+
Arango.current_server.get_database(database)
|
87
|
+
rescue Exception => e
|
88
|
+
Isomorfeus.raise_error(message: "Can't connect to database '#{database}' (#{e.message}).")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
Arango.current_server.install_opal_module(database)
|
93
|
+
unless Arango.current_database.collection_exist?('IsomorfeusSessions')
|
94
|
+
Arango.current_database.create_collection('IsomorfeusSessions')
|
95
|
+
end
|
96
|
+
unless Arango.current_database.collection_exist?('IsomorfeusObjectStore')
|
97
|
+
Arango.current_database.create_collection('IsomorfeusObjectStore')
|
98
|
+
end
|
95
99
|
end
|
96
100
|
|
97
101
|
def arango_configured?
|
@@ -2,16 +2,6 @@ module Isomorfeus
|
|
2
2
|
module Data
|
3
3
|
module GenericClassApi
|
4
4
|
if RUBY_ENGINE == 'opal'
|
5
|
-
def create(key:, **things)
|
6
|
-
instance = new(key: key, **things)
|
7
|
-
instance.promise_save
|
8
|
-
instance
|
9
|
-
end
|
10
|
-
|
11
|
-
def promise_create(key:, **things)
|
12
|
-
new(key: key, **things).promise_save
|
13
|
-
end
|
14
|
-
|
15
5
|
def destroy(key:)
|
16
6
|
promise_destroy(key: key)
|
17
7
|
true
|
@@ -57,34 +47,12 @@ module Isomorfeus
|
|
57
47
|
end
|
58
48
|
end
|
59
49
|
|
60
|
-
def save(instance:)
|
61
|
-
instance.promise_save
|
62
|
-
instance
|
63
|
-
end
|
64
|
-
|
65
|
-
def promise_save(instance:)
|
66
|
-
instance.promise_save
|
67
|
-
end
|
68
|
-
|
69
50
|
# execute
|
51
|
+
def execute_create(_); end
|
70
52
|
def execute_destroy(_); end
|
71
53
|
def execute_load(_); end
|
72
54
|
def execute_save(_); end
|
73
55
|
else
|
74
|
-
def promise_create(key:, **things)
|
75
|
-
instance = self.create(key: key, **things)
|
76
|
-
result_promise = Promise.new
|
77
|
-
result_promise.resolve(instance)
|
78
|
-
result_promise
|
79
|
-
end
|
80
|
-
|
81
|
-
def promise_destroy(key:)
|
82
|
-
result = self.destroy(key: key)
|
83
|
-
result_promise = Promise.new
|
84
|
-
result_promise.resolve(result)
|
85
|
-
result_promise
|
86
|
-
end
|
87
|
-
|
88
56
|
def destroy(key:)
|
89
57
|
!!instance_exec(key: key, &@_destroy_block)
|
90
58
|
end
|
@@ -104,17 +72,11 @@ module Isomorfeus
|
|
104
72
|
data
|
105
73
|
end
|
106
74
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
return nil unless data
|
111
|
-
Isomorfeus.raise_error(message: "#{self.to_s}: execute_save must return a instance of #{self.to_s} or nil. Returned was: #{data.class}.") if data.class != self
|
112
|
-
data.instance_variable_set(:@previous_key, previous_key) if data.key != previous_key
|
113
|
-
data._unchange!
|
114
|
-
data
|
75
|
+
# execute
|
76
|
+
def execute_create(&block)
|
77
|
+
@_create_block = block
|
115
78
|
end
|
116
79
|
|
117
|
-
# execute
|
118
80
|
def execute_destroy(&block)
|
119
81
|
@_destroy_block = block
|
120
82
|
end
|
@@ -128,6 +90,22 @@ module Isomorfeus
|
|
128
90
|
end
|
129
91
|
end
|
130
92
|
|
93
|
+
def create(key:, **things)
|
94
|
+
new(key: key, **things).create
|
95
|
+
end
|
96
|
+
|
97
|
+
def promise_create(key:, **things)
|
98
|
+
new(key: key, **things).promise_create
|
99
|
+
end
|
100
|
+
|
101
|
+
def save(instance:)
|
102
|
+
instance.save
|
103
|
+
end
|
104
|
+
|
105
|
+
def promise_save(instance:)
|
106
|
+
instance.promise_save
|
107
|
+
end
|
108
|
+
|
131
109
|
def current_user
|
132
110
|
Isomorfeus.current_user
|
133
111
|
end
|
@@ -22,6 +22,37 @@ module Isomorfeus
|
|
22
22
|
Redux.fetch_by_path(*@_store_path) ? true : false
|
23
23
|
end
|
24
24
|
|
25
|
+
def create
|
26
|
+
promise_create
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def promise_create
|
31
|
+
data_hash = { instance: to_transport }
|
32
|
+
data_hash.deep_merge!(included_items: included_items_to_transport) if respond_to?(:included_items_to_transport)
|
33
|
+
class_name = self.class.name
|
34
|
+
Isomorfeus::Transport.promise_send_path( 'Isomorfeus::Data::Handler::Generic', class_name, :create, data_hash).then do |agent|
|
35
|
+
if agent.processed
|
36
|
+
agent.result
|
37
|
+
else
|
38
|
+
agent.processed = true
|
39
|
+
if agent.response.key?(:error)
|
40
|
+
`console.error(#{agent.response[:error].to_n})`
|
41
|
+
Isomorfeus.raise_error(message: agent.response[:error])
|
42
|
+
end
|
43
|
+
data = agent.full_response[:data]
|
44
|
+
if data.key?(class_name) && data[class_name].key?(@key) && data[class_name][@key].key?('new_key')
|
45
|
+
@key = data[class_name][@key]['new_key']
|
46
|
+
@revision = data[class_name][@key]['revision'] if data[class_name][@key].key?('revision')
|
47
|
+
_update_paths
|
48
|
+
end
|
49
|
+
_load_from_store!
|
50
|
+
Isomorfeus.store.dispatch(type: 'DATA_LOAD', data: data)
|
51
|
+
agent.result = self
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
25
56
|
def destroy
|
26
57
|
promise_destroy
|
27
58
|
nil
|
@@ -40,12 +71,6 @@ module Isomorfeus
|
|
40
71
|
self.class.promise_load(@key, self)
|
41
72
|
end
|
42
73
|
|
43
|
-
def save
|
44
|
-
promise_save
|
45
|
-
self
|
46
|
-
end
|
47
|
-
alias create save
|
48
|
-
|
49
74
|
def promise_save
|
50
75
|
data_hash = { instance: to_transport }
|
51
76
|
data_hash.deep_merge!(included_items: included_items_to_transport) if respond_to?(:included_items_to_transport)
|
@@ -71,7 +96,6 @@ module Isomorfeus
|
|
71
96
|
end
|
72
97
|
end
|
73
98
|
end
|
74
|
-
alias promise_create promise_save
|
75
99
|
|
76
100
|
# TODO update -> only send partial change
|
77
101
|
# included_changed_items
|
@@ -80,8 +104,28 @@ module Isomorfeus
|
|
80
104
|
true
|
81
105
|
end
|
82
106
|
|
107
|
+
def create
|
108
|
+
previous_key = self.key
|
109
|
+
instance = instance_exec(&self.class.instance_variable_get(:@_create_block))
|
110
|
+
return nil unless instance
|
111
|
+
Isomorfeus.raise_error(message: "#{self.to_s}: execute_create must return self or nil. Returned was: #{instance.class}.") if instance != self
|
112
|
+
instance_variable_set(:@previous_key, previous_key) if key != previous_key
|
113
|
+
_unchange!
|
114
|
+
self
|
115
|
+
end
|
116
|
+
|
117
|
+
def promise_create
|
118
|
+
promise = Promise.new
|
119
|
+
promise.resolve(create)
|
120
|
+
end
|
121
|
+
|
83
122
|
def save
|
84
|
-
self.
|
123
|
+
previous_key = self.key
|
124
|
+
instance = instance_exec(&self.class.instance_variable_get(:@_save_block))
|
125
|
+
return nil unless instance
|
126
|
+
Isomorfeus.raise_error(message: "#{self.to_s}: execute_save must return self or nil. Returned was: #{instance.class}.") if instance != self
|
127
|
+
instance_variable_set(:@previous_key, previous_key) if key != previous_key
|
128
|
+
_unchange!
|
85
129
|
self
|
86
130
|
end
|
87
131
|
|
@@ -24,6 +24,7 @@ module Isomorfeus
|
|
24
24
|
case action
|
25
25
|
when 'load' then process_load(response_agent, type_class, type_class_name)
|
26
26
|
when 'execute' then process_execute(response_agent, type_class, type_class_name)
|
27
|
+
when 'create' then process_create(response_agent, type_class, type_class_name)
|
27
28
|
when 'save' then process_save(response_agent, type_class, type_class_name)
|
28
29
|
when 'destroy' then process_destroy(response_agent, type_class, type_class_name)
|
29
30
|
else response_agent.error = { error: { action => 'No such thing!' }}
|
@@ -38,6 +39,27 @@ module Isomorfeus
|
|
38
39
|
response_agent.error = { error: "Isomorfeus::Data::Handler::Generic: #{e.message}\n#{e.backtrace.join("\n")}" }
|
39
40
|
end
|
40
41
|
|
42
|
+
def process_create(response_agent, type_class, type_class_name)
|
43
|
+
# 'Isomorfeus::Data::Handler::Generic', self.name, :create, data_hash
|
44
|
+
data = response_agent.request[type_class_name]['save']
|
45
|
+
instance_data = data['instance']
|
46
|
+
included_items_data = data.key?('included_items') ? data['included_items'] : nil
|
47
|
+
if Isomorfeus.current_user.authorized?(type_class, :create, data)
|
48
|
+
instance = type_class.instance_from_transport(instance_data, included_items_data)
|
49
|
+
created_type = instance.create
|
50
|
+
if created_type
|
51
|
+
response_agent.outer_result = {} unless response_agent.outer_result
|
52
|
+
response_agent.outer_result.deep_merge!(data: created_type.to_transport)
|
53
|
+
if created_type.respond_to?(:included_items_to_transport)
|
54
|
+
response_agent.outer_result.deep_merge!(data: created_type.included_items_to_transport)
|
55
|
+
end
|
56
|
+
response_agent.agent_result = { success: 'ok' }
|
57
|
+
else response_agent.error = { error: { type_class_name => 'Create returned nothing!' }}
|
58
|
+
end
|
59
|
+
else response_agent.error = { error: 'Access denied!' }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
41
63
|
def process_load(response_agent, type_class, type_class_name)
|
42
64
|
# 'Isomorfeus::Data::Handler::Generic', self.name, :load, key: key
|
43
65
|
props = response_agent.request[type_class_name]['load']
|
@@ -59,11 +81,9 @@ module Isomorfeus
|
|
59
81
|
|
60
82
|
def process_execute(response_agent, type_class, type_class_name)
|
61
83
|
# 'Isomorfeus::Data::Handler::Generic', self.name, :execute, props_json
|
62
|
-
|
63
|
-
props = Oj.load(props_json, mode: :strict)
|
84
|
+
props = response_agent.request[type_class_name]['execute']
|
64
85
|
props.transform_keys!(&:to_sym)
|
65
|
-
|
66
|
-
if Isomorfeus.current_user.authorized?(type_class, :execute, props[:props])
|
86
|
+
if Isomorfeus.current_user.authorized?(type_class, :execute, props)
|
67
87
|
queried_type = type_class.execute(**props)
|
68
88
|
if queried_type
|
69
89
|
response_agent.outer_result = {} unless response_agent.outer_result
|
@@ -85,7 +105,7 @@ module Isomorfeus
|
|
85
105
|
included_items_data = data.key?('included_items') ? data['included_items'] : nil
|
86
106
|
if Isomorfeus.current_user.authorized?(type_class, :save, data)
|
87
107
|
instance = type_class.instance_from_transport(instance_data, included_items_data)
|
88
|
-
saved_type =
|
108
|
+
saved_type = instance.save
|
89
109
|
if saved_type
|
90
110
|
response_agent.outer_result = {} unless response_agent.outer_result
|
91
111
|
response_agent.outer_result.deep_merge!(data: saved_type.to_transport)
|
data/lib/isomorfeus-data.rb
CHANGED
@@ -402,7 +402,7 @@ module LucidData
|
|
402
402
|
hash.each do |name, value|
|
403
403
|
namsy = name.to_sym
|
404
404
|
nodes_edges[namsy] = []
|
405
|
-
|
405
|
+
value.each do |sid|
|
406
406
|
node_class_name = sid[0]
|
407
407
|
node_key = sid[1]
|
408
408
|
Isomorfeus.raise_error(message: "#{self.name}: #{node_class_name}: Not a valid LucidData class!") unless Isomorfeus.valid_data_class_name?(node_class_name)
|
@@ -411,7 +411,7 @@ module LucidData
|
|
411
411
|
Isomorfeus.raise_error(message: "#{self.name}: #{node_class_name}: Cannot get class!") unless node_class
|
412
412
|
node = node_class.instance_from_transport({ node_class_name => { node_key => included_items_data[node_class_name][node_key] }}, included_items_data)
|
413
413
|
Isomorfeus.raise_error(message: "#{self.name}: #{node_class_name} with key #{node_key} could not be extracted from transport data!") unless node
|
414
|
-
nodes_edges[namsy] << node
|
414
|
+
nodes_edges[hash_index][namsy] << node
|
415
415
|
end
|
416
416
|
end
|
417
417
|
end
|
@@ -114,7 +114,7 @@ module LucidData
|
|
114
114
|
result
|
115
115
|
end
|
116
116
|
|
117
|
-
def
|
117
|
+
def attributes
|
118
118
|
raw_attributes = Redux.fetch_by_path(*@_store_path)
|
119
119
|
hash = ::Hash.new(raw_attributes)
|
120
120
|
hash.merge!(@_changed_attributes) if @_changed_attributes
|
@@ -135,7 +135,7 @@ module LucidData
|
|
135
135
|
end
|
136
136
|
|
137
137
|
def each(&block)
|
138
|
-
|
138
|
+
attributes.each(&block)
|
139
139
|
end
|
140
140
|
|
141
141
|
def [](name)
|
@@ -152,7 +152,7 @@ module LucidData
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def compact!
|
155
|
-
result =
|
155
|
+
result = attributes.compact!
|
156
156
|
return nil if result.nil?
|
157
157
|
@_changed_attributes = result
|
158
158
|
changed!
|
@@ -160,7 +160,7 @@ module LucidData
|
|
160
160
|
end
|
161
161
|
|
162
162
|
def delete(name)
|
163
|
-
hash =
|
163
|
+
hash = attributes
|
164
164
|
result = hash.delete(name)
|
165
165
|
@_changed_attributes = hash
|
166
166
|
changed!
|
@@ -168,7 +168,7 @@ module LucidData
|
|
168
168
|
end
|
169
169
|
|
170
170
|
def delete_if(&block)
|
171
|
-
hash =
|
171
|
+
hash = attributes
|
172
172
|
result = hash.delete_if(&block)
|
173
173
|
@_changed_attributes = hash
|
174
174
|
changed!
|
@@ -187,7 +187,7 @@ module LucidData
|
|
187
187
|
return @_default unless @_default_proc
|
188
188
|
@_default_proc.call(self, method_name)
|
189
189
|
else
|
190
|
-
hash =
|
190
|
+
hash = attributes
|
191
191
|
hash.send(name, *args, &block)
|
192
192
|
end
|
193
193
|
end
|
@@ -198,7 +198,7 @@ module LucidData
|
|
198
198
|
alias has_key? key?
|
199
199
|
|
200
200
|
def keep_if(&block)
|
201
|
-
raw_hash =
|
201
|
+
raw_hash = attributes
|
202
202
|
raw_hash.keep_if(&block)
|
203
203
|
@_changed_attributes = raw_hash
|
204
204
|
changed!
|
@@ -206,13 +206,13 @@ module LucidData
|
|
206
206
|
end
|
207
207
|
|
208
208
|
def merge!(*args)
|
209
|
-
@_changed_attributes =
|
209
|
+
@_changed_attributes = attributes.merge!(*args)
|
210
210
|
changed!
|
211
211
|
self
|
212
212
|
end
|
213
213
|
|
214
214
|
def reject!(&block)
|
215
|
-
hash =
|
215
|
+
hash = attributes
|
216
216
|
result = hash.reject!(&block)
|
217
217
|
return nil if result.nil?
|
218
218
|
@_changed_attributes = hash
|
@@ -221,7 +221,7 @@ module LucidData
|
|
221
221
|
end
|
222
222
|
|
223
223
|
def select!(&block)
|
224
|
-
hash =
|
224
|
+
hash = attributes
|
225
225
|
result = hash.select!(&block)
|
226
226
|
return nil if result.nil?
|
227
227
|
@_changed_attributes = hash
|
@@ -231,7 +231,7 @@ module LucidData
|
|
231
231
|
alias filter! select!
|
232
232
|
|
233
233
|
def shift
|
234
|
-
hash =
|
234
|
+
hash = attributes
|
235
235
|
result = hash.shift
|
236
236
|
@_changed_attributes = hash
|
237
237
|
changed!
|
@@ -246,23 +246,23 @@ module LucidData
|
|
246
246
|
end
|
247
247
|
|
248
248
|
def to_h
|
249
|
-
|
249
|
+
attributes.dup
|
250
250
|
end
|
251
251
|
|
252
252
|
def transform_keys!(&block)
|
253
|
-
@_changed_attributes =
|
253
|
+
@_changed_attributes = attributes.transform_keys!(&block)
|
254
254
|
changed!
|
255
255
|
self
|
256
256
|
end
|
257
257
|
|
258
258
|
def transform_values!(&block)
|
259
|
-
@_changed_attributes =
|
259
|
+
@_changed_attributes = attributes.transform_values!(&block)
|
260
260
|
changed!
|
261
261
|
self
|
262
262
|
end
|
263
263
|
|
264
264
|
def update(*args)
|
265
|
-
@_changed_attributes =
|
265
|
+
@_changed_attributes = attributes.update(*args)
|
266
266
|
changed!
|
267
267
|
self
|
268
268
|
end
|
@@ -6,21 +6,21 @@ module LucidData
|
|
6
6
|
|
7
7
|
if RUBY_ENGINE == 'opal'
|
8
8
|
base.instance_exec do
|
9
|
-
def execute(props
|
10
|
-
query_result_instance = LucidData::QueryResult.new
|
11
|
-
promise_execute(props
|
12
|
-
query_result_instance
|
9
|
+
def execute(**props)
|
10
|
+
props[:query_result_instance] = LucidData::QueryResult.new
|
11
|
+
promise_execute(props) unless props[:query_result_instance].loaded?
|
12
|
+
props[:query_result_instance]
|
13
13
|
end
|
14
14
|
|
15
|
-
def promise_execute(props
|
15
|
+
def promise_execute(**props)
|
16
|
+
query_result_instance = props.delete(:query_result_instance)
|
16
17
|
query_result_instance = LucidData::QueryResult.new unless query_result_instance
|
17
18
|
props.each_key do |prop_name|
|
18
19
|
Isomorfeus.raise_error(message: "#{self.to_s} No such query prop declared: '#{prop_name}'!") unless declared_props.key?(prop_name)
|
19
20
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
Isomorfeus::Transport.promise_send_path( 'Isomorfeus::Data::Handler::Generic', self.name, :execute, props_json).then do |agent|
|
21
|
+
props = validated_props(props)
|
22
|
+
props[:query_result_instance_key] = query_result_instance.key
|
23
|
+
Isomorfeus::Transport.promise_send_path( 'Isomorfeus::Data::Handler::Generic', self.name, :execute, props).then do |agent|
|
24
24
|
if agent.processed
|
25
25
|
agent.result
|
26
26
|
else
|
@@ -44,34 +44,30 @@ module LucidData
|
|
44
44
|
end
|
45
45
|
|
46
46
|
base.instance_exec do
|
47
|
-
def promise_execute(props
|
48
|
-
instance = self.execute(props
|
47
|
+
def promise_execute(**props)
|
48
|
+
instance = self.execute(**props)
|
49
49
|
result_promise = Promise.new
|
50
50
|
result_promise.resolve(instance)
|
51
51
|
result_promise
|
52
52
|
end
|
53
53
|
|
54
|
-
def execute(props
|
55
|
-
props.
|
56
|
-
Isomorfeus.raise_error(message: "#{self.to_s} No such query prop declared: '#{prop_name}'!") unless declared_props.key?(prop_name)
|
57
|
-
end
|
58
|
-
validate_props(props)
|
54
|
+
def execute(**props)
|
55
|
+
query_result_instance_key = props.delete(:query_result_instance_key)
|
59
56
|
query_result = LucidData::QueryResult.new(key: query_result_instance_key)
|
60
|
-
query_result.result_set =
|
57
|
+
query_result.result_set = self.new(**props).instance_exec(&@_query_block)
|
61
58
|
query_result
|
62
59
|
end
|
63
60
|
|
64
61
|
def execute_query(&block)
|
65
62
|
@_query_block = block
|
66
63
|
end
|
64
|
+
end
|
67
65
|
|
68
|
-
|
69
|
-
Isomorfeus.current_user
|
70
|
-
end
|
66
|
+
attr_reader :props
|
71
67
|
|
72
|
-
|
73
|
-
|
74
|
-
|
68
|
+
def initialize(**props_hash)
|
69
|
+
props_hash = self.class.validated_props(props_hash)
|
70
|
+
@props = LucidProps.new(props_hash)
|
75
71
|
end
|
76
72
|
|
77
73
|
def current_user
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
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-
|
11
|
+
date: 2020-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 16.12.
|
89
|
+
version: 16.12.17
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 16.12.
|
96
|
+
version: 16.12.17
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: isomorfeus-redux
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,28 +114,28 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.0.0.
|
117
|
+
version: 1.0.0.zeta15
|
118
118
|
type: :runtime
|
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.
|
124
|
+
version: 1.0.0.zeta15
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: isomorfeus
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.0.0.
|
131
|
+
version: 1.0.0.zeta15
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.0.0.
|
138
|
+
version: 1.0.0.zeta15
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: opal-webpack-loader
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|