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, find_by_db_object, find_package_by_synonym, find_package_in_schema

Constructor Details

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

Returns a new instance of Package.



41
42
43
44
45
46
# File 'lib/plsql/package.rb', line 41

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)



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/plsql/package.rb', line 57

def method_missing(method, *args, &block)
  method = method.to_s
  method.chop! if (assignment = method[/=$/])

  case (object = self[method])
  when Procedure, PipelinedFunction
    raise ArgumentError, "Cannot assign value to package procedure '#{method.upcase}'" if assignment
    object.exec(*args, &block)
  when Variable
    if assignment
      raise ArgumentError, "Just one value can be assigned to package variable '#{method.upcase}'" unless args.size == 1 && block.nil?
      object.value = args[0]
    else
      raise ArgumentError, "Cannot pass arguments when getting package variable '#{method.upcase}' value" unless args.size == 0 && block.nil?
      object.value
    end
  else
    raise ArgumentError, "No PL/SQL procedure or variable '#{method.upcase}' found"
  end
end

Instance Method Details

#[](object_name) ⇒ Object



48
49
50
51
52
53
# File 'lib/plsql/package.rb', line 48

def [](object_name)
  object_name = object_name.to_s
  @package_objects[object_name] ||= [Procedure, Variable, PipelinedFunction].inject(nil) do |res, object_type|
    res || object_type.find(@schema, object_name, @package, @override_schema_name)
  end
end