ruby-oci8 2.1.4 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -394,6 +394,7 @@ EOS
394
394
  nls_data_basename = ['oraociei11', 'oraociicus11', 'oraociei10', 'oraociicus10']
395
395
  @@ld_envs = %w[PATH]
396
396
  so_ext = 'dll'
397
+ check_proc = make_proc_to_check_cpu(is_32bit ? :i386 : :x86_64)
397
398
  when /i.86-linux/
398
399
  check_proc = make_proc_to_check_cpu(:i386)
399
400
  when /ia64-linux/
@@ -847,7 +848,7 @@ EOS
847
848
  unless File.exist?("#{@oracle_home}/OCI/INCLUDE/OCI.H")
848
849
  raise "'#{@oracle_home}/OCI/INCLUDE/OCI.H' does not exists. Please install 'Oracle Call Interface'."
849
850
  end
850
- if RUBY_PLATFORM =~ /cygwin/
851
+ if RUBY_PLATFORM =~ /cygwin|mingw32/
851
852
  " \"-I#{@oracle_home}/OCI/INCLUDE\" -D_int64=\"long long\""
852
853
  else
853
854
  " \"-I#{@oracle_home}/OCI/INCLUDE\""
@@ -971,7 +972,7 @@ EOS
971
972
  raise 'failed'
972
973
  end
973
974
  @cflags = " \"-I#{inc_dir}\""
974
- @cflags += " -D_int64=\"long long\"" if RUBY_PLATFORM =~ /cygwin/
975
+ @cflags += " -D_int64=\"long long\"" if RUBY_PLATFORM =~ /cygwin|mingw32/
975
976
  @libs = get_libs("#{ic_dir}/sdk/lib")
976
977
  ld_path = nil
977
978
  else
@@ -82,7 +82,7 @@ require so_basename
82
82
 
83
83
  if OCI8::VERSION != '@@OCI8_MODULE_VERSION@@'
84
84
  require 'rbconfig'
85
- so_name = so_basename + "." + Config::CONFIG['DLEXT']
85
+ so_name = so_basename + "." + RbConfig::CONFIG['DLEXT']
86
86
  raise "VERSION MISMATCH! #{so_name} version is #{OCI8::VERSION}, but oci8.rb version is @@OCI8_MODULE_VERSION@@."
87
87
  end
88
88
 
@@ -1,6 +1,6 @@
1
1
  # oci8.rb -- implements OCI8::Metadata.
2
2
  #
3
- # Copyright (C) 2006-2010 KUBO Takehiro <kubo@jiubao.org>
3
+ # Copyright (C) 2006-2013 Kubo Takehiro <kubo@jiubao.org>
4
4
  #
5
5
  # See {'Describing Schema Metadata' in Oracle Call Interface Programmer's Guide}
6
6
  # [http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci06des.htm]
@@ -14,33 +14,33 @@ class OCI8
14
14
  # OCI8::Metadata::Base's subclass.
15
15
  #
16
16
  # List of methods which return OCI8::Metadata::Base.
17
- # * OCI8#describe_any(object_name)
18
- # * OCI8#describe_table(table_name, table_only = false)
19
- # * OCI8#describe_view(view_name)
20
- # * OCI8#describe_procedure(procedure_name)
21
- # * OCI8#describe_function(function_name)
22
- # * OCI8#describe_package(package_name)
23
- # * OCI8#describe_type(type_name)
24
- # * OCI8#describe_synonym(synonym_name, check_public_also = true)
25
- # * OCI8#describe_sequence(sequence_name)
26
- # * OCI8#describe_schema(schema_name)
27
- # * OCI8#describe_database(database_name)
28
- # * OCI8::Metadata::Type#map_method
29
- # * OCI8::Metadata::Type#order_method
30
- # * OCI8::Metadata::Type#collection_element
17
+ # * {OCI8#describe_any OCI8#describe_any(object_name)}
18
+ # * {OCI8#describe_table OCI8#describe_table(table_name, table_only = false)}
19
+ # * {OCI8#describe_view OCI8#describe_view(view_name)}
20
+ # * {OCI8#describe_procedure OCI8#describe_procedure(procedure_name)}
21
+ # * {OCI8#describe_function OCI8#describe_function(function_name)}
22
+ # * {OCI8#describe_package OCI8#describe_package(package_name)}
23
+ # * {OCI8#describe_type OCI8#describe_type(type_name)}
24
+ # * {OCI8#describe_synonym OCI8#describe_synonym(synonym_name, check_public_also = true)}
25
+ # * {OCI8#describe_sequence OCI8#describe_sequence(sequence_name)}
26
+ # * {OCI8#describe_schema OCI8#describe_schema(schema_name)}
27
+ # * {OCI8#describe_database OCI8#describe_database(database_name)}
28
+ # * {OCI8::Metadata::Type#map_method OCI8::Metadata::Type#map_method}
29
+ # * {OCI8::Metadata::Type#order_method OCI8::Metadata::Type#order_method}
30
+ # * {OCI8::Metadata::Type#collection_element OCI8::Metadata::Type#collection_element}
31
31
  #
32
32
  # List of methods which return an array of OCI8::Metadata::Base.
33
- # * OCI8::Cursor#column_metadata
34
- # * OCI8::Metadata::Database#schemas
35
- # * OCI8::Metadata::Schema#all_objects
36
- # * OCI8::Metadata::Schema#objects
37
- # * OCI8::Metadata::Table#columns
38
- # * OCI8::Metadata::Package#subprograms
39
- # * OCI8::Metadata::Procedure#arguments
40
- # * OCI8::Metadata::Function#arguments
41
- # * OCI8::Metadata::Type#type_attrs
42
- # * OCI8::Metadata::Type#type_methods
43
- # * OCI8::Metadata::TypeMethod#arguments
33
+ # * {OCI8::Cursor#column_metadata OCI8::Cursor#column_metadata}
34
+ # * {OCI8::Metadata::Database#schemas OCI8::Metadata::Database#schemas}
35
+ # * {OCI8::Metadata::Schema#all_objects OCI8::Metadata::Schema#all_objects}
36
+ # * {OCI8::Metadata::Schema#objects OCI8::Metadata::Schema#objects}
37
+ # * {OCI8::Metadata::Table#columns OCI8::Metadata::Table#columns}
38
+ # * {OCI8::Metadata::Package#subprograms OCI8::Metadata::Package#subprograms}
39
+ # * {OCI8::Metadata::Subprogram#arguments OCI8::Metadata::Procedure#arguments}
40
+ # * {OCI8::Metadata::Subprogram#arguments OCI8::Metadata::Function#arguments}
41
+ # * {OCI8::Metadata::Type#type_attrs OCI8::Metadata::Type#type_attrs}
42
+ # * {OCI8::Metadata::Type#type_methods OCI8::Metadata::Type#type_methods}
43
+ # * {OCI8::Metadata::TypeMethod#arguments OCI8::Metadata::TypeMethod#arguments}
44
44
  #
45
45
  # Example:
46
46
  # conn = OCI8.new('username/passord')
@@ -54,34 +54,31 @@ class OCI8
54
54
  # Table 6-1 Attributes Belonging to All Parameters
55
55
 
56
56
  # Returns the number of parameters.
57
- def num_params # :nodoc:
57
+ def num_params
58
58
  attr_get_ub2(OCI_ATTR_NUM_PARAMS)
59
59
  end
60
60
  private :num_params
61
61
 
62
- # Returns the object ID, which is the same as the value of the
63
- # OBJECT_ID column from ALL_OBJECTS. It returns +nil+
64
- # if the database object doesn't have ID.
62
+ # Returns the object ID which corresponds to the data dictionary
63
+ # view column ALL_OBJECTS.OBJECT_ID.
65
64
  #
66
65
  # @return [Integer or nil]
67
66
  def obj_id
68
- attr_get_ub4(OCI_ATTR_OBJ_ID)
67
+ attr_get_ub4(OCI_ATTR_OBJ_ID, false)
69
68
  end
70
69
 
71
- # Retruns the object name such as table name, view name,
72
- # procedure name, and so on.
70
+ # Returns the object name which corresponds to the data dictionary view column ALL_OBJECTS.OBJECT_NAME.
73
71
  #
74
- # @return [String]
72
+ # @return [String or nil] object name
75
73
  def obj_name
76
- attr_get_string(OCI_ATTR_OBJ_NAME)
74
+ attr_get_string(OCI_ATTR_OBJ_NAME, false)
77
75
  end
78
76
 
79
- # Retruns the schema name. It returns +nil+
80
- # if the database object is not defined just under a schema.
77
+ # Returns the schema name which corresponds to the data dictionary view column ALL_OBJECTS.OWNER.
81
78
  #
82
- # @return [String]
79
+ # @return [String or nil] schema name
83
80
  def obj_schema
84
- attr_get_string(OCI_ATTR_OBJ_SCHEMA)
81
+ attr_get_string(OCI_ATTR_OBJ_SCHEMA, false)
85
82
  end
86
83
 
87
84
  # The timestamp of the object
@@ -92,7 +89,8 @@ class OCI8
92
89
  # attr_get_oradate(OCI_ATTR_TIMESTAMP)
93
90
  #end
94
91
 
95
- def inspect # :nodoc:
92
+ # @private
93
+ def inspect
96
94
  "#<#{self.class.name}:(#{obj_id}) #{obj_schema}.#{obj_name}>"
97
95
  end
98
96
  private
@@ -103,8 +101,9 @@ class OCI8
103
101
  alias __word attr_get_sb4
104
102
  def __anydata(idx); raise NotImplementedError; end
105
103
 
106
- # SQLT values to name
107
- DATA_TYPE_MAP = {} # :nodoc:
104
+ # Mapping from SQLT values to names
105
+ # @private
106
+ DATA_TYPE_MAP = {}
108
107
 
109
108
  # SQLT_CHR
110
109
  DATA_TYPE_MAP[1] = [:varchar2,
@@ -346,7 +345,7 @@ class OCI8
346
345
  # into other metadata classes.
347
346
  #
348
347
  # An instance of this class is returned by:
349
- # * OCI8::Metadata::Schema#all_objects
348
+ # * {OCI8::Metadata::Schema#all_objects OCI8::Metadata::Schema#all_objects}
350
349
  class Unknown < Base
351
350
  register_ptype OCI_PTYPE_UNK
352
351
  end
@@ -354,14 +353,10 @@ class OCI8
354
353
  # Information about tables
355
354
  #
356
355
  # An instance of this class is returned by:
357
- # * OCI8#describe_any(name)
358
- # * OCI8#describe_table(name)
359
- # * OCI8::Metadata::Schema#all_objects
360
- # * OCI8::Metadata::Schema#objects
361
- #
362
- # See also:
363
- # * OCI8::Metadata::Base#obj_name
364
- # * OCI8::Metadata::Base#obj_schema
356
+ # * {OCI8#describe_any OCI8#describe_any(name)}
357
+ # * {OCI8#describe_table OCI8#describe_table(name)}
358
+ # * {OCI8::Metadata::Schema#all_objects OCI8::Metadata::Schema#all_objects}
359
+ # * {OCI8::Metadata::Schema#objects OCI8::Metadata::Schema#objects}
365
360
  class Table < Base
366
361
  register_ptype OCI_PTYPE_TABLE
367
362
 
@@ -464,15 +459,11 @@ class OCI8
464
459
  # Information about views
465
460
  #
466
461
  # An instance of this class is returned by:
467
- # * OCI8#describe_any(name)
468
- # * OCI8#describe_table(name, false)
469
- # * OCI8#describe_view(name)
470
- # * OCI8::Metadata::Schema#all_objects
471
- # * OCI8::Metadata::Schema#objects
472
- #
473
- # See also:
474
- # * OCI8::Metadata::Base#obj_name
475
- # * OCI8::Metadata::Base#obj_schema
462
+ # * {OCI8#describe_any OCI8#describe_any(name)}
463
+ # * {OCI8#describe_table OCI8#describe_table(name, false)}
464
+ # * {OCI8#describe_view OCI8#describe_view(name)}
465
+ # * {OCI8::Metadata::Schema#all_objects OCI8::Metadata::Schema#all_objects}
466
+ # * {OCI8::Metadata::Schema#objects OCI8::Metadata::Schema#objects}
476
467
  class View < Base
477
468
  register_ptype OCI_PTYPE_VIEW
478
469
 
@@ -525,8 +516,8 @@ class OCI8
525
516
  # with a set of parameters. A subprogram can be either a procedure
526
517
  # or a function.
527
518
  #
528
- # This is the abstract base class of OCI8::Metadata::Procedure and
529
- # OCI8::Metadata::Function.
519
+ # This is the abstract base class of {OCI8::Metadata::Procedure OCI8::Metadata::Procedure} and
520
+ # {OCI8::Metadata::Function OCI8::Metadata::Function}.
530
521
  class Subprogram < Base
531
522
  ## Table 6-4 Attribute Belonging to Procedures or Functions
532
523
 
@@ -565,9 +556,9 @@ class OCI8
565
556
  alias name obj_name # :nodoc: for backward compatibility
566
557
 
567
558
  # Returns +nil+ for a standalone stored subprogram,
568
- # positive integer for a
569
- # {overloaded packaged subprogram}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#i12352].
570
- # , otherwise zero.
559
+ # positive integer for an
560
+ # {overloaded packaged subprogram}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#i12352],
561
+ # otherwise zero.
571
562
  #
572
563
  # @return [Integer or nil]
573
564
  def overload_id
@@ -589,7 +580,8 @@ class OCI8
589
580
  @is_standalone
590
581
  end
591
582
 
592
- def inspect # :nodoc:
583
+ # @private
584
+ def inspect
593
585
  "#<#{self.class.name}: #{name}>"
594
586
  end
595
587
  end
@@ -1230,7 +1222,7 @@ class OCI8
1230
1222
  end
1231
1223
 
1232
1224
  def inspect # :nodoc:
1233
- "#<#{self.class.name}:(#{obj_id}) #{obj_schema}.#{obj_name}>"
1225
+ "#<#{self.class.name}:(#{obj_id}) #{obj_schema}.#{obj_name} FOR #{translated_name}>"
1234
1226
  end
1235
1227
  end
1236
1228
 
@@ -394,7 +394,6 @@ EOS
394
394
  @instance_methods = {}
395
395
  metadata.type_methods.each_with_index do |type_method, i|
396
396
  next if type_method.is_constructor? or type_method.is_destructor?
397
- args = type_method.arguments
398
397
 
399
398
  result_type = nil
400
399
  if type_method.has_result?
@@ -1,6 +1,6 @@
1
1
  # oci8.rb -- OCI8
2
2
  #
3
- # Copyright (C) 2002-2012 KUBO Takehiro <kubo@jiubao.org>
3
+ # Copyright (C) 2002-2013 Kubo Takehiro <kubo@jiubao.org>
4
4
  #
5
5
  # Original Copyright is:
6
6
  # Oracle module for Ruby
@@ -123,48 +123,38 @@ class OCI8
123
123
  stmt_cache_size = OCI8.properties[:statement_cache_size]
124
124
  stmt_cache_size = nil if stmt_cache_size == 0
125
125
 
126
- if mode.nil? and cred.nil?
127
- # logon by the OCI function OCILogon2().
128
- logon2_mode = 0
129
- if dbname.is_a? OCI8::ConnectionPool
130
- @pool = dbname # to prevent GC from freeing the connection pool.
131
- dbname = dbname.send(:pool_name)
132
- logon2_mode |= 0x0200 # OCI_LOGON2_CPOOL
133
- end
134
- if stmt_cache_size
135
- # enable statement caching
136
- logon2_mode |= 0x0004 # OCI_LOGON2_STMTCACHE
137
- end
138
-
139
- logon2(username, password, dbname, logon2_mode)
126
+ attach_mode = 0
127
+ if dbname.is_a? OCI8::ConnectionPool
128
+ @pool = dbname # to prevent GC from freeing the connection pool.
129
+ dbname = dbname.send(:pool_name)
130
+ attach_mode |= 0x0200 # OCI_CPOOL and OCI_LOGON2_CPOOL
131
+ end
132
+ if stmt_cache_size
133
+ # enable statement caching
134
+ attach_mode |= 0x0004 # OCI_STMT_CACHE and OCI_LOGON2_STMTCACHE
135
+ end
140
136
 
141
- if stmt_cache_size
142
- # set statement cache size
143
- attr_set_ub4(176, stmt_cache_size) # 176: OCI_ATTR_STMTCACHESIZE
144
- end
145
- else
137
+ if true
146
138
  # logon by the OCI function OCISessionBegin().
147
- attach_mode = 0
148
- if dbname.is_a? OCI8::ConnectionPool
149
- @pool = dbname # to prevent GC from freeing the connection pool.
150
- dbname = dbname.send(:pool_name)
151
- attach_mode |= 0x0200 # OCI_CPOOL
152
- end
153
- if stmt_cache_size
154
- # enable statement caching
155
- attach_mode |= 0x0004 # OCI_STMT_CACHE
156
- end
157
-
158
139
  allocate_handles()
159
140
  @session_handle.send(:attr_set_string, OCI_ATTR_USERNAME, username) if username
160
141
  @session_handle.send(:attr_set_string, OCI_ATTR_PASSWORD, password) if password
142
+ if @@oracle_client_version >= ORAVER_11_1
143
+ # 'rubyoci8' is displayed in V$SESSION_CONNECT_INFO.CLIENT_DRIVER
144
+ # if both the client and the server are Oracle 11g or upper.
145
+ # 424: OCI_ATTR_DRIVER_NAME
146
+ @session_handle.send(:attr_set_string, 424, 'rubyoci8')
147
+ end
161
148
  server_attach(dbname, attach_mode)
162
149
  session_begin(cred ? cred : OCI_CRED_RDBMS, mode ? mode : OCI_DEFAULT)
150
+ else
151
+ # logon by the OCI function OCILogon2().
152
+ logon2(username, password, dbname, attach_mode)
153
+ end
163
154
 
164
- if stmt_cache_size
165
- # set statement cache size
166
- attr_set_ub4(176, stmt_cache_size) # 176: OCI_ATTR_STMTCACHESIZE
167
- end
155
+ if stmt_cache_size
156
+ # set statement cache size
157
+ attr_set_ub4(176, stmt_cache_size) # 176: OCI_ATTR_STMTCACHESIZE
168
158
  end
169
159
 
170
160
  @prefetch_rows = nil
@@ -339,6 +329,16 @@ class OCI8
339
329
  end
340
330
  end
341
331
 
332
+ # Sets the prefetch rows size. The default value is one.
333
+ # When a select statement is executed, the OCI library allocate
334
+ # prefetch buffer to reduce the number of network round trips by
335
+ # retrieving specified number of rows in one round trip.
336
+ #
337
+ # Note: Active record adaptors set 100 by default.
338
+ def prefetch_rows=(num)
339
+ @prefetch_rows = num
340
+ end
341
+
342
342
  # @private
343
343
  def inspect
344
344
  "#<OCI8:#{username}>"
@@ -1,6 +1,6 @@
1
1
  # oracle_version.rb implements OCI8::OracleVersion.
2
2
  #
3
- # Copyright (C) 2009 KUBO Takehiro <kubo@jiubao.org>
3
+ # Copyright (C) 2009-2013 Kubo Takehiro <kubo@jiubao.org>
4
4
 
5
5
  #
6
6
  class OCI8
@@ -21,9 +21,9 @@ class OCI8
21
21
  attr_reader :minor
22
22
  # The third part of the Oracle version.
23
23
  attr_reader :update
24
- # The fifth part of the Oracle version.
25
- attr_reader :patch
26
24
  # The fourth part of the Oracle version.
25
+ attr_reader :patch
26
+ # The fifth part of the Oracle version.
27
27
  attr_reader :port_update
28
28
 
29
29
  # Creates an OCI8::OracleVersion object.
@@ -80,6 +80,7 @@ class OCI8
80
80
  @update = update || 0
81
81
  @patch = patch || 0
82
82
  @port_update = port_update || 0
83
+ @vernum = (@major << 24) | (@minor << 20) | (@update << 12) | (@patch << 8) | @port_update
83
84
  end
84
85
 
85
86
  # Compares +self+ and +other+.
@@ -89,15 +90,7 @@ class OCI8
89
90
  #
90
91
  # @return [-1, 0, +1]
91
92
  def <=>(other)
92
- cmp = @major <=> other.major
93
- return cmp if cmp != 0
94
- cmp = @minor <=> other.minor
95
- return cmp if cmp != 0
96
- cmp = @update <=> other.update
97
- return cmp if cmp != 0
98
- cmp = @patch <=> other.patch
99
- return cmp if cmp != 0
100
- @port_update <=> other.port_update
93
+ @vernum <=> other.to_i
101
94
  end
102
95
 
103
96
  # Returns an integer number contains 5-digit Oracle version.
@@ -113,7 +106,7 @@ class OCI8
113
106
  #
114
107
  # @return [Integer]
115
108
  def to_i
116
- (@major << 24) | (@minor << 20) | (@update << 12) | (@patch << 8) | @port_update
109
+ @vernum
117
110
  end
118
111
 
119
112
  # Returns a dotted version string of the Oracle version.
@@ -139,7 +132,7 @@ class OCI8
139
132
  #
140
133
  # @return [Integer]
141
134
  def hash
142
- to_i
135
+ @vernum
143
136
  end
144
137
 
145
138
  # @private
@@ -8,15 +8,8 @@
8
8
  #
9
9
  require 'fileutils'
10
10
 
11
- build_args = if (defined? Gem::Command and Gem::Command.respond_to? :build_args)
12
- Gem::Command.build_args
13
- else
14
- # for old rubygems
15
- ARGV.include?("--") ? ARGV[(ARGV.index("--") + 1)...ARGV.size] : []
16
- end
17
-
18
- if build_args.size > 0
19
- gem_platform = build_args[0]
11
+ if ARGV.include?("--") and ARGV[(ARGV.index("--") + 1)] == 'current'
12
+ gem_platform = 'current'
20
13
  else
21
14
  gem_platform = Gem::Platform::RUBY
22
15
  end
@@ -29,10 +22,10 @@ spec = Gem::Specification.new do |s|
29
22
  s.homepage = 'http://ruby-oci8.rubyforge.org'
30
23
  s.rubyforge_project = 'ruby-oci8'
31
24
  s.description = <<EOS
32
- ruby-oci8 is a ruby interface for Oracle using OCI8 API. It is available with Oracle8, Oracle8i, Oracle9i, Oracle10g and Oracle Instant Client.
25
+ ruby-oci8 is a ruby interface for Oracle using OCI8 API. It is available with Oracle8i, Oracle9i, Oracle10g, Oracle11g and Oracle Instant Client.
33
26
  EOS
34
27
  s.has_rdoc = 'yard'
35
- s.authors = ['KUBO Takehiro']
28
+ s.authors = ['Kubo Takehiro']
36
29
  s.platform = gem_platform
37
30
  s.license = '2-clause BSD-style license'
38
31
  files = File.read('dist-files').split("\n")
@@ -41,23 +34,35 @@ EOS
41
34
  s.required_ruby_version = '>= 1.8.0'
42
35
  else
43
36
  so_files = Dir.glob('ext/oci8/oci8lib_*.so')
44
- has_1_8 = so_files.include? 'ext/oci8/oci8lib_18.so'
45
- has_1_9_1 = so_files.include? 'ext/oci8/oci8lib_191.so'
46
- if has_1_8 and has_1_9_1
47
- puts 'Binary gem for ruby 1.8 and 1.9.1'
48
- s.required_ruby_version = '>= 1.8.0'
49
- elsif has_1_8 and !has_1_9_1
50
- puts 'Binary gem for ruby 1.8'
51
- s.required_ruby_version = '~> 1.8.0'
52
- elsif !has_1_8 and has_1_9_1
53
- puts 'Binary gem for ruby 1.9.1'
54
- s.required_ruby_version = '~> 1.9.1'
55
- else
37
+ so_vers = so_files.collect do |file|
38
+ $1 if /ext\/oci8\/oci8lib_(\S+).so/ =~ file
39
+ end.sort
40
+
41
+ # add map files to analyze a core (minidump) file.
42
+ so_vers.each do |ver|
43
+ map_file = 'ext/oci8/oci8lib_#{ver}.map'
44
+ so_files << map_file if File.exists? map_file
45
+ end
46
+
47
+ # least version in so_vers
48
+ so_vermin = so_vers.collect do |ver|
49
+ "#$1.#$2.#{$3||'0'}" if /^(?:rbx)?(\d)(\d)(\d)?/ =~ ver
50
+ end.sort.first
51
+
52
+ case so_vers.length
53
+ when 0
56
54
  raise "No compiled binary are found. Run make in advance."
55
+ when 1
56
+ puts "Binary gem for ruby #{so_vers.first}"
57
+ if so_vers[0] < '2.0.0'
58
+ s.required_ruby_version = "~> #{so_vermin}"
59
+ else
60
+ s.required_ruby_version = "= #{so_vermin}"
61
+ end
62
+ else
63
+ puts "Binary gem for ruby #{so_vers.join(', ')}"
64
+ s.required_ruby_version = ">= #{so_vermin}"
57
65
  end
58
- # add map files to analyze a core (minidump) file.
59
- so_files << 'ext/oci8/oci8lib_18.map' if has_1_8 and File.exists? 'ext/oci8/oci8lib_18.map'
60
- so_files << 'ext/oci8/oci8lib_191.map' if has_1_9_1 and File.exists? 'ext/oci8/oci8lib_191.map'
61
66
 
62
67
  FileUtils.copy so_files, 'lib', :preserve => true
63
68
  files.reject! do |fname|