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.



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

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)



58
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
# File 'lib/plsql/package.rb', line 58

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



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

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)


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

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