module ActiveRecord::PLSQL::ProcedureMethods::ClassMethods
Public Instance Methods
procedure_method(method, procedure_name = method, options = {}, &block)
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 64 def procedure_method(method, procedure_name = method, options = {}, &block) procedure = if PLSQL::Procedure === procedure_name procedure_name else find_procedure(procedure_name) end # Raise error if procedure not found raise ArgumentError, "Procedure (%s) not found for method (%s)" % [procedure_name, method] unless procedure procedure_methods[method] = {procedure: procedure, options: options, block: block} unless (instance_methods + private_instance_methods).find {|m| m == method} generated_feature_methods.class_eval(<<-RUBY, __FILE__, __LINE__ + 1) def #{method}(arguments = {}, options = {}) call_procedure_method(:#{method}, arguments, options) end RUBY end end
procedure_methods()
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 60 def procedure_methods procedure_methods_cache[self] end
procedures_arguments()
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 85 def procedures_arguments @procedures_arguments ||= Hash.new do |cache, procedure| # Always select arguments of first function (overloading not supported) cache[procedure] = Hash[ procedure.arguments[0].sort_by {|arg| arg[1][:position]} ] end end
set_create_procedure(procedure, options = {}, &reload_block)
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 25 def set_create_procedure(procedure, options = {}, &reload_block) block ||= proc do |record, result| case result when Hash record.id = result.values.first when Numeric record.id = result else raise CannotFetchId, "Couldn't fetch primary key from create procedure (%s) result: %s" % [procedure, result.inspect] end reload_block ? reload_block.call(record) : record.reload record.instance_variable_set(:@new_record, true) record.id end procedure_method(:create, procedure, options, &block) set_create_method {call_procedure_method(:create)} end
set_destroy_procedure(procedure, options = {})
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 55 def set_destroy_procedure(procedure, options = {}) procedure_method(:destroy, procedure, options) set_delete_method {call_procedure_method(:destroy)} end
set_update_procedure(procedure, options = {})
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 47 def set_update_procedure(procedure, options = {}) procedure_method(:update, procedure, options) do |record| record.reload record.id end set_update_method {call_procedure_method(:update)} end
Private Instance Methods
find_procedure(procedure_name)
click to toggle source
# File lib/active_record/plsql/procedure_methods.rb, line 94 def find_procedure(procedure_name) procedure_name = procedure_name.to_s.split('.').compact case procedure_name.size when 2 plsql.send(procedure_name[0].to_sym)[procedure_name[1]] when 1 if plsql_package plsql_package[procedure_name[0]] || PLSQL::Procedure.find(plsql, procedure_name[0]) else PLSQL::Procedure.find(plsql, procedure_name[0]) end end end