example/students_3/process/students.rb in lorj-1.0.1 vs example/students_3/process/students.rb in lorj-1.0.2
- old
+ new
@@ -12,171 +12,37 @@
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-# Students process - Define specific handlers
+# Students process
class StudentsProcess
- # create_student process handler to get a student.
- #
- # * If not found, create it.
- # * If multiple found, remove duplicates
- # * otherwise return the one found.
- # rubocop:disable Metrics/MethodLength
def create_student(sObjectType, hParams)
PrcLib.state(format("Running creation process for object '%s' = '%s'",
sObjectType, hParams[:student_name]))
-
- list = process_query(sObjectType, :student_name => hParams[:student_name])
- case list.length
- when 0
- create_new_student(hParams[:student_name])
- when 1
- found_one_student(list[0], hParams[:student_name])
- else
- found_multiple_students(list, hParams[:student_name])
- end
- end
- # rubocop:enable Metrics/MethodLength
-
- private
-
- # Create a single new student
- def create_new_student(student_name)
- object = controller_create(:student)
- fail format("Student '%s' not created.", student_name) if object.nil?
-
- PrcLib.info(format("'student': '%s' created with id %s",
- student_name,
- object[:id]))
+ # byebug if ENV['BYEBUG'] # rubocop: disable Debugger
+ object = controller_create(sObjectType)
+ PrcLib.runtime_fail "Student '%s' not created.",
+ hParams[:student_name] if object.nil?
+ PrcLib.info("'%s': '%s' created with id %s",
+ sObjectType, hParams[:student_name], object[:id])
object
end
-
- # Identified 1 student
- def found_one_student(object, student_name)
- PrcLib.info(format("'student': '%s' loaded with id %s",
- student_name, object[:id]))
- object
- end
-
- # Identified multiple identical students
- # It will remove duplicated.
- def found_multiple_students(list, student_name)
- object = list[0]
- PrcLib.warning(format("More than one student named '%s' is found: %s "\
- 'records. Selecting the first one and removing '\
- 'duplicates.',
- student_name, list.length))
- remove_multiple_students(list[1..-1], student_name)
- object
- end
-
- # Remove list of identical students
- def remove_multiple_students(list, student_name)
- return false unless list.is_a?(Array)
- return false if list.length == 0
-
- count = 0
- list.each { | elem | count += remove_student_object(elem) }
- PrcLib.info(format("'student': %s duplicated '%s' removed. "\
- 'First loaded with id %s',
- count, student_name, object[:id]))
- end
-
- def remove_student_object(object)
- register(object)
- controller_delete(:student)
- end
-
- # The following handler is inactive.
- # It provides a simple print-out code.
- # If you want to activate it:
- # * uncomment query_student function
- # * update the :student data model
- # on query_e, replace controller_query by query_student
-
- # def query_student(sObjectType, sQuery, hParams)
- # PrcLib::state (format("Running query process for object '%s' "\
- # "with query '%s'",
- # sObjectType,
- # sQuery))
- #
- # objects = controller_query(sObjectType, sQuery)
- # raise "Query error." if objects.nil?
- #
- # PrcLib::info (format("'%s': Queried. %s records found.",
- # sObjectType,
- # objects.length))
- # objects
- # end
-
- # This handler is inactive.
- # It provides a simple print-out code.
- # If you want to activate it:
- # * uncomment get_student function
- # * update the :student data model
- # on get_e, replace controller_get by get_student
-
- # def delete_student(sObjectType, hParams)
- # controller_delete(:student)
- # PrcLib::info (format("'%s:%s' student removed",
- # hParams[:student, :id],
- # hParams[:student, :name]))
- # end
end
-module Lorj
- # Declaring your data model and handlers.
- # Process Handlers functions have to be declared before, as lorj check their
- # existence during data model definition.
- class BaseDefinition
- # We need to define the student object data model and process handlers to
- # use.
- # Process handlers must manipulate data defined here.
- #
- # The controller can redefine object for it needs, but should NEVER impact
- # the main process.
- # The controller can add specific process to deal with internal controller
- # objects.
- # But this should never influence the original process model.
+# Declaring your data model and handlers.
+class Lorj::BaseDefinition # rubocop: disable Style/ClassAndModuleChildren
+ # We need to define the student object and the handler to use while we need to
+ # create it.
+ define_obj(:student,
+ # The function to call in the class Students
+ :create_e => :create_student,
+ # We use predefined call to the controller query
+ :query_e => :controller_query,
+ # We use predefined call to the controller get
+ :get_e => :controller_get,
+ # We use predefined call to the controller delete
+ :delete_e => :controller_delete
+ )
- # Use define_obj, to declare the new object managed by lorj with process
- # handlers.
-
- define_obj(:student,
- # The function to call in the class Students
- :create_e => :create_student,
- # We use predefined call to the controller query
- :query_e => :controller_query,
- # We use predefined call to the controller delete
- :delete_e => :controller_delete
- )
-
- # obj_needs is used to declare parameters to pass to handlers.
- # :for indicates those parameters to be passed to create_e handler only.
- # Those data (or objects) will be collected and passed to the process
- # handler as hParams.
-
- obj_needs :data, :student_name, :for => [:create_e]
-
- # By default, all data are required.
- # You can set it as optional. Your process will need to deal with this
- # optional data.
- obj_needs_optional
- obj_needs :data, :first_name, :for => [:create_e]
- obj_needs :data, :last_name, :for => [:create_e]
- obj_needs :data, :course
- # Note that in this model, the training is renamed as course.
-
- # the controller will need to map it to 'training'.
-
- # def_attribute defines the data model.
- # The process will be able to access those data
- def_attribute :course
- def_attribute :student_name
- def_attribute :first_name
- def_attribute :last_name
- def_attribute :status
-
- undefine_attribute :name
- end
+ obj_needs :data, :student_name, :for => [:create_e], :mapping => :name
end