lorj 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|