polymorpheus 3.3.0 → 3.4.0

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: 4ab6587aad06136dbdf95584bba576349fc9731187a60dd6945d74bcb400b025
4
- data.tar.gz: b83008d22a38740f1ef2909971e5fd662ed8ac5297449ddd1dd405af43a4d792
3
+ metadata.gz: 60273820617c2e5ef7e4eab45965a2729ae9ecb3e8ba05357cf9c0ae432d36be
4
+ data.tar.gz: 156743a57b80836a20280d0bdef6bd4e3f895e79cbf93aac60b986fe5deb4bac
5
5
  SHA512:
6
- metadata.gz: 476c715b239796573c7a2de566a4dd52507445c68227c4559cb7ec9a443ab707f48d31ad1477edfcfa52183e18634eac329bbe7d7c4bdbf006d620544c9d88b8
7
- data.tar.gz: a778788d64292837ad5ed6e4a4a4b4fbc9e2fcdd5f38d1c99088c3fa2e7d838b07e20e1df3cae0cb0c7bf6c9e537c0c1d90c3c1ac17fcd8b5db2076def0194b0
6
+ metadata.gz: 5bb967919da9877c1129879492445d4972aff408399c0c6da01804cc4848382e9565b1cf32aa72c63101cf791ef331e5382cededa0a146e0d439a828f34fade2
7
+ data.tar.gz: cb3b1f649f7317ef555b78b6932a5385c8f78ba7e8b5bbdb3d37a552a4b4c20dce0ef72fd1deb410745744885020766e674acd50a1826989b720fe99abe71e65
data/README.md CHANGED
@@ -1,4 +1,3 @@
1
- [![Build Status](https://travis-ci.org/wegowise/polymorpheus.png?branch=master)](https://travis-ci.org/wegowise/polymorpheus)
2
1
  [![Code Climate](https://codeclimate.com/github/wegowise/polymorpheus.png)](https://codeclimate.com/github/wegowise/polymorpheus)
3
2
 
4
3
  # Polymorpheus
@@ -10,15 +9,6 @@ no setup**
10
9
  If you are using Bundler, you can add the gem to your Gemfile:
11
10
 
12
11
  ```ruby
13
- # with Rails >= 4.2
14
- gem 'polymorpheus'
15
- ```
16
-
17
- Or:
18
-
19
- ```ruby
20
- # with Rails < 4.2
21
- gem 'foreigner'
22
12
  gem 'polymorpheus'
23
13
  ```
24
14
 
@@ -212,8 +202,8 @@ pic.polymorpheus.query_condition
212
202
  ## Credits and License
213
203
 
214
204
  * This gem was written by [Barun Singh](https://github.com/barunio)
215
- * It uses the [Foreigner gem](https://github.com/matthuhiggins/foreigner) under
216
- the hood for Rails < 4.2.
205
+ * Older, unsupported versions of this gem use [Foreigner gem](https://github.com/matthuhiggins/foreigner)
206
+ under the hood for Rails < 4.2.
217
207
 
218
208
  polymorpheus is Copyright © 2011-2015 Barun Singh and [WegoWise](
219
209
  http://wegowise.com). It is free software, and may be redistributed under the
@@ -15,7 +15,11 @@ module Polymorpheus
15
15
  end
16
16
 
17
17
  def configured_adapter
18
- ActiveRecord::Base.connection_pool.spec.config[:adapter]
18
+ if ActiveRecord::Base.respond_to?(:connection_db_config)
19
+ ActiveRecord::Base.connection_db_config.adapter # ActiveRecord >= 6.1
20
+ else
21
+ ActiveRecord::Base.connection_pool.spec.config[:adapter]
22
+ end
19
23
  end
20
24
  end
21
25
 
@@ -21,7 +21,7 @@ module Polymorpheus
21
21
 
22
22
  # Set belongs_to associations
23
23
  builder.associations.each do |association|
24
- belongs_to association.name.to_sym, association.options
24
+ belongs_to association.name.to_sym, **association.options
25
25
  end
26
26
 
27
27
  # Exposed interface for introspection
@@ -25,7 +25,7 @@ module Polymorpheus
25
25
  relation
26
26
  end
27
27
 
28
- has_many association, conditions, options
28
+ has_many association, conditions, **options
29
29
  end
30
30
  end
31
31
  end
@@ -74,7 +74,7 @@ module Polymorpheus
74
74
  :name => "#{table}_#{col_name}_fk",
75
75
  :primary_key => (ref_col || 'id' )
76
76
  }.merge(generate_constraints(options))
77
- add_foreign_key(table, ref_table, fk_options)
77
+ add_foreign_key(table, ref_table, **fk_options)
78
78
  end
79
79
  end
80
80
 
@@ -208,8 +208,3 @@ end
208
208
  rescue
209
209
  end
210
210
  end
211
-
212
- if ::Polymorpheus.require_foreigner?
213
- require 'foreigner/connection_adapters/mysql2_adapter'
214
- require 'polymorpheus/mysql_adapter/foreigner_constraints'
215
- end
@@ -1,3 +1,3 @@
1
1
  module Polymorpheus
2
- VERSION = '3.3.0'
2
+ VERSION = '3.4.0'
3
3
  end
data/lib/polymorpheus.rb CHANGED
@@ -8,12 +8,7 @@ module Polymorpheus
8
8
  module Interface
9
9
  autoload :BelongsToPolymorphic, 'polymorpheus/interface/belongs_to_polymorphic'
10
10
  autoload :ValidatesPolymorph, 'polymorpheus/interface/validates_polymorph'
11
-
12
- if ActiveRecord::VERSION::MAJOR >= 4
13
- autoload :HasManyAsPolymorph, 'polymorpheus/interface/rails4/has_many_as_polymorph'
14
- else
15
- autoload :HasManyAsPolymorph, 'polymorpheus/interface/rails3/has_many_as_polymorph'
16
- end
11
+ autoload :HasManyAsPolymorph, 'polymorpheus/interface/has_many_as_polymorph'
17
12
  end
18
13
 
19
14
  class InterfaceBuilder
@@ -23,16 +18,8 @@ module Polymorpheus
23
18
  module ConnectionAdapters
24
19
  autoload :SchemaStatements, 'polymorpheus/schema_statements'
25
20
  end
26
-
27
- def self.require_foreigner?
28
- ActiveRecord::VERSION::MAJOR < 5 &&
29
- !(::ActiveRecord::VERSION::MAJOR >= 4 &&
30
- ::ActiveRecord::VERSION::MINOR >= 2)
31
- end
32
21
  end
33
22
 
34
- require 'foreigner' if ::Polymorpheus.require_foreigner?
35
-
36
23
  Polymorpheus::Adapter.register 'mysql2', 'polymorpheus/mysql_adapter'
37
24
  Polymorpheus::Adapter.register 'postgresql', 'polymorpheus/postgresql_adapter'
38
25
 
data/polymorpheus.gemspec CHANGED
@@ -12,12 +12,13 @@ Gem::Specification.new do |s|
12
12
  s.summary = "Provides a database-friendly method for polymorphic relationships"
13
13
  s.description = "Provides a database-friendly method for polymorphic relationships"
14
14
 
15
+ s.required_ruby_version = ">= 2.6"
15
16
  s.required_rubygems_version = ">= 1.3.6"
16
17
  s.files = Dir.glob(%w[{lib,spec}/**/*.rb [A-Z]*.{txt,rdoc,md} *.gemspec]) + %w{Rakefile}
17
18
  s.extra_rdoc_files = ["README.md", "LICENSE.txt"]
18
19
  s.license = 'MIT'
19
20
 
20
- s.add_dependency('activerecord', '>= 3.2', '< 6.1')
21
+ s.add_dependency('activerecord', '>= 5.2', '< 7.1')
21
22
 
22
23
  s.add_development_dependency('rake', '~> 12.3.3')
23
24
  s.add_development_dependency('rspec', '~> 3.9.0')
data/spec/spec_helper.rb CHANGED
@@ -2,13 +2,14 @@ require 'active_record'
2
2
  require 'polymorpheus'
3
3
  require 'stringio'
4
4
 
5
- require 'support/active_record/connection_adapters/abstract_mysql_adapter'
6
-
7
- ActiveRecord::Base.establish_connection({
5
+ ActiveRecord::Base.establish_connection(
8
6
  adapter: 'mysql2',
9
- username: 'travis',
10
- database: 'polymorpheus_test'
11
- })
7
+ database: ENV.fetch('DB_NAME', 'polymorpheus_test'),
8
+ host: ENV.fetch('DB_HOST', '127.0.0.1'),
9
+ password: ENV.fetch('DB_PASSWORD', ''),
10
+ port: ENV.fetch('DB_PORT', '3306'),
11
+ username: ENV.fetch('DB_USERNAME', 'root')
12
+ )
12
13
 
13
14
  Dir[File.dirname(__FILE__) + '/support/*.rb'].sort.each { |path| require path }
14
15
 
@@ -27,7 +28,7 @@ RSpec.configure do |config|
27
28
  config.include SqlTestHelpers
28
29
 
29
30
  config.after do
30
- data_sources.each do |table|
31
+ ActiveRecord::Base.connection.tables.each do |table|
31
32
  ActiveRecord::Base.connection.drop_table(table)
32
33
  end
33
34
  end
@@ -3,14 +3,6 @@ module ConnectionHelpers
3
3
  connection.add_polymorphic_constraints(*args)
4
4
  end
5
5
 
6
- def data_sources
7
- if ActiveRecord::VERSION::MAJOR >= 5
8
- ActiveRecord::Base.connection.data_sources
9
- else
10
- ActiveRecord::Base.connection.tables
11
- end
12
- end
13
-
14
6
  def remove_polymorphic_constraints(*args)
15
7
  connection.remove_polymorphic_constraints(*args)
16
8
  end
@@ -2,7 +2,7 @@ module SchemaHelpers
2
2
  def create_table(name, options = {})
3
3
  options.merge!(force: true)
4
4
  ActiveRecord::Schema.define do
5
- create_table(name, options) do |t|
5
+ create_table(name, **options) do |t|
6
6
  yield(t) if block_given?
7
7
  end
8
8
  end
@@ -0,0 +1,17 @@
1
+ module Polymorpheus
2
+ class SqlQuerySubscriber
3
+ attr_reader :sql_statements
4
+
5
+ def initialize
6
+ @sql_statements = []
7
+ end
8
+
9
+ def call(_name, _start, _finish, _id, payload)
10
+ sql_statements << payload[:sql]
11
+ end
12
+
13
+ def clear_sql_history
14
+ @sql_statements.clear
15
+ end
16
+ end
17
+ end
@@ -2,22 +2,16 @@ module SqlTestHelpers
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  included do
5
- before(:all) do
6
- class << ActiveRecord::Base.connection
7
- include Polymorpheus::SqlLogger
8
- alias_method :original_execute, :execute
9
- alias_method :execute, :log_sql_statements
10
- end
5
+ before do
6
+ ActiveSupport::Notifications.subscribe('sql.active_record', sql_logger)
11
7
  end
12
8
 
13
- after(:all) do
14
- class << ActiveRecord::Base.connection
15
- alias_method :execute, :original_execute
16
- end
9
+ after do
10
+ ActiveSupport::Notifications.unsubscribe(sql_logger)
17
11
  end
18
12
 
19
13
  let(:connection) { ActiveRecord::Base.connection }
20
- let(:sql) { connection.sql_statements }
14
+ let(:sql_logger) { Polymorpheus::SqlQuerySubscriber.new }
21
15
 
22
16
  def clean_sql(sql_string)
23
17
  sql_string
@@ -31,11 +25,15 @@ module SqlTestHelpers
31
25
  end
32
26
 
33
27
  def clear_sql_history
34
- connection.clear_sql_history
28
+ sql_logger.clear_sql_history
35
29
  end
36
30
 
37
31
  def should_execute_sql(expected)
38
32
  expect(clean_sql(sql.join("\n"))).to include(clean_sql(expected))
39
33
  end
34
+
35
+ def sql
36
+ sql_logger.sql_statements
37
+ end
40
38
  end
41
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymorpheus
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Barun Singh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-08 00:00:00.000000000 Z
11
+ date: 2022-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '5.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.1'
22
+ version: '7.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '3.2'
29
+ version: '5.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.1'
32
+ version: '7.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -73,13 +73,11 @@ files:
73
73
  - lib/polymorpheus/adapter.rb
74
74
  - lib/polymorpheus/interface.rb
75
75
  - lib/polymorpheus/interface/belongs_to_polymorphic.rb
76
- - lib/polymorpheus/interface/rails3/has_many_as_polymorph.rb
77
- - lib/polymorpheus/interface/rails4/has_many_as_polymorph.rb
76
+ - lib/polymorpheus/interface/has_many_as_polymorph.rb
78
77
  - lib/polymorpheus/interface/validates_polymorph.rb
79
78
  - lib/polymorpheus/interface_builder.rb
80
79
  - lib/polymorpheus/interface_builder/association.rb
81
80
  - lib/polymorpheus/mysql_adapter.rb
82
- - lib/polymorpheus/mysql_adapter/foreigner_constraints.rb
83
81
  - lib/polymorpheus/postgresql_adapter.rb
84
82
  - lib/polymorpheus/railtie.rb
85
83
  - lib/polymorpheus/schema_dumper.rb
@@ -94,12 +92,11 @@ files:
94
92
  - spec/mysql2_adapter_spec.rb
95
93
  - spec/schema_dumper_spec.rb
96
94
  - spec/spec_helper.rb
97
- - spec/support/active_record/connection_adapters/abstract_mysql_adapter.rb
98
95
  - spec/support/class_defs.rb
99
96
  - spec/support/connection_helpers.rb
100
97
  - spec/support/custom_matchers.rb
101
98
  - spec/support/schema_helpers.rb
102
- - spec/support/sql_logger.rb
99
+ - spec/support/sql_query_subscriber.rb
103
100
  - spec/support/sql_test_helpers.rb
104
101
  - spec/trigger_spec.rb
105
102
  homepage: http://github.com/wegowise/polymorpheus
@@ -114,14 +111,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
111
  requirements:
115
112
  - - ">="
116
113
  - !ruby/object:Gem::Version
117
- version: '0'
114
+ version: '2.6'
118
115
  required_rubygems_version: !ruby/object:Gem::Requirement
119
116
  requirements:
120
117
  - - ">="
121
118
  - !ruby/object:Gem::Version
122
119
  version: 1.3.6
123
120
  requirements: []
124
- rubygems_version: 3.1.2
121
+ rubygems_version: 3.3.6
125
122
  signing_key:
126
123
  specification_version: 4
127
124
  summary: Provides a database-friendly method for polymorphic relationships
@@ -1,29 +0,0 @@
1
- module Polymorpheus
2
- module Interface
3
- module HasManyAsPolymorph
4
- def has_many_as_polymorph(association, options = {})
5
- options.symbolize_keys!
6
- fkey = name.foreign_key
7
-
8
- class_name = options[:class_name] || association.to_s.classify
9
-
10
- options[:conditions] = proc do
11
- keys = class_name.constantize
12
- .const_get('POLYMORPHEUS_ASSOCIATIONS')
13
- .map(&:foreign_key)
14
- keys.delete(fkey)
15
-
16
- nil_columns = keys.reduce({}) { |hash, key| hash.merge!(key => nil) }
17
-
18
- if self.is_a?(ActiveRecord::Associations::JoinDependency::JoinAssociation)
19
- { aliased_table_name => nil_columns }
20
- else
21
- { association => nil_columns }
22
- end
23
- end
24
-
25
- has_many association, options
26
- end
27
- end
28
- end
29
- end
@@ -1,30 +0,0 @@
1
- module Polymorpheus
2
- module ConnectionAdapters
3
- module MysqlAdapter
4
- def generate_constraints(options)
5
- constraints = []
6
-
7
- ['delete', 'update'].each do |event|
8
- option = "on_#{event}".to_sym
9
- next unless options.has_key?(option) &&
10
- options[option].respond_to?(:to_sym)
11
-
12
- action = case options[option].to_sym
13
- when :nullify then 'SET NULL'
14
- when :cascade then 'CASCADE'
15
- when :restrict then 'RESTRICT'
16
- else
17
- fail ArgumentError, <<-EOS
18
- '#{options[option]}' is not supported for :on_update or :on_delete.
19
- Supported values are: :nullify, :cascade, :restrict
20
- EOS
21
- end
22
-
23
- constraints << "ON #{event.upcase} #{action}"
24
- end
25
-
26
- { :options => constraints.join(' ') }
27
- end
28
- end
29
- end
30
- end
@@ -1,9 +0,0 @@
1
- # Patch support for MySQL 5.7+ onto ActiveRecord < 4.1.
2
- if ActiveRecord::VERSION::MAJOR < 4 ||
3
- (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR < 1)
4
-
5
- require 'active_record/connection_adapters/abstract_mysql_adapter'
6
- class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
7
- NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
8
- end
9
- end
@@ -1,30 +0,0 @@
1
- module Polymorpheus
2
- module SqlLogger
3
-
4
- def sql_statements
5
- @sql_statements ||= []
6
- end
7
-
8
- def clear_sql_history
9
- @sql_statements = nil
10
- end
11
-
12
- def stub_sql(statement, response)
13
- @stubbed ||= {}
14
- @stubbed[statement] = response
15
- end
16
-
17
- private
18
-
19
- def log_sql_statements(sql, name = nil)
20
- if @stubbed && @stubbed.has_key?(sql)
21
- @stubbed[sql]
22
- else
23
- sql_statements << sql
24
- original_execute(sql, name)
25
- end
26
- end
27
-
28
- end
29
- end
30
-