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,227 @@
|
|
|
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 controller core functions.
|
|
26
|
+
class BaseDefinition
|
|
27
|
+
# a Process can execute any kind of predefined controler task.
|
|
28
|
+
# Those function build controller_params with Provider compliant data
|
|
29
|
+
# (mapped)
|
|
30
|
+
# Results are formatted as usual framework Data object and stored.
|
|
31
|
+
|
|
32
|
+
# controller_connect call lorj framework to execute a
|
|
33
|
+
# controller connection task
|
|
34
|
+
#
|
|
35
|
+
# parameters:
|
|
36
|
+
# - +object_type+: Lorj object type to use for the connection.
|
|
37
|
+
# - +params+ : Parameters to use for connection.
|
|
38
|
+
def controller_connect(sObjectType, params = {})
|
|
39
|
+
controller_params = _get_object_params(sObjectType, :create_e, :connect,
|
|
40
|
+
true, params)
|
|
41
|
+
controller_obj = @controller.connect(sObjectType, controller_params)
|
|
42
|
+
data_obj = Lorj::Data.new
|
|
43
|
+
data_obj.set(controller_obj, sObjectType) do | sObjType, oObject |
|
|
44
|
+
begin
|
|
45
|
+
_return_map(sObjType, oObject)
|
|
46
|
+
rescue => e
|
|
47
|
+
PrcLib.runtime_fail 'connect %s.%s : %s',
|
|
48
|
+
@process.class, sObjectType, e.message
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
@object_data.add data_obj
|
|
52
|
+
data_obj
|
|
53
|
+
end
|
|
54
|
+
# controller_create call lorj framework to execute a
|
|
55
|
+
# controller creation task
|
|
56
|
+
#
|
|
57
|
+
# parameters:
|
|
58
|
+
# - +object_type+: Lorj object type to use for the creation.
|
|
59
|
+
# - +params+ : Parameters to use for creation.
|
|
60
|
+
def controller_create(sObjectType, params = {})
|
|
61
|
+
# The process ask the controller to create the object.
|
|
62
|
+
# controller_params have to be fully readable by the controller.
|
|
63
|
+
controller_params = _get_object_params(sObjectType, :create_e, :create,
|
|
64
|
+
true, params)
|
|
65
|
+
controller_obj = @controller.create(sObjectType, controller_params)
|
|
66
|
+
data_obj = Lorj::Data.new
|
|
67
|
+
data_obj.set(controller_obj, sObjectType) do | sObjType, oObject |
|
|
68
|
+
begin
|
|
69
|
+
_return_map(sObjType, oObject)
|
|
70
|
+
rescue => e
|
|
71
|
+
PrcLib.runtime_fail 'create %s.%s : %s',
|
|
72
|
+
@process.class, sObjectType, e.message
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
@object_data.add data_obj
|
|
76
|
+
|
|
77
|
+
data_obj
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# controller_delete call lorj framework to execute a
|
|
81
|
+
# controller deletion task
|
|
82
|
+
#
|
|
83
|
+
# parameters:
|
|
84
|
+
# - +object_type+: Lorj object type to use for the deletion.
|
|
85
|
+
# - +params+ : Parameters to use for deletion.
|
|
86
|
+
#
|
|
87
|
+
# returns:
|
|
88
|
+
# - The controller must return true to inform about the real deletion
|
|
89
|
+
def controller_delete(sObjectType, params = {})
|
|
90
|
+
controller_params = _get_object_params(sObjectType, :delete_e, :delete,
|
|
91
|
+
true, params)
|
|
92
|
+
PrcLib.runtime_fail "delete Controller - %s: Object '%s' is not loaded.",
|
|
93
|
+
@controller.class,
|
|
94
|
+
key unless controller_params.exist?(sObjectType)
|
|
95
|
+
state = @controller.delete(sObjectType, controller_params)
|
|
96
|
+
@object_data.delete(sObjectType) if state
|
|
97
|
+
state
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# controller_get call lorj framework to execute a controller get task
|
|
101
|
+
#
|
|
102
|
+
# parameters:
|
|
103
|
+
# - +object_type+: Lorj object type to use for the get.
|
|
104
|
+
# - +params+ : Parameters to use for get.
|
|
105
|
+
#
|
|
106
|
+
# returns:
|
|
107
|
+
# - Return a Lorj::Data representing the data retrieved by the controller.
|
|
108
|
+
def controller_get(sObjectType, sUniqId, params = {})
|
|
109
|
+
controller_params = _get_object_params(sObjectType, :get_e, :get,
|
|
110
|
+
true, params)
|
|
111
|
+
|
|
112
|
+
controller_obj = @controller.get(sObjectType, sUniqId, controller_params)
|
|
113
|
+
data_obj = Lorj::Data.new
|
|
114
|
+
data_obj.set(controller_obj, sObjectType) do | sObjType, oObject |
|
|
115
|
+
begin
|
|
116
|
+
_return_map(sObjType, oObject)
|
|
117
|
+
rescue => e
|
|
118
|
+
PrcLib.runtime_fail 'get %s.%s : %s',
|
|
119
|
+
@process.class, sObjectType, e.message
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
@object_data.add data_obj
|
|
123
|
+
|
|
124
|
+
data_obj
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# controller_query call lorj framework to execute a controller query task
|
|
128
|
+
#
|
|
129
|
+
# parameters:
|
|
130
|
+
# - +object_type+: Lorj object type to use for the query.
|
|
131
|
+
# - +params+ : Parameters to use for query.
|
|
132
|
+
#
|
|
133
|
+
# returns:
|
|
134
|
+
# - Returns a Lorj::Data object, containing a list of Lorj::Data element.
|
|
135
|
+
def controller_query(sObjectType, hQuery, params = {})
|
|
136
|
+
# Check if we can re-use a previous query
|
|
137
|
+
list = @object_data[:query, sObjectType]
|
|
138
|
+
unless list.nil?
|
|
139
|
+
if list[:query] == hQuery
|
|
140
|
+
Lorj.debug(3, "Using Object '%s' query cache : %s",
|
|
141
|
+
sObjectType, hQuery)
|
|
142
|
+
return list
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
controller_params = _get_object_params(sObjectType, :query_e, :query,
|
|
147
|
+
true, params)
|
|
148
|
+
controller_query = _query_map(sObjectType, hQuery)
|
|
149
|
+
|
|
150
|
+
controller_obj = @controller.query(sObjectType, controller_query,
|
|
151
|
+
controller_params)
|
|
152
|
+
|
|
153
|
+
data_obj = Lorj::Data.new :list
|
|
154
|
+
data_obj.set(controller_obj,
|
|
155
|
+
sObjectType, hQuery) do | sObjType, key |
|
|
156
|
+
begin
|
|
157
|
+
_return_map(sObjType, key)
|
|
158
|
+
rescue => e
|
|
159
|
+
PrcLib.runtime_fail 'query %s.%s : %s',
|
|
160
|
+
@process.class, sObjectType, e.message
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
Lorj.debug(2, 'Object %s - queried. Found %s object(s).',
|
|
165
|
+
sObjectType, data_obj.length)
|
|
166
|
+
|
|
167
|
+
@object_data.add data_obj
|
|
168
|
+
data_obj
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# controller_update call lorj framework to execute a controller update task
|
|
172
|
+
#
|
|
173
|
+
# parameters:
|
|
174
|
+
# - +object_type+: Lorj object type to use for the update.
|
|
175
|
+
# - +params+ : Parameters to use for update.
|
|
176
|
+
#
|
|
177
|
+
# returns:
|
|
178
|
+
# - The controller must return true to inform about the real deletion
|
|
179
|
+
def controller_update(sObjectType, params = {})
|
|
180
|
+
# Need to detect data updated and update the Controler object with the
|
|
181
|
+
# controler
|
|
182
|
+
|
|
183
|
+
controller_params = _get_object_params(sObjectType, :update_e, :update,
|
|
184
|
+
true, params)
|
|
185
|
+
|
|
186
|
+
data_obj = @object_data[sObjectType, :ObjectData]
|
|
187
|
+
controller_obj = data_obj[:object]
|
|
188
|
+
|
|
189
|
+
is_updated = false
|
|
190
|
+
attributes = data_obj[:attrs]
|
|
191
|
+
attributes.each do |key, value |
|
|
192
|
+
attribute_obj = KeyPath.new(key)
|
|
193
|
+
|
|
194
|
+
attribute_map = PrcLib.model.meta_obj.rh_get(sObjectType, :returns,
|
|
195
|
+
attribute_obj.fpath)
|
|
196
|
+
attr_map_obj = KeyPath.new(attribute_map)
|
|
197
|
+
old_value = @controller.get_attr(controller_obj, attr_map_obj.tree)
|
|
198
|
+
|
|
199
|
+
next if value == old_value
|
|
200
|
+
|
|
201
|
+
is_updated = true
|
|
202
|
+
@controller.set_attr(controller_obj, attr_map_obj.tree, value)
|
|
203
|
+
Lorj.debug(2, '%s.%s - Updating: %s = %s (old : %s)',
|
|
204
|
+
@process.class, sObjectType, key, value, old_value)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
is_done = @controller.update(sObjectType, data_obj,
|
|
208
|
+
controller_params) if is_updated
|
|
209
|
+
|
|
210
|
+
PrcLib.runtime_fail "Controller function 'update' must return True or "\
|
|
211
|
+
"False. Class returned: '%s'",
|
|
212
|
+
is_done.class unless is_done.boolean?
|
|
213
|
+
|
|
214
|
+
Lorj.debug(1, '%s.%s - updated.',
|
|
215
|
+
@process.class, sObjectType) if is_done
|
|
216
|
+
data_obj.set(controller_obj, sObjectType) do | sObjType, an_object |
|
|
217
|
+
begin
|
|
218
|
+
_return_map(sObjType, an_object)
|
|
219
|
+
rescue => e
|
|
220
|
+
PrcLib.runtime_fail 'update %s.%s : %s',
|
|
221
|
+
@process.class, sObjectType, e.message
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
is_done
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
# rubocop: disable Metrics/AbcSize
|
|
18
|
+
|
|
19
|
+
# Module Lorj which contains several classes.
|
|
20
|
+
module Lorj
|
|
21
|
+
# Define private initialize functions for processes
|
|
22
|
+
class Core
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# Create core objects
|
|
26
|
+
# Create a BaseDefinition object => Core
|
|
27
|
+
# Attach Config, Process and Controller object
|
|
28
|
+
def initialize_core_object(model)
|
|
29
|
+
ensure_class_exist(model[:process_class_name])
|
|
30
|
+
|
|
31
|
+
# Ex: Hpcloud(ForjAccount, HpcloudProvider)
|
|
32
|
+
def_class = model[:def_class]
|
|
33
|
+
if model[:controller_class]
|
|
34
|
+
@core_object = def_class.new(@config,
|
|
35
|
+
model[:process_class].new,
|
|
36
|
+
model[:controller_class].new)
|
|
37
|
+
else
|
|
38
|
+
@core_object = def_class.new(@config,
|
|
39
|
+
model[:process_class].new)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Function to ensure a Class_name as already been loaded or not
|
|
44
|
+
# It raises an error if not.
|
|
45
|
+
def ensure_class_exist(class_name)
|
|
46
|
+
# Ensure Process class exists ---------------
|
|
47
|
+
Object.const_get(class_name)
|
|
48
|
+
rescue => e
|
|
49
|
+
raise Lorj::PrcError.new, format('Lorj::Core: Unable to find class'\
|
|
50
|
+
" '%s'\n%s", class_name, e.message)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Initialize the Application model structure for Initialization
|
|
54
|
+
#
|
|
55
|
+
# * *Returns* :
|
|
56
|
+
# - model : Basic model.
|
|
57
|
+
def initialize_model
|
|
58
|
+
{ :def_class => BaseDefinition,
|
|
59
|
+
:process_class => nil, :process_class_name => nil,
|
|
60
|
+
:controller_class => nil, :controller_class_name => nil }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Initialize a basic Config Object and use the one passed
|
|
64
|
+
# as parameter.
|
|
65
|
+
# It sets @config instance attribute
|
|
66
|
+
def init_core_config(the_config)
|
|
67
|
+
if the_config.nil?
|
|
68
|
+
@config = Lorj::Config.new
|
|
69
|
+
Lorj.debug(2, 'Using an internal Lorj::Config object.')
|
|
70
|
+
else
|
|
71
|
+
@config = the_config
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Function to initialize itself with application controller.
|
|
76
|
+
#
|
|
77
|
+
# * *Args* :
|
|
78
|
+
# - +model+ : Application model loaded.
|
|
79
|
+
# - +controller+ : Processes to load.
|
|
80
|
+
# supports :
|
|
81
|
+
# - nil => return []
|
|
82
|
+
# - String/Symbol => return [String/Symbol]
|
|
83
|
+
# - Array => return Array
|
|
84
|
+
#
|
|
85
|
+
# * *Returns* :
|
|
86
|
+
# - model : Application model loaded.
|
|
87
|
+
def init_controller(model, the_controller)
|
|
88
|
+
Lorj.debug(1, "Loading Controller/definition '%s'", the_controller)
|
|
89
|
+
|
|
90
|
+
ok = load_controller(model, the_controller)
|
|
91
|
+
|
|
92
|
+
PrcLib.warning("Controller '%s' not properly loaded.",
|
|
93
|
+
the_controller) unless ok
|
|
94
|
+
|
|
95
|
+
model
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Function to load a controller.
|
|
99
|
+
# This function helps to load a Controller process
|
|
100
|
+
# (See load_process_controller_file) if exists
|
|
101
|
+
# and load the core controller file
|
|
102
|
+
# (Seeload_controllerfile)
|
|
103
|
+
#
|
|
104
|
+
# * *Args* :
|
|
105
|
+
# - +the_controller+ : Controller to load. Can be a string or
|
|
106
|
+
# a path to a file
|
|
107
|
+
#
|
|
108
|
+
# * *Returns* :
|
|
109
|
+
# - load_status : true if loaded, false otherwise
|
|
110
|
+
def load_controller(model, the_controller)
|
|
111
|
+
load_process_controller(model, the_controller)
|
|
112
|
+
|
|
113
|
+
the_controller = the_controller.to_s unless the_controller.is_a?(String)
|
|
114
|
+
if the_controller.include?('/')
|
|
115
|
+
file = File.expand_path(the_controller)
|
|
116
|
+
else
|
|
117
|
+
file = controllerfile_from_default(the_controller)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
return PrcLib.warning('Controller not loaded: Controller file '\
|
|
121
|
+
"definition '%s' is missing.",
|
|
122
|
+
file) unless File.exist?(file)
|
|
123
|
+
load_controllerfile(model, file, classname_from_file(file))
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Load a Controller process file in ruby.
|
|
127
|
+
# If controller is a file, the process file name will be suffixed by
|
|
128
|
+
# _process, before the .rb file name.
|
|
129
|
+
#
|
|
130
|
+
# If controller is just a name (String/Symbol), it will load
|
|
131
|
+
# a file suffixed by _process.rb from PrcLib.controller_path
|
|
132
|
+
#
|
|
133
|
+
# * *Args* :
|
|
134
|
+
# - +model+ : Application/controller model loaded.
|
|
135
|
+
# - +controller+ : Symbol/String. Controller name or file to load.
|
|
136
|
+
#
|
|
137
|
+
# * *Returns* :
|
|
138
|
+
# - loaded : load status
|
|
139
|
+
def load_process_controller(model, the_controller)
|
|
140
|
+
Lorj.debug(1, "Loading process for controller '%s'", the_controller)
|
|
141
|
+
|
|
142
|
+
the_controller = the_controller.to_s unless the_controller.is_a?(String)
|
|
143
|
+
if the_controller.include?('/')
|
|
144
|
+
the_controller_process = the_controller.clone
|
|
145
|
+
the_controller_process['.rb'] = '_process.rb'
|
|
146
|
+
file = File.expand_path(the_controller_process)
|
|
147
|
+
else
|
|
148
|
+
file = controllerfile_from_default(the_controller, '_process')
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
return Lorj.debug(2, 'Process not loaded: Process controller file '\
|
|
152
|
+
"definition '%s' is missing.",
|
|
153
|
+
file) unless File.exist?(file)
|
|
154
|
+
load_processfile(model, file, classname_from_file(file))
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Load a Controller file in ruby.
|
|
158
|
+
#
|
|
159
|
+
# * *Args* :
|
|
160
|
+
# - +model+ : Application/controller model loaded.
|
|
161
|
+
# - +file+ : Process file to load.
|
|
162
|
+
# - +controller+ : Controller name or file to load.
|
|
163
|
+
#
|
|
164
|
+
# * *Returns* :
|
|
165
|
+
# - loaded : load status
|
|
166
|
+
def load_controllerfile(model, file, the_controller)
|
|
167
|
+
# Initialize an empty class derived from BaseDefinition.
|
|
168
|
+
# This to ensure provider Class will be derived from this Base Class
|
|
169
|
+
# If this class is derived from a different Class, ruby will raise an
|
|
170
|
+
# error.
|
|
171
|
+
|
|
172
|
+
# Create Definition and Controler derived from respectively
|
|
173
|
+
# BaseDefinition and BaseControler
|
|
174
|
+
base_definition_class = Class.new(BaseDefinition)
|
|
175
|
+
# Finally, name that class!
|
|
176
|
+
Lorj.debug(2, "Declaring Definition '%s'", the_controller)
|
|
177
|
+
Object.const_set the_controller, base_definition_class
|
|
178
|
+
|
|
179
|
+
model[:controller_class_name] = the_controller + 'Controller'
|
|
180
|
+
base_controller_class = Class.new(BaseController)
|
|
181
|
+
Lorj.debug(2, "Declaring Controller '%s'", model[:controller_class_name])
|
|
182
|
+
|
|
183
|
+
model[:controller_class] = Object.const_set model[:controller_class_name],
|
|
184
|
+
base_controller_class
|
|
185
|
+
|
|
186
|
+
# Loading Provider base file. This file should load a class
|
|
187
|
+
# which have the same name as the file.
|
|
188
|
+
load file
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Determine the controller file path from the single name.
|
|
192
|
+
# Uses PrcLib.controller_path as path to load this process.
|
|
193
|
+
#
|
|
194
|
+
# * *Args* :
|
|
195
|
+
# - +the_controller_class+ : Controller to load.
|
|
196
|
+
#
|
|
197
|
+
# * *Returns* :
|
|
198
|
+
# - file : absolute file path.
|
|
199
|
+
def controllerfile_from_default(the_controller, suffix = '')
|
|
200
|
+
File.join(PrcLib.controller_path, the_controller,
|
|
201
|
+
the_controller + suffix + '.rb')
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Define private Initialize functions for controllers
|
|
206
|
+
class Core
|
|
207
|
+
private
|
|
208
|
+
|
|
209
|
+
# Function to initialize itself with application processes.
|
|
210
|
+
#
|
|
211
|
+
# * *Args* :
|
|
212
|
+
# - +model+ : Application model loaded.
|
|
213
|
+
# - +processes+ : Processes to load.
|
|
214
|
+
# supports:
|
|
215
|
+
# - nil => return []
|
|
216
|
+
# - String/Symbol => return [String/Symbol]
|
|
217
|
+
# - Array => return Array
|
|
218
|
+
#
|
|
219
|
+
# * *Returns* :
|
|
220
|
+
# - model : Application model loaded.
|
|
221
|
+
def init_processes(model, processes)
|
|
222
|
+
process_array = processes_as_array(processes)
|
|
223
|
+
|
|
224
|
+
process_array.each do | a_process |
|
|
225
|
+
a_process = a_process.to_s if a_process.is_a?(Symbol)
|
|
226
|
+
unless load_process(model, a_process)
|
|
227
|
+
PrcLib.warning("Process '%s' not properly loaded.", a_process)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
model
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Function analyzing the process class parameter
|
|
234
|
+
# and return the list of processes in an
|
|
235
|
+
# array of processes.
|
|
236
|
+
#
|
|
237
|
+
# * *Args* :
|
|
238
|
+
# - +processes_parameter+ : Parameter to interpret.
|
|
239
|
+
# supports:
|
|
240
|
+
# - nil => return []
|
|
241
|
+
# - String/Symbol => return [String/Symbol]
|
|
242
|
+
# - Array => return Array
|
|
243
|
+
#
|
|
244
|
+
# * *Returns* :
|
|
245
|
+
# - array_processes : Array of processes.
|
|
246
|
+
def processes_as_array(processes_parameter)
|
|
247
|
+
return [] if processes_parameter.nil?
|
|
248
|
+
|
|
249
|
+
return [processes_parameter] unless processes_parameter.is_a?(Array)
|
|
250
|
+
|
|
251
|
+
processes_parameter
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# Function to load a process.
|
|
255
|
+
#
|
|
256
|
+
# * *Args* :
|
|
257
|
+
# - +the_process_+ : Process to load. Can be a string or
|
|
258
|
+
# a path to a file
|
|
259
|
+
#
|
|
260
|
+
# * *Returns* :
|
|
261
|
+
# - load_status : true if loaded, false otherwise
|
|
262
|
+
def load_process(model, the_process)
|
|
263
|
+
Lorj.debug(1, "Loading Process '%s'", the_process)
|
|
264
|
+
|
|
265
|
+
if the_process.include?('/')
|
|
266
|
+
file = File.expand_path(the_process)
|
|
267
|
+
else
|
|
268
|
+
file = processfile_from_default(the_process)
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
return PrcLib.warning("Process file definition '%s' is missing. ",
|
|
272
|
+
file) unless File.exist?(file)
|
|
273
|
+
|
|
274
|
+
load_processfile(model, file, classname_from_file(file))
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
# Function which determine the class name from the file name.
|
|
278
|
+
# rules:
|
|
279
|
+
# - First character : Capitalized
|
|
280
|
+
# - Any character prefixed by '_' : capitalized. '_' is removed.
|
|
281
|
+
#
|
|
282
|
+
# * *Args* :
|
|
283
|
+
# - +the_process_file+ : Process file to analyze.
|
|
284
|
+
#
|
|
285
|
+
# * *Returns* :
|
|
286
|
+
# - ProcessClassName : string representing the name of the class.
|
|
287
|
+
def classname_from_file(file)
|
|
288
|
+
the_process_class = File.basename(file)
|
|
289
|
+
|
|
290
|
+
the_process_class['.rb'] = '' if the_process_class['.rb']
|
|
291
|
+
|
|
292
|
+
if (/[A-Z]/ =~ the_process_class) != 0
|
|
293
|
+
the_process_class = the_process_class.capitalize
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
match_found = the_process_class.scan(/_[a-z]/)
|
|
297
|
+
if match_found
|
|
298
|
+
match_found.each { | str | the_process_class[str] = str[1].capitalize }
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
the_process_class
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Determine the process file path from the single name.
|
|
305
|
+
# Uses PrcLib.process_path as path to load this process.
|
|
306
|
+
#
|
|
307
|
+
# * *Args* :
|
|
308
|
+
# - +the_process_class+ : Process to load.
|
|
309
|
+
#
|
|
310
|
+
# * *Returns* :
|
|
311
|
+
# - file : absolute file path composed by:
|
|
312
|
+
# PrcLib.process_path/the_process_class + '.rb'
|
|
313
|
+
def processfile_from_default(the_process_class)
|
|
314
|
+
File.join(PrcLib.process_path, the_process_class + '.rb')
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
# Load a process file in ruby.
|
|
318
|
+
#
|
|
319
|
+
# * *Args* :
|
|
320
|
+
# - +file+ : Process file to load.
|
|
321
|
+
#
|
|
322
|
+
# * *Returns* :
|
|
323
|
+
# - loaded : load status
|
|
324
|
+
def load_processfile(model, file, the_process_class)
|
|
325
|
+
model[:process_class] = BaseProcess if model[:process_class].nil?
|
|
326
|
+
|
|
327
|
+
new_class = Class.new(model[:process_class])
|
|
328
|
+
unless /Process$/ =~ the_process_class
|
|
329
|
+
the_process_class = format('%sProcess', the_process_class)
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
Lorj.debug(1, "Declaring Process '%s'", the_process_class)
|
|
333
|
+
model[:process_class] = Object.const_set(the_process_class, new_class)
|
|
334
|
+
model[:process_class_name] = the_process_class
|
|
335
|
+
BaseDefinition.current_process(model[:process_class])
|
|
336
|
+
load file
|
|
337
|
+
end
|
|
338
|
+
end
|
|
339
|
+
end
|