Module: ActiveRecord::PLSQL::ProcedureMethods::ClassMethods
- Defined in:
- lib/active_record/plsql/procedure_methods.rb
Instance Method Summary collapse
- #procedure_method(method, procedure_name = method, options = {}, &block) ⇒ Object
- #procedure_methods ⇒ Object
- #procedures_arguments ⇒ Object
- #set_create_procedure(procedure, options = {}, &reload_block) ⇒ Object
- #set_destroy_procedure(procedure, options = {}) ⇒ Object
- #set_update_procedure(procedure, options = {}) ⇒ Object
Instance Method Details
#procedure_method(method, procedure_name = method, options = {}, &block) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/active_record/plsql/procedure_methods.rb', line 64 def procedure_method(method, procedure_name = method, = {}, &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: , 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 ⇒ Object
60 61 62 |
# File 'lib/active_record/plsql/procedure_methods.rb', line 60 def procedure_methods procedure_methods_cache[self] end |
#procedures_arguments ⇒ Object
85 86 87 88 89 90 |
# 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) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/active_record/plsql/procedure_methods.rb', line 25 def set_create_procedure(procedure, = {}, &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, , &block) set_create_method {call_procedure_method(:create)} end |
#set_destroy_procedure(procedure, options = {}) ⇒ Object
55 56 57 58 |
# File 'lib/active_record/plsql/procedure_methods.rb', line 55 def set_destroy_procedure(procedure, = {}) procedure_method(:destroy, procedure, ) set_delete_method {call_procedure_method(:destroy)} end |
#set_update_procedure(procedure, options = {}) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/active_record/plsql/procedure_methods.rb', line 47 def set_update_procedure(procedure, = {}) procedure_method(:update, procedure, ) do |record| record.reload record.id end set_update_method {call_procedure_method(:update)} end |