ruby-plsql 0.5.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/stale.yml +37 -0
- data/.github/workflows/rubocop.yml +37 -0
- data/.github/workflows/test.yml +69 -0
- data/.rubocop.yml +147 -0
- data/.travis.yml +88 -0
- data/.travis/oracle/download.sh +15 -0
- data/.travis/oracle/install.sh +32 -0
- data/.travis/setup_accounts.sh +9 -0
- data/Gemfile +17 -9
- data/History.txt +76 -0
- data/README.md +29 -6
- data/Rakefile +31 -26
- data/VERSION +1 -1
- data/Vagrantfile +4 -4
- data/ci/network/admin/tnsnames.ora +7 -0
- data/ci/setup_accounts.sh +9 -0
- data/gemfiles/Gemfile.activerecord-5.0 +21 -0
- data/gemfiles/Gemfile.activerecord-5.1 +21 -0
- data/gemfiles/Gemfile.activerecord-5.2 +21 -0
- data/gemfiles/Gemfile.activerecord-6.0 +21 -0
- data/gemfiles/Gemfile.activerecord-6.1 +21 -0
- data/gemfiles/Gemfile.activerecord-main +21 -0
- data/lib/plsql/connection.rb +19 -22
- data/lib/plsql/helpers.rb +1 -3
- data/lib/plsql/jdbc_connection.rb +70 -68
- data/lib/plsql/oci8_patches.rb +2 -2
- data/lib/plsql/oci_connection.rb +62 -77
- data/lib/plsql/package.rb +61 -46
- data/lib/plsql/procedure.rb +358 -78
- data/lib/plsql/procedure_call.rb +508 -463
- data/lib/plsql/schema.rb +96 -101
- data/lib/plsql/sequence.rb +10 -13
- data/lib/plsql/sql_statements.rb +9 -11
- data/lib/plsql/table.rb +60 -63
- data/lib/plsql/type.rb +71 -76
- data/lib/plsql/variable.rb +90 -94
- data/lib/plsql/version.rb +1 -1
- data/lib/plsql/view.rb +16 -19
- data/ruby-plsql.gemspec +55 -35
- data/spec/plsql/connection_spec.rb +72 -66
- data/spec/plsql/package_spec.rb +63 -14
- data/spec/plsql/procedure_spec.rb +603 -261
- data/spec/plsql/schema_spec.rb +47 -23
- data/spec/plsql/sequence_spec.rb +2 -2
- data/spec/plsql/sql_statements_spec.rb +6 -6
- data/spec/plsql/table_spec.rb +84 -79
- data/spec/plsql/type_spec.rb +24 -30
- data/spec/plsql/variable_spec.rb +80 -88
- data/spec/plsql/version_spec.rb +4 -4
- data/spec/plsql/view_spec.rb +42 -42
- data/spec/spec_helper.rb +38 -35
- data/spec/support/create_arunit_user.sql +2 -0
- data/spec/support/custom_config.rb.sample +14 -0
- data/spec/support/test_db.rb +12 -13
- data/spec/support/unlock_and_setup_hr_user.sql +2 -0
- metadata +111 -34
data/spec/spec_helper.rb
CHANGED
@@ -1,50 +1,50 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
require "bundler"
|
3
3
|
Bundler.setup(:default, :development)
|
4
|
-
require
|
4
|
+
require "simplecov"
|
5
5
|
|
6
6
|
SimpleCov.configure do
|
7
|
-
load_profile
|
8
|
-
load_profile
|
7
|
+
load_profile "root_filter"
|
8
|
+
load_profile "test_frameworks"
|
9
9
|
end
|
10
10
|
|
11
11
|
ENV["COVERAGE"] && SimpleCov.start do
|
12
12
|
add_filter "/.rvm/"
|
13
13
|
end
|
14
14
|
|
15
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
16
|
-
require
|
15
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
16
|
+
require "rspec"
|
17
17
|
|
18
|
-
unless ENV[
|
19
|
-
require
|
18
|
+
unless ENV["NO_ACTIVERECORD"]
|
19
|
+
require "active_record"
|
20
20
|
else
|
21
|
-
puts
|
21
|
+
puts "Without ActiveRecord"
|
22
22
|
end
|
23
23
|
|
24
|
-
require
|
24
|
+
require "ruby-plsql"
|
25
25
|
|
26
26
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
27
27
|
# in spec/support/ and its subdirectories.
|
28
|
-
Dir[File.join(File.dirname(__FILE__),
|
28
|
+
Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each { |f| require f }
|
29
29
|
|
30
|
-
if ENV[
|
31
|
-
DATABASE_NAME =
|
30
|
+
if ENV["USE_VM_DATABASE"] == "Y"
|
31
|
+
DATABASE_NAME = "XE"
|
32
32
|
else
|
33
|
-
DATABASE_NAME = ENV[
|
33
|
+
DATABASE_NAME = ENV["DATABASE_NAME"] || "orcl"
|
34
34
|
end
|
35
35
|
|
36
36
|
DATABASE_SERVICE_NAME = (defined?(JRUBY_VERSION) ? "/" : "") +
|
37
|
-
(ENV[
|
38
|
-
DATABASE_HOST = ENV[
|
39
|
-
DATABASE_PORT = (ENV[
|
37
|
+
(ENV["DATABASE_SERVICE_NAME"] || DATABASE_NAME)
|
38
|
+
DATABASE_HOST = ENV["DATABASE_HOST"] || "localhost"
|
39
|
+
DATABASE_PORT = (ENV["DATABASE_PORT"] || 1521).to_i
|
40
40
|
DATABASE_USERS_AND_PASSWORDS = [
|
41
|
-
[ENV[
|
42
|
-
[ENV[
|
41
|
+
[ENV["DATABASE_USER"] || "hr", ENV["DATABASE_PASSWORD"] || "hr"],
|
42
|
+
[ENV["DATABASE_USER2"] || "arunit", ENV["DATABASE_PASSWORD2"] || "arunit"]
|
43
43
|
]
|
44
44
|
# specify which database version is used (will be verified in one test)
|
45
|
-
DATABASE_VERSION = ENV[
|
45
|
+
DATABASE_VERSION = ENV["DATABASE_VERSION"] || "10.2.0.4"
|
46
46
|
|
47
|
-
if ENV[
|
47
|
+
if ENV["USE_VM_DATABASE"] == "Y"
|
48
48
|
RSpec.configure do |config|
|
49
49
|
config.before(:suite) do
|
50
50
|
TestDb.build
|
@@ -58,13 +58,21 @@ if ENV['USE_VM_DATABASE'] == 'Y'
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
def oracle_error_class
|
62
|
+
unless defined?(JRUBY_VERSION)
|
63
|
+
OCIError
|
64
|
+
else
|
65
|
+
java.sql.SQLException
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
61
69
|
def get_eazy_connect_url(svc_separator = "")
|
62
70
|
"#{DATABASE_HOST}:#{DATABASE_PORT}#{svc_separator}#{DATABASE_SERVICE_NAME}"
|
63
71
|
end
|
64
72
|
|
65
73
|
def get_connection_url
|
66
74
|
unless defined?(JRUBY_VERSION)
|
67
|
-
(ENV[
|
75
|
+
(ENV["DATABASE_USE_TNS"] == "NO") ? get_eazy_connect_url("/") : DATABASE_NAME
|
68
76
|
else
|
69
77
|
"jdbc:oracle:thin:@#{get_eazy_connect_url}"
|
70
78
|
end
|
@@ -77,7 +85,7 @@ def get_connection(user_number = 0)
|
|
77
85
|
OCI8.new(database_user, database_password, get_connection_url)
|
78
86
|
end
|
79
87
|
else
|
80
|
-
try_to_connect(
|
88
|
+
try_to_connect(Java::JavaSql::SQLException) do
|
81
89
|
java.sql.DriverManager.getConnection(get_connection_url, database_user, database_password)
|
82
90
|
end
|
83
91
|
end
|
@@ -94,25 +102,20 @@ def try_to_connect(exception)
|
|
94
102
|
end
|
95
103
|
|
96
104
|
CONNECTION_PARAMS = {
|
97
|
-
:
|
98
|
-
:
|
99
|
-
:
|
100
|
-
:
|
101
|
-
:
|
102
|
-
:
|
105
|
+
adapter: "oracle_enhanced",
|
106
|
+
database: DATABASE_SERVICE_NAME,
|
107
|
+
host: DATABASE_HOST,
|
108
|
+
port: DATABASE_PORT,
|
109
|
+
username: DATABASE_USERS_AND_PASSWORDS[0][0],
|
110
|
+
password: DATABASE_USERS_AND_PASSWORDS[0][1]
|
103
111
|
}
|
104
112
|
|
105
113
|
class Hash
|
106
114
|
def except(*blacklist)
|
107
|
-
self.reject {|key, value| blacklist.include?(key) }
|
115
|
+
self.reject { |key, value| blacklist.include?(key) }
|
108
116
|
end unless method_defined?(:except)
|
109
117
|
|
110
118
|
def only(*whitelist)
|
111
|
-
self.reject {|key, value| !whitelist.include?(key) }
|
119
|
+
self.reject { |key, value| !whitelist.include?(key) }
|
112
120
|
end unless method_defined?(:only)
|
113
121
|
end
|
114
|
-
|
115
|
-
# set default time zone in TZ environment variable
|
116
|
-
# which will be used to set session time zone
|
117
|
-
ENV['TZ'] ||= 'Europe/Riga'
|
118
|
-
# ENV['TZ'] ||= 'UTC'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Template file should be copied to locale_support.rb to be automatically included by code
|
2
|
+
#
|
3
|
+
|
4
|
+
# Set Oracle Database session timezone, if not already set in env variable
|
5
|
+
# This setting needs to be in place to make sure that Oracle properly represents the timestamp format on your local machine.
|
6
|
+
# Do not use 'OS_TZ' value or fixed offset values like '05:00', for daylight saving-enabled timezones.
|
7
|
+
# See: http://docs.oracle.com/cd/E18283_01/server.112/e10729/ch4datetime.htm#CBBEEAFB
|
8
|
+
# The setting cannot be derived directly from operating system or ruby, as different timezone names are used.
|
9
|
+
ENV['ORA_SDTZ'] ||= 'Europe/Riga'
|
10
|
+
#Sets the Ruby timezone to be used, if not already set in env variable
|
11
|
+
ENV['TZ'] ||= 'Europe/Riga'
|
12
|
+
#Sets the Language, locale and encoding settings to be used by Oracle session, if not already set in env variable
|
13
|
+
ENV['NLS_LANG'] ||= 'AMERICAN_AMERICA.AL32UTF8'
|
14
|
+
|
data/spec/support/test_db.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class TestDb
|
2
|
-
|
3
2
|
DATABASE_USERS = %w{hr arunit}
|
4
3
|
|
5
4
|
def self.build
|
@@ -11,8 +10,8 @@ class TestDb
|
|
11
10
|
end
|
12
11
|
|
13
12
|
def self.database_version
|
14
|
-
|
15
|
-
|
13
|
+
db = self.new
|
14
|
+
db.database_version
|
16
15
|
end
|
17
16
|
|
18
17
|
def connection
|
@@ -21,15 +20,15 @@ class TestDb
|
|
21
20
|
Timeout::timeout(5) {
|
22
21
|
if defined?(JRUBY_VERSION)
|
23
22
|
@connection = java.sql.DriverManager.get_connection(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
)
|
23
|
+
"jdbc:oracle:thin:@127.0.0.1:1521/XE",
|
24
|
+
"system",
|
25
|
+
"oracle"
|
26
|
+
)
|
28
27
|
else
|
29
28
|
@connection = OCI8.new(
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
"system",
|
30
|
+
"oracle",
|
31
|
+
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))"
|
33
32
|
)
|
34
33
|
end
|
35
34
|
}
|
@@ -61,7 +60,7 @@ class TestDb
|
|
61
60
|
end
|
62
61
|
|
63
62
|
def database_users
|
64
|
-
DATABASE_USERS.inject([]){|array, user| array << [user.upcase, user]}
|
63
|
+
DATABASE_USERS.inject([]) { |array, user| array << [user.upcase, user] }
|
65
64
|
end
|
66
65
|
|
67
66
|
def cleanup_database_users
|
@@ -118,14 +117,14 @@ class TestDb
|
|
118
117
|
end
|
119
118
|
|
120
119
|
def database_version
|
121
|
-
query =
|
120
|
+
query = "SELECT version FROM V$INSTANCE"
|
122
121
|
|
123
122
|
if defined?(JRUBY_VERSION)
|
124
123
|
statement = connection.create_statement
|
125
124
|
resource = statement.execute_query(query)
|
126
125
|
|
127
126
|
resource.next
|
128
|
-
value = resource.get_string(
|
127
|
+
value = resource.get_string("VERSION")
|
129
128
|
|
130
129
|
resource.close
|
131
130
|
statement.close
|
metadata
CHANGED
@@ -1,83 +1,141 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-plsql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raimonds Simanovskis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: juwelier
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.0
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rspec_junit_formatter
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rubocop
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '0.81'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.81'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop-performance
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
48
59
|
- - ">="
|
49
60
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
61
|
+
version: '0'
|
51
62
|
type: :development
|
52
63
|
prerelease: false
|
53
64
|
version_requirements: !ruby/object:Gem::Requirement
|
54
65
|
requirements:
|
55
|
-
- - "
|
66
|
+
- - ">="
|
56
67
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-rails
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
58
80
|
- - ">="
|
59
81
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
82
|
+
version: '0'
|
61
83
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
84
|
+
name: rake
|
63
85
|
requirement: !ruby/object:Gem::Requirement
|
64
86
|
requirements:
|
65
|
-
- - "
|
87
|
+
- - ">="
|
66
88
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
68
94
|
- - ">="
|
69
95
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.1'
|
71
104
|
type: :development
|
72
105
|
prerelease: false
|
73
106
|
version_requirements: !ruby/object:Gem::Requirement
|
74
107
|
requirements:
|
75
|
-
- - "
|
108
|
+
- - "~>"
|
76
109
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1
|
78
|
-
|
110
|
+
version: '3.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: activerecord
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '5.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '5.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activerecord-oracle_enhanced-adapter
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.7'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
79
137
|
- !ruby/object:Gem::Version
|
80
|
-
version: 1.
|
138
|
+
version: '1.7'
|
81
139
|
- !ruby/object:Gem::Dependency
|
82
140
|
name: simplecov
|
83
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,24 +156,32 @@ dependencies:
|
|
98
156
|
requirements:
|
99
157
|
- - "~>"
|
100
158
|
- !ruby/object:Gem::Version
|
101
|
-
version: 2.1
|
159
|
+
version: '2.1'
|
102
160
|
type: :development
|
103
161
|
prerelease: false
|
104
162
|
version_requirements: !ruby/object:Gem::Requirement
|
105
163
|
requirements:
|
106
164
|
- - "~>"
|
107
165
|
- !ruby/object:Gem::Version
|
108
|
-
version: 2.1
|
109
|
-
description: |
|
110
|
-
|
111
|
-
|
112
|
-
|
166
|
+
version: '2.1'
|
167
|
+
description: |2
|
168
|
+
ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.
|
169
|
+
It could be used both for accessing Oracle PL/SQL API procedures in legacy applications
|
170
|
+
as well as it could be used to create PL/SQL unit tests using Ruby testing libraries.
|
113
171
|
email: raimonds.simanovskis@gmail.com
|
114
172
|
executables: []
|
115
173
|
extensions: []
|
116
174
|
extra_rdoc_files:
|
117
175
|
- README.md
|
118
176
|
files:
|
177
|
+
- ".github/stale.yml"
|
178
|
+
- ".github/workflows/rubocop.yml"
|
179
|
+
- ".github/workflows/test.yml"
|
180
|
+
- ".rubocop.yml"
|
181
|
+
- ".travis.yml"
|
182
|
+
- ".travis/oracle/download.sh"
|
183
|
+
- ".travis/oracle/install.sh"
|
184
|
+
- ".travis/setup_accounts.sh"
|
119
185
|
- Gemfile
|
120
186
|
- History.txt
|
121
187
|
- License.txt
|
@@ -123,6 +189,14 @@ files:
|
|
123
189
|
- Rakefile
|
124
190
|
- VERSION
|
125
191
|
- Vagrantfile
|
192
|
+
- ci/network/admin/tnsnames.ora
|
193
|
+
- ci/setup_accounts.sh
|
194
|
+
- gemfiles/Gemfile.activerecord-5.0
|
195
|
+
- gemfiles/Gemfile.activerecord-5.1
|
196
|
+
- gemfiles/Gemfile.activerecord-5.2
|
197
|
+
- gemfiles/Gemfile.activerecord-6.0
|
198
|
+
- gemfiles/Gemfile.activerecord-6.1
|
199
|
+
- gemfiles/Gemfile.activerecord-main
|
126
200
|
- lib/plsql/connection.rb
|
127
201
|
- lib/plsql/helpers.rb
|
128
202
|
- lib/plsql/jdbc_connection.rb
|
@@ -155,10 +229,14 @@ files:
|
|
155
229
|
- spec/plsql/view_spec.rb
|
156
230
|
- spec/spec.opts
|
157
231
|
- spec/spec_helper.rb
|
232
|
+
- spec/support/create_arunit_user.sql
|
233
|
+
- spec/support/custom_config.rb.sample
|
158
234
|
- spec/support/file_check_script.sh
|
159
235
|
- spec/support/test_db.rb
|
236
|
+
- spec/support/unlock_and_setup_hr_user.sql
|
160
237
|
homepage: http://github.com/rsim/ruby-plsql
|
161
|
-
licenses:
|
238
|
+
licenses:
|
239
|
+
- MIT
|
162
240
|
metadata: {}
|
163
241
|
post_install_message:
|
164
242
|
rdoc_options: []
|
@@ -175,8 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
253
|
- !ruby/object:Gem::Version
|
176
254
|
version: '0'
|
177
255
|
requirements: []
|
178
|
-
|
179
|
-
rubygems_version: 2.4.6
|
256
|
+
rubygems_version: 3.2.22
|
180
257
|
signing_key:
|
181
258
|
specification_version: 4
|
182
259
|
summary: Ruby API for calling Oracle PL/SQL procedures.
|