adjustable_schema 0.11.1 → 0.12.0

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
  SHA256:
3
- metadata.gz: 2857a886692a24ac2506137f2962966e6bbcde416b8b3fed091e0fc219a8b81a
4
- data.tar.gz: f46a4a33c5f3cb201bfdcebbd54c6e1854c3b1f21eb44ba1a05befea056c8d47
3
+ metadata.gz: 1fcf0b1a81ed7592a9a493a94e1f56f559c12d44fe3fd646b638b92d8de3e45c
4
+ data.tar.gz: 5fdefcce5b67338a94153e644da24e4003cbeb42563d27842685ff3aeaea8523
5
5
  SHA512:
6
- metadata.gz: 44e84ec51c7d255d309499fad94e346062d7cb07164d202148f71c9e54ab8f00fd18d728053e504405fbc01860b1213a35d128dc81f1be2fa0ec6d357340b512
7
- data.tar.gz: deb4ad146c70fd8ccd8eafbe943d49f68e8ce4526afc7e8ec44adad3e0cb937c3c1e82f394775b36405bb9312f4324f4760dc417e8c34a767ffaa11e5a166ea1
6
+ metadata.gz: 02689cf5293142beee6a4e6589841a4e544fac26c6ec2d3aa589c7b9a3fa883a700a82e49968378132fdeef24ee42831fbae840d14b3868bea98de03cb111ce8
7
+ data.tar.gz: 65437d627f58a0dd0f4eb88213ff522dffda0dde20063b10e99e89ca75eef9aaf17fd1b7102114fd5d38fdfd9e8de8564185ca8fc7ff769581236157fe5634fc
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## [0.12.0] — 2026-11-03
2
+
3
+ ### Changed
4
+
5
+ - Removed deprecated `Relationship.seed!`.
6
+
7
+ ### Added
8
+
9
+ - Checks for related records’ presence on roleless recursive associations:
10
+ - `.intermediate` —
11
+ records having only one child record associated;
12
+ - `.branching` —
13
+ records having several child records associated;
14
+ - `.with_next_level` helper scope.
15
+ - Rails 8.2 support.
16
+
17
+
1
18
  ## [0.11.1] — 2025-05-19
2
19
 
3
20
  ### Fixed
data/README.md CHANGED
@@ -3,11 +3,15 @@
3
3
  ![GitHub Actions Workflow Status](
4
4
  https://img.shields.io/github/actions/workflow/status/Alexander-Senko/adjustable_schema/ci.yml
5
5
  )
6
- ![Code Climate maintainability](
7
- https://img.shields.io/codeclimate/maintainability-percentage/Alexander-Senko/adjustable_schema
6
+ [![Maintainability](
7
+ https://qlty.sh/gh/Alexander-Senko/projects/adjustable_schema/maintainability.svg
8
+ )](
9
+ https://qlty.sh/gh/Alexander-Senko/projects/adjustable_schema
8
10
  )
9
- ![Code Climate coverage](
10
- https://img.shields.io/codeclimate/coverage/Alexander-Senko/adjustable_schema
11
+ [![Code Coverage](
12
+ https://qlty.sh/gh/Alexander-Senko/projects/adjustable_schema/coverage.svg
13
+ )](
14
+ https://qlty.sh/gh/Alexander-Senko/projects/adjustable_schema
11
15
  )
12
16
 
13
17
  Define your model associations in the database without changing the schema or models.
data/Rakefile CHANGED
@@ -5,6 +5,4 @@ require 'bundler/setup'
5
5
  APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
6
6
  load 'rails/tasks/engine.rake'
7
7
 
8
- load 'rails/tasks/statistics.rake'
9
-
10
8
  require 'bundler/gem_tasks'
@@ -98,15 +98,6 @@ module AdjustableSchema
98
98
  end
99
99
  .reduce &:or
100
100
  end
101
-
102
- def seed!(...)
103
- AdjustableSchema.deprecator.warn <<~TEXT.squish
104
- #{self}.#{__method__} is deprecated and will be removed in v0.12.
105
- Please use AdjustableSchema.relationship! instead.
106
- TEXT
107
-
108
- AdjustableSchema.relationship!(...)
109
- end
110
101
  end
111
102
 
112
103
  delegate :name, to: :role, allow_nil: true
@@ -30,12 +30,19 @@ module AdjustableSchema
30
30
 
31
31
  private
32
32
 
33
+ # Parent dynamic associations are not automatically inherited
34
+ # for an STI subclass if it defines its own associations.
35
+ #
36
+ # This method copies missing parent’s associations if any.
33
37
  def adjust_parent_associations
34
38
  return unless superclass < Associations
35
39
 
36
- superclass.adjust_associations
40
+ superclass.adjust_associations or
41
+ return # optimization
37
42
 
38
- _reflections.reverse_merge! superclass._reflections # update
43
+ superclass._reflections
44
+ .except(*_reflections.keys)
45
+ .each { |name, reflection| add_reflection name, reflection }
39
46
  end
40
47
 
41
48
  def setup_association direction, target = self, role = nil
@@ -46,6 +53,10 @@ module AdjustableSchema
46
53
  def adjustable_association(...)
47
54
  Association.new(self, ...)
48
55
  end
56
+
57
+ def add_reflection(...)
58
+ ::ActiveRecord::Reflection.add_reflection(self, ...)
59
+ end
49
60
  end
50
61
  end
51
62
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ case Rails.version
4
+ when ('8.2'...)
5
+ Arel::Table.prepend Module.new { # HACK: dual-API
6
+ def initialize(name = nil, **) = super(name:, **)
7
+ }
8
+ end
@@ -13,6 +13,10 @@ module AdjustableSchema
13
13
 
14
14
  name_for_any( target_name) => -> { where.associated name },
15
15
  name_for_none(target_name) => -> { where.missing name },
16
+ intermediate: -> { with_next_level.having('COUNT(*) = 1') },
17
+ branching: -> { with_next_level.having('COUNT(*) > 1') },
18
+
19
+ with_next_level: -> { joins(name).group arel_table[primary_key] },
16
20
  }
17
21
  end
18
22
 
@@ -1,25 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Gem::Author ||= Struct.new(
4
- :name,
5
- :email,
6
- :github,
7
- ) do
8
- def github_url = github && "https://github.com/#{github}"
3
+ begin
4
+ require 'rubygems/author'
5
+ rescue LoadError
6
+ require_relative '../../vendor/gems/rubygems-author/lib/rubygems/author'
9
7
  end
10
8
 
11
9
  module AdjustableSchema # :nodoc:
12
- AUTHORS = [ # rubocop:disable Style/MutableConstant
13
- Gem::Author.new(
14
- name: 'Alexander Senko',
15
- email: 'Alexander.Senko@gmail.com',
16
- github: 'Alexander-Senko',
17
- ),
18
- ]
19
-
20
- class << AUTHORS
21
- def names = filter_map &:name
22
- def emails = filter_map &:email
23
- def github_url = filter_map(&:github_url).first
10
+ class Author < Gem::Author # :nodoc:
11
+ new(
12
+ name: 'Alexander Senko',
13
+ email: 'Alexander.Senko@gmail.com',
14
+ github: 'Alexander-Senko',
15
+ )
24
16
  end
25
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AdjustableSchema
4
- VERSION = '0.11.1'
4
+ VERSION = '0.12.0'
5
5
  end
metadata CHANGED
@@ -1,128 +1,138 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adjustable_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
- - Alexander Senko
7
+ - Alexander Senko
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: rails
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '8.0'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '8.0'
26
- - !ruby/object:Gem::Dependency
27
- name: rails_model_load_hook
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '0.2'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.2'
40
- - !ruby/object:Gem::Dependency
41
- name: organizer-rails
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '0.2'
47
- type: :runtime
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '0.2'
54
- - !ruby/object:Gem::Dependency
55
- name: memery
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- type: :runtime
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- description: Rails Engine to allow ActiveRecord associations be set up in the DB instead
69
- of being hard-coded.
12
+ - !ruby/object:Gem::Dependency
13
+ name: rails
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ -
17
+ - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: "8.0"
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ -
25
+ - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: "8.0"
28
+ - !ruby/object:Gem::Dependency
29
+ name: rails_model_load_hook
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ -
33
+ - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "0.2"
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ -
41
+ - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: "0.2"
44
+ - !ruby/object:Gem::Dependency
45
+ name: organizer-rails
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ -
49
+ - ~>
50
+ - !ruby/object:Gem::Version
51
+ version: "0.2"
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ -
57
+ - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: "0.2"
60
+ - !ruby/object:Gem::Dependency
61
+ name: memery
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ -
65
+ - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ -
73
+ - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ description: Rails Engine to allow ActiveRecord associations be set up in the DB instead of being hard-coded.
70
77
  email:
71
- - Alexander.Senko@gmail.com
78
+ - Alexander.Senko@gmail.com
72
79
  executables: []
73
80
  extensions: []
74
81
  extra_rdoc_files: []
75
82
  files:
76
- - CHANGELOG.md
77
- - MIT-LICENSE
78
- - README.md
79
- - Rakefile
80
- - app/models/adjustable_schema/application_record.rb
81
- - app/models/adjustable_schema/relationship.rb
82
- - app/models/adjustable_schema/relationship/role.rb
83
- - app/models/concerns/adjustable_schema/active_record/associations.rb
84
- - app/models/concerns/adjustable_schema/active_record/relationships.rb
85
- - app/models/concerns/adjustable_schema/active_record/relationships/builder.rb
86
- - app/models/concerns/adjustable_schema/actors.rb
87
- - config/initializers/associations.rb
88
- - config/initializers/model_names.rb
89
- - db/migrate/01_create_adjustable_schema_relationship_tables.rb
90
- - lib/adjustable_schema.rb
91
- - lib/adjustable_schema/active_record.rb
92
- - lib/adjustable_schema/active_record/association.rb
93
- - lib/adjustable_schema/active_record/association/hierarchy.rb
94
- - lib/adjustable_schema/active_record/association/naming.rb
95
- - lib/adjustable_schema/active_record/association/referenced.rb
96
- - lib/adjustable_schema/active_record/association/roleless.rb
97
- - lib/adjustable_schema/active_record/association/scopes.rb
98
- - lib/adjustable_schema/active_record/builder.rb
99
- - lib/adjustable_schema/authors.rb
100
- - lib/adjustable_schema/config.rb
101
- - lib/adjustable_schema/engine.rb
102
- - lib/adjustable_schema/version.rb
103
- - lib/tasks/adjustable_schema_tasks.rake
104
- homepage: https://github.com/Alexander-Senko/adjustable_schema
83
+ - CHANGELOG.md
84
+ - MIT-LICENSE
85
+ - README.md
86
+ - Rakefile
87
+ - app/models/adjustable_schema/application_record.rb
88
+ - app/models/adjustable_schema/relationship.rb
89
+ - app/models/adjustable_schema/relationship/role.rb
90
+ - app/models/concerns/adjustable_schema/active_record/associations.rb
91
+ - app/models/concerns/adjustable_schema/active_record/relationships.rb
92
+ - app/models/concerns/adjustable_schema/active_record/relationships/builder.rb
93
+ - app/models/concerns/adjustable_schema/actors.rb
94
+ - config/initializers/associations.rb
95
+ - config/initializers/compatibility.rb
96
+ - config/initializers/model_names.rb
97
+ - db/migrate/01_create_adjustable_schema_relationship_tables.rb
98
+ - lib/adjustable_schema.rb
99
+ - lib/adjustable_schema/active_record.rb
100
+ - lib/adjustable_schema/active_record/association.rb
101
+ - lib/adjustable_schema/active_record/association/hierarchy.rb
102
+ - lib/adjustable_schema/active_record/association/naming.rb
103
+ - lib/adjustable_schema/active_record/association/referenced.rb
104
+ - lib/adjustable_schema/active_record/association/roleless.rb
105
+ - lib/adjustable_schema/active_record/association/scopes.rb
106
+ - lib/adjustable_schema/active_record/builder.rb
107
+ - lib/adjustable_schema/authors.rb
108
+ - lib/adjustable_schema/config.rb
109
+ - lib/adjustable_schema/engine.rb
110
+ - lib/adjustable_schema/version.rb
111
+ - lib/tasks/adjustable_schema_tasks.rake
112
+ homepage: "https://github.com/Alexander-Senko/adjustable_schema"
105
113
  licenses:
106
- - MIT
114
+ - MIT
107
115
  metadata:
108
- homepage_uri: https://github.com/Alexander-Senko/adjustable_schema
109
- source_code_uri: https://github.com/Alexander-Senko/adjustable_schema
110
- changelog_uri: https://github.com/Alexander-Senko/adjustable_schema/blob/v0.11.1/CHANGELOG.md
116
+ homepage_uri: "https://github.com/Alexander-Senko/adjustable_schema"
117
+ source_code_uri: "https://github.com/Alexander-Senko/adjustable_schema"
118
+ changelog_uri: "https://github.com/Alexander-Senko/adjustable_schema/blob/v0.12.0/CHANGELOG.md"
111
119
  rdoc_options: []
112
120
  require_paths:
113
- - lib
121
+ - lib
114
122
  required_ruby_version: !ruby/object:Gem::Requirement
115
123
  requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '3.4'
124
+ -
125
+ - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: "3.4"
119
128
  required_rubygems_version: !ruby/object:Gem::Requirement
120
129
  requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
130
+ -
131
+ - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: "0"
124
134
  requirements: []
125
- rubygems_version: 3.6.5
135
+ rubygems_version: 4.1.0.dev
126
136
  specification_version: 4
127
137
  summary: Adjustable data schemas for Rails
128
138
  test_files: []