shoulda-matchers 6.3.0 → 6.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: 87a298f618f08949dbe1c165b17dfbfc940a6675b2f790e655c9a43568956c31
4
- data.tar.gz: ea5eaad001d24f89a698a4a944f2596da029c019a4bcc2f893c0881146dea058
3
+ metadata.gz: 0a3a788cc37a73b615004a4e88dacb051413e00f9a752b78f00cfa8b529e4149
4
+ data.tar.gz: 99e5319049435d5ae107d068cecacd547bbd5135e1f1966bf8e15c40e5cde84f
5
5
  SHA512:
6
- metadata.gz: bcaf6fc8e3e59cf1936c2a346d1a02c1269ab8e231b7820c273873ed81cf6f97501bf15ea44503f357008064f34eaec66bc9a81f2938fd3876078d707979daea
7
- data.tar.gz: 94a53d9576ea0df451d2ff0ff34528f8c035699e9d216e877ced2cdff156ae0a5d18bc106dc0b5fc487aebfd56807bd836d2cb9aa51ababfc232be5e3b94c2cf
6
+ metadata.gz: 5f2b4708f133c2e0a790c99de4608d976d8dfe8704436adeea539e816a18bc6bca7612e7ff669bc4830f8f617550a0db7a70574f611a791dc27879d66f6ed09c
7
+ data.tar.gz: 460ac28a8c3833b30ec3171f62a5d5225712132837caeb1c620df49cdcc1fc2d92614a8a652ac93f7707b06d4fe24c5c9ee70fc9759b8b34a3929f845931a2b5
data/README.md CHANGED
@@ -167,9 +167,9 @@ end
167
167
  Most of the matchers provided by this gem are useful in a Rails context, and as
168
168
  such, can be used for different parts of a Rails app:
169
169
 
170
- * [database models backed by ActiveRecord](#activemodel-matchers)
170
+ * [database models backed by ActiveRecord](#activerecord-matchers)
171
171
  * [non-database models, form objects, etc. backed by
172
- ActiveModel](#activerecord-matchers)
172
+ ActiveModel](#activemodel-matchers)
173
173
  * [controllers](#actioncontroller-matchers)
174
174
  * [routes](#routing-matchers) (RSpec only)
175
175
  * [Rails-specific features like `delegate`](#independent-matchers)
@@ -19,10 +19,7 @@ module Shoulda
19
19
  def matches?(subject)
20
20
  self.subject = ModelReflector.new(subject, name)
21
21
 
22
- if option_verifier.correct_for_string?(
23
- :counter_cache,
24
- counter_cache,
25
- )
22
+ if correct_value?
26
23
  true
27
24
  else
28
25
  self.missing_option = "#{name} should have #{description}"
@@ -34,9 +31,42 @@ module Shoulda
34
31
 
35
32
  attr_accessor :subject, :counter_cache, :name
36
33
 
34
+ def correct_value?
35
+ expected = normalize_value
36
+
37
+ if expected.is_a?(Hash)
38
+ option_verifier.correct_for_hash?(
39
+ :counter_cache,
40
+ expected,
41
+ )
42
+ else
43
+ option_verifier.correct_for_string?(
44
+ :counter_cache,
45
+ expected,
46
+ )
47
+ end
48
+ end
49
+
37
50
  def option_verifier
38
51
  @_option_verifier ||= OptionVerifier.new(subject)
39
52
  end
53
+
54
+ def normalize_value
55
+ if Rails::VERSION::STRING >= '7.2'
56
+ case counter_cache
57
+ when true
58
+ { active: true, column: nil }
59
+ when String, Symbol
60
+ { active: true, column: counter_cache.to_s }
61
+ when Hash
62
+ { active: true, column: nil }.merge(counter_cache)
63
+ else
64
+ raise ArgumentError, 'Invalid counter_cache option'
65
+ end
66
+ else
67
+ counter_cache
68
+ end
69
+ end
40
70
  end
41
71
  end
42
72
  end
@@ -655,11 +655,22 @@ module Shoulda
655
655
  end
656
656
 
657
657
  def actual_default_value
658
- attribute_schema = model.attributes_to_define_after_schema_loads[attribute_name.to_s]
658
+ attribute_schema = if model.respond_to?(:_default_attributes)
659
+ model._default_attributes[attribute_name.to_s]
660
+ else
661
+ model.attributes_to_define_after_schema_loads[attribute_name.to_s]
662
+ end
663
+
664
+ if Kernel.const_defined?('ActiveModel::Attribute::UserProvidedDefault') &&
665
+ attribute_schema.is_a?(::ActiveModel::Attribute::UserProvidedDefault)
666
+ attribute_schema = attribute_schema.marshal_dump
667
+ end
659
668
 
660
669
  value = case attribute_schema
661
670
  in [_, { default: default_value } ]
662
671
  default_value
672
+ in [_, default_value, *]
673
+ default_value
663
674
  in [_, default_value]
664
675
  default_value
665
676
  end
@@ -736,7 +747,7 @@ module Shoulda
736
747
  record.class.validators.detect do |validator|
737
748
  validator.kind == :inclusion &&
738
749
  validator.attributes.include?(attribute_name.to_s) &&
739
- validator.options[:in] == expected_enum_values
750
+ validator.options[:in] == expected_enum_value_names
740
751
  end
741
752
  end
742
753
 
@@ -1,6 +1,6 @@
1
1
  module Shoulda
2
2
  module Matchers
3
3
  # @private
4
- VERSION = '6.3.0'.freeze
4
+ VERSION = '6.4.0'.freeze
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoulda-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 6.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tammer Saleh
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2024-08-09 00:00:00.000000000 Z
17
+ date: 2024-08-16 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activesupport