mysql2 0.1.8 → 0.1.9

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.
@@ -5,6 +5,7 @@ require 'mysql2' unless defined? Mysql2
5
5
  module ActiveRecord
6
6
  class Base
7
7
  def self.mysql2_connection(config)
8
+ config[:username] = 'root' if config[:username].nil?
8
9
  client = Mysql2::Client.new(config.symbolize_keys)
9
10
  options = [config[:host], config[:username], config[:password], config[:database], config[:port], config[:socket], 0]
10
11
  ConnectionAdapters::Mysql2Adapter.new(client, logger, options, config)
@@ -57,8 +58,8 @@ module ActiveRecord
57
58
  when :integer then value.to_i rescue value ? 1 : 0
58
59
  when :float then value.to_f # returns self if it's already a Float
59
60
  when :decimal then self.class.value_to_decimal(value)
60
- when :datetime, :timestamp then value.class == Time ? value.in_time_zone : self.class.string_to_time(value)
61
- when :time then value.class == Time ? value.in_time_zone : self.class.string_to_dummy_time(value)
61
+ when :datetime, :timestamp then value.class == Time ? value : self.class.string_to_time(value)
62
+ when :time then value.class == Time ? value : self.class.string_to_dummy_time(value)
62
63
  when :date then value.class == Date ? value : self.class.string_to_date(value)
63
64
  when :binary then value
64
65
  when :boolean then self.class.value_to_boolean(value)
@@ -73,8 +74,8 @@ module ActiveRecord
73
74
  when :integer then "#{var_name}.to_i rescue #{var_name} ? 1 : 0"
74
75
  when :float then "#{var_name}.to_f"
75
76
  when :decimal then "#{self.class.name}.value_to_decimal(#{var_name})"
76
- when :datetime, :timestamp then "#{var_name}.class == Time ? #{var_name}.in_time_zone : #{self.class.name}.string_to_time(#{var_name})"
77
- when :time then "#{var_name}.class == Time ? #{var_name}.in_time_zone : #{self.class.name}.string_to_dummy_time(#{var_name})"
77
+ when :datetime, :timestamp then "#{var_name}.class == Time ? #{var_name} : #{self.class.name}.string_to_time(#{var_name})"
78
+ when :time then "#{var_name}.class == Time ? #{var_name} : #{self.class.name}.string_to_dummy_time(#{var_name})"
78
79
  when :date then "#{var_name}.class == Date ? #{var_name} : #{self.class.name}.string_to_date(#{var_name})"
79
80
  when :binary then nil
80
81
  when :boolean then "#{self.class.name}.value_to_boolean(#{var_name})"
@@ -255,12 +256,11 @@ module ActiveRecord
255
256
  # DATABASE STATEMENTS ======================================
256
257
 
257
258
  def select_values(sql, name = nil)
258
- result = select_rows(sql, name)
259
- result.map { |row| row.values.first }
259
+ select(sql, name).map { |row| row.values.first }
260
260
  end
261
261
 
262
262
  def select_rows(sql, name = nil)
263
- select(sql, name)
263
+ select(sql, name).map { |row| row.values }
264
264
  end
265
265
 
266
266
  # Executes a SQL query and returns a MySQL::Result object. Note that you have to free the Result object after you're done using it.
@@ -0,0 +1,104 @@
1
+ # Necessary monkeypatching to make AR fiber-friendly.
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+
6
+ def self.fiber_pools
7
+ @fiber_pools ||= []
8
+ end
9
+ def self.register_fiber_pool(fp)
10
+ fiber_pools << fp
11
+ end
12
+
13
+ class FiberedMonitor
14
+ class Queue
15
+ def initialize
16
+ @queue = []
17
+ end
18
+
19
+ def wait(timeout)
20
+ t = timeout || 5
21
+ fiber = Fiber.current
22
+ x = EM::Timer.new(t) do
23
+ @queue.delete(fiber)
24
+ fiber.resume(false)
25
+ end
26
+ @queue << fiber
27
+ returning Fiber.yield do
28
+ x.cancel
29
+ end
30
+ end
31
+
32
+ def signal
33
+ fiber = @queue.pop
34
+ fiber.resume(true) if fiber
35
+ end
36
+ end
37
+
38
+ def synchronize
39
+ yield
40
+ end
41
+
42
+ def new_cond
43
+ Queue.new
44
+ end
45
+ end
46
+
47
+ # ActiveRecord's connection pool is based on threads. Since we are working
48
+ # with EM and a single thread, multiple fiber design, we need to provide
49
+ # our own connection pool that keys off of Fiber.current so that different
50
+ # fibers running in the same thread don't try to use the same connection.
51
+ class ConnectionPool
52
+ def initialize(spec)
53
+ @spec = spec
54
+
55
+ # The cache of reserved connections mapped to threads
56
+ @reserved_connections = {}
57
+
58
+ # The mutex used to synchronize pool access
59
+ @connection_mutex = FiberedMonitor.new
60
+ @queue = @connection_mutex.new_cond
61
+
62
+ # default 5 second timeout unless on ruby 1.9
63
+ @timeout = spec.config[:wait_timeout] || 5
64
+
65
+ # default max pool size to 5
66
+ @size = (spec.config[:pool] && spec.config[:pool].to_i) || 5
67
+
68
+ @connections = []
69
+ @checked_out = []
70
+ end
71
+
72
+ private
73
+
74
+ def current_connection_id #:nodoc:
75
+ Fiber.current.object_id
76
+ end
77
+
78
+ # Remove stale fibers from the cache.
79
+ def remove_stale_cached_threads!(cache, &block)
80
+ keys = Set.new(cache.keys)
81
+
82
+ ActiveRecord::ConnectionAdapters.fiber_pools.each do |pool|
83
+ pool.busy_fibers.each_pair do |object_id, fiber|
84
+ keys.delete(object_id)
85
+ end
86
+ end
87
+
88
+ keys.each do |key|
89
+ next unless cache.has_key?(key)
90
+ block.call(key, cache[key])
91
+ cache.delete(key)
92
+ end
93
+ end
94
+
95
+ def checkout_and_verify(c)
96
+ @checked_out << c
97
+ c.run_callbacks :checkout
98
+ c.verify!
99
+ c
100
+ end
101
+ end
102
+
103
+ end
104
+ end
@@ -1,9 +1,15 @@
1
1
  # encoding: UTF-8
2
- require 'mysql2_ext'
2
+ require 'date'
3
+ require 'bigdecimal'
4
+
5
+ require 'mysql2/error'
6
+ require 'mysql2/mysql2'
7
+ require 'mysql2/client'
8
+ require 'mysql2/result'
3
9
 
4
10
  # = Mysql2
5
11
  #
6
12
  # A modern, simple and very fast Mysql library for Ruby - binding to libmysql
7
13
  module Mysql2
8
- VERSION = "0.1.8"
9
- end
14
+ VERSION = "0.1.9"
15
+ end
@@ -0,0 +1,211 @@
1
+ module Mysql2
2
+ class Client
3
+ def initialize opts = {}
4
+ init_connection
5
+
6
+ [:reconnect, :connect_timeout].each do |key|
7
+ next unless opts.key?(key)
8
+ send(:"#{key}=", opts[key])
9
+ end
10
+ # force the encoding to utf8
11
+ self.charset_name = opts[:encoding] || 'utf8'
12
+
13
+ ssl_set(*opts.values_at(:sslkey, :sslcert, :sslca, :sslcapath, :sslciper))
14
+
15
+ user = opts[:username]
16
+ pass = opts[:password]
17
+ host = opts[:host] || 'localhost'
18
+ port = opts[:port] || 3306
19
+ database = opts[:database]
20
+ socket = opts[:socket]
21
+
22
+ connect user, pass, host, port, database, socket
23
+ end
24
+
25
+ # NOTE: from ruby-mysql
26
+ if defined? Encoding
27
+ CHARSET_MAP = {
28
+ "armscii8" => nil,
29
+ "ascii" => Encoding::US_ASCII,
30
+ "big5" => Encoding::Big5,
31
+ "binary" => Encoding::ASCII_8BIT,
32
+ "cp1250" => Encoding::Windows_1250,
33
+ "cp1251" => Encoding::Windows_1251,
34
+ "cp1256" => Encoding::Windows_1256,
35
+ "cp1257" => Encoding::Windows_1257,
36
+ "cp850" => Encoding::CP850,
37
+ "cp852" => Encoding::CP852,
38
+ "cp866" => Encoding::IBM866,
39
+ "cp932" => Encoding::Windows_31J,
40
+ "dec8" => nil,
41
+ "eucjpms" => Encoding::EucJP_ms,
42
+ "euckr" => Encoding::EUC_KR,
43
+ "gb2312" => Encoding::EUC_CN,
44
+ "gbk" => Encoding::GBK,
45
+ "geostd8" => nil,
46
+ "greek" => Encoding::ISO_8859_7,
47
+ "hebrew" => Encoding::ISO_8859_8,
48
+ "hp8" => nil,
49
+ "keybcs2" => nil,
50
+ "koi8r" => Encoding::KOI8_R,
51
+ "koi8u" => Encoding::KOI8_U,
52
+ "latin1" => Encoding::ISO_8859_1,
53
+ "latin2" => Encoding::ISO_8859_2,
54
+ "latin5" => Encoding::ISO_8859_9,
55
+ "latin7" => Encoding::ISO_8859_13,
56
+ "macce" => Encoding::MacCentEuro,
57
+ "macroman" => Encoding::MacRoman,
58
+ "sjis" => Encoding::SHIFT_JIS,
59
+ "swe7" => nil,
60
+ "tis620" => Encoding::TIS_620,
61
+ "ucs2" => Encoding::UTF_16BE,
62
+ "ujis" => Encoding::EucJP_ms,
63
+ "utf8" => Encoding::UTF_8,
64
+ }
65
+
66
+ MYSQL_CHARSET_MAP = {
67
+ 1 => {:name => "big5", :collation => "big5_chinese_ci"},
68
+ 2 => {:name => "latin2", :collation => "latin2_czech_cs"},
69
+ 3 => {:name => "dec8", :collation => "dec8_swedish_ci"},
70
+ 4 => {:name => "cp850", :collation => "cp850_general_ci"},
71
+ 5 => {:name => "latin1", :collation => "latin1_german1_ci"},
72
+ 6 => {:name => "hp8", :collation => "hp8_english_ci"},
73
+ 7 => {:name => "koi8r", :collation => "koi8r_general_ci"},
74
+ 8 => {:name => "latin1", :collation => "latin1_swedish_ci"},
75
+ 9 => {:name => "latin2", :collation => "latin2_general_ci"},
76
+ 10 => {:name => "swe7", :collation => "swe7_swedish_ci"},
77
+ 11 => {:name => "ascii", :collation => "ascii_general_ci"},
78
+ 12 => {:name => "ujis", :collation => "ujis_japanese_ci"},
79
+ 13 => {:name => "sjis", :collation => "sjis_japanese_ci"},
80
+ 14 => {:name => "cp1251", :collation => "cp1251_bulgarian_ci"},
81
+ 15 => {:name => "latin1", :collation => "latin1_danish_ci"},
82
+ 16 => {:name => "hebrew", :collation => "hebrew_general_ci"},
83
+ 17 => {:name => "filename", :collation => "filename"},
84
+ 18 => {:name => "tis620", :collation => "tis620_thai_ci"},
85
+ 19 => {:name => "euckr", :collation => "euckr_korean_ci"},
86
+ 20 => {:name => "latin7", :collation => "latin7_estonian_cs"},
87
+ 21 => {:name => "latin2", :collation => "latin2_hungarian_ci"},
88
+ 22 => {:name => "koi8u", :collation => "koi8u_general_ci"},
89
+ 23 => {:name => "cp1251", :collation => "cp1251_ukrainian_ci"},
90
+ 24 => {:name => "gb2312", :collation => "gb2312_chinese_ci"},
91
+ 25 => {:name => "greek", :collation => "greek_general_ci"},
92
+ 26 => {:name => "cp1250", :collation => "cp1250_general_ci"},
93
+ 27 => {:name => "latin2", :collation => "latin2_croatian_ci"},
94
+ 28 => {:name => "gbk", :collation => "gbk_chinese_ci"},
95
+ 29 => {:name => "cp1257", :collation => "cp1257_lithuanian_ci"},
96
+ 30 => {:name => "latin5", :collation => "latin5_turkish_ci"},
97
+ 31 => {:name => "latin1", :collation => "latin1_german2_ci"},
98
+ 32 => {:name => "armscii8", :collation => "armscii8_general_ci"},
99
+ 33 => {:name => "utf8", :collation => "utf8_general_ci"},
100
+ 34 => {:name => "cp1250", :collation => "cp1250_czech_cs"},
101
+ 35 => {:name => "ucs2", :collation => "ucs2_general_ci"},
102
+ 36 => {:name => "cp866", :collation => "cp866_general_ci"},
103
+ 37 => {:name => "keybcs2", :collation => "keybcs2_general_ci"},
104
+ 38 => {:name => "macce", :collation => "macce_general_ci"},
105
+ 39 => {:name => "macroman", :collation => "macroman_general_ci"},
106
+ 40 => {:name => "cp852", :collation => "cp852_general_ci"},
107
+ 41 => {:name => "latin7", :collation => "latin7_general_ci"},
108
+ 42 => {:name => "latin7", :collation => "latin7_general_cs"},
109
+ 43 => {:name => "macce", :collation => "macce_bin"},
110
+ 44 => {:name => "cp1250", :collation => "cp1250_croatian_ci"},
111
+ 47 => {:name => "latin1", :collation => "latin1_bin"},
112
+ 48 => {:name => "latin1", :collation => "latin1_general_ci"},
113
+ 49 => {:name => "latin1", :collation => "latin1_general_cs"},
114
+ 50 => {:name => "cp1251", :collation => "cp1251_bin"},
115
+ 51 => {:name => "cp1251", :collation => "cp1251_general_ci"},
116
+ 52 => {:name => "cp1251", :collation => "cp1251_general_cs"},
117
+ 53 => {:name => "macroman", :collation => "macroman_bin"},
118
+ 57 => {:name => "cp1256", :collation => "cp1256_general_ci"},
119
+ 58 => {:name => "cp1257", :collation => "cp1257_bin"},
120
+ 59 => {:name => "cp1257", :collation => "cp1257_general_ci"},
121
+ 63 => {:name => "binary", :collation => "binary"},
122
+ 64 => {:name => "armscii8", :collation => "armscii8_bin"},
123
+ 65 => {:name => "ascii", :collation => "ascii_bin"},
124
+ 66 => {:name => "cp1250", :collation => "cp1250_bin"},
125
+ 67 => {:name => "cp1256", :collation => "cp1256_bin"},
126
+ 68 => {:name => "cp866", :collation => "cp866_bin"},
127
+ 69 => {:name => "dec8", :collation => "dec8_bin"},
128
+ 70 => {:name => "greek", :collation => "greek_bin"},
129
+ 71 => {:name => "hebrew", :collation => "hebrew_bin"},
130
+ 72 => {:name => "hp8", :collation => "hp8_bin"},
131
+ 73 => {:name => "keybcs2", :collation => "keybcs2_bin"},
132
+ 74 => {:name => "koi8r", :collation => "koi8r_bin"},
133
+ 75 => {:name => "koi8u", :collation => "koi8u_bin"},
134
+ 77 => {:name => "latin2", :collation => "latin2_bin"},
135
+ 78 => {:name => "latin5", :collation => "latin5_bin"},
136
+ 79 => {:name => "latin7", :collation => "latin7_bin"},
137
+ 80 => {:name => "cp850", :collation => "cp850_bin"},
138
+ 81 => {:name => "cp852", :collation => "cp852_bin"},
139
+ 82 => {:name => "swe7", :collation => "swe7_bin"},
140
+ 83 => {:name => "utf8", :collation => "utf8_bin"},
141
+ 84 => {:name => "big5", :collation => "big5_bin"},
142
+ 85 => {:name => "euckr", :collation => "euckr_bin"},
143
+ 86 => {:name => "gb2312", :collation => "gb2312_bin"},
144
+ 87 => {:name => "gbk", :collation => "gbk_bin"},
145
+ 88 => {:name => "sjis", :collation => "sjis_bin"},
146
+ 89 => {:name => "tis620", :collation => "tis620_bin"},
147
+ 90 => {:name => "ucs2", :collation => "ucs2_bin"},
148
+ 91 => {:name => "ujis", :collation => "ujis_bin"},
149
+ 92 => {:name => "geostd8", :collation => "geostd8_general_ci"},
150
+ 93 => {:name => "geostd8", :collation => "geostd8_bin"},
151
+ 94 => {:name => "latin1", :collation => "latin1_spanish_ci"},
152
+ 95 => {:name => "cp932", :collation => "cp932_japanese_ci"},
153
+ 96 => {:name => "cp932", :collation => "cp932_bin"},
154
+ 97 => {:name => "eucjpms", :collation => "eucjpms_japanese_ci"},
155
+ 98 => {:name => "eucjpms", :collation => "eucjpms_bin"},
156
+ 99 => {:name => "cp1250", :collation => "cp1250_polish_ci"},
157
+ 128 => {:name => "ucs2", :collation => "ucs2_unicode_ci"},
158
+ 129 => {:name => "ucs2", :collation => "ucs2_icelandic_ci"},
159
+ 130 => {:name => "ucs2", :collation => "ucs2_latvian_ci"},
160
+ 131 => {:name => "ucs2", :collation => "ucs2_romanian_ci"},
161
+ 132 => {:name => "ucs2", :collation => "ucs2_slovenian_ci"},
162
+ 133 => {:name => "ucs2", :collation => "ucs2_polish_ci"},
163
+ 134 => {:name => "ucs2", :collation => "ucs2_estonian_ci"},
164
+ 135 => {:name => "ucs2", :collation => "ucs2_spanish_ci"},
165
+ 136 => {:name => "ucs2", :collation => "ucs2_swedish_ci"},
166
+ 137 => {:name => "ucs2", :collation => "ucs2_turkish_ci"},
167
+ 138 => {:name => "ucs2", :collation => "ucs2_czech_ci"},
168
+ 139 => {:name => "ucs2", :collation => "ucs2_danish_ci"},
169
+ 140 => {:name => "ucs2", :collation => "ucs2_lithuanian_ci"},
170
+ 141 => {:name => "ucs2", :collation => "ucs2_slovak_ci"},
171
+ 142 => {:name => "ucs2", :collation => "ucs2_spanish2_ci"},
172
+ 143 => {:name => "ucs2", :collation => "ucs2_roman_ci"},
173
+ 144 => {:name => "ucs2", :collation => "ucs2_persian_ci"},
174
+ 145 => {:name => "ucs2", :collation => "ucs2_esperanto_ci"},
175
+ 146 => {:name => "ucs2", :collation => "ucs2_hungarian_ci"},
176
+ 192 => {:name => "utf8", :collation => "utf8_unicode_ci"},
177
+ 193 => {:name => "utf8", :collation => "utf8_icelandic_ci"},
178
+ 194 => {:name => "utf8", :collation => "utf8_latvian_ci"},
179
+ 195 => {:name => "utf8", :collation => "utf8_romanian_ci"},
180
+ 196 => {:name => "utf8", :collation => "utf8_slovenian_ci"},
181
+ 197 => {:name => "utf8", :collation => "utf8_polish_ci"},
182
+ 198 => {:name => "utf8", :collation => "utf8_estonian_ci"},
183
+ 199 => {:name => "utf8", :collation => "utf8_spanish_ci"},
184
+ 200 => {:name => "utf8", :collation => "utf8_swedish_ci"},
185
+ 201 => {:name => "utf8", :collation => "utf8_turkish_ci"},
186
+ 202 => {:name => "utf8", :collation => "utf8_czech_ci"},
187
+ 203 => {:name => "utf8", :collation => "utf8_danish_ci"},
188
+ 204 => {:name => "utf8", :collation => "utf8_lithuanian_ci"},
189
+ 205 => {:name => "utf8", :collation => "utf8_slovak_ci"},
190
+ 206 => {:name => "utf8", :collation => "utf8_spanish2_ci"},
191
+ 207 => {:name => "utf8", :collation => "utf8_roman_ci"},
192
+ 208 => {:name => "utf8", :collation => "utf8_persian_ci"},
193
+ 209 => {:name => "utf8", :collation => "utf8_esperanto_ci"},
194
+ 210 => {:name => "utf8", :collation => "utf8_hungarian_ci"},
195
+ 254 => {:name => "utf8", :collation => "utf8_general_cs"}
196
+ }
197
+
198
+ def self.encoding_from_charset(charset)
199
+ CHARSET_MAP[charset.to_s.downcase]
200
+ end
201
+
202
+ def self.encoding_from_charset_code(code)
203
+ if mapping = MYSQL_CHARSET_MAP[code]
204
+ encoding_from_charset(mapping[:name])
205
+ else
206
+ nil
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,11 @@
1
+ module Mysql2
2
+ class Error < StandardError
3
+ attr_accessor :error_number, :sql_state
4
+
5
+ def initialize msg
6
+ super
7
+ @error_number = nil
8
+ @sql_state = nil
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module Mysql2
2
+ class Result
3
+ include Enumerable
4
+ end
5
+ end
@@ -120,8 +120,7 @@ module Sequel
120
120
  # yield the connection if a block is given.
121
121
  def _execute(conn, sql, opts)
122
122
  begin
123
- # r = log_yield(sql){conn.query(sql)}
124
- r = conn.query(sql)
123
+ r = log_yield(sql){conn.query(sql)}
125
124
  if opts[:type] == :select
126
125
  yield r if r
127
126
  elsif block_given?
@@ -191,7 +190,7 @@ module Sequel
191
190
  # instead of yielding results for all statements as hashes.
192
191
  def fetch_rows(sql, &block)
193
192
  execute(sql) do |r|
194
- r.each &block
193
+ r.each(:symbolize_keys => true, &block)
195
194
  end
196
195
  self
197
196
  end
@@ -5,13 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mysql2}
8
- s.version = "0.1.8"
8
+ s.version = "0.1.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Lopez"]
12
- s.date = %q{2010-06-02}
12
+ s.date = %q{2010-07-17}
13
13
  s.email = %q{seniorlopez@gmail.com}
14
- s.extensions = ["ext/extconf.rb"]
14
+ s.extensions = ["ext/mysql2/extconf.rb"]
15
15
  s.extra_rdoc_files = [
16
16
  "README.rdoc"
17
17
  ]
@@ -29,13 +29,20 @@ Gem::Specification.new do |s|
29
29
  "benchmark/sequel.rb",
30
30
  "benchmark/setup_db.rb",
31
31
  "examples/eventmachine.rb",
32
- "ext/extconf.rb",
33
- "ext/mysql2_ext.c",
34
- "ext/mysql2_ext.h",
32
+ "ext/mysql2/extconf.rb",
33
+ "ext/mysql2/mysql2_ext.c",
34
+ "ext/mysql2/mysql2_ext.h",
35
+ "ext/mysql2/result.c",
36
+ "ext/mysql2/result.h",
37
+ "lib/active_record/connection_adapters/em_mysql2_adapter.rb",
35
38
  "lib/active_record/connection_adapters/mysql2_adapter.rb",
39
+ "lib/active_record/fiber_patches.rb",
36
40
  "lib/arel/engines/sql/compilers/mysql2_compiler.rb",
37
41
  "lib/mysql2.rb",
42
+ "lib/mysql2/client.rb",
38
43
  "lib/mysql2/em.rb",
44
+ "lib/mysql2/error.rb",
45
+ "lib/mysql2/result.rb",
39
46
  "lib/sequel/adapters/mysql2.rb",
40
47
  "mysql2.gemspec",
41
48
  "spec/active_record/active_record_spec.rb",
@@ -50,7 +57,7 @@ Gem::Specification.new do |s|
50
57
  s.homepage = %q{http://github.com/brianmario/mysql2}
51
58
  s.rdoc_options = ["--charset=UTF-8"]
52
59
  s.require_paths = ["lib", "ext"]
53
- s.rubygems_version = %q{1.3.6}
60
+ s.rubygems_version = %q{1.3.7}
54
61
  s.summary = %q{A simple, fast Mysql library for Ruby, binding to libmysql}
55
62
  s.test_files = [
56
63
  "spec/active_record/active_record_spec.rb",
@@ -66,7 +73,7 @@ Gem::Specification.new do |s|
66
73
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
74
  s.specification_version = 3
68
75
 
69
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
76
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
70
77
  else
71
78
  end
72
79
  else