lorj 0.2.0 → 1.0.0
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/.gitignore +1 -0
- data/.rubocop.yml +46 -0
- data/Gemfile +15 -15
- data/README.md +22 -17
- data/Rakefile +12 -2
- data/bin/cloud_test.rb +13 -65
- data/example/students_1/process/students.rb +39 -0
- data/example/students_1/students.rb +22 -5
- data/example/students_2/process/students.rb +48 -0
- data/example/students_2/students.rb +39 -16
- data/example/students_3/controller/yaml_students.rb +50 -43
- data/example/students_3/controller/yaml_students_controller.rb +100 -87
- data/example/students_3/process/students.rb +161 -97
- data/example/students_3/students.rb +85 -56
- data/example/yaml_students/students.rb +40 -40
- data/example/yaml_students/yaml_students.rb +103 -90
- data/lib/core/core.rb +356 -696
- data/lib/core/core_controller.rb +227 -0
- data/lib/core/core_internal.rb +339 -0
- data/lib/core/core_model.rb +328 -0
- data/lib/core/core_object_data.rb +330 -0
- data/lib/core/core_object_params.rb +230 -0
- data/lib/core/core_process.rb +391 -0
- data/lib/core/core_process_setup.rb +353 -0
- data/lib/core/core_setup_ask.rb +241 -0
- data/lib/core/core_setup_encrypt.rb +146 -0
- data/lib/core/core_setup_init.rb +229 -0
- data/lib/core/core_setup_list.rb +160 -0
- data/lib/core/definition.rb +647 -469
- data/lib/core/definition_internal.rb +264 -308
- data/lib/core/lorj_basecontroller.rb +95 -0
- data/lib/core/lorj_basedefinition.rb +307 -0
- data/lib/core/lorj_baseprocess.rb +265 -0
- data/lib/core/lorj_data.rb +583 -0
- data/lib/core/lorj_keypath.rb +119 -0
- data/lib/core_process/cloud/process/common.rb +63 -0
- data/lib/core_process/cloud/process/connection.rb +93 -0
- data/lib/core_process/cloud/process/external_network.rb +94 -0
- data/lib/core_process/cloud/process/flavor.rb +99 -0
- data/lib/core_process/cloud/process/images.rb +87 -0
- data/lib/core_process/cloud/process/internet_network.rb +34 -0
- data/lib/core_process/cloud/process/internet_server.rb +30 -0
- data/lib/core_process/cloud/process/keypairs.rb +276 -0
- data/lib/core_process/cloud/process/network.rb +108 -0
- data/lib/core_process/cloud/process/public_ip.rb +100 -0
- data/lib/core_process/cloud/process/router.rb +260 -0
- data/lib/core_process/cloud/process/rules.rb +120 -0
- data/lib/core_process/cloud/process/security_groups.rb +121 -0
- data/lib/core_process/cloud/process/server.rb +127 -0
- data/lib/core_process/cloud/process/server_log.rb +35 -0
- data/lib/core_process/cloud/process/subnetwork.rb +108 -0
- data/lib/core_process/cloud_process.rb +30 -0
- data/lib/logging.rb +298 -0
- data/lib/lorj/version.rb +18 -1
- data/lib/lorj.rb +58 -18
- data/lib/lorj_account.rb +556 -0
- data/lib/lorj_config.rb +468 -0
- data/lib/lorj_defaults.rb +278 -0
- data/lib/prc.rb +136 -104
- data/lib/prc_base_config.rb +285 -0
- data/lib/prc_core_config.rb +878 -0
- data/lib/prc_section_config.rb +57 -0
- data/lib/providers/hpcloud/compute.rb +81 -93
- data/lib/providers/hpcloud/hpcloud.rb +462 -0
- data/lib/providers/hpcloud/network.rb +96 -98
- data/lib/providers/hpcloud/security_groups.rb +41 -40
- data/lib/providers/mock/mock.rb +144 -0
- data/lib/providers/openstack/openstack.rb +45 -0
- data/lib/providers/templates/compute.rb +21 -23
- data/lib/providers/templates/mycloud.rb +72 -0
- data/lib/providers/templates/network.rb +11 -12
- data/lib/rh.rb +339 -0
- data/lorj-spec/defaults.yaml +4 -0
- data/lorj.gemspec +6 -0
- data/spec/00_lorj_log_spec.rb +53 -0
- data/spec/01_hash_rh_spec.rb +243 -0
- data/spec/02_prc_base_config_spec.rb +216 -0
- data/spec/04_prc_core_config_spec.rb +83 -0
- data/spec/11_lorj_config_spec.rb +263 -0
- data/spec/12_lorj_account_spec.rb +181 -0
- metadata +76 -28
- data/Gemfile.lock +0 -37
- data/example/students_1/process/Students.rb +0 -20
- data/example/students_2/process/Students.rb +0 -27
- data/example/students_4/controller/yaml_students.rb +0 -82
- data/example/students_4/controller/yaml_students_controller.rb +0 -141
- data/example/students_4/process/students.rb +0 -112
- data/example/students_4/students.rb +0 -103
- data/lib/core/lorj-basecontroller.rb +0 -90
- data/lib/core/lorj-basedefinition.rb +0 -1139
- data/lib/core/lorj-baseprocess.rb +0 -236
- data/lib/core/lorj-data.rb +0 -567
- data/lib/core/lorj-keypath.rb +0 -115
- data/lib/core_process/CloudProcess.rb +0 -337
- data/lib/core_process/global_process.rb +0 -502
- data/lib/core_process/network_process.rb +0 -605
- data/lib/prc-account.rb +0 -339
- data/lib/prc-config.rb +0 -1030
- data/lib/prc-logging.rb +0 -261
- data/lib/providers/hpcloud/Hpcloud.rb +0 -426
- data/lib/providers/mock/Mock.rb +0 -141
- data/lib/providers/openstack/Openstack.rb +0 -47
- data/lib/providers/templates/core.rb +0 -61
- data/spec/forj-account_spec.rb +0 -75
- data/spec/forj-config_spec.rb +0 -196
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
|
|
4
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
|
|
18
|
+
module Lorj
|
|
19
|
+
# Class Definition internal function.
|
|
20
|
+
class BaseDefinition
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
# internal runtime function for process call
|
|
24
|
+
# Build a process/controller parameter object (ObjectData)
|
|
25
|
+
#
|
|
26
|
+
# *parameters*:
|
|
27
|
+
# - +new_params+ : Parameters ObjectData
|
|
28
|
+
# - +param_object+ : parameter object
|
|
29
|
+
# - +param_options+ : parameter options
|
|
30
|
+
# - +predefined_params+ : predefined parameters.
|
|
31
|
+
#
|
|
32
|
+
# *return*:
|
|
33
|
+
# - value : return the parameter value.
|
|
34
|
+
#
|
|
35
|
+
# *raise*:
|
|
36
|
+
#
|
|
37
|
+
def _build_data(new_params, param_obj, param_options, predefined_value)
|
|
38
|
+
param_name = param_obj.key
|
|
39
|
+
value = nil
|
|
40
|
+
|
|
41
|
+
default = param_options.rh_get(:default_value)
|
|
42
|
+
|
|
43
|
+
if param_options[:extract_from]
|
|
44
|
+
value = new_params[param_options[:extract_from]]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
return predefined_value if predefined_value && value.nil?
|
|
48
|
+
|
|
49
|
+
value = @config.get(param_name, default) if value.nil?
|
|
50
|
+
|
|
51
|
+
new_params[param_obj.tree] = value
|
|
52
|
+
|
|
53
|
+
value
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# internal runtime function for process call
|
|
57
|
+
# Build a process/controller parameter object (ObjectData)
|
|
58
|
+
#
|
|
59
|
+
# *parameters*:
|
|
60
|
+
# - +object_type+ : object type needing this parameter.
|
|
61
|
+
# - +new_params+ : Parameters ObjectData
|
|
62
|
+
# - +param_obj+ : parameter object
|
|
63
|
+
# - +param_options+ : parameter options
|
|
64
|
+
# - +value+ : value to add in hdata Hash.
|
|
65
|
+
#
|
|
66
|
+
# *return*:
|
|
67
|
+
#
|
|
68
|
+
# *raise*:
|
|
69
|
+
#
|
|
70
|
+
def _build_hdata(object_type, new_params, param_obj, param_options, value)
|
|
71
|
+
return unless param_options[:type] == :data
|
|
72
|
+
|
|
73
|
+
value_mapping = PrcLib.model.meta_obj.rh_get(object_type, :value_mapping,
|
|
74
|
+
param_obj.fpath)
|
|
75
|
+
|
|
76
|
+
attr_name = param_obj.key
|
|
77
|
+
|
|
78
|
+
# Mapping from Object/data definition
|
|
79
|
+
if value_mapping
|
|
80
|
+
runtime_fail("'%s.%s': No value mapping for '%s'",
|
|
81
|
+
object_type, attr_name,
|
|
82
|
+
value) if Lorj.rhExist?(value_mapping, value) != 1
|
|
83
|
+
value = value_mapping[value]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
return unless param_options[:mapping]
|
|
87
|
+
|
|
88
|
+
# NOTE: if mapping is set, the definition subtree
|
|
89
|
+
# is ignored.
|
|
90
|
+
# if key map to mykey
|
|
91
|
+
# [:section1][subsect][key] = value
|
|
92
|
+
# new_params => [:hdata][mykey] = value
|
|
93
|
+
# not new_params => [:hdata][:section1][subsect][mykey] = value
|
|
94
|
+
new_params[:hdata].rh_set(value, param_options[:mapping])
|
|
95
|
+
nil
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# internal runtime function for process call
|
|
99
|
+
# Build a process/controller parameter object (ObjectData)
|
|
100
|
+
#
|
|
101
|
+
# *parameters*:
|
|
102
|
+
# - +new_params+ : ObjectData. Parameters ObjectData
|
|
103
|
+
# - +param_path+ : Symbol. parameter name
|
|
104
|
+
# - +param_options+ : Hash. parameter options
|
|
105
|
+
# - +predefined_params+ : Hash. predefined parameters.
|
|
106
|
+
#
|
|
107
|
+
#
|
|
108
|
+
# *return*:
|
|
109
|
+
# - value : return the parameter value.
|
|
110
|
+
#
|
|
111
|
+
# *raise*:
|
|
112
|
+
#
|
|
113
|
+
def _build_param(new_params,
|
|
114
|
+
param_obj, param_options, predefined_value)
|
|
115
|
+
|
|
116
|
+
param_name = param_obj.key
|
|
117
|
+
|
|
118
|
+
case param_options[:type]
|
|
119
|
+
when :data
|
|
120
|
+
return _build_data(new_params, param_obj, param_options,
|
|
121
|
+
predefined_value)
|
|
122
|
+
when :CloudObject
|
|
123
|
+
if param_options[:required] &&
|
|
124
|
+
@object_data.type?(param_name) != :DataObject
|
|
125
|
+
fail Lorj::PrcError.new,
|
|
126
|
+
format("Object '%s/%s' is not defined. '%s' requirement "\
|
|
127
|
+
'failed.', self.class, param_name, fname)
|
|
128
|
+
end
|
|
129
|
+
if @object_data.exist?(param_name)
|
|
130
|
+
new_params.add(@object_data[param_name, :ObjectData])
|
|
131
|
+
else
|
|
132
|
+
Lorj.debug(2, "The optional '%s' was not loaded", param_name)
|
|
133
|
+
end
|
|
134
|
+
else
|
|
135
|
+
PrcLib.runtime_fail("Undefined ObjectData '%s'.", param_options[:type])
|
|
136
|
+
end
|
|
137
|
+
nil
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# internal runtime function for process call
|
|
141
|
+
# Build a process/controller parameters object (ObjectData)
|
|
142
|
+
#
|
|
143
|
+
# *parameters*:
|
|
144
|
+
# - +object_type+ : object type requiring parameters.
|
|
145
|
+
# - +sEventType+ : event type used to call the process
|
|
146
|
+
# - +fname+ : caller function
|
|
147
|
+
# - +as_controller+ : attribute options
|
|
148
|
+
# - +predefined_params+ : pre-defined parameters values.
|
|
149
|
+
#
|
|
150
|
+
# *return*:
|
|
151
|
+
# - ObjectData : list of data and objects wanted by the process or
|
|
152
|
+
# the controller. In case of the controller, hdata
|
|
153
|
+
# controller map is also added.
|
|
154
|
+
#
|
|
155
|
+
# *raise*:
|
|
156
|
+
# - runtime error if required data is not set. (empty or nil)
|
|
157
|
+
#
|
|
158
|
+
def _get_object_params(object_type, sEventType, _fname,
|
|
159
|
+
as_controller = false, predefined_params = {})
|
|
160
|
+
# Building handler parameters
|
|
161
|
+
# hdata is built for controller. ie, ObjectData is NOT internal.
|
|
162
|
+
|
|
163
|
+
obj_params = PrcLib.model.meta_obj.rh_get(object_type, :params, :keys)
|
|
164
|
+
|
|
165
|
+
fail Lorj::PrcError.new, "'%s' Object data needs not set. Forgot "\
|
|
166
|
+
'obj_needs?', object_type if obj_params.nil?
|
|
167
|
+
|
|
168
|
+
new_params = _obj_param_init(object_type, sEventType, as_controller)
|
|
169
|
+
|
|
170
|
+
obj_params.each do | param_path, param_options|
|
|
171
|
+
next if Lorj.rhExist?(param_options, :for, sEventType) == 2
|
|
172
|
+
|
|
173
|
+
param_obj = KeyPath.new(param_path)
|
|
174
|
+
param_name = param_obj.key
|
|
175
|
+
|
|
176
|
+
value = _build_param(new_params, param_path, param_options,
|
|
177
|
+
predefined_params[param_name])
|
|
178
|
+
|
|
179
|
+
if as_controller && !value.nil?
|
|
180
|
+
_build_hdata(object_type, new_params, param_obj, param_options, value)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
new_params
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Internal runtime function for process call
|
|
187
|
+
#
|
|
188
|
+
# initialize Object parameters object (ObjectData)
|
|
189
|
+
# And add the current object in parameters in case we called
|
|
190
|
+
# delete_e handler
|
|
191
|
+
#
|
|
192
|
+
# *parameters*:
|
|
193
|
+
# - +object_type+ : ObjectData parameters for this object type.
|
|
194
|
+
# - +sEventType+ : Event handler called
|
|
195
|
+
# - +as_controller+: true if this will be a controller parameters object.
|
|
196
|
+
#
|
|
197
|
+
# *returns*
|
|
198
|
+
# - ObjectData: for controller or process
|
|
199
|
+
#
|
|
200
|
+
def _obj_param_init(object_type, sEventType, as_controller)
|
|
201
|
+
new_params = ObjectData.new(!as_controller)
|
|
202
|
+
|
|
203
|
+
if sEventType == :delete_e && @object_data.exist?(object_type)
|
|
204
|
+
new_params.add(@object_data[object_type, :ObjectData])
|
|
205
|
+
end
|
|
206
|
+
new_params
|
|
207
|
+
end
|
|
208
|
+
# unused function???
|
|
209
|
+
# def _get_controller_map_value(keypath, sProcessValue)
|
|
210
|
+
# section = Lorj.defaults.get_meta_section(sData)
|
|
211
|
+
# section = :runtime if section.nil?
|
|
212
|
+
# keypath = KeyPath.new(keypath).keyPath
|
|
213
|
+
# return nil if Lorj.rhExist?(PrcLib.model.meta_data, section, keypath,
|
|
214
|
+
# :controller, sProcessValue) != 4
|
|
215
|
+
# PrcLib.model.meta_data.rh_get(section, keypath,
|
|
216
|
+
# :controller, sProcessValue)
|
|
217
|
+
# end
|
|
218
|
+
|
|
219
|
+
# unused function???
|
|
220
|
+
# def _get_process_map_value(keypath, sControllerValue)
|
|
221
|
+
# section = Lorj.defaults.get_meta_section(sData)
|
|
222
|
+
# section = :runtime if section.nil?
|
|
223
|
+
# keypath = KeyPath.new(keypath).keyPath
|
|
224
|
+
# return nil if Lorj.rhExist?(PrcLib.model.meta_data, section, keypath,
|
|
225
|
+
# :process, sControllerValue) != 4
|
|
226
|
+
# PrcLib.model.meta_data.rh_get(section, keypath,
|
|
227
|
+
# :process, sControllerValue)
|
|
228
|
+
# end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# Module Lorj which contains several classes.
|
|
16
|
+
#
|
|
17
|
+
# Those classes describes :
|
|
18
|
+
# - processes (BaseProcess) : How to create/delete/edit/query object.
|
|
19
|
+
# - controler (BaseControler) : If a provider is defined, define how will do
|
|
20
|
+
# object creation/etc...
|
|
21
|
+
# - definition(BaseDefinition): Functions to declare objects, query/data mapping
|
|
22
|
+
# and setup
|
|
23
|
+
# this task to make it to work.
|
|
24
|
+
module Lorj
|
|
25
|
+
# Adding process core functions.
|
|
26
|
+
class BaseDefinition
|
|
27
|
+
# Capitalized function are called to start a process. It is done by Core
|
|
28
|
+
# class.
|
|
29
|
+
|
|
30
|
+
# Call meta lorj object creation process.
|
|
31
|
+
# The creation process can implement any logic like:
|
|
32
|
+
# - create an object in the DB.
|
|
33
|
+
# - check object existence in the DB. If not exists, create it.
|
|
34
|
+
#
|
|
35
|
+
# * *Args* :
|
|
36
|
+
# - +ObjectType+ : Meta object type to create.
|
|
37
|
+
# - +Config+ : Optional. Hash containing list of data to use for
|
|
38
|
+
# creation.
|
|
39
|
+
#
|
|
40
|
+
# * *Returns* :
|
|
41
|
+
# - +Object+ : Lorj::Data object of type +ObjectType+ created.
|
|
42
|
+
#
|
|
43
|
+
# * *Raises* :
|
|
44
|
+
# - Warning if the create_e process handler did not return any data. (nil)
|
|
45
|
+
# - Warning if the Config data passed are not required by the meta object
|
|
46
|
+
# (or dependencies) at creation time.
|
|
47
|
+
# - Error if ObjectType has never been declared.
|
|
48
|
+
# - Error if the dependencies create_e process handler did not return any
|
|
49
|
+
# data. (nil) - Loop detection.
|
|
50
|
+
# - Error if the create_e process handler raise an error.
|
|
51
|
+
#
|
|
52
|
+
def process_create(sObjectType, hConfig = {})
|
|
53
|
+
# if hConfig.length > 0
|
|
54
|
+
# # cleanup runtime data to avoid conflicts between multiple calls
|
|
55
|
+
# valid_keys = _identify_data(sObjectType, :create_e)
|
|
56
|
+
# valid_keys.each do | sKey|
|
|
57
|
+
# value = hConfig.rh_get(sKey)
|
|
58
|
+
# @config[sKey] = value if !@config.exist?(sKey) ||
|
|
59
|
+
# @config.exist?(sKey) == 'runtime'
|
|
60
|
+
# hConfig.rh_set(nil, sKey)
|
|
61
|
+
# end
|
|
62
|
+
# if hConfig.length > 0
|
|
63
|
+
# PrcLib.warning("'%s' has been passed but not declared to '%s'"\
|
|
64
|
+
# ' object. Those are ignored until you add it in the'\
|
|
65
|
+
# " model definition of '%s'",
|
|
66
|
+
# hConfig.keys, sObjectType, sObjectType)
|
|
67
|
+
# end
|
|
68
|
+
# end
|
|
69
|
+
|
|
70
|
+
return nil unless sObjectType
|
|
71
|
+
|
|
72
|
+
unless PrcLib.model.meta_obj.rh_exist?(sObjectType)
|
|
73
|
+
runtime_fail "%s.Create: '%s' is not a known object type.",
|
|
74
|
+
self.class, sObjectType
|
|
75
|
+
end
|
|
76
|
+
proc = PrcLib.model.meta_obj.rh_get(sObjectType, :lambdas, :create_e)
|
|
77
|
+
|
|
78
|
+
# Check required parameters
|
|
79
|
+
_process_load_dependencies(object_type, proc, :create_e, __callee__)
|
|
80
|
+
|
|
81
|
+
# Context: Default object used
|
|
82
|
+
@runtime_context[:oCurrentObj] = sObjectType
|
|
83
|
+
|
|
84
|
+
if proc.nil?
|
|
85
|
+
# This object is a meta object, without any data.
|
|
86
|
+
# Used to build other kind of objects.
|
|
87
|
+
object = Lorj::Data.new
|
|
88
|
+
object.set({}, sObjectType) {}
|
|
89
|
+
else
|
|
90
|
+
# build Function params to pass to the event handler.
|
|
91
|
+
params = _get_object_params(sObjectType, :create_e, proc, hConfig)
|
|
92
|
+
Lorj.debug(2, "Create Object '%s' - Running '%s'", sObjectType, proc)
|
|
93
|
+
|
|
94
|
+
# Call the process function.
|
|
95
|
+
# At some point, the process will call the controller, via the framework
|
|
96
|
+
# This controller call via the framework has the role to
|
|
97
|
+
# create an ObjectData well formatted, with _return_map function
|
|
98
|
+
# See Definition.connect/create/update/query/get functions (lowercase)
|
|
99
|
+
object = @process.method(proc).call(sObjectType, params)
|
|
100
|
+
# return usually is the main object that the process called should
|
|
101
|
+
# provide.
|
|
102
|
+
# Save Object if the object has been created by the process, without
|
|
103
|
+
# controller
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if object.nil?
|
|
107
|
+
PrcLib.warning("'%s' has returned no data for object Lorj::Data '%s'!",
|
|
108
|
+
proc, sObjectType)
|
|
109
|
+
else
|
|
110
|
+
query_cleanup(sObjectType)
|
|
111
|
+
@object_data.add(object)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Call meta lorj object deletion process
|
|
116
|
+
# There is no implementation of cascade deletion. It is up to the process to
|
|
117
|
+
# do it or not.
|
|
118
|
+
#
|
|
119
|
+
# * *Args* :
|
|
120
|
+
# - +ObjectType+ : Meta object type to create.
|
|
121
|
+
# - +Config+ : Optional. Hash containing list of data to use for
|
|
122
|
+
# creation.
|
|
123
|
+
#
|
|
124
|
+
# * *Returns* :
|
|
125
|
+
# - +Deleted+ : true if deleted or false otherwise.
|
|
126
|
+
#
|
|
127
|
+
# * *Raises* :
|
|
128
|
+
# - Warning if the create_e process handler did not return any data. (nil)
|
|
129
|
+
# - Warning if the Config data passed are not required by the meta object
|
|
130
|
+
# (or dependencies) at creation time.
|
|
131
|
+
# - Error if ObjectType has never been declared.
|
|
132
|
+
# - Error if the dependencies query_e process handler did not return any
|
|
133
|
+
# data. (nil) - Loop detection.
|
|
134
|
+
# - Error if the query_e process handler raise an error.
|
|
135
|
+
#
|
|
136
|
+
def process_delete(object_type, hConfig = {})
|
|
137
|
+
return nil unless object_type
|
|
138
|
+
|
|
139
|
+
unless PrcLib.model.meta_obj.rh_exist?(object_type)
|
|
140
|
+
runtime_fail "%s.Delete: '%s' is not a known object type.",
|
|
141
|
+
self.class, object_type
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
proc = PrcLib.model.meta_obj.rh_get(object_type, :lambdas, :delete_e)
|
|
145
|
+
|
|
146
|
+
return nil if proc.nil?
|
|
147
|
+
|
|
148
|
+
# Check required parameters
|
|
149
|
+
_process_load_dependencies(object_type, proc, :delete_e, __callee__)
|
|
150
|
+
|
|
151
|
+
# Context: Default object used.
|
|
152
|
+
@runtime_context[:oCurrentObj] = object_type
|
|
153
|
+
|
|
154
|
+
# build Function params to pass to the event handler.
|
|
155
|
+
params = _get_object_params(object_type, :delete_e, proc, hConfig)
|
|
156
|
+
|
|
157
|
+
state = @process.method(proc).call(object_type, params)
|
|
158
|
+
# return usually is the main object that the process called should provide
|
|
159
|
+
|
|
160
|
+
@object_data.delete(object_type) if state
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Function to clean the cache for a specific meta lorj object queried.
|
|
164
|
+
#
|
|
165
|
+
# * *Args* :
|
|
166
|
+
# - +ObjectType+ : Meta object type to cleanup.
|
|
167
|
+
#
|
|
168
|
+
# * *Returns* :
|
|
169
|
+
# no data
|
|
170
|
+
#
|
|
171
|
+
# * *Raises* :
|
|
172
|
+
#
|
|
173
|
+
def query_cleanup(object_type)
|
|
174
|
+
list = @object_data[:query, object_type]
|
|
175
|
+
return if list.nil?
|
|
176
|
+
|
|
177
|
+
@object_data.delete(list)
|
|
178
|
+
Lorj.debug(2, "Query cache for object '%s' cleaned.", object_type)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Function to clean the cache for a specific meta lorj object.
|
|
182
|
+
#
|
|
183
|
+
# * *Args* :
|
|
184
|
+
# - +ObjectType+ : Meta object type to cleanup.
|
|
185
|
+
#
|
|
186
|
+
# * *Returns* :
|
|
187
|
+
# no data
|
|
188
|
+
#
|
|
189
|
+
# * *Raises* :
|
|
190
|
+
#
|
|
191
|
+
def object_cleanup(object_type)
|
|
192
|
+
object = @object_data[object_type, :ObjectData]
|
|
193
|
+
|
|
194
|
+
@object_data.delete(object) unless object.nil?
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Function to execute a query process. This function returns a Lorj::Data of
|
|
198
|
+
# type :list.
|
|
199
|
+
#
|
|
200
|
+
# * *Args* :
|
|
201
|
+
# - +ObjectType+ : Meta object type to query.
|
|
202
|
+
# - +Query+ : Hash. Represent the query to execute.
|
|
203
|
+
# - +Config+ : Optional. Hash containing list of data to use for query
|
|
204
|
+
#
|
|
205
|
+
# * *Returns* :
|
|
206
|
+
# Lorj::Data of type :list
|
|
207
|
+
#
|
|
208
|
+
# * *Raises* :
|
|
209
|
+
#
|
|
210
|
+
#
|
|
211
|
+
def process_query(object_type, hQuery, hConfig = {})
|
|
212
|
+
return nil unless object_type
|
|
213
|
+
unless PrcLib.model.meta_obj.rh_exist?(object_type)
|
|
214
|
+
runtime_fail "%s.Get: '%s' is not a known object type.",
|
|
215
|
+
self.class, object_type
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Check if we can re-use a previous query
|
|
219
|
+
list = query_cache(object_type, hQuery)
|
|
220
|
+
return list unless list.nil?
|
|
221
|
+
|
|
222
|
+
proc = PrcLib.model.meta_obj.rh_get(object_type, :lambdas, :query_e)
|
|
223
|
+
|
|
224
|
+
return nil if proc.nil?
|
|
225
|
+
|
|
226
|
+
# Check required parameters
|
|
227
|
+
_process_load_dependencies(object_type, proc, :query_e, __callee__)
|
|
228
|
+
|
|
229
|
+
# Context: Default object used.
|
|
230
|
+
@runtime_context[:oCurrentObj] = object_type
|
|
231
|
+
|
|
232
|
+
# build Function params to pass to the Process Event handler.
|
|
233
|
+
params = _get_object_params(object_type, :query_e, proc, hConfig)
|
|
234
|
+
|
|
235
|
+
# Call the process function.
|
|
236
|
+
# At some point, the process will call the controller, via the framework.
|
|
237
|
+
# This controller call via the framework has the role to
|
|
238
|
+
# create an ObjectData well formatted, with _return_map function
|
|
239
|
+
# See Definition.connect/create/update/query/get functions (lowercase)
|
|
240
|
+
object = @process.method(proc).call(object_type, hQuery, params)
|
|
241
|
+
# return usually is the main object that the process called should provide
|
|
242
|
+
if object.nil?
|
|
243
|
+
PrcLib.warning("'%s' returned no collection of objects Lorj::Data "\
|
|
244
|
+
"for '%s'", proc, object_type)
|
|
245
|
+
else
|
|
246
|
+
# Save Object if the object has been created by the process, without
|
|
247
|
+
# controller
|
|
248
|
+
@object_data.add(object)
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def query_cache(object_type, hQuery)
|
|
253
|
+
# Check if we can re-use a previous query
|
|
254
|
+
list = @object_data[:query, object_type]
|
|
255
|
+
|
|
256
|
+
return if list.nil?
|
|
257
|
+
|
|
258
|
+
if list[:query] == hQuery
|
|
259
|
+
Lorj.debug(3, "Using Object '%s' query cache : %s",
|
|
260
|
+
object_type, hQuery)
|
|
261
|
+
return list
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
nil
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
# Function to execute a get process. This function returns a Lorj::Data of
|
|
268
|
+
# type :object.
|
|
269
|
+
#
|
|
270
|
+
# * *Args* :
|
|
271
|
+
# - +ObjectType+ : Meta object type to query.
|
|
272
|
+
# - +UniqId+ : Uniq ID.
|
|
273
|
+
# - +Config+ : Optional. Hash containing list of data to use for
|
|
274
|
+
# getting.
|
|
275
|
+
#
|
|
276
|
+
# * *Returns* :
|
|
277
|
+
# Lorj::Data of type :object
|
|
278
|
+
#
|
|
279
|
+
# * *Raises* :
|
|
280
|
+
# - Warning if the Config data passed are not required by the meta object
|
|
281
|
+
# (or dependencies) at creation time.
|
|
282
|
+
# - Error if ObjectType has never been declared.
|
|
283
|
+
# - Error if the dependencies get_e process handler did not return any
|
|
284
|
+
# data. (nil) - Loop detection.
|
|
285
|
+
# - Error if the get_e process handler raise an error.
|
|
286
|
+
#
|
|
287
|
+
def process_get(object_type, sUniqId, hConfig = {})
|
|
288
|
+
return nil unless object_type
|
|
289
|
+
unless PrcLib.model.meta_obj.rh_exist?(object_type)
|
|
290
|
+
runtime_fail "$s.Get: '%s' is not a known object type.",
|
|
291
|
+
self.class, object_type
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
proc = PrcLib.model.meta_obj.rh_get(object_type, :lambdas, :get_e)
|
|
295
|
+
|
|
296
|
+
return nil if proc.nil?
|
|
297
|
+
|
|
298
|
+
# Check required parameters
|
|
299
|
+
_process_load_dependencies(object_type, proc, :get_e, __callee__)
|
|
300
|
+
|
|
301
|
+
# Context: Default object used
|
|
302
|
+
@runtime_context[:oCurrentObj] = object_type
|
|
303
|
+
|
|
304
|
+
# build Function params to pass to the Process Event handler.
|
|
305
|
+
params = _get_object_params(object_type, :get_e, proc, hConfig)
|
|
306
|
+
|
|
307
|
+
# Call the process function.
|
|
308
|
+
# At some point, the process will call the controller, via the framework.
|
|
309
|
+
# This controller call via the framework has the role to
|
|
310
|
+
# create an ObjectData well formatted, with _return_map function
|
|
311
|
+
# See Definition.connect/create/update/query/get functions (lowercase)
|
|
312
|
+
object = @process.method(proc).call(object_type, sUniqId, params)
|
|
313
|
+
# return usually is the main object that the process called should provide
|
|
314
|
+
|
|
315
|
+
# Save Object if the object has been created by the process, without
|
|
316
|
+
# controller
|
|
317
|
+
@object_data.add(object) unless object.nil?
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
# Function to execute a update process. This function returns a Lorj::Data
|
|
321
|
+
# of type :object.
|
|
322
|
+
#
|
|
323
|
+
# * *Args* :
|
|
324
|
+
# - +object_type+ : Meta object type to query.
|
|
325
|
+
# - +config+ : Optional. Hash containing list of data to use for
|
|
326
|
+
# updating.
|
|
327
|
+
#
|
|
328
|
+
# * *Returns* :
|
|
329
|
+
# Lorj::Data of type :object
|
|
330
|
+
#
|
|
331
|
+
# * *Raises* :
|
|
332
|
+
# - Warning if the Config data passed are not required by the meta object
|
|
333
|
+
# (or dependencies) at creation time.
|
|
334
|
+
# - Error if ObjectType has never been declared.
|
|
335
|
+
# - Error if the dependencies get_e process handler did not return any
|
|
336
|
+
# data. (nil) - Loop detection.
|
|
337
|
+
# - Error if the get_e process handler raise an error.
|
|
338
|
+
#
|
|
339
|
+
def process_update(object_type, hConfig = {})
|
|
340
|
+
return nil unless object_type
|
|
341
|
+
|
|
342
|
+
unless PrcLib.model.meta_obj.rh_exist?(object_type)
|
|
343
|
+
runtime_fail "$s.Update: '%s' is not a known object type.",
|
|
344
|
+
self.class, object_type
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
proc = PrcLib.model.meta_obj.rh_get(object_type, :lambdas, :update_e)
|
|
348
|
+
|
|
349
|
+
return nil if proc.nil?
|
|
350
|
+
|
|
351
|
+
_process_load_dependencies(object_type, proc, :update_e, __callee__)
|
|
352
|
+
|
|
353
|
+
# Context: Default object used.
|
|
354
|
+
@runtime_context[:oCurrentObj] = object_type
|
|
355
|
+
|
|
356
|
+
# build Function params to pass to the event handler.
|
|
357
|
+
params = _get_object_params(object_type, :update_e, proc, hConfig)
|
|
358
|
+
|
|
359
|
+
object = @process.method(proc).call(object_type, params)
|
|
360
|
+
# return usually is the main object that the process called should provide
|
|
361
|
+
|
|
362
|
+
# Save Object if the object has been created by the process, without
|
|
363
|
+
# controller
|
|
364
|
+
@object_data.add(object) unless object.nil?
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
def _process_load_dependencies(object_type, proc, handler_name,
|
|
368
|
+
function_name)
|
|
369
|
+
missing_obj = _check_required(object_type, handler_name, proc).reverse
|
|
370
|
+
|
|
371
|
+
while missing_obj.length > 0
|
|
372
|
+
elem = missing_obj.pop
|
|
373
|
+
|
|
374
|
+
if elem == object_type && function_name == :process_delete
|
|
375
|
+
debug(2, "'%s' object is not previously loaded or created.",
|
|
376
|
+
object_type)
|
|
377
|
+
next
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
unless process_create(elem)
|
|
381
|
+
runtime_fail "Unable to create Object '%s'", elem
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
missing_obj = _check_required(object_type, handler_name, proc).reverse
|
|
385
|
+
runtime_fail "loop detection: '%s' is required but"\
|
|
386
|
+
" #{function_name}(%s) did not loaded it.",
|
|
387
|
+
elem, elem if missing_obj.include?(elem)
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
end
|