active_record_compose 0.3.1 → 0.3.3

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: 2c83677cc55d1c45bfa440db7ca21b2924ffec080a025503b892ec3f0245a6b8
4
- data.tar.gz: d5a01db0286b3bb0527b4e16692b62fa468035fc091449e7607f2f709b75b866
3
+ metadata.gz: f9038b3106a9206304243a5723488fe400e6c05eba4edb69fef0e2a7a154f15f
4
+ data.tar.gz: 7432c93447a3627cf6c1e6706d6d0d3d1ea1e6d80079b9038e73fe1fd1bddaeb
5
5
  SHA512:
6
- metadata.gz: 44a5cca81d044619077855a534063bd2a28a42ece83f34b2605c6c03192f89066e14b8e3c02309e6c52d25608fe2dad0b519cfd9a32ed3d8f1f8fc76ec1105e2
7
- data.tar.gz: 2245da3f3053b93ba7c6c2357eecb08a3c069d99e90645fd0a4c7a2b55b5704fc59dbd22e7a70a1f49d397a59cf9c864c39681eb0d7f65d885f797fe973e95a4
6
+ metadata.gz: 7ce874d30acf694f7be00c7177a7dcc82a49f8119709fa07b0d9cac98fc4f44ca03211bb104c8d9e2173d42ceebb0de00567c8666e1b1b6adaadd587e60d35ba
7
+ data.tar.gz: 0f3100317539f2e383ac07fed57f027c90f4030ccd2717fae2e54f288a3f17f92488fa23dc86d6cc80a05746542ef68b780c56b63dd9609ab2f27b39c21a8045
data/.rubocop.yml CHANGED
@@ -6,9 +6,15 @@ AllCops:
6
6
  Style/ArgumentsForwarding:
7
7
  Enabled: false
8
8
 
9
+ Style/CommentedKeyword:
10
+ Enabled: false
11
+
9
12
  Style/Documentation:
10
13
  Enabled: false
11
14
 
15
+ Style/NumericPredicate:
16
+ Enabled: false
17
+
12
18
  Style/StringLiterals:
13
19
  Enabled: true
14
20
 
@@ -27,6 +33,9 @@ Style/TrailingCommaInArrayLiteral:
27
33
  Style/TrailingCommaInHashLiteral:
28
34
  EnforcedStyleForMultiline: comma
29
35
 
36
+ Layout/LeadingCommentSpace:
37
+ Enabled: false
38
+
30
39
  Layout/LineLength:
31
40
  Max: 120
32
41
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.2] - 2024-04-10
4
+
5
+ - support `ActiveRecord::Base#with_connection`
6
+ - rbs maintained.
7
+ - relax context proc arity.
8
+
3
9
  ## [0.3.1] - 2024-03-17
4
10
 
5
11
  - purge nodoc definitions from type signature
@@ -38,26 +38,23 @@ module ActiveRecordCompose
38
38
  extend ActiveSupport::Concern
39
39
 
40
40
  included do
41
- __skip__ = class_attribute :delegated_attributes, instance_writer: false
41
+ class_attribute :delegated_attributes, instance_writer: false # steep:ignore
42
42
  end
43
43
 
44
44
  module ClassMethods
45
45
  # Defines the reader and writer for the specified attribute.
46
46
  #
47
47
  def delegate_attribute(*attributes, to:, **options)
48
- __skip__ =
49
- begin
50
- delegates = attributes.flat_map do |attribute|
51
- reader = attribute
52
- writer = "#{attribute}="
48
+ delegates = attributes.flat_map do |attribute|
49
+ reader = attribute.to_s
50
+ writer = "#{attribute}="
53
51
 
54
- [reader, writer]
55
- end
52
+ [reader, writer]
53
+ end
56
54
 
57
- delegate(*delegates, to:, **options)
58
- delegated_attributes = (self.delegated_attributes ||= [])
59
- attributes.each { delegated_attributes.push(_1.to_s) }
60
- end
55
+ delegate(*delegates, to:, **options) # steep:ignore
56
+ delegated_attributes = (self.delegated_attributes ||= []) # steep:ignore
57
+ attributes.each { delegated_attributes.push(_1.to_s) }
61
58
  end
62
59
  end
63
60
 
@@ -66,10 +63,11 @@ module ActiveRecordCompose
66
63
  #
67
64
  # @return [Hash] hash with the attribute name as key and the attribute value as value.
68
65
  def attributes
69
- attrs = __skip__ = defined?(super) ? super : {}
70
- delegates = __skip__ = delegated_attributes
66
+ attrs = defined?(super) ? super : {} # steep:ignore
67
+ delegates = delegated_attributes # steep:ignore
71
68
 
72
- # @type var delegates: Array[untyped]
69
+ # @type var attrs: Hash[String, untyped]
70
+ # @type var delegates: Array[String]
73
71
  attrs.merge(delegates.to_h { [_1, public_send(_1)] })
74
72
  end
75
73
  end
@@ -15,9 +15,20 @@ module ActiveRecordCompose
15
15
  delegate :errors, to: :model
16
16
 
17
17
  # @return [Symbol] :save or :destroy
18
- def context
18
+ def context #: ActiveRecordCompose::context
19
19
  c = @context
20
- ret = c.is_a?(Proc) ? c.call(model) : c
20
+ ret =
21
+ if c.is_a?(Proc)
22
+ if c.arity == 0
23
+ # @type var c: ^() -> context
24
+ c.call
25
+ else
26
+ # @type var c: ^(_ARLike) -> context
27
+ c.call(model)
28
+ end
29
+ else
30
+ c
31
+ end
21
32
  ret.presence_in(%i[save destroy]) || :save
22
33
  end
23
34
 
@@ -65,7 +76,7 @@ module ActiveRecordCompose
65
76
  # @return [Boolean]
66
77
  def ==(other)
67
78
  return false unless self.class == other.class
68
- return false unless (__skip__ = (__raw_model == other.__raw_model))
79
+ return false unless __raw_model == other.__raw_model # steep:ignore
69
80
  return false unless context == other.context
70
81
 
71
82
  true
@@ -14,7 +14,7 @@ module ActiveRecordCompose
14
14
  def each
15
15
  return enum_for(:each) unless block_given?
16
16
 
17
- __skip__ = models.each { yield _1.__raw_model }
17
+ models.each { yield _1.__raw_model } # steep:ignore
18
18
  self
19
19
  end
20
20
 
@@ -73,7 +73,7 @@ module ActiveRecordCompose
73
73
  def __each_by_wrapped
74
74
  return enum_for(:__each_by_wrapped) unless block_given?
75
75
 
76
- __skip__ = models.each { yield _1 if _1.__raw_model }
76
+ models.each { yield _1 if _1.__raw_model } # steep:ignore
77
77
  self
78
78
  end
79
79
 
@@ -82,9 +82,11 @@ module ActiveRecordCompose
82
82
  def models = @models ||= []
83
83
 
84
84
  def wrap(model, context:)
85
- if model.is_a?(ActiveRecordCompose::InnerModel)
85
+ if model.is_a?(ActiveRecordCompose::InnerModel) # steep:ignore
86
+ # @type var model: ActiveRecordCompose::InnerModel
86
87
  model
87
88
  else
89
+ # @type var model: ActiveRecordCompose::_ARLike
88
90
  ActiveRecordCompose::InnerModel.new(model, context:)
89
91
  end
90
92
  end
@@ -20,7 +20,7 @@ module ActiveRecordCompose
20
20
  validate :validate_models
21
21
 
22
22
  def initialize(attributes = {})
23
- __skip__ = super(attributes)
23
+ super
24
24
  end
25
25
 
26
26
  # Save the models that exist in models.
@@ -150,7 +150,7 @@ module ActiveRecordCompose
150
150
 
151
151
  def models = @__models ||= ActiveRecordCompose::InnerModelCollection.new
152
152
 
153
- def wrapped_models = (__skip__ = models.__each_by_wrapped)
153
+ def wrapped_models = models.__each_by_wrapped # steep:ignore
154
154
 
155
155
  def validate_models = wrapped_models.select { _1.invalid? }.each { errors.merge!(_1) }
156
156
 
@@ -7,16 +7,22 @@ module ActiveRecordCompose
7
7
 
8
8
  module ClassMethods
9
9
  def lease_connection
10
- if ActiveRecord::Base.respond_to?(:lease_connection)
11
- __skip__ = ActiveRecord::Base.lease_connection
10
+ if ar_class.respond_to?(:lease_connection)
11
+ ar_class.lease_connection # steep:ignore
12
12
  else
13
- ActiveRecord::Base.connection
13
+ ar_class.connection
14
14
  end
15
15
  end
16
16
 
17
- def connection = ActiveRecord::Base.connection
17
+ def connection = ar_class.connection
18
+
19
+ def with_connection(&) = ar_class.with_connection(&) # steep:ignore
18
20
 
19
21
  def composite_primary_key? = false
22
+
23
+ private
24
+
25
+ def ar_class = ActiveRecord::Base
20
26
  end
21
27
 
22
28
  def id = nil
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordCompose
4
- VERSION = '0.3.1'
4
+ VERSION = '0.3.3'
5
5
  end
@@ -5,7 +5,6 @@ module ActiveRecordCompose
5
5
  VERSION: String
6
6
 
7
7
  interface _ARLike
8
- def is_a?: (untyped) -> bool
9
8
  def save: -> bool
10
9
  def save!: -> untyped
11
10
  def destroy: -> bool
@@ -13,13 +12,11 @@ module ActiveRecordCompose
13
12
  def invalid?: -> bool
14
13
  def valid?: -> bool
15
14
  def errors: -> untyped
16
- def ==: (untyped) -> bool
17
15
  end
18
16
 
19
17
  type attribute_name = (String | Symbol)
20
- type context_types = (:save | :destroy)
21
- type context_proc = ^(_ARLike) -> context_types
22
- type context = context_types | context_proc
18
+ type context = (:save | :destroy)
19
+ type context_proc = ((^() -> context) | (^(_ARLike) -> context))
23
20
 
24
21
  module DelegateAttribute
25
22
  extend ActiveSupport::Concern
@@ -37,20 +34,20 @@ module ActiveRecordCompose
37
34
 
38
35
  def each: () { (_ARLike) -> void } -> InnerModelCollection | () -> Enumerator[_ARLike, self]
39
36
  def <<: (_ARLike) -> self
40
- def push: (_ARLike, ?context: context) -> self
37
+ def push: (_ARLike, ?context: (context | context_proc)) -> self
41
38
  def empty?: -> bool
42
39
  def clear: -> self
43
- def delete: (_ARLike | InnerModel, ?context: context_types) -> InnerModelCollection?
40
+ def delete: (_ARLike | InnerModel, ?context: (context | context_proc)) -> InnerModelCollection?
44
41
 
45
42
  private
46
43
  def models: -> Array[InnerModel]
47
- def wrap: (_ARLike | InnerModel, context: context) -> InnerModel
44
+ def wrap: (_ARLike | InnerModel, context: (context | context_proc)) -> InnerModel
48
45
  end
49
46
 
50
47
  class InnerModel
51
- @context: context
48
+ @context: (context | context_proc)
52
49
 
53
- def initialize: (_ARLike, ?context: context) -> void
50
+ def initialize: (_ARLike, ?context: (context | context_proc)) -> void
54
51
  def context: -> context
55
52
  def save: -> bool
56
53
  def save!: -> untyped
@@ -101,6 +98,10 @@ module ActiveRecordCompose
101
98
  module ClassMethods
102
99
  def connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
103
100
  def lease_connection: -> ActiveRecord::ConnectionAdapters::AbstractAdapter
101
+ def with_connection: [T] () { () -> T } -> T
102
+
103
+ private
104
+ def ar_class: -> singleton(ActiveRecord::Base)
104
105
  end
105
106
  end
106
107
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_compose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - hamajyotan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-16 00:00:00.000000000 Z
11
+ date: 2024-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -52,7 +52,7 @@ metadata:
52
52
  homepage_uri: https://github.com/hamajyotan/active_record_compose
53
53
  source_code_uri: https://github.com/hamajyotan/active_record_compose
54
54
  changelog_uri: https://github.com/hamajyotan/active_record_compose/blob/main/CHANGELOG.md
55
- documentation_uri: https://www.rubydoc.info/gems/active_record_compose/0.3.1
55
+ documentation_uri: https://www.rubydoc.info/gems/active_record_compose/0.3.3
56
56
  rubygems_mfa_required: 'true'
57
57
  post_install_message:
58
58
  rdoc_options: []
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  requirements: []
72
- rubygems_version: 3.5.6
72
+ rubygems_version: 3.5.11
73
73
  signing_key:
74
74
  specification_version: 4
75
75
  summary: activemodel form object pattern