activerecord-nulldb-adapter 0.3.8 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a936204a697130ba6be50b69f69a53f33a91bce7
4
- data.tar.gz: 7b72a4a62dcbceb164fdd6abeed448d2671e46cd
3
+ metadata.gz: d5cd5ca699c63224bf641cf3e358137e6ded9a4c
4
+ data.tar.gz: 04e46ea2bf9ce3bca28cf96e94e6c8b73321e447
5
5
  SHA512:
6
- metadata.gz: 9247780b056dc9429814aca02b1340d910b012fa11a749a666faacd3537162356932d5cae20d1a1fee33f55923ffb69011f175de2bf887a995f05c6c1b74dfef
7
- data.tar.gz: 17ee0213ab9a305b612486558f0a6db1e32be0f699b3ca87c36a39490776d40dc663acb6f1e3f2ef22b03f7b238a78649bdab927e9a4fa6f7447ec398fa36861
6
+ metadata.gz: b39b59c2cfaefa4874fa2072b1eb128042c526690e12beb211f477b3fdf35ea78a0a838e1f98e43f46fba6ffd3d286e71e0ea855695a8c1b0acd14a7bb95fe3e
7
+ data.tar.gz: e33abeaa78ef7d331c02eac7f2538bc3c0837b388f2cbb4e20cdabb7b04fa2f7bcad0ef4e2991d5c4fcd0810138f958a47436d95a54aea6e25a866caa51ed843
@@ -5,9 +5,9 @@ sudo: false
5
5
 
6
6
  rvm:
7
7
  - 1.9.3
8
- - 2.1.10
9
8
  - 2.2.5
10
9
  - 2.3.1
10
+ - 2.4
11
11
  - jruby
12
12
  - rbx
13
13
 
@@ -19,27 +19,29 @@ matrix:
19
19
  exclude:
20
20
  - rvm: 1.9.3
21
21
  gemfile: gemfiles/activerecord_master.gemfile
22
- - rvm: 2.1.10
22
+ - rvm: 2.2.5
23
+ gemfile: gemfiles/activerecord_master.gemfile
24
+ - rvm: 2.3.1
23
25
  gemfile: gemfiles/activerecord_master.gemfile
24
26
  - rvm: 1.9.3
25
27
  gemfile: gemfiles/activerecord_5.1.gemfile
26
- - rvm: 2.1.10
27
- gemfile: gemfiles/activerecord_5.1.gemfile
28
28
  - rvm: 1.9.3
29
29
  gemfile: gemfiles/activerecord_5.0.gemfile
30
- - rvm: 2.1.10
31
- gemfile: gemfiles/activerecord_5.0.gemfile
32
- - rvm: 2.1.10
33
- gemfile: gemfiles/activerecord_2.3.gemfile
30
+ - rvm: 2.4
31
+ gemfile: gemfiles/activerecord_4.1.gemfile
32
+ - rvm: 2.4
33
+ gemfile: gemfiles/activerecord_4.0.gemfile
34
+ - rvm: 2.4
35
+ gemfile: gemfiles/activerecord_3.2.gemfile
34
36
  - rvm: 2.2.5
35
37
  gemfile: gemfiles/activerecord_2.3.gemfile
36
38
  - rvm: 2.3.1
37
39
  gemfile: gemfiles/activerecord_2.3.gemfile
40
+ - rvm: 2.4
41
+ gemfile: gemfiles/activerecord_2.3.gemfile
38
42
 
39
43
  gemfile:
40
44
  - gemfiles/activerecord_2.3.gemfile
41
- - gemfiles/activerecord_3.0.gemfile
42
- - gemfiles/activerecord_3.1.gemfile
43
45
  - gemfiles/activerecord_3.2.gemfile
44
46
  - gemfiles/activerecord_4.0.gemfile
45
47
  - gemfiles/activerecord_4.1.gemfile
data/CHANGES.md CHANGED
@@ -1,3 +1,10 @@
1
+ 0.3.9 (2018-07-07)
2
+ -----------
3
+ - Fix broken count
4
+ - Avoid monkey patching Schema.define
5
+ - Support ruby 2.4 (drop support for ruby 2.1 and rails 3.0/3.1)
6
+ - Support custom TableDefinition (useful for postgres)
7
+
1
8
  0.3.8 (2018-02-06)
2
9
  -----------
3
10
  - Adds support for ActiveRecord Edge (6.0)
@@ -15,6 +15,8 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
15
15
  # Recognized options:
16
16
  #
17
17
  # [+:schema+] path to the schema file, relative to Rails.root
18
+ # [+:table_definition_class_name+] table definition class
19
+ # (e.g. ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition for Postgres) or nil.
18
20
  def initialize(config={})
19
21
  @log = StringIO.new
20
22
  @logger = Logger.new(@log)
@@ -25,6 +27,15 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
25
27
  @config = config.merge(:adapter => :nulldb)
26
28
  super *initialize_args
27
29
  @visitor ||= Arel::Visitors::ToSql.new self if defined?(Arel::Visitors::ToSql)
30
+
31
+ if config[:table_definition_class_name]
32
+ ActiveRecord::ConnectionAdapters::NullDBAdapter.send(:remove_const, 'TableDefinition')
33
+ ActiveRecord::ConnectionAdapters::NullDBAdapter.const_set('TableDefinition',
34
+ self.class.const_get(config[:table_definition_class_name]))
35
+ end
36
+
37
+ register_types unless NullDB::LEGACY_ACTIVERECORD || \
38
+ ActiveRecord::VERSION::MAJOR < 4
28
39
  end
29
40
 
30
41
  # A log of every statement that has been "executed" by this connection adapter
@@ -221,7 +232,7 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
221
232
 
222
233
  def select(statement, name = nil, binds = [])
223
234
  EmptyResult.new.tap do |r|
224
- r.columns = columns_for(name)
235
+ r.bind_column_meta(columns_for(name))
225
236
  self.execution_log << Statement.new(entry_point, statement)
226
237
  end
227
238
  end
@@ -229,8 +240,9 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
229
240
  private
230
241
 
231
242
  def columns_for(table_name)
232
- table_def = @tables[table_name]
233
- table_def ? table_def.columns : []
243
+ table_meta = @tables[table_name]
244
+ return [] unless table_meta
245
+ table_meta.columns
234
246
  end
235
247
 
236
248
  def next_unique_id
@@ -322,4 +334,19 @@ class ActiveRecord::ConnectionAdapters::NullDBAdapter < ActiveRecord::Connection
322
334
  [nil, @logger]
323
335
  end
324
336
 
337
+ # 4.2 introduced ActiveRecord::Type
338
+ # https://github.com/rails/rails/tree/4-2-stable/activerecord/lib/active_record
339
+ def register_types
340
+ if ActiveRecord::VERSION::MAJOR < 5
341
+ type_map.register_type(:primary_key, ActiveRecord::Type::Integer.new)
342
+ else
343
+ require 'active_model/type'
344
+ ActiveRecord::Type.register(
345
+ :primary_key,
346
+ ActiveModel::Type::Integer,
347
+ adapter: adapter_name,
348
+ override: true
349
+ )
350
+ end
351
+ end
325
352
  end
@@ -1,26 +1,38 @@
1
1
  class ActiveRecord::ConnectionAdapters::NullDBAdapter
2
2
 
3
3
  class EmptyResult < Array
4
- attr_writer :columns
5
- def rows
6
- []
7
- end
4
+ attr_reader :column_types
5
+
6
+ def bind_column_meta(columns)
7
+ @columns = columns
8
+ return if columns.empty?
8
9
 
9
- def column_types
10
- columns.map{|col| col.type}
10
+ @column_types = columns.reduce({}) do |ctypes, col|
11
+ ctypes[col.name] = ActiveRecord::Type.lookup(col.type)
12
+ ctypes
13
+ end
11
14
  end
12
15
 
13
16
  def columns
14
17
  @columns ||= []
15
18
  end
16
19
 
20
+ def column_types
21
+ @column_types ||= {}
22
+ end
23
+
17
24
  def cast_values(type_overrides = nil)
18
25
  rows
19
26
  end
20
27
 
28
+ def rows
29
+ []
30
+ end
31
+
21
32
  def >(num)
22
33
  rows.size > num
23
34
  end
35
+
24
36
  end
25
37
 
26
38
  end
@@ -3,6 +3,9 @@ require 'active_support/deprecation'
3
3
  require 'active_record/connection_adapters/nulldb_adapter'
4
4
 
5
5
  module NullDB
6
+ LEGACY_ACTIVERECORD =
7
+ Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new('4.2.0')
8
+
6
9
  class Configuration < Struct.new(:project_root); end
7
10
 
8
11
  class << self
@@ -28,15 +28,4 @@ class ActiveRecord::Base
28
28
  def self.nulldb_connection(config)
29
29
  ActiveRecord::ConnectionAdapters::NullDBAdapter.new(config)
30
30
  end
31
- end
32
-
33
-
34
- module ActiveRecord
35
- # Just make sure you have the latest version of your schema
36
- superclass = ActiveRecord::VERSION::MAJOR >= 5 ? Migration.public_send(:[], "#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}".to_f) : Migration
37
- class Schema < superclass
38
- def self.define(info={}, &block)
39
- instance_eval(&block)
40
- end
41
- end
42
- end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module NullDB
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
@@ -287,6 +287,10 @@ describe "NullDB" do
287
287
  expect( ActiveRecord::Base ).to receive(:connection_pool).and_raise(ActiveRecord::ConnectionNotEstablished)
288
288
  expect { NullDB.nullify }.to_not raise_error
289
289
  end
290
+
291
+ it 'should handle count queries' do
292
+ expect(Employee.count).to eql(0)
293
+ end
290
294
  end
291
295
 
292
296
  # need a fallback db for contextual nullification
@@ -334,6 +338,13 @@ describe 'adapter-specific extensions' do
334
338
  end
335
339
  }.to_not raise_error
336
340
  end
341
+
342
+ if ActiveRecord::VERSION::MAJOR > 4
343
+ it 'registers a primary_key type' do
344
+ expect(ActiveRecord::Type.lookup(:primary_key, adapter: 'NullDB'))
345
+ .to be_a(ActiveModel::Type::Integer)
346
+ end
347
+ end
337
348
  end
338
349
 
339
350
  describe ActiveRecord::ConnectionAdapters::NullDBAdapter::EmptyResult 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.3.8
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Avdi Grimm
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-02-06 00:00:00.000000000 Z
12
+ date: 2018-07-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -129,8 +129,6 @@ files:
129
129
  - Rakefile
130
130
  - activerecord-nulldb-adapter.gemspec
131
131
  - gemfiles/activerecord_2.3.gemfile
132
- - gemfiles/activerecord_3.0.gemfile
133
- - gemfiles/activerecord_3.1.gemfile
134
132
  - gemfiles/activerecord_3.2.gemfile
135
133
  - gemfiles/activerecord_4.0.gemfile
136
134
  - gemfiles/activerecord_4.1.gemfile
@@ -1,16 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 3.0.0"
6
-
7
- group :development, :test do
8
- gem "spec"
9
- gem "rspec", ">= 1.2.9"
10
- gem "rake"
11
- end
12
-
13
- group :development do
14
- gem "appraisal"
15
- gem "simplecov", :require => false
16
- end
@@ -1,16 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 3.1.0"
6
-
7
- group :development, :test do
8
- gem "spec"
9
- gem "rspec", ">= 1.2.9"
10
- gem "rake"
11
- end
12
-
13
- group :development do
14
- gem "appraisal"
15
- gem "simplecov", :require => false
16
- end