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_synonym, find_in_schema

Constructor Details

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

Returns a new instance of Package.



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

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)



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/plsql/package.rb', line 59

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

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

Instance Method Details

#[](object_name) ⇒ Object



50
51
52
53
54
55
# File 'lib/plsql/package.rb', line 50

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

#procedure_defined?(name) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/plsql/package.rb', line 46

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