rom-factory 0.11.0 → 0.13.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 +4 -4
- data/.github/workflows/ci.yml +18 -18
- data/.github/workflows/docsite.yml +2 -3
- data/.github/workflows/sync_configs.yml +9 -15
- data/.postgres.env +4 -0
- data/{.action_hero.yml → .repobot.yml} +8 -5
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +64 -14
- data/Gemfile +19 -9
- data/Gemfile.devtools +1 -1
- data/README.md +2 -2
- data/changelog.yml +36 -1
- data/compose.yml +7 -0
- data/docsite/source/index.html.md +19 -7
- data/lib/rom/factory/attribute_registry.rb +15 -17
- data/lib/rom/factory/attributes/association.rb +102 -68
- data/lib/rom/factory/attributes/callable.rb +6 -0
- data/lib/rom/factory/builder/persistable.rb +19 -2
- data/lib/rom/factory/builder.rb +9 -1
- data/lib/rom/factory/dsl.rb +66 -34
- data/lib/rom/factory/factories.rb +27 -7
- data/lib/rom/factory/sequences.rb +3 -2
- data/lib/rom/factory/tuple_evaluator.rb +78 -25
- data/lib/rom/factory/version.rb +1 -1
- data/rom-factory.gemspec +12 -12
- metadata +18 -19
- data/CODEOWNERS +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 946c06da46cc1d12ac8e90fc8b79661ce43e9ed2ab2ba0e3ffd93f5c1ac7e419
|
4
|
+
data.tar.gz: fa2c475a578ba75f7574ed5d883a4432fc4f2328849fc4be74813b854a0c6dba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1dea330b287e3b56c2acaea898c9139317b0de709098c0c7525d05215db34571dfa41447337ca39b39f7d1d5ace98fde9f442854a725870fa6496c24d00eee3
|
7
|
+
data.tar.gz: 6279eb190440aeb10dc03c26fe18cfcc67f846e8d0981b7822746172f564936f5d2fd7cbf41a68336be1865516afda03947302804db8d6a1e05040198137beb9
|
data/.github/workflows/ci.yml
CHANGED
@@ -2,20 +2,10 @@
|
|
2
2
|
name: ci
|
3
3
|
on:
|
4
4
|
push:
|
5
|
-
paths:
|
6
|
-
- ".github/workflows/ci.yml"
|
7
|
-
- lib/**
|
8
|
-
- "*.gemspec"
|
9
|
-
- spec/**
|
10
|
-
- Rakefile
|
11
|
-
- Gemfile
|
12
|
-
- Gemfile.devtools
|
13
|
-
- ".rubocop.yml"
|
14
|
-
- project.yml
|
15
5
|
pull_request:
|
16
|
-
branches:
|
17
|
-
- master
|
18
6
|
create:
|
7
|
+
schedule:
|
8
|
+
- cron: "30 4 * * *"
|
19
9
|
jobs:
|
20
10
|
tests:
|
21
11
|
runs-on: ubuntu-latest
|
@@ -23,13 +13,15 @@ jobs:
|
|
23
13
|
fail-fast: false
|
24
14
|
matrix:
|
25
15
|
ruby:
|
16
|
+
- '3.4'
|
17
|
+
- '3.3'
|
18
|
+
- '3.2'
|
26
19
|
- '3.1'
|
27
|
-
- '3.0'
|
28
|
-
- '2.7'
|
29
20
|
env:
|
30
21
|
COVERAGE: "${{matrix.coverage}}"
|
31
22
|
COVERAGE_TOKEN: "${{secrets.CODACY_PROJECT_TOKEN}}"
|
32
23
|
APT_DEPS: libpq-dev libmysqlclient-dev libsqlite3-dev
|
24
|
+
DATABASE_URL: "postgres://rom-factory:rom-factory@localhost:5432/rom_factory"
|
33
25
|
steps:
|
34
26
|
- name: Checkout
|
35
27
|
uses: actions/checkout@v1
|
@@ -55,10 +47,10 @@ jobs:
|
|
55
47
|
coverage-reports: coverage/coverage.xml
|
56
48
|
services:
|
57
49
|
db:
|
58
|
-
image: postgres:
|
50
|
+
image: postgres:16.1
|
59
51
|
env:
|
60
|
-
POSTGRES_USER:
|
61
|
-
POSTGRES_PASSWORD:
|
52
|
+
POSTGRES_USER: rom-factory
|
53
|
+
POSTGRES_PASSWORD: rom-factory
|
62
54
|
POSTGRES_DB: rom_factory
|
63
55
|
ports:
|
64
56
|
- 5432:5432
|
@@ -78,10 +70,18 @@ jobs:
|
|
78
70
|
- name: Set up Ruby
|
79
71
|
uses: ruby/setup-ruby@v1
|
80
72
|
with:
|
81
|
-
ruby-version:
|
73
|
+
ruby-version: "3.1"
|
82
74
|
- name: Install dependencies
|
83
75
|
run: gem install ossy --no-document
|
84
76
|
- name: Trigger release workflow
|
85
77
|
run: |
|
86
78
|
tag=$(echo $GITHUB_REF | cut -d / -f 3)
|
87
79
|
ossy gh w rom-rb/devtools release --payload "{\"tag\":\"$tag\",\"sha\":\"${{github.sha}}\",\"tag_creator\":\"$GITHUB_ACTOR\",\"repo\":\"$GITHUB_REPOSITORY\",\"repo_name\":\"${{github.event.repository.name}}\"}"
|
80
|
+
|
81
|
+
workflow-keepalive:
|
82
|
+
if: github.event_name == 'schedule'
|
83
|
+
runs-on: ubuntu-latest
|
84
|
+
permissions:
|
85
|
+
actions: write
|
86
|
+
steps:
|
87
|
+
- uses: liskin/gh-workflow-keepalive@v1
|
@@ -22,9 +22,9 @@ jobs:
|
|
22
22
|
- run: |
|
23
23
|
git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*
|
24
24
|
- name: Set up Ruby
|
25
|
-
uses:
|
25
|
+
uses: ruby/setup-ruby@v1
|
26
26
|
with:
|
27
|
-
ruby-version: "
|
27
|
+
ruby-version: "3.1"
|
28
28
|
- name: Set up git user
|
29
29
|
run: |
|
30
30
|
git config --local user.email "rom-bot@rom-rb.org"
|
@@ -60,4 +60,3 @@ jobs:
|
|
60
60
|
GITHUB_LOGIN: rom-bot
|
61
61
|
GITHUB_TOKEN: ${{secrets.GH_PAT}}
|
62
62
|
run: ossy github workflow rom-rb/rom-rb.org ci
|
63
|
-
|
@@ -1,31 +1,25 @@
|
|
1
1
|
# This file is synced from rom-rb/template-gem repo
|
2
2
|
|
3
|
-
name:
|
3
|
+
name: sync
|
4
4
|
|
5
5
|
on:
|
6
|
+
repository_dispatch:
|
6
7
|
push:
|
7
|
-
paths:
|
8
|
-
- "changelog.yml"
|
9
8
|
branches:
|
10
9
|
- "main"
|
11
|
-
pull_request:
|
12
|
-
branches:
|
13
|
-
- "main"
|
14
|
-
types: [closed]
|
15
10
|
|
16
11
|
jobs:
|
17
|
-
|
12
|
+
main:
|
18
13
|
runs-on: ubuntu-latest
|
19
|
-
if: github.event.
|
20
|
-
name: Update
|
14
|
+
if: (github.event_name == 'repository_dispatch' && github.event.action == 'sync_configs') || github.event_name != 'repository_dispatch'
|
21
15
|
env:
|
22
16
|
GITHUB_LOGIN: rom-bot
|
23
17
|
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
|
24
18
|
steps:
|
25
19
|
- name: Checkout ${{github.repository}}
|
26
|
-
uses: actions/checkout@
|
20
|
+
uses: actions/checkout@v3
|
27
21
|
- name: Checkout devtools
|
28
|
-
uses: actions/checkout@
|
22
|
+
uses: actions/checkout@v3
|
29
23
|
with:
|
30
24
|
repository: rom-rb/devtools
|
31
25
|
path: tmp/devtools
|
@@ -34,9 +28,9 @@ jobs:
|
|
34
28
|
git config --local user.email "rom-bot@rom-rb.org"
|
35
29
|
git config --local user.name "rom-bot"
|
36
30
|
- name: Set up Ruby
|
37
|
-
uses:
|
31
|
+
uses: ruby/setup-ruby@v1
|
38
32
|
with:
|
39
|
-
ruby-version: "
|
33
|
+
ruby-version: "3.1"
|
40
34
|
- name: Install dependencies
|
41
35
|
run: gem install ossy --no-document
|
42
36
|
- name: Update changelog.yml from commit
|
@@ -46,7 +40,7 @@ jobs:
|
|
46
40
|
- name: Commit
|
47
41
|
run: |
|
48
42
|
git add -A
|
49
|
-
git commit -m "
|
43
|
+
git commit -m "[devtools] sync" || echo "nothing to commit"
|
50
44
|
- name: Push changes
|
51
45
|
run: |
|
52
46
|
git pull --rebase origin main
|
data/.postgres.env
ADDED
@@ -1,12 +1,17 @@
|
|
1
|
+
###########################################################
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
#
|
1
4
|
# This is a config synced from rom-rb/template-gem repo
|
5
|
+
###########################################################
|
2
6
|
|
3
7
|
sources:
|
4
8
|
- repo: rom-rb/template-gem
|
5
9
|
sync:
|
6
|
-
- "
|
7
|
-
- ".action_hero.yml.erb"
|
10
|
+
- ".repobot.yml.erb"
|
8
11
|
- ".devtools/templates/*.sync:${{dir}}/${{name}}"
|
9
12
|
- ".github/**/*.*"
|
13
|
+
- ".rspec"
|
14
|
+
- ".rubocop.yml"
|
10
15
|
- "spec/support/*"
|
11
16
|
- "CODE_OF_CONDUCT.md"
|
12
17
|
- "CONTRIBUTING.md"
|
@@ -14,8 +19,6 @@ sources:
|
|
14
19
|
- "LICENSE.erb"
|
15
20
|
- "README.erb"
|
16
21
|
- "Gemfile.devtools"
|
17
|
-
|
18
|
-
- ".rubocop.yml"
|
19
|
-
- repo: action-hero/workflows
|
22
|
+
- repo: repobot-app/workflows
|
20
23
|
sync:
|
21
24
|
- ".github/workflows/*.yml"
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,35 +1,85 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
-
## 0.
|
3
|
+
## 0.13.0 2025-01-21
|
4
|
+
|
5
|
+
|
6
|
+
### Added
|
7
|
+
|
8
|
+
- Support for unique options in `fake` DSL (via #94) (@sean-dickinson)
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
Factory.define(:user) do |f|
|
12
|
+
f.name { fake(:name, unique: true) }
|
13
|
+
end
|
14
|
+
```
|
15
|
+
|
16
|
+
Be advised there's `Faker::UniqueGenerator.clear` to clear the cache of unique values.
|
17
|
+
|
18
|
+
- Support for setting traits with a keyword argument for associations (via #84) (@parndt)
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
Factory.define :category do |f|
|
22
|
+
f.association :image, traits: [:fancy]
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
|
27
|
+
### Changed
|
28
|
+
|
29
|
+
- Minimum Ruby version is now 3.1 (@flash-gordon)
|
30
|
+
|
31
|
+
[Compare v0.12.0...v0.13.0](https://github.com/rom-rb/rom-factory/compare/v0.12.0...v0.13.0)
|
32
|
+
|
33
|
+
## 0.12.0 2024-01-19
|
34
|
+
|
35
|
+
|
36
|
+
### Added
|
37
|
+
|
38
|
+
- Support for many-to-many and one-to-one-through associations (via #86) (@solnic)
|
39
|
+
- Support for UUID as PKs in associations (via #87) (@solnic)
|
4
40
|
|
5
41
|
### Fixed
|
6
42
|
|
7
|
-
-
|
43
|
+
- Relations without PKs should work too (via #87) (@solnic)
|
44
|
+
- Relations with PK values generated on the Ruby side should work in SQlite too (via #87) (@solnic)
|
45
|
+
|
46
|
+
|
47
|
+
[Compare v0.11.0...v0.12.0](https://github.com/rom-rb/rom-factory/compare/v0.11.0...v0.12.0)
|
48
|
+
|
49
|
+
## 0.11.0 2022-11-11
|
50
|
+
|
8
51
|
|
9
52
|
### Added
|
10
53
|
|
11
54
|
- Support for one-to-one associations (@ianks)
|
12
55
|
- [internal] cache for Faker constants (@flash-gordon)
|
13
56
|
|
57
|
+
### Fixed
|
58
|
+
|
59
|
+
- Support for plural Faker generators (@wuarmin)
|
60
|
+
|
14
61
|
### Changed
|
15
62
|
|
16
63
|
- [BREAKING] attributes are always passed as keywords (@alassek)
|
17
|
-
|
18
|
-
|
64
|
+
This may affect your code in places where attributes are passed as hashes.
|
65
|
+
Places like
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
user_attributes = { name: 'Jane' }
|
69
|
+
Factory[:user, user_attributes]
|
70
|
+
|
71
|
+
```
|
72
|
+
|
73
|
+
must be updated to
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
user_attributes = { name: 'Jane' }
|
77
|
+
Factory[:user, **user_attributes]
|
78
|
+
```
|
19
79
|
|
20
|
-
```ruby
|
21
|
-
user_attributes = { name: 'Jane' }
|
22
|
-
Factory[:user, user_attributes]
|
23
|
-
```
|
24
|
-
must be updated to
|
25
|
-
```ruby
|
26
|
-
user_attributes = { name: 'Jane' }
|
27
|
-
Factory[:user, **user_attributes]
|
28
|
-
```
|
29
80
|
- Upgraded to the latest versions of dry-rb dependencies, compatible with rom 5.3 (@flash-gordon)
|
30
81
|
- Support for Faker 1.x was dropped (@alassek)
|
31
82
|
|
32
|
-
|
33
83
|
[Compare v0.10.2...v0.11.0](https://github.com/rom-rb/rom-factory/compare/v0.10.2...v0.11.0)
|
34
84
|
|
35
85
|
## 0.10.2 2020-04-05
|
data/Gemfile
CHANGED
@@ -6,28 +6,38 @@ gemspec
|
|
6
6
|
|
7
7
|
eval_gemfile "Gemfile.devtools"
|
8
8
|
|
9
|
-
gem "faker", "~>
|
9
|
+
gem "faker", "~> 3.0"
|
10
10
|
|
11
11
|
gem "rspec", "~> 3.0"
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
gem "dotenv"
|
14
|
+
|
15
|
+
git "https://github.com/rom-rb/rom.git", branch: "release-5.4" do
|
16
|
+
gem "rom"
|
15
17
|
gem "rom-changeset"
|
18
|
+
gem "rom-core"
|
16
19
|
gem "rom-repository"
|
17
|
-
gem "rom"
|
18
20
|
end
|
19
21
|
|
20
22
|
group :test do
|
21
|
-
|
22
|
-
|
23
|
-
|
23
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4")
|
24
|
+
gem "debug"
|
25
|
+
else
|
26
|
+
gem "pry"
|
27
|
+
gem "pry-byebug", "~> 3.8", platforms: :ruby
|
28
|
+
end
|
29
|
+
gem "rom-sql", github: "rom-rb/rom-sql", branch: "release-3.7"
|
24
30
|
|
25
31
|
gem "jdbc-postgres", platforms: :jruby
|
26
|
-
gem "pg", "~>
|
32
|
+
gem "pg", "~> 1.5", platforms: :ruby
|
27
33
|
end
|
28
34
|
|
29
35
|
group :tools do
|
30
|
-
|
36
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4")
|
37
|
+
gem "byebug", platform: :mri
|
38
|
+
else
|
39
|
+
gem "pry-byebug", "~> 3.8", platforms: :ruby
|
40
|
+
end
|
31
41
|
gem "redcarpet" # for yard
|
32
42
|
end
|
33
43
|
|
data/Gemfile.devtools
CHANGED
data/README.md
CHANGED
data/changelog.yml
CHANGED
@@ -1,19 +1,54 @@
|
|
1
1
|
---
|
2
|
+
- version: 0.13.0
|
3
|
+
date: 2025-01-21
|
4
|
+
added:
|
5
|
+
- |
|
6
|
+
Support for unique options in `fake` DSL (via #94) (@sean-dickinson)
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
Factory.define(:user) do |f|
|
10
|
+
f.name { fake(:name, unique: true) }
|
11
|
+
end
|
12
|
+
```
|
13
|
+
|
14
|
+
Be advised there's `Faker::UniqueGenerator.clear` to clear the cache of unique values.
|
15
|
+
- |
|
16
|
+
Support for setting traits with a keyword argument for associations (via #84) (@parndt)
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
Factory.define :category do |f|
|
20
|
+
f.association :image, traits: [:fancy]
|
21
|
+
end
|
22
|
+
```
|
23
|
+
changed:
|
24
|
+
- Minimum Ruby version is now 3.1 (@flash-gordon)
|
25
|
+
- version: 0.12.0
|
26
|
+
date: 2024-01-19
|
27
|
+
added:
|
28
|
+
- "Support for many-to-many and one-to-one-through associations (via #86) (@solnic)"
|
29
|
+
- "Support for UUID as PKs in associations (via #87) (@solnic)"
|
30
|
+
fixed:
|
31
|
+
- "Relations without PKs should work too (via #87) (@solnic)"
|
32
|
+
- "Relations with PK values generated on the Ruby side should work in SQlite too (via #87) (@solnic)"
|
2
33
|
- version: 0.11.0
|
3
34
|
date: 2022-11-11
|
4
35
|
added:
|
5
|
-
- Support for one-to-one associations (@ianks)
|
36
|
+
- "Support for one-to-one associations (@ianks)"
|
6
37
|
- "[internal] cache for Faker constants (@flash-gordon)"
|
7
38
|
changed:
|
8
39
|
- |
|
9
40
|
[BREAKING] attributes are always passed as keywords (@alassek)
|
10
41
|
This may affect your code in places where attributes are passed as hashes.
|
11
42
|
Places like
|
43
|
+
|
12
44
|
```ruby
|
13
45
|
user_attributes = { name: 'Jane' }
|
14
46
|
Factory[:user, user_attributes]
|
47
|
+
|
15
48
|
```
|
49
|
+
|
16
50
|
must be updated to
|
51
|
+
|
17
52
|
```ruby
|
18
53
|
user_attributes = { name: 'Jane' }
|
19
54
|
Factory[:user, **user_attributes]
|
data/compose.yml
ADDED
@@ -44,7 +44,7 @@ end
|
|
44
44
|
|
45
45
|
#### Specify namespace for your structs
|
46
46
|
|
47
|
-
Struct `User` will be
|
47
|
+
Struct `User` will be found in `MyApp::Entities` namespace
|
48
48
|
|
49
49
|
```ruby
|
50
50
|
Factory.define(:user, struct_namespace: MyApp::Entities) do |f|
|
@@ -86,7 +86,7 @@ end
|
|
86
86
|
|
87
87
|
Factory.define(:user) do |f|
|
88
88
|
f.name 'John'
|
89
|
-
f.association(:
|
89
|
+
f.association(:group)
|
90
90
|
end
|
91
91
|
```
|
92
92
|
|
@@ -115,7 +115,7 @@ Factory.define(admin: :user) do |f|
|
|
115
115
|
f.admin true
|
116
116
|
end
|
117
117
|
|
118
|
-
# Factory.structs
|
118
|
+
# Factory.structs[:admin]
|
119
119
|
```
|
120
120
|
|
121
121
|
#### Traits
|
@@ -130,7 +130,7 @@ Factory.define(:user) do |f|
|
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
-
# Factory.structs
|
133
|
+
# Factory.structs[:user, :with_age]
|
134
134
|
```
|
135
135
|
|
136
136
|
#### Build-in [Faker](https://github.com/faker-ruby/faker) objects
|
@@ -141,6 +141,14 @@ Factory.define(:user) do |f|
|
|
141
141
|
end
|
142
142
|
```
|
143
143
|
|
144
|
+
##### Unique values with fake
|
145
|
+
Passing the unique: true option will use Faker's [unique](https://github.com/faker-ruby/faker#ensuring-unique-values) feature
|
146
|
+
```ruby
|
147
|
+
Factory.define(:user) do |f|
|
148
|
+
f.email { fake(:internet, :email, unique: true) }
|
149
|
+
end
|
150
|
+
```
|
151
|
+
|
144
152
|
#### Dependent attributes
|
145
153
|
|
146
154
|
Attributes can be based on the values of other attributes:
|
@@ -159,11 +167,15 @@ end
|
|
159
167
|
|
160
168
|
```ruby
|
161
169
|
# Create in-memory object
|
162
|
-
Factory.
|
170
|
+
Factory.build(:user)
|
163
171
|
|
164
172
|
# Persist struct in database
|
165
|
-
Factory
|
173
|
+
Factory.create(:user)
|
166
174
|
|
167
175
|
# Override attributes
|
168
|
-
Factory
|
176
|
+
Factory.create(:user, age: 24)
|
177
|
+
|
178
|
+
# Build and Create via #[] accessors
|
179
|
+
Factory.structs[:user]
|
180
|
+
Factory[:user]
|
169
181
|
```
|
@@ -18,14 +18,10 @@ module ROM
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# @api private
|
21
|
-
def each(&
|
22
|
-
elements.each(&block)
|
23
|
-
end
|
21
|
+
def each(&) = elements.each(&)
|
24
22
|
|
25
23
|
# @api private
|
26
|
-
def [](name)
|
27
|
-
detect { |e| e.name.equal?(name) }
|
28
|
-
end
|
24
|
+
def [](name) = detect { |e| e.name.equal?(name) }
|
29
25
|
|
30
26
|
# @api private
|
31
27
|
def <<(element)
|
@@ -36,30 +32,32 @@ module ROM
|
|
36
32
|
end
|
37
33
|
|
38
34
|
# @api private
|
39
|
-
def dup
|
40
|
-
self.class.new(elements.dup)
|
41
|
-
end
|
35
|
+
def dup = self.class.new(elements.dup)
|
42
36
|
|
43
37
|
# @api private
|
44
|
-
def values
|
45
|
-
self.class.new(elements.select(&:value?))
|
46
|
-
end
|
38
|
+
def values = self.class.new(elements.select(&:value?))
|
47
39
|
|
48
40
|
# @api private
|
49
41
|
def associations
|
50
42
|
self.class.new(elements.select { |e| e.is_a?(Attributes::Association::Core) })
|
51
43
|
end
|
52
44
|
|
53
|
-
|
45
|
+
def reject(&) = self.class.new(elements.reject(&))
|
54
46
|
|
55
47
|
# @api private
|
56
|
-
def
|
57
|
-
|
48
|
+
def inspect
|
49
|
+
"#<#{self.class} #{elements.inspect}>"
|
58
50
|
end
|
51
|
+
alias_method :to_s, :inspect
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# @api private
|
56
|
+
def tsort_each_node(&) = each(&)
|
59
57
|
|
60
58
|
# @api private
|
61
|
-
def tsort_each_child(attr, &
|
62
|
-
attr.dependency_names.map { |name| self[name] }.compact.each(&
|
59
|
+
def tsort_each_child(attr, &)
|
60
|
+
attr.dependency_names.map { |name| self[name] }.compact.each(&)
|
63
61
|
end
|
64
62
|
end
|
65
63
|
end
|