Class: PLSQL::Package

Inherits:
Object
  • Object
show all
Extended by:
PackageClassMethods
Defined in:
lib/plsql/package.rb

Overview

:nodoc:

Instance Method Summary collapse

Methods included from PackageClassMethods

find

Constructor Details

#initialize(schema, package, override_schema_name = nil) ⇒ Package

Returns a new instance of Package.



33
34
35
36
37
38
# File 'lib/plsql/package.rb', line 33

def initialize(schema, package, override_schema_name = nil)
  @schema = schema
  @override_schema_name = override_schema_name
  @package = package.to_s.upcase
  @package_objects = {}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object (private)



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/plsql/package.rb', line 46

def method_missing(method, *args, &block)
  if assignment = (method.to_s[-1,1] == '=')
    method = method.to_s.chop.to_sym
  end
  object = (@package_objects[method] ||=
    Procedure.find(@schema, method, @package, @override_schema_name) ||
    Variable.find(@schema, method, @package, @override_schema_name))
  case object
  when Procedure
    raise ArgumentError, "Cannot assign value to package procedure '#{method.to_s.upcase}'" if assignment
    object.exec(*args, &block)
  when Variable
    if assignment
      raise ArgumentError, "Just one value can be assigned to package variable '#{method.to_s.upcase}'" unless args.size == 1 && block == nil
      object.value = args[0]
    else
      raise ArgumentError, "Cannot pass arguments when getting package variable '#{method.to_s.upcase}' value" unless args.size == 0 && block == nil
      object.value
    end
  else
    raise ArgumentError, "No PL/SQL procedure or variable '#{method.to_s.upcase}' found"
  end
end

Instance Method Details

#procedure_defined?(name) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/plsql/package.rb', line 40

def procedure_defined?(name)
  PLSQL::Procedure.find(@schema, name, @package) ? true : false
end