computed_model 0.2.2 → 0.3.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/dependabot.yml +8 -0
- data/.github/workflows/test.yml +7 -2
- data/.yardopts +5 -0
- data/CHANGELOG.md +107 -0
- data/CONCEPTS.ja.md +324 -0
- data/CONCEPTS.md +330 -0
- data/Migration-0.3.md +343 -0
- data/README.ja.md +168 -0
- data/README.md +102 -86
- data/Rakefile +14 -0
- data/computed_model.gemspec +8 -0
- data/lib/computed_model.rb +67 -310
- data/lib/computed_model/dep_graph.rb +245 -0
- data/lib/computed_model/model.rb +447 -0
- data/lib/computed_model/plan.rb +48 -0
- data/lib/computed_model/version.rb +1 -1
- metadata +94 -3
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module ComputedModel
|
|
6
|
+
# A plan for batch loading. Created by {ComputedModel::DepGraph::Sorted#plan}.
|
|
7
|
+
#
|
|
8
|
+
# @api private
|
|
9
|
+
class Plan
|
|
10
|
+
# @return [Array<ComputedModel::Plan::Node>] fields in load order
|
|
11
|
+
attr_reader :load_order
|
|
12
|
+
# @return [Set<Symbol>] toplevel dependencies
|
|
13
|
+
attr_reader :toplevel
|
|
14
|
+
|
|
15
|
+
# @param load_order [Array<ComputedModel::Plan::Node>] fields in load order
|
|
16
|
+
# @param toplevel [Set<Symbol>] toplevel dependencies
|
|
17
|
+
def initialize(load_order, toplevel)
|
|
18
|
+
@load_order = load_order.freeze
|
|
19
|
+
@nodes = load_order.map { |node| [node.name, node] }.to_h
|
|
20
|
+
@toplevel = toplevel
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @param name [Symbol]
|
|
24
|
+
# @return [ComputedModel::Plan::Node, nil]
|
|
25
|
+
def [](name)
|
|
26
|
+
@nodes[name]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# A set of information necessary to invoke the loader or the computed def.
|
|
30
|
+
class Node
|
|
31
|
+
# @return [Symbol] field name
|
|
32
|
+
attr_reader :name
|
|
33
|
+
# @return [Set<Symbol>] set of dependency names
|
|
34
|
+
attr_reader :deps
|
|
35
|
+
# @return [ComputedModel::NormalizableArray] subfield selectors, payloads sent to the dependency
|
|
36
|
+
attr_reader :subfields
|
|
37
|
+
|
|
38
|
+
# @param name [Symbol] field name
|
|
39
|
+
# @param deps [Set<Symbol>] set of dependency names
|
|
40
|
+
# @param subfields [ComputedModel::NormalizableArray] subfield selectors, payloads sent to the dependency
|
|
41
|
+
def initialize(name, deps, subfields)
|
|
42
|
+
@name = name
|
|
43
|
+
@deps = deps
|
|
44
|
+
@subfields = subfields
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: computed_model
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Masaki Hara
|
|
@@ -10,8 +10,22 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: exe
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2021-
|
|
13
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: activesupport
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
requirements:
|
|
19
|
+
- - ">="
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '0'
|
|
15
29
|
- !ruby/object:Gem::Dependency
|
|
16
30
|
name: bundler
|
|
17
31
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -54,6 +68,76 @@ dependencies:
|
|
|
54
68
|
- - "~>"
|
|
55
69
|
- !ruby/object:Gem::Version
|
|
56
70
|
version: '3.0'
|
|
71
|
+
- !ruby/object:Gem::Dependency
|
|
72
|
+
name: activerecord
|
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
|
74
|
+
requirements:
|
|
75
|
+
- - "~>"
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '6.1'
|
|
78
|
+
type: :development
|
|
79
|
+
prerelease: false
|
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - "~>"
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: '6.1'
|
|
85
|
+
- !ruby/object:Gem::Dependency
|
|
86
|
+
name: sqlite3
|
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - "~>"
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '1.4'
|
|
92
|
+
type: :development
|
|
93
|
+
prerelease: false
|
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - "~>"
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '1.4'
|
|
99
|
+
- !ruby/object:Gem::Dependency
|
|
100
|
+
name: factory_bot
|
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
|
102
|
+
requirements:
|
|
103
|
+
- - "~>"
|
|
104
|
+
- !ruby/object:Gem::Version
|
|
105
|
+
version: '6.1'
|
|
106
|
+
type: :development
|
|
107
|
+
prerelease: false
|
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
109
|
+
requirements:
|
|
110
|
+
- - "~>"
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '6.1'
|
|
113
|
+
- !ruby/object:Gem::Dependency
|
|
114
|
+
name: simplecov
|
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
|
116
|
+
requirements:
|
|
117
|
+
- - "~>"
|
|
118
|
+
- !ruby/object:Gem::Version
|
|
119
|
+
version: 0.21.2
|
|
120
|
+
type: :development
|
|
121
|
+
prerelease: false
|
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
123
|
+
requirements:
|
|
124
|
+
- - "~>"
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: 0.21.2
|
|
127
|
+
- !ruby/object:Gem::Dependency
|
|
128
|
+
name: simplecov-lcov
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
130
|
+
requirements:
|
|
131
|
+
- - "~>"
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 0.8.0
|
|
134
|
+
type: :development
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
requirements:
|
|
138
|
+
- - "~>"
|
|
139
|
+
- !ruby/object:Gem::Version
|
|
140
|
+
version: 0.8.0
|
|
57
141
|
description: |
|
|
58
142
|
ComputedModel is a helper for building a read-only model (sometimes called a view)
|
|
59
143
|
from multiple sources of models.
|
|
@@ -75,13 +159,20 @@ files:
|
|
|
75
159
|
- ".rspec"
|
|
76
160
|
- ".yardopts"
|
|
77
161
|
- CHANGELOG.md
|
|
162
|
+
- CONCEPTS.ja.md
|
|
163
|
+
- CONCEPTS.md
|
|
78
164
|
- Gemfile
|
|
165
|
+
- Migration-0.3.md
|
|
166
|
+
- README.ja.md
|
|
79
167
|
- README.md
|
|
80
168
|
- Rakefile
|
|
81
169
|
- bin/console
|
|
82
170
|
- bin/setup
|
|
83
171
|
- computed_model.gemspec
|
|
84
172
|
- lib/computed_model.rb
|
|
173
|
+
- lib/computed_model/dep_graph.rb
|
|
174
|
+
- lib/computed_model/model.rb
|
|
175
|
+
- lib/computed_model/plan.rb
|
|
85
176
|
- lib/computed_model/version.rb
|
|
86
177
|
homepage: https://github.com/wantedly/computed_model
|
|
87
178
|
licenses:
|
|
@@ -105,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
105
196
|
- !ruby/object:Gem::Version
|
|
106
197
|
version: '0'
|
|
107
198
|
requirements: []
|
|
108
|
-
rubygems_version: 3.
|
|
199
|
+
rubygems_version: 3.1.6
|
|
109
200
|
signing_key:
|
|
110
201
|
specification_version: 4
|
|
111
202
|
summary: Batch loader with dependency resolution and computed fields
|