activerecord-nulldb-adapter 1.0.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7850d9dc9902b347863dd9a2709e81570029aa6ed7a205249c3c85ddc352c2f9
4
- data.tar.gz: dd61adf8796a726d042b020937ef34d2389774e079ce6fb21ef48d01aec099c3
3
+ metadata.gz: af43f27ebeb1eb1c313923392e50c59a234c1942355422e614fb3026ecb3bb13
4
+ data.tar.gz: 2c60b7ed36c6da832eaf7f0dcfd3e31c555a9735283903fed26e80f168a7905c
5
5
  SHA512:
6
- metadata.gz: d080b5426ccbd9094e4b3a72294050be0afe8660d8e6d34fba29c231aca24afa317c7920592e12db9b852f68d88c155c87dd639022ec490348b0c528a18bab39
7
- data.tar.gz: fddb22b3e21e86e26c91d7545a3c619fc0693b62ffdab790278eb5458aedaa58ed9c914af3a5660cbf4cf8fc43cfbb7883969320f1e133e4d1a2bd5e830bf16c
6
+ metadata.gz: 8b09032c9f0421c412fab061201d1381a4fd3b265b5c8a00d5ced214201aade646ed7a9d8ae207c3c015aeb30cf7ddf5d21f429864262cb7a791f7a1c0ad8fb9
7
+ data.tar.gz: 8792abf6acf27101e8fc0e1c3a2806a16e629d5cc14fd660a12833d1afff4aed679030948799646dd321746117f5f6282100f8ffa391b598f6f310f08466a93c
@@ -7,47 +7,59 @@ jobs:
7
7
  matrix:
8
8
  gemfile:
9
9
  [
10
- activerecord_5.2,
11
- activerecord_6.0,
12
10
  activerecord_6.1,
13
11
  activerecord_7.0,
14
12
  activerecord_7.1,
13
+ activerecord_7.2,
14
+ activerecord_8.0,
15
15
  activerecord_master,
16
16
  ]
17
- ruby: ["2.5", "2.6", "2.7", "3.0", "3.1", "3.2", "jruby-9.3.1.0"]
17
+ ruby: ["2.7", "3.0", "3.1", "3.2", "3.3", "jruby-9.3.1.0"]
18
18
  exclude:
19
- - ruby: "3.0"
20
- gemfile: activerecord_5.2
19
+ - ruby: "jruby-9.3.1.0"
20
+ gemfile: "activerecord_7.0"
21
21
 
22
- - ruby: "3.1"
23
- gemfile: activerecord_5.2
22
+ - ruby: "jruby-9.3.1.0"
23
+ gemfile: "activerecord_7.1"
24
24
 
25
- - ruby: "3.2"
26
- gemfile: activerecord_5.2
25
+ - ruby: "2.7"
26
+ gemfile: "activerecord_7.2"
27
27
 
28
- - ruby: "2.5"
29
- gemfile: "activerecord_master"
28
+ - ruby: "2.8"
29
+ gemfile: "activerecord_7.2"
30
30
 
31
- - ruby: "2.6"
32
- gemfile: "activerecord_master"
31
+ - ruby: "3.0"
32
+ gemfile: "activerecord_7.2"
33
33
 
34
- - ruby: "2.5"
35
- gemfile: "activerecord_7.0"
34
+ - ruby: "jruby-9.3.1.0"
35
+ gemfile: "activerecord_7.2"
36
36
 
37
- - ruby: "2.6"
38
- gemfile: "activerecord_7.0"
37
+ - ruby: "2.7"
38
+ gemfile: "activerecord_8.0"
39
39
 
40
- - ruby: "2.5"
41
- gemfile: "activerecord_7.1"
40
+ - ruby: "2.8"
41
+ gemfile: "activerecord_8.0"
42
42
 
43
- - ruby: "2.6"
44
- gemfile: "activerecord_7.1"
43
+ - ruby: "3.0"
44
+ gemfile: "activerecord_8.0"
45
45
 
46
- - ruby: "jruby-9.3.1.0"
47
- gemfile: "activerecord_7.0"
46
+ - ruby: "3.1"
47
+ gemfile: "activerecord_8.0"
48
48
 
49
49
  - ruby: "jruby-9.3.1.0"
50
- gemfile: "activerecord_7.1"
50
+ gemfile: "activerecord_8.0"
51
+
52
+ - ruby: "2.7"
53
+ gemfile: "activerecord_master"
54
+
55
+ - ruby: "2.8"
56
+ gemfile: "activerecord_master"
57
+
58
+ - ruby: "3.0"
59
+ gemfile: "activerecord_master"
60
+
61
+ - ruby: "3.1"
62
+ gemfile: "activerecord_master"
51
63
 
52
64
  - ruby: "jruby-9.3.1.0"
53
65
  gemfile: "activerecord_master"
@@ -56,7 +68,7 @@ jobs:
56
68
  env:
57
69
  BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
58
70
  steps:
59
- - uses: actions/checkout@v2
71
+ - uses: actions/checkout@v4
60
72
  - uses: ruby/setup-ruby@v1
61
73
  with:
62
74
  ruby-version: ${{ matrix.ruby }}
data/Appraisals CHANGED
@@ -10,6 +10,18 @@ appraise "activerecord-7.0" do
10
10
  gem "activerecord", "~> 7.0.0"
11
11
  end
12
12
 
13
+ appraise "activerecord-7.1" do
14
+ gem "activerecord", "~> 7.1.0"
15
+ end
16
+
17
+ appraise "activerecord-7.2" do
18
+ gem "activerecord", "~> 7.2.0"
19
+ end
20
+
21
+ appraise "activerecord-8.0" do
22
+ gem "activerecord", github: 'rails/rails', branch: "8-0-stable"
23
+ end
24
+
13
25
  appraise "activerecord-master" do
14
26
  gem "activerecord", github: 'rails/rails', branch: :main
15
27
  end
data/CHANGES.md CHANGED
@@ -1,6 +1,17 @@
1
1
  Unreleased
2
2
  ----------
3
3
 
4
+ 1.1.1 (20214-11-14)
5
+
6
+ - Fix syntax error on 2.7 and 3.0.
7
+
8
+ 1.1.0 (2024-11-14)
9
+ -----------
10
+
11
+ - Add support to Rails 8 #136
12
+ - *Breaking* Drop support to Ruby 2.5, 2.6
13
+ - *Breaking* Drop support to Rails 6.0 (keep 6.1)
14
+
4
15
  1.0.1 (2023-10-16)
5
16
  -----------
6
17
 
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'activerecord', '>= 5.2.0', '< 6.3'
3
+ gem 'activerecord', '>= 6.0', '< 8.1'
4
4
 
5
5
  group :development, :test do
6
6
  gem 'spec'
data/README.md CHANGED
@@ -17,42 +17,50 @@ including `after_save` hooks - without ever touching a real database.
17
17
  ## Compatibility
18
18
 
19
19
  ### Ruby
20
- Currently supported Ruby versions: MRI 2.5.x, 2.6.x, 2.7.x, 3.X.
20
+ Currently supported Ruby versions: `2.7.X`, `3.X`.
21
21
 
22
22
  Experimental support provided for: JRuby
23
23
 
24
24
  ### ActiveRecord
25
- Any version of ActiveRecord >= 5.2
26
-
27
- It is tested against AR 5.2, 6.0, 6.1 and master branch.
25
+ Any version of ActiveRecord `>= 6.1`
28
26
 
29
27
  ## Installation
30
28
 
31
- gem install activerecord-nulldb-adapter
29
+ ```bash
30
+ gem install activerecord-nulldb-adapter
31
+ ```
32
32
 
33
33
  ## How
34
34
 
35
35
  Once installed, NullDB can be used much like any other ActiveRecord database
36
36
  adapter:
37
37
 
38
- ActiveRecord::Base.establish_connection :adapter => :nulldb
38
+ ```ruby
39
+ ActiveRecord::Base.establish_connection :adapter => :nulldb
40
+ ```
39
41
 
40
42
  NullDB needs to know where you keep your schema file in order to reflect table
41
43
  metadata. By default it looks in RAILS_ROOT/db/schema.rb. You can override
42
44
  that by setting the `schema` option:
43
45
 
44
- ActiveRecord::Base.establish_connection :adapter => :nulldb,
45
- :schema => 'foo/myschema.rb'
46
+ ```ruby
47
+ ActiveRecord::Base.establish_connection :adapter => :nulldb,
48
+ :schema => 'foo/myschema.rb'
49
+ ```
46
50
 
47
51
  NullDB comes with RSpec integration. To replace the database with NullDB in
48
52
  all of your specs, put the following in your spec/rails_helper:
49
53
 
50
- require 'nulldb_rspec'
51
- include NullDB::RSpec::NullifiedDatabase
54
+ ```ruby
55
+ require 'nulldb_rspec'
56
+ include NullDB::RSpec::NullifiedDatabase
57
+ ```
52
58
 
53
59
  after you load your rails environment
54
60
 
55
- require File.expand_path('../config/environment', __dir__)
61
+ ```ruby
62
+ require File.expand_path('../config/environment', __dir__)
63
+ ```
56
64
 
57
65
  otherwise you will encounter issues such as
58
66
  ([bug)](https://github.com/nulldb/nulldb/pull/90#issuecomment-496690958).
@@ -60,17 +68,19 @@ otherwise you will encounter issues such as
60
68
  Or if you just want to use NullDB in a specific spec context, you can include
61
69
  the same module inside a context:
62
70
 
63
- require 'nulldb_rspec'
71
+ ```ruby
72
+ require 'nulldb_rspec'
64
73
 
65
- describe Employee, "with access to the database" do
66
- fixtures :employees
67
- # ...
68
- end
74
+ describe Employee, "with access to the database" do
75
+ fixtures :employees
76
+ # ...
77
+ end
69
78
 
70
- describe Employee, "with NullDB" do
71
- include NullDB::RSpec::NullifiedDatabase
72
- # ...
73
- end
79
+ describe Employee, "with NullDB" do
80
+ include NullDB::RSpec::NullifiedDatabase
81
+ # ...
82
+ end
83
+ ```
74
84
 
75
85
  If you want to have NullDB enabled by default but disabled for particular
76
86
  contexts then (see this
@@ -80,29 +90,35 @@ contexts then (see this
80
90
  NullDB::Rspec provides some custom matcher support for verifying expectations
81
91
  about interactions with the database:
82
92
 
83
- describe Employee do
84
- include NullDB::RSpec::NullifiedDatabase
93
+ ```ruby
94
+ describe Employee do
95
+ include NullDB::RSpec::NullifiedDatabase
85
96
 
86
- it "should cause an insert statement to be executed" do
87
- Employee.create!
88
- Employee.connection.should have_executed(:insert)
89
- end
90
- end
97
+ it "should cause an insert statement to be executed" do
98
+ Employee.create!
99
+ Employee.connection.should have_executed(:insert)
100
+ end
101
+ end
102
+ ```
91
103
 
92
104
  UnitRecord-style verification that no database calls have been made at all can
93
105
  be achieved by using the special `:anything` symbol:
94
106
 
95
- describe "stuff that shouldn't touch the database" do
96
- after :each do
97
- Employee.connection.should_not have_executed(:anything)
98
- end
99
- # ...
100
- end
107
+ ```ruby
108
+ describe "stuff that shouldn't touch the database" do
109
+ after :each do
110
+ Employee.connection.should_not have_executed(:anything)
111
+ end
112
+ # ...
113
+ end
114
+ ```
101
115
 
102
116
  You can also experiment with putting NullDB in your database.yml:
103
117
 
104
- unit_test:
105
- adapter: nulldb
118
+ ```yaml
119
+ unit_test:
120
+ adapter: nulldb
121
+ ```
106
122
 
107
123
  However, due to the way Rails hard-codes specific database adapters into its
108
124
  standard Rake tasks, you may find that this generates unexpected and
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.homepage = "https://github.com/nulldb/nulldb"
21
21
  s.licenses = ["MIT"]
22
22
 
23
- s.add_runtime_dependency 'activerecord', '>= 5.2.0', '< 7.2'
23
+ s.add_runtime_dependency 'activerecord', '>= 6.0', '< 8.1'
24
24
  s.add_development_dependency 'spec'
25
25
  s.add_development_dependency 'rdoc'
26
26
  s.add_development_dependency 'rspec'
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.2.0"
5
+ gem "activerecord", "~> 7.2.0"
6
6
 
7
7
  group :development, :test do
8
8
  gem "spec"
@@ -0,0 +1,17 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", github: "rails/rails", branch: "8-0-stable"
6
+
7
+ group :development, :test do
8
+ gem "spec"
9
+ gem "rspec", ">= 1.2.9"
10
+ gem "rake"
11
+ gem "rdoc"
12
+ end
13
+
14
+ group :development do
15
+ gem "appraisal"
16
+ gem "simplecov", require: false
17
+ end
@@ -197,7 +197,7 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
197
197
 
198
198
  def delete(statement, name=nil, binds = [])
199
199
  with_entry_point(:delete) do
200
- super(statement, name).size
200
+ super(statement, name)
201
201
  end
202
202
  end
203
203
 
@@ -268,9 +268,39 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
268
268
  end
269
269
  end
270
270
 
271
+ ### Rails 8.0+ ###
272
+ def perform_query(raw_connection, statement, binds, type_casted_binds, prepare:, notification_payload:, batch:)
273
+ self.execution_log << Statement.new(entry_point, statement)
274
+ NullObject.new
275
+ end
276
+
277
+ def affected_rows(raw_result)
278
+ 0
279
+ end
280
+
281
+ def valid_column_definition_options
282
+ super + [:array, :using, :cast_as, :as, :type, :enum_type, :stored, :srid]
283
+ end
284
+
285
+ READ_QUERY = ActiveRecord::ConnectionAdapters::AbstractAdapter.build_read_query_regexp(
286
+ :close, :declare, :fetch, :move, :set, :show
287
+ ) # :nodoc:
288
+ private_constant :READ_QUERY
289
+
290
+ def write_query?(sql) # :nodoc:
291
+ !READ_QUERY.match?(sql)
292
+ rescue ArgumentError # Invalid encoding
293
+ !READ_QUERY.match?(sql.b)
294
+ end
295
+
296
+ def reconnect
297
+ true
298
+ end
299
+ ### Rails 8.0+ ###
300
+
271
301
  protected
272
302
 
273
- def select(statement, name = nil, binds = [], prepare: nil, async: nil)
303
+ def select(statement, name = nil, binds = [], prepare: nil, async: nil, allow_retry: nil)
274
304
  EmptyResult.new.tap do |r|
275
305
  r.bind_column_meta(columns_for(name))
276
306
  self.execution_log << Statement.new(entry_point, statement)
@@ -319,7 +349,7 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
319
349
 
320
350
  def new_table_definition(adapter = nil, table_name = nil, is_temporary = nil, options = {})
321
351
  case ::ActiveRecord::VERSION::MAJOR
322
- when 6, 7
352
+ when 6, 7, 8
323
353
  TableDefinition.new(self, table_name, temporary: is_temporary, options: options.except(:id))
324
354
  when 5
325
355
  TableDefinition.new(table_name, is_temporary, options.except(:id), nil)
@@ -13,7 +13,9 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter
13
13
  alias_method :jsonb, :json if method_defined? :json
14
14
  alias_method :hstore, :json
15
15
 
16
- if ::ActiveRecord::VERSION::MAJOR == 7 && ::ActiveRecord::VERSION::MINOR >= 1
16
+ def unique_constraint(*args, **kwargs, &block); end
17
+
18
+ if ::ActiveRecord::VERSION::MAJOR >= 7 && ::ActiveRecord::VERSION::MINOR >= 1
17
19
  # Avoid check for option validity
18
20
  def create_column_definition(name, type, options)
19
21
  ActiveRecord::ConnectionAdapters::ColumnDefinition.new(name, type, options)
@@ -9,6 +9,8 @@ require 'active_record/connection_adapters/abstract_adapter'
9
9
  require 'nulldb/core'
10
10
  require 'nulldb/extensions'
11
11
 
12
+ require 'active_record/connection_adapters/quoting'
13
+
12
14
  require 'active_record/connection_adapters/nulldb_adapter/core'
13
15
  require 'active_record/connection_adapters/nulldb_adapter/statement'
14
16
  require 'active_record/connection_adapters/nulldb_adapter/checkpoint'
@@ -20,3 +22,12 @@ require 'active_record/connection_adapters/nulldb_adapter/null_object'
20
22
  require 'active_record/connection_adapters/nulldb_adapter/table_definition'
21
23
 
22
24
  require 'active_record/tasks/nulldb_database_tasks' if defined?(ActiveRecord::Tasks)
25
+
26
+ module ActiveRecord
27
+ module ConnectionAdapters
28
+ if ActiveRecord::VERSION::STRING >= '7.2'
29
+ register 'nulldb', 'ActiveRecord::ConnectionAdapters::NullDBAdapter', 'active_record/connection_adapters/nulldb_adapter'
30
+ end
31
+ end
32
+ end
33
+
@@ -0,0 +1,13 @@
1
+ module ActiveRecord
2
+ module ConnectionAdapters
3
+ module Quoting
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def quote_column_name(column_name)
8
+ "'#{column_name}'"
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module NullDB
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-nulldb-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Avdi Grimm
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-10-16 00:00:00.000000000 Z
13
+ date: 2024-11-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -18,20 +18,20 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 5.2.0
21
+ version: '6.0'
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '7.2'
24
+ version: '8.1'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: 5.2.0
31
+ version: '6.0'
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '7.2'
34
+ version: '8.1'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: spec
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -149,11 +149,12 @@ files:
149
149
  - README.md
150
150
  - Rakefile
151
151
  - activerecord-nulldb-adapter.gemspec
152
- - gemfiles/activerecord_5.2.gemfile
153
152
  - gemfiles/activerecord_6.0.gemfile
154
153
  - gemfiles/activerecord_6.1.gemfile
155
154
  - gemfiles/activerecord_7.0.gemfile
156
155
  - gemfiles/activerecord_7.1.gemfile
156
+ - gemfiles/activerecord_7.2.gemfile
157
+ - gemfiles/activerecord_8.0.gemfile
157
158
  - gemfiles/activerecord_master.gemfile
158
159
  - lib/active_record/connection_adapters/nulldb_adapter.rb
159
160
  - lib/active_record/connection_adapters/nulldb_adapter/checkpoint.rb
@@ -165,6 +166,7 @@ files:
165
166
  - lib/active_record/connection_adapters/nulldb_adapter/null_object.rb
166
167
  - lib/active_record/connection_adapters/nulldb_adapter/statement.rb
167
168
  - lib/active_record/connection_adapters/nulldb_adapter/table_definition.rb
169
+ - lib/active_record/connection_adapters/quoting.rb
168
170
  - lib/active_record/tasks/nulldb_database_tasks.rb
169
171
  - lib/activerecord-nulldb-adapter.rb
170
172
  - lib/nulldb.rb