activerecord-nulldb-adapter 0.6.0 → 0.7.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +35 -0
- data/.gitignore +1 -0
- data/CHANGES.md +6 -1
- data/Gemfile +2 -1
- data/README.rdoc +5 -5
- data/activerecord-nulldb-adapter.gemspec +2 -1
- data/gemfiles/activerecord_6.1.gemfile +17 -0
- data/lib/active_record/connection_adapters/nulldb_adapter/column.rb +0 -16
- data/lib/active_record/connection_adapters/nulldb_adapter/core.rb +37 -32
- data/lib/nulldb/version.rb +1 -1
- data/spec/nulldb_spec.rb +17 -1
- metadata +20 -5
- data/.travis.yml +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9b442065de1ab8b6f9a1b9a4c887b4446a50ac777c8a3800f07dc7bd7806d95
|
4
|
+
data.tar.gz: 0ccc56568e9610f033361f6229e096966d242edec12e30cfe674bba268da7dc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daa0faddba9520e94ee32f169054623ca1276c2a137e8ee9f329f8c1e3a1ad60f7f08cf3febb1b3a96b71bc5955d7d89c11944f15dc77a9b2ddc555a25d7200e
|
7
|
+
data.tar.gz: 3c58d754ec1aeb41c0296e5d1b9d298581588dd40a67701e1eabd12e9c7b1d589bec39774afbf098fadaa19a02f04c902826f80bdaea42d47d6054e90ff6a29d
|
@@ -0,0 +1,35 @@
|
|
1
|
+
name: build
|
2
|
+
on: [push, pull_request]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
strategy:
|
6
|
+
fail-fast: false
|
7
|
+
matrix:
|
8
|
+
gemfile:
|
9
|
+
[
|
10
|
+
activerecord_5.2,
|
11
|
+
activerecord_6.0,
|
12
|
+
activerecord_6.1,
|
13
|
+
activerecord_master,
|
14
|
+
]
|
15
|
+
ruby: ["2.5", "2.6", "2.7", "3.0", "jruby-9.2.13.0"]
|
16
|
+
exclude:
|
17
|
+
- ruby: "3.0"
|
18
|
+
gemfile: activerecord_5.2
|
19
|
+
|
20
|
+
- ruby: "jruby-9.2.13.0"
|
21
|
+
gemfile: activerecord_6.1
|
22
|
+
|
23
|
+
- ruby: "jruby-9.2.13.0"
|
24
|
+
gemfile: activerecord_master
|
25
|
+
|
26
|
+
runs-on: ubuntu-latest
|
27
|
+
env:
|
28
|
+
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
|
29
|
+
steps:
|
30
|
+
- uses: actions/checkout@v2
|
31
|
+
- uses: ruby/setup-ruby@v1
|
32
|
+
with:
|
33
|
+
ruby-version: ${{ matrix.ruby }}
|
34
|
+
bundler-cache: true
|
35
|
+
- run: bundle exec rake
|
data/.gitignore
CHANGED
data/CHANGES.md
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
Unreleased
|
2
2
|
----------
|
3
3
|
|
4
|
+
0.7.0 (2021-01-18)
|
5
|
+
-----------
|
6
|
+
|
7
|
+
- Add support to Rails 6.1 #106
|
8
|
+
|
4
9
|
0.6.0 (2021-01-08)
|
5
10
|
-----------
|
6
11
|
|
7
|
-
- *Breaking* Finish dropping support to Rails <= 5.1. #101
|
12
|
+
- *Breaking* Finish dropping support to Rails <= 5.1 by removing custom code for these versions. #101
|
8
13
|
|
9
14
|
0.5.0 (2020-10-15)
|
10
15
|
-----------
|
data/Gemfile
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
gem 'activerecord', '>= 5.2.0', '< 6.
|
3
|
+
gem 'activerecord', '>= 5.2.0', '< 6.3'
|
4
4
|
|
5
5
|
group :development, :test do
|
6
6
|
gem 'spec'
|
7
7
|
gem 'rspec', '>= 1.2.9'
|
8
8
|
gem 'rake'
|
9
9
|
gem 'rdoc'
|
10
|
+
gem 'pry-byebug'
|
10
11
|
end
|
11
12
|
|
12
13
|
group :development do
|
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{<img src="https://badge.fury.io/rb/activerecord-nulldb-adapter.png" alt="Gem Version" />}[http://badge.fury.io/rb/activerecord-nulldb-adapter]
|
2
2
|
{<img src="https://codeclimate.com/github/nulldb/nulldb.png" />}[https://codeclimate.com/github/nulldb/nulldb]
|
3
|
-
{<img src="https://
|
3
|
+
{<img src="https://github.com/nulldb/nulldb/workflows/build/badge.svg?branch=master" alt="Build Status" />}[https://github.com/nulldb/nulldb/actions]
|
4
4
|
|
5
5
|
|
6
6
|
= The NullDB Connection Adapter Plugin
|
@@ -16,14 +16,14 @@ a real database.
|
|
16
16
|
== Compatibility
|
17
17
|
|
18
18
|
=== Ruby
|
19
|
-
Currently supported Ruby versions: MRI 2.5.x, 2.6.x, 2.7.x
|
19
|
+
Currently supported Ruby versions: MRI 2.5.x, 2.6.x, 2.7.x, 3.X.
|
20
20
|
|
21
21
|
Experimental support provided for: JRuby
|
22
22
|
|
23
23
|
=== ActiveRecord
|
24
|
-
Any version of ActiveRecord >= 5
|
24
|
+
Any version of ActiveRecord >= 5.2
|
25
25
|
|
26
|
-
It is tested against AR 5.2, 6.0 and master branch.
|
26
|
+
It is tested against AR 5.2, 6.0, 6.1 and master branch.
|
27
27
|
|
28
28
|
== Installation
|
29
29
|
|
@@ -51,7 +51,7 @@ spec/rails_helper:
|
|
51
51
|
require 'nulldb_rspec'
|
52
52
|
include NullDB::RSpec::NullifiedDatabase
|
53
53
|
|
54
|
-
after you load your rails environment
|
54
|
+
after you load your rails environment
|
55
55
|
|
56
56
|
require File.expand_path('../config/environment', __dir__)
|
57
57
|
|
@@ -20,11 +20,12 @@ 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', '< 6.
|
23
|
+
s.add_runtime_dependency 'activerecord', '>= 5.2.0', '< 6.3'
|
24
24
|
s.add_development_dependency 'spec'
|
25
25
|
s.add_development_dependency 'rdoc'
|
26
26
|
s.add_development_dependency 'rspec'
|
27
27
|
s.add_development_dependency 'rake'
|
28
28
|
s.add_development_dependency 'appraisal'
|
29
29
|
s.add_development_dependency 'simplecov'
|
30
|
+
s.add_development_dependency 'pry-byebug'
|
30
31
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activerecord", "~> 6.1.0"
|
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
|
@@ -1,20 +1,4 @@
|
|
1
1
|
class ActiveRecord::ConnectionAdapters::NullDBAdapter
|
2
2
|
class Column < ::ActiveRecord::ConnectionAdapters::Column
|
3
|
-
|
4
|
-
private
|
5
|
-
|
6
|
-
def simplified_type(field_type)
|
7
|
-
super || simplified_type_from_sql_type
|
8
|
-
end
|
9
|
-
|
10
|
-
def simplified_type_from_sql_type
|
11
|
-
case sql_type
|
12
|
-
when :primary_key
|
13
|
-
:integer
|
14
|
-
when :string
|
15
|
-
:string
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
3
|
end
|
20
4
|
end
|
@@ -83,15 +83,31 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
|
|
83
83
|
@tables[new_name.to_s] = table_definition
|
84
84
|
end
|
85
85
|
|
86
|
-
def add_index(table_name, column_names, options
|
86
|
+
def add_index(table_name, column_names, **options)
|
87
|
+
options[:unique] = false unless options.key?(:unique)
|
87
88
|
column_names = Array.wrap(column_names).map(&:to_s)
|
88
|
-
|
89
|
-
|
89
|
+
|
90
|
+
index, index_type, ignore = add_index_options(table_name, column_names, **options)
|
91
|
+
|
92
|
+
if index.is_a?(ActiveRecord::ConnectionAdapters::IndexDefinition)
|
93
|
+
@indexes[table_name] << index
|
94
|
+
else
|
95
|
+
# Rails < 6.1
|
96
|
+
@indexes[table_name] << IndexDefinition.new(table_name, index, (index_type == 'UNIQUE'), column_names, [], [])
|
97
|
+
end
|
90
98
|
end
|
91
99
|
|
92
|
-
|
93
|
-
|
94
|
-
|
100
|
+
# Rails 6.1+
|
101
|
+
if ActiveRecord::VERSION::MAJOR >= 6 and ActiveRecord::VERSION::MINOR > 0
|
102
|
+
def remove_index(table_name, column_name = nil, **options )
|
103
|
+
index_name = index_name_for_remove(table_name, column_name, options)
|
104
|
+
index = @indexes[table_name].reject! { |index| index.name == index_name }
|
105
|
+
end
|
106
|
+
else
|
107
|
+
def remove_index(table_name, options = {} )
|
108
|
+
index_name = index_name_for_remove(table_name, options)
|
109
|
+
index = @indexes[table_name].reject! { |index| index.name == index_name }
|
110
|
+
end
|
95
111
|
end
|
96
112
|
|
97
113
|
def add_fk_constraint(*args)
|
@@ -129,7 +145,7 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
|
|
129
145
|
|
130
146
|
if table = @tables[table_name]
|
131
147
|
table.columns.map do |col_def|
|
132
|
-
col_args =
|
148
|
+
col_args = default_column_arguments(col_def)
|
133
149
|
ActiveRecord::ConnectionAdapters::NullDBAdapter::Column.new(*col_args)
|
134
150
|
end
|
135
151
|
else
|
@@ -204,16 +220,16 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
|
|
204
220
|
end
|
205
221
|
|
206
222
|
def primary_key(table_name)
|
207
|
-
columns(table_name).detect { |col| col.
|
223
|
+
columns(table_name).detect { |col| col.type == :primary_key }.try(:name)
|
208
224
|
end
|
209
225
|
|
210
|
-
def add_column(table_name, column_name, type, options
|
226
|
+
def add_column(table_name, column_name, type, **options)
|
211
227
|
super
|
212
228
|
|
213
229
|
table_meta = @tables[table_name.to_s]
|
214
230
|
return unless table_meta
|
215
231
|
|
216
|
-
table_meta.column column_name, type, options
|
232
|
+
table_meta.column column_name, type, **options
|
217
233
|
end
|
218
234
|
|
219
235
|
def change_column(table_name, column_name, type, options = {})
|
@@ -306,34 +322,23 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
|
|
306
322
|
end
|
307
323
|
end
|
308
324
|
|
309
|
-
def new_column_arguments(col_def)
|
310
|
-
args_with_optional_cast_type(col_def)
|
311
|
-
end
|
312
|
-
|
313
|
-
def args_with_optional_cast_type(col_def)
|
314
|
-
default_column_arguments(col_def).tap do |args|
|
315
|
-
if defined?(ActiveRecord::ConnectionAdapters::SqlTypeMetadata)
|
316
|
-
meta = ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(sql_type: col_def.type)
|
317
|
-
args.insert(2, meta_with_limit!(meta, col_def))
|
318
|
-
else
|
319
|
-
args[2] = args[2].to_s + "(#{col_def.limit})" if col_def.limit
|
320
|
-
end
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
def meta_with_limit!(meta, col_def)
|
325
|
-
meta.instance_variable_set('@limit', col_def.limit)
|
326
|
-
meta
|
327
|
-
end
|
328
|
-
|
329
325
|
def default_column_arguments(col_def)
|
330
326
|
[
|
331
327
|
col_def.name.to_s,
|
332
|
-
col_def.default,
|
333
|
-
col_def
|
328
|
+
col_def.default.present? ? col_def.default.to_s : nil,
|
329
|
+
sql_type_definition(col_def),
|
330
|
+
col_def.null.nil? || col_def.null
|
334
331
|
]
|
335
332
|
end
|
336
333
|
|
334
|
+
def sql_type_definition(col_def)
|
335
|
+
ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(
|
336
|
+
type: col_def.type,
|
337
|
+
sql_type: col_def.type.to_s,
|
338
|
+
limit: col_def.limit
|
339
|
+
)
|
340
|
+
end
|
341
|
+
|
337
342
|
def initialize_args
|
338
343
|
[nil, @logger, @config]
|
339
344
|
end
|
data/lib/nulldb/version.rb
CHANGED
data/spec/nulldb_spec.rb
CHANGED
@@ -70,6 +70,7 @@ describe "NullDB" do
|
|
70
70
|
t.date :hire_date
|
71
71
|
t.integer :employee_number
|
72
72
|
t.decimal :salary
|
73
|
+
t.boolean :active, default: true
|
73
74
|
end
|
74
75
|
|
75
76
|
create_table(:employees_widgets, :id => false, :force => true) do |t|
|
@@ -108,6 +109,7 @@ describe "NullDB" do
|
|
108
109
|
should_have_column(Employee, :hire_date, :date)
|
109
110
|
should_have_column(Employee, :employee_number, :integer)
|
110
111
|
should_have_column(Employee, :salary, :decimal)
|
112
|
+
should_have_column(Employee, :active, :boolean)
|
111
113
|
end
|
112
114
|
|
113
115
|
it 'should have limit on name' do
|
@@ -122,6 +124,14 @@ describe "NullDB" do
|
|
122
124
|
expect(Employee.columns_hash['name'].null).to be false
|
123
125
|
end
|
124
126
|
|
127
|
+
it "should stringify default values" do
|
128
|
+
expect(Employee.columns_hash['active'].default).to eq "true"
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should have no default for employee_number" do
|
132
|
+
expect(Employee.columns_hash['employee_number'].default).to eq nil
|
133
|
+
end
|
134
|
+
|
125
135
|
it "should return the appropriate primary key" do
|
126
136
|
expect( ActiveRecord::Base.connection.primary_key('employees') ).to eq 'id'
|
127
137
|
end
|
@@ -291,7 +301,13 @@ describe "NullDB" do
|
|
291
301
|
end
|
292
302
|
|
293
303
|
# need a fallback db for contextual nullification
|
294
|
-
ActiveRecord::
|
304
|
+
if defined?(ActiveRecord::DatabaseConfigurations)
|
305
|
+
db_config = { 'test' => {'adapter' => 'nulldb'} }
|
306
|
+
ActiveRecord::Base.configurations = ActiveRecord::DatabaseConfigurations.new(db_config)
|
307
|
+
else
|
308
|
+
# Support ActiveRecord 5
|
309
|
+
ActiveRecord::Base.configurations['test'] = {'adapter' => 'nulldb'}
|
310
|
+
end
|
295
311
|
|
296
312
|
describe NullDB::RSpec::NullifiedDatabase do
|
297
313
|
describe 'have_executed rspec matcher' do
|
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: 0.
|
4
|
+
version: 0.7.0
|
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: 2021-01-
|
13
|
+
date: 2021-01-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 5.2.0
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '6.
|
24
|
+
version: '6.3'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
version: 5.2.0
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '6.
|
34
|
+
version: '6.3'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: spec
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,6 +116,20 @@ dependencies:
|
|
116
116
|
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
name: pry-byebug
|
121
|
+
requirement: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
type: :development
|
127
|
+
prerelease: false
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
119
133
|
description: A database backend that translates database interactions into no-ops.
|
120
134
|
Using NullDB enables you to test your model business logic - including after_save
|
121
135
|
hooks - without ever touching a real database.
|
@@ -126,8 +140,8 @@ extra_rdoc_files:
|
|
126
140
|
- LICENSE
|
127
141
|
- README.rdoc
|
128
142
|
files:
|
143
|
+
- ".github/workflows/ruby.yml"
|
129
144
|
- ".gitignore"
|
130
|
-
- ".travis.yml"
|
131
145
|
- Appraisals
|
132
146
|
- CHANGES.md
|
133
147
|
- Gemfile
|
@@ -137,6 +151,7 @@ files:
|
|
137
151
|
- activerecord-nulldb-adapter.gemspec
|
138
152
|
- gemfiles/activerecord_5.2.gemfile
|
139
153
|
- gemfiles/activerecord_6.0.gemfile
|
154
|
+
- gemfiles/activerecord_6.1.gemfile
|
140
155
|
- gemfiles/activerecord_master.gemfile
|
141
156
|
- lib/active_record/connection_adapters/nulldb_adapter.rb
|
142
157
|
- lib/active_record/connection_adapters/nulldb_adapter/checkpoint.rb
|
data/.travis.yml
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
bundler_args: --without development
|
4
|
-
sudo: false
|
5
|
-
|
6
|
-
rvm:
|
7
|
-
- 2.5
|
8
|
-
- 2.6
|
9
|
-
- 2.7
|
10
|
-
- jruby
|
11
|
-
|
12
|
-
gemfile:
|
13
|
-
- gemfiles/activerecord_5.2.gemfile
|
14
|
-
- gemfiles/activerecord_6.0.gemfile
|
15
|
-
- gemfiles/activerecord_master.gemfile
|
16
|
-
|
17
|
-
matrix:
|
18
|
-
fast_finish: true
|
19
|
-
allow_failures:
|
20
|
-
- rvm: jruby
|
21
|
-
- gemfile: gemfiles/activerecord_master.gemfile
|