active_record-acts_as 5.1.0 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/active_record/acts_as/class_methods.rb +1 -1
- data/lib/active_record/acts_as/querying.rb +21 -0
- data/lib/active_record/acts_as/version.rb +1 -1
- data/spec/acts_as_spec.rb +16 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ed68e0f493ab0bca2e81e2a1f0fc1a37a9b97b125336e74f76c1a773794b6bc
|
4
|
+
data.tar.gz: 18934a6d17d87d3f5befeb57acdd11cbfbf0771e80ad95fafdb87819d0c1152a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '009d65fc100af5440fb62c5a9caefeaeda1c5473676d3d2a30c81450ae015780d7ad74226c3b76a0ab7b1c08b18db54edf092519a49a2cc507dc0a617cc2a093'
|
7
|
+
data.tar.gz: 9bacb126798c42cdada4db64e958425db014bbe59c9f5c3fd088472a70222b98afa20cd77816e622b8dacac61901680cb083975acfe422713d4771a0b0dada66
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,15 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6
6
|
|
7
7
|
## [Unreleased] -
|
8
|
+
## [5.2.0] - 2023-09-03
|
9
|
+
|
10
|
+
### Added
|
11
|
+
- Add `.exists?` support to seamlessly check in both the model and super model
|
12
|
+
(@chaadow)
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
- Fix `.actables` to restrict based on type. (@Taeir)
|
16
|
+
|
8
17
|
## [5.1.0] - 2023-06-29
|
9
18
|
- Use Github actions instead of travis.yml
|
10
19
|
- Add support for ruby 2.7 3.0 and 3.1
|
@@ -26,6 +26,23 @@ module ActiveRecord
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
module ExistsConcern
|
30
|
+
extend ActiveSupport::Concern
|
31
|
+
|
32
|
+
included do
|
33
|
+
alias :_original_exists? :exists?
|
34
|
+
|
35
|
+
# We redefine the method only when this module is included
|
36
|
+
# to have acces to the original exists? method
|
37
|
+
def exists?(...)
|
38
|
+
return super unless acting_as?
|
39
|
+
|
40
|
+
joins(acting_as_name.to_sym)._original_exists?(...)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
29
46
|
module ScopeForCreate
|
30
47
|
def scope_for_create(attributes = nil)
|
31
48
|
return super() unless acting_as?
|
@@ -41,3 +58,7 @@ module ActiveRecord
|
|
41
58
|
Relation.send(:prepend, ActsAs::QueryMethods)
|
42
59
|
Relation.send(:prepend, ActsAs::ScopeForCreate)
|
43
60
|
end
|
61
|
+
|
62
|
+
ActiveSupport.on_load(:active_record) do
|
63
|
+
ActiveRecord::Relation.include(ActiveRecord::ActsAs::ExistsConcern)
|
64
|
+
end
|
data/spec/acts_as_spec.rb
CHANGED
@@ -300,25 +300,27 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
300
300
|
end
|
301
301
|
|
302
302
|
context "errors" do
|
303
|
+
let(:error_message) { ActiveRecord.version >= Gem::Version.new('7.1.0.alpha') ? "can’t be blank" : "can't be blank"}
|
304
|
+
|
303
305
|
context 'when validates_actable is set to true' do
|
304
306
|
it "combines supermodel and submodel errors" do
|
305
307
|
pen = Pen.new
|
306
308
|
expect(pen).to be_invalid
|
307
309
|
expect(pen.errors.to_hash).to eq(
|
308
|
-
name: [
|
309
|
-
price: [
|
310
|
-
color: [
|
310
|
+
name: [error_message],
|
311
|
+
price: [error_message],
|
312
|
+
color: [error_message]
|
311
313
|
)
|
312
314
|
pen.name = 'testing'
|
313
315
|
expect(pen).to be_invalid
|
314
316
|
expect(pen.errors.to_hash).to eq(
|
315
|
-
price: [
|
316
|
-
color: [
|
317
|
+
price: [error_message],
|
318
|
+
color: [error_message]
|
317
319
|
)
|
318
320
|
pen.color = 'red'
|
319
321
|
expect(pen).to be_invalid
|
320
322
|
expect(pen.errors.to_hash).to eq(
|
321
|
-
price: [
|
323
|
+
price: [error_message]
|
322
324
|
)
|
323
325
|
pen.price = 0.8
|
324
326
|
expect(pen).to be_valid
|
@@ -329,9 +331,7 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
329
331
|
it "unless validates_actable is set to false" do
|
330
332
|
pen = IsolatedPen.new
|
331
333
|
expect(pen).to be_invalid
|
332
|
-
expect(pen.errors.to_hash).to eq(
|
333
|
-
color: ["can't be blank"]
|
334
|
-
)
|
334
|
+
expect(pen.errors.to_hash).to eq( { color: [error_message] })
|
335
335
|
pen.color = 'red'
|
336
336
|
expect(pen).to be_valid
|
337
337
|
end
|
@@ -487,6 +487,13 @@ RSpec.describe "ActiveRecord::Base model with #acts_as called" do
|
|
487
487
|
@black_pen.buyers.create! name: 'John'
|
488
488
|
end
|
489
489
|
|
490
|
+
describe 'exists?' do
|
491
|
+
it 'checks on both model and supermodel' do
|
492
|
+
expect(Pen.exists?(name: 'red pen')).to be_truthy
|
493
|
+
expect(Pen.exists?(name: 'red pen', price: 0.8)).to be_truthy
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
490
497
|
describe '.where and .where!' do
|
491
498
|
it 'respects supermodel attributes' do
|
492
499
|
conditions = { price: 0.8 }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record-acts_as
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hassan Zamani
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-09-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sqlite3
|