ree_lib 1.0.17 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/ree_lib/packages/ree_dao/Package.schema.json +11 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_many.rb +51 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_one.rb +63 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao.rb +1 -0
- data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/one_to_many.schema.json +58 -0
- data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/one_to_one.schema.json +58 -0
- data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_many_spec.rb +152 -0
- data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_one_spec.rb +174 -0
- data/lib/ree_lib/packages/ree_enum/package/ree_enum/dsl.rb +12 -8
- data/lib/ree_lib/packages/ree_enum/spec/ree_enum/dsl_spec.rb +1 -1
- data/lib/ree_lib/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d8cd14e79d5afde9de80c29a5965a4ee4b6d4ca38c125b13395ffb3a5df478a
|
4
|
+
data.tar.gz: 41644392ed50e289e66d53e81d6b319d584baf9de2b16b81fb89b5678a4977f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 726b87bca18fbe71a47d1795da1cff4ca146a414d960aee747676710ad6003ae02b3fdc968fd37ef17e9ebba0d5af749620011d2664d06a0162b524d7f03e524
|
7
|
+
data.tar.gz: d46cf728e250cfd710bd9f651e4817e0dbf8f3a7a44fe5d797026d924c93b9808a6ef8ccd2887109015a2e656ffda86427ba335f8754385caf3b023d2cb95995
|
data/Gemfile.lock
CHANGED
@@ -7,6 +7,9 @@
|
|
7
7
|
"ree_dao"
|
8
8
|
],
|
9
9
|
"depends_on": [
|
10
|
+
{
|
11
|
+
"name": "ree_array"
|
12
|
+
},
|
10
13
|
{
|
11
14
|
"name": "ree_dto"
|
12
15
|
},
|
@@ -44,6 +47,14 @@
|
|
44
47
|
"name": "connections",
|
45
48
|
"schema": "packages/ree_dao/schemas/ree_dao/beans/connections.schema.json"
|
46
49
|
},
|
50
|
+
{
|
51
|
+
"name": "one_to_many",
|
52
|
+
"schema": "packages/ree_dao/schemas/ree_dao/functions/one_to_many.schema.json"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"name": "one_to_one",
|
56
|
+
"schema": "packages/ree_dao/schemas/ree_dao/functions/one_to_one.schema.json"
|
57
|
+
},
|
47
58
|
{
|
48
59
|
"name": "persist_assoc",
|
49
60
|
"schema": "packages/ree_dao/schemas/ree_dao/functions/persist_assoc.schema.json"
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class ReeDao::OneToMany
|
2
|
+
include Ree::FnDSL
|
3
|
+
|
4
|
+
fn :one_to_many do
|
5
|
+
link :demodulize, from: :ree_string
|
6
|
+
link :underscore, from: :ree_string
|
7
|
+
link :group_by, from: :ree_array
|
8
|
+
end
|
9
|
+
|
10
|
+
contract(
|
11
|
+
ArrayOf[ -> (v) { v.class.ancestors.include?(ReeDto::EntityDSL) } ],
|
12
|
+
Sequel::Dataset,
|
13
|
+
Ksplat[
|
14
|
+
foreign_key?: Symbol,
|
15
|
+
assoc_setter?: Symbol
|
16
|
+
] => nil
|
17
|
+
)
|
18
|
+
def call(list, assoc_dao, **opts)
|
19
|
+
return if list.empty?
|
20
|
+
root_ids = list.map(&:id)
|
21
|
+
|
22
|
+
assoc_setter = if opts.key?(:assoc_setter)
|
23
|
+
opts[:assoc_setter]
|
24
|
+
else
|
25
|
+
dto_class = assoc_dao
|
26
|
+
.opts[:schema_mapper]
|
27
|
+
.strategies
|
28
|
+
.detect {_1 .method == :db_load }
|
29
|
+
.output
|
30
|
+
.dto
|
31
|
+
|
32
|
+
name = underscore(demodulize(dto_class.name))
|
33
|
+
"set_#{name}s".to_sym
|
34
|
+
end
|
35
|
+
|
36
|
+
foreign_key = if opts.key?(:foreign_key)
|
37
|
+
opts[:foreign_key]
|
38
|
+
else
|
39
|
+
name = underscore(demodulize(list.first.class.name))
|
40
|
+
"#{name}_id".to_sym
|
41
|
+
end
|
42
|
+
|
43
|
+
assoc_by_group = group_by(assoc_dao.where(foreign_key => root_ids).all) { _1.send(foreign_key) }
|
44
|
+
|
45
|
+
list.each do |item|
|
46
|
+
item.send(assoc_setter, assoc_by_group[item.id] || [])
|
47
|
+
end
|
48
|
+
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class ReeDao::OneToOne
|
2
|
+
include Ree::FnDSL
|
3
|
+
|
4
|
+
fn :one_to_one do
|
5
|
+
link :demodulize, from: :ree_string
|
6
|
+
link :underscore, from: :ree_string
|
7
|
+
link :index_by, from: :ree_array
|
8
|
+
end
|
9
|
+
|
10
|
+
contract(
|
11
|
+
ArrayOf[ -> (v) { v.class.ancestors.include?(ReeDto::EntityDSL) } ],
|
12
|
+
Sequel::Dataset,
|
13
|
+
Ksplat[
|
14
|
+
reverse?: Bool,
|
15
|
+
foreign_key?: Symbol,
|
16
|
+
assoc_setter?: Symbol
|
17
|
+
] => nil
|
18
|
+
)
|
19
|
+
def call(list, assoc_dao, **opts)
|
20
|
+
return if list.empty?
|
21
|
+
|
22
|
+
dto_class = assoc_dao
|
23
|
+
.opts[:schema_mapper]
|
24
|
+
.strategies
|
25
|
+
.detect {_1 .method == :db_load }
|
26
|
+
.output
|
27
|
+
.dto
|
28
|
+
|
29
|
+
assoc_name = underscore(demodulize(dto_class.name))
|
30
|
+
reverse = opts[:reverse]
|
31
|
+
|
32
|
+
assoc_setter = if opts.key?(:assoc_setter)
|
33
|
+
opts[:assoc_setter]
|
34
|
+
else
|
35
|
+
"set_#{assoc_name}"
|
36
|
+
end
|
37
|
+
|
38
|
+
foreign_key = if opts.key?(:foreign_key)
|
39
|
+
opts[:foreign_key]
|
40
|
+
else
|
41
|
+
if reverse
|
42
|
+
name = underscore(demodulize(list.first.class.name))
|
43
|
+
"#{name}_id".to_sym
|
44
|
+
else
|
45
|
+
:id
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
root_ids = if reverse
|
50
|
+
list.map(&:id)
|
51
|
+
else
|
52
|
+
list.map(&:"#{foreign_key}")
|
53
|
+
end
|
54
|
+
|
55
|
+
assoc_by_fk = index_by(assoc_dao.where(foreign_key => root_ids).all) { _1.send(foreign_key) }
|
56
|
+
|
57
|
+
list.each do |item|
|
58
|
+
item.send(assoc_setter, assoc_by_fk[item.id])
|
59
|
+
end
|
60
|
+
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
{
|
2
|
+
"schema_type": "object",
|
3
|
+
"schema_version": "1.0",
|
4
|
+
"name": "one_to_many",
|
5
|
+
"path": "packages/ree_dao/package/ree_dao/functions/one_to_many.rb",
|
6
|
+
"mount_as": "fn",
|
7
|
+
"class": "ReeDao::OneToMany",
|
8
|
+
"factory": null,
|
9
|
+
"methods": [
|
10
|
+
{
|
11
|
+
"doc": "",
|
12
|
+
"throws": [
|
13
|
+
|
14
|
+
],
|
15
|
+
"return": "Any",
|
16
|
+
"args": [
|
17
|
+
{
|
18
|
+
"arg": "list",
|
19
|
+
"type": "ArrayOf[Proc#call]"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"arg": "assoc_dao",
|
23
|
+
"type": "Sequel::Dataset"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"arg": "opts",
|
27
|
+
"type": "Ksplat[:foreign_key? => Symbol, :assoc_setter? => Symbol]"
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
],
|
32
|
+
"links": [
|
33
|
+
{
|
34
|
+
"target": "demodulize",
|
35
|
+
"package_name": "ree_string",
|
36
|
+
"as": "demodulize",
|
37
|
+
"imports": [
|
38
|
+
|
39
|
+
]
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"target": "group_by",
|
43
|
+
"package_name": "ree_array",
|
44
|
+
"as": "group_by",
|
45
|
+
"imports": [
|
46
|
+
|
47
|
+
]
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"target": "underscore",
|
51
|
+
"package_name": "ree_string",
|
52
|
+
"as": "underscore",
|
53
|
+
"imports": [
|
54
|
+
|
55
|
+
]
|
56
|
+
}
|
57
|
+
]
|
58
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
{
|
2
|
+
"schema_type": "object",
|
3
|
+
"schema_version": "1.0",
|
4
|
+
"name": "one_to_one",
|
5
|
+
"path": "packages/ree_dao/package/ree_dao/functions/one_to_one.rb",
|
6
|
+
"mount_as": "fn",
|
7
|
+
"class": "ReeDao::OneToOne",
|
8
|
+
"factory": null,
|
9
|
+
"methods": [
|
10
|
+
{
|
11
|
+
"doc": "",
|
12
|
+
"throws": [
|
13
|
+
|
14
|
+
],
|
15
|
+
"return": "Any",
|
16
|
+
"args": [
|
17
|
+
{
|
18
|
+
"arg": "list",
|
19
|
+
"type": "ArrayOf[Proc#call]"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"arg": "assoc_dao",
|
23
|
+
"type": "Sequel::Dataset"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"arg": "opts",
|
27
|
+
"type": "Ksplat[:reverse? => Bool, :foreign_key? => Symbol, :assoc_setter? => Symbol]"
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
],
|
32
|
+
"links": [
|
33
|
+
{
|
34
|
+
"target": "demodulize",
|
35
|
+
"package_name": "ree_string",
|
36
|
+
"as": "demodulize",
|
37
|
+
"imports": [
|
38
|
+
|
39
|
+
]
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"target": "index_by",
|
43
|
+
"package_name": "ree_array",
|
44
|
+
"as": "index_by",
|
45
|
+
"imports": [
|
46
|
+
|
47
|
+
]
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"target": "underscore",
|
51
|
+
"package_name": "ree_string",
|
52
|
+
"as": "underscore",
|
53
|
+
"imports": [
|
54
|
+
|
55
|
+
]
|
56
|
+
}
|
57
|
+
]
|
58
|
+
}
|
@@ -0,0 +1,152 @@
|
|
1
|
+
# frozen_string_literal = true
|
2
|
+
|
3
|
+
RSpec.describe :one_to_many do
|
4
|
+
link :one_to_many, from: :ree_dao
|
5
|
+
link :persist_assoc, from: :ree_dao
|
6
|
+
link :build_sqlite_connection, from: :ree_dao
|
7
|
+
|
8
|
+
let(:connection) { build_sqlite_connection({database: 'sqlite_db'}) }
|
9
|
+
|
10
|
+
before :all do
|
11
|
+
Ree.enable_irb_mode
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
[:projects, :project_users].each do |name|
|
16
|
+
if connection.table_exists?(name)
|
17
|
+
connection.drop_table(name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
connection.create_table :projects do
|
22
|
+
primary_key :id
|
23
|
+
end
|
24
|
+
|
25
|
+
connection.create_table :project_users do
|
26
|
+
primary_key :id
|
27
|
+
foreign_key :project_id, :projects, null: false, on_delete: :cascade
|
28
|
+
end
|
29
|
+
|
30
|
+
connection.disconnect
|
31
|
+
end
|
32
|
+
|
33
|
+
after do
|
34
|
+
Ree.disable_irb_mode
|
35
|
+
connection.disconnect
|
36
|
+
end
|
37
|
+
|
38
|
+
it {
|
39
|
+
module TestOneToMany
|
40
|
+
include Ree::PackageDSL
|
41
|
+
|
42
|
+
package do
|
43
|
+
depends_on :ree_dao
|
44
|
+
end
|
45
|
+
|
46
|
+
class Db
|
47
|
+
include Ree::BeanDSL
|
48
|
+
|
49
|
+
bean :db do
|
50
|
+
singleton
|
51
|
+
factory :build
|
52
|
+
|
53
|
+
link :build_sqlite_connection, from: :ree_dao
|
54
|
+
end
|
55
|
+
|
56
|
+
def build
|
57
|
+
build_sqlite_connection({database: 'sqlite_db'})
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Project
|
62
|
+
include ReeDto::EntityDSL
|
63
|
+
|
64
|
+
properties(
|
65
|
+
id: Nilor[Integer]
|
66
|
+
)
|
67
|
+
|
68
|
+
def project_users
|
69
|
+
@project_users ||= []
|
70
|
+
end
|
71
|
+
|
72
|
+
def set_project_users(list)
|
73
|
+
@project_users = list
|
74
|
+
end
|
75
|
+
|
76
|
+
def add_project_user(pu)
|
77
|
+
project_users.push(pu)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class ProjectUser
|
82
|
+
include ReeDto::EntityDSL
|
83
|
+
|
84
|
+
properties(
|
85
|
+
id: Nilor[Integer],
|
86
|
+
project_id: Nilor[Integer]
|
87
|
+
)
|
88
|
+
|
89
|
+
contract Integer => Integer
|
90
|
+
def project_id=(id)
|
91
|
+
@project_id = id
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class ProjectsDao
|
96
|
+
include ReeDao::DSL
|
97
|
+
|
98
|
+
dao :projects_dao do
|
99
|
+
link :db
|
100
|
+
end
|
101
|
+
|
102
|
+
schema Project do
|
103
|
+
integer :id, null: true
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class ProjectUsersDao
|
108
|
+
include ReeDao::DSL
|
109
|
+
|
110
|
+
dao :project_users_dao do
|
111
|
+
link :db
|
112
|
+
end
|
113
|
+
|
114
|
+
schema ProjectUser do
|
115
|
+
integer :id, null: true
|
116
|
+
integer :project_id
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
project = TestOneToMany::Project.new(id: 1)
|
122
|
+
|
123
|
+
project.add_project_user(
|
124
|
+
TestOneToMany::ProjectUser.new
|
125
|
+
)
|
126
|
+
|
127
|
+
project.add_project_user(
|
128
|
+
TestOneToMany::ProjectUser.new
|
129
|
+
)
|
130
|
+
|
131
|
+
TestOneToMany::ProjectsDao.new.put(project)
|
132
|
+
persist_assoc(project, TestOneToMany::ProjectUsersDao.new)
|
133
|
+
|
134
|
+
project_users_dao = TestOneToMany::ProjectUsersDao.new
|
135
|
+
|
136
|
+
project.set_project_users([])
|
137
|
+
one_to_many([project], project_users_dao)
|
138
|
+
|
139
|
+
expect(project.project_users.size).to eq(2)
|
140
|
+
|
141
|
+
project.set_project_users([])
|
142
|
+
|
143
|
+
one_to_many(
|
144
|
+
[project],
|
145
|
+
project_users_dao,
|
146
|
+
foreign_key: :project_id,
|
147
|
+
assoc_setter: :set_project_users
|
148
|
+
)
|
149
|
+
|
150
|
+
expect(project.project_users.size).to eq(2)
|
151
|
+
}
|
152
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# frozen_string_literal = true
|
2
|
+
|
3
|
+
RSpec.describe :one_to_one do
|
4
|
+
link :one_to_one, from: :ree_dao
|
5
|
+
link :persist_assoc, from: :ree_dao
|
6
|
+
link :build_sqlite_connection, from: :ree_dao
|
7
|
+
|
8
|
+
let(:connection) { build_sqlite_connection({database: 'sqlite_db'}) }
|
9
|
+
|
10
|
+
before :all do
|
11
|
+
Ree.enable_irb_mode
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
[:projects, :project_users].each do |name|
|
16
|
+
if connection.table_exists?(name)
|
17
|
+
connection.drop_table(name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
connection.create_table :projects do
|
22
|
+
primary_key :id
|
23
|
+
end
|
24
|
+
|
25
|
+
connection.create_table :project_users do
|
26
|
+
primary_key :id
|
27
|
+
foreign_key :project_id, :projects, null: false, on_delete: :cascade
|
28
|
+
end
|
29
|
+
|
30
|
+
connection.alter_table :projects do
|
31
|
+
add_foreign_key :project_user_id, :project_users, on_delete: :cascade
|
32
|
+
end
|
33
|
+
|
34
|
+
connection.disconnect
|
35
|
+
end
|
36
|
+
|
37
|
+
after do
|
38
|
+
Ree.disable_irb_mode
|
39
|
+
connection.disconnect
|
40
|
+
end
|
41
|
+
|
42
|
+
it {
|
43
|
+
module TestOneToOne
|
44
|
+
include Ree::PackageDSL
|
45
|
+
|
46
|
+
package do
|
47
|
+
depends_on :ree_dao
|
48
|
+
end
|
49
|
+
|
50
|
+
class Db
|
51
|
+
include Ree::BeanDSL
|
52
|
+
|
53
|
+
bean :db do
|
54
|
+
singleton
|
55
|
+
factory :build
|
56
|
+
|
57
|
+
link :build_sqlite_connection, from: :ree_dao
|
58
|
+
end
|
59
|
+
|
60
|
+
def build
|
61
|
+
build_sqlite_connection({database: 'sqlite_db'})
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class Project
|
66
|
+
include ReeDto::EntityDSL
|
67
|
+
|
68
|
+
properties(
|
69
|
+
id: Nilor[Integer]
|
70
|
+
)
|
71
|
+
|
72
|
+
def project_user
|
73
|
+
@project_user
|
74
|
+
end
|
75
|
+
|
76
|
+
def project_user_id=(id)
|
77
|
+
@project_user_id = id
|
78
|
+
end
|
79
|
+
|
80
|
+
attr_reader :project_user_id
|
81
|
+
|
82
|
+
def set_project_user(pu)
|
83
|
+
@project_user = pu
|
84
|
+
end
|
85
|
+
|
86
|
+
def project_users
|
87
|
+
[@project_user]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class ProjectUser
|
92
|
+
include ReeDto::EntityDSL
|
93
|
+
|
94
|
+
properties(
|
95
|
+
id: Nilor[Integer],
|
96
|
+
project_id: Nilor[Integer]
|
97
|
+
)
|
98
|
+
|
99
|
+
contract Integer => Integer
|
100
|
+
def project_id=(id)
|
101
|
+
@project_id = id
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class ProjectsDao
|
106
|
+
include ReeDao::DSL
|
107
|
+
|
108
|
+
dao :projects_dao do
|
109
|
+
link :db
|
110
|
+
end
|
111
|
+
|
112
|
+
schema Project do
|
113
|
+
integer :id, null: true
|
114
|
+
integer :project_user_id, null: true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
class ProjectUsersDao
|
119
|
+
include ReeDao::DSL
|
120
|
+
|
121
|
+
dao :project_users_dao do
|
122
|
+
link :db
|
123
|
+
end
|
124
|
+
|
125
|
+
schema ProjectUser do
|
126
|
+
integer :id, null: true
|
127
|
+
integer :project_id
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
project = TestOneToOne::Project.new(id: 1)
|
133
|
+
|
134
|
+
project.set_project_user(
|
135
|
+
TestOneToOne::ProjectUser.new
|
136
|
+
)
|
137
|
+
|
138
|
+
TestOneToOne::ProjectsDao.new.put(project)
|
139
|
+
persist_assoc(project, TestOneToOne::ProjectUsersDao.new)
|
140
|
+
|
141
|
+
project.project_user_id = project.project_users.first.id
|
142
|
+
persist_assoc(project, TestOneToOne::ProjectUsersDao.new)
|
143
|
+
|
144
|
+
project_users_dao = TestOneToOne::ProjectUsersDao.new
|
145
|
+
|
146
|
+
project.set_project_user(nil)
|
147
|
+
one_to_one([project], project_users_dao)
|
148
|
+
|
149
|
+
expect(project.project_user.project_id).to eq(project.id)
|
150
|
+
|
151
|
+
project.set_project_user(nil)
|
152
|
+
|
153
|
+
one_to_one(
|
154
|
+
[project],
|
155
|
+
project_users_dao,
|
156
|
+
reverse: true,
|
157
|
+
foreign_key: :project_id,
|
158
|
+
assoc_setter: :set_project_user
|
159
|
+
)
|
160
|
+
|
161
|
+
expect(project.project_user.project_id).to eq(project.id)
|
162
|
+
|
163
|
+
project.set_project_user(nil)
|
164
|
+
|
165
|
+
one_to_one(
|
166
|
+
[project],
|
167
|
+
project_users_dao,
|
168
|
+
reverse: true,
|
169
|
+
assoc_setter: :set_project_user
|
170
|
+
)
|
171
|
+
|
172
|
+
expect(project.project_user.project_id).to eq(project.id)
|
173
|
+
}
|
174
|
+
end
|
@@ -34,25 +34,27 @@ module ReeEnum
|
|
34
34
|
contract(
|
35
35
|
ReeEnum::Value,
|
36
36
|
Kwargs[
|
37
|
+
name: String,
|
37
38
|
role: Nilor[Symbol, ArrayOf[Symbol]]
|
38
39
|
] => String
|
39
40
|
)
|
40
|
-
def serialize(value, role: nil)
|
41
|
+
def serialize(value, name:, role: nil)
|
41
42
|
value.to_s
|
42
43
|
end
|
43
44
|
|
44
45
|
contract(
|
45
46
|
Any,
|
46
47
|
Kwargs[
|
48
|
+
name: String,
|
47
49
|
role: Nilor[Symbol, ArrayOf[Symbol]]
|
48
50
|
] => ReeEnum::Value
|
49
51
|
).throws(ReeMapper::CoercionError)
|
50
|
-
def cast(value, role: nil)
|
52
|
+
def cast(value, name:, role: nil)
|
51
53
|
if value.is_a?(String)
|
52
54
|
enum_val = @enum.values.all.detect { |v| v.to_s == value }
|
53
55
|
|
54
56
|
if !enum_val
|
55
|
-
raise ReeMapper::CoercionError, "should be one of #{@enum.values.all.map(&:to_s).inspect}"
|
57
|
+
raise ReeMapper::CoercionError, "`#{name}` should be one of #{@enum.values.all.map(&:to_s).inspect}"
|
56
58
|
end
|
57
59
|
|
58
60
|
enum_val
|
@@ -60,33 +62,35 @@ module ReeEnum
|
|
60
62
|
enum_val = @enum.values.all.detect { |v| v.to_i == value }
|
61
63
|
|
62
64
|
if !enum_val
|
63
|
-
raise ReeMapper::CoercionError, "should be one of #{@enum.values.all.map(&:to_s).inspect}"
|
65
|
+
raise ReeMapper::CoercionError, "`#{name}` should be one of #{@enum.values.all.map(&:to_s).inspect}"
|
64
66
|
end
|
65
67
|
|
66
68
|
enum_val
|
67
69
|
else
|
68
|
-
raise ReeMapper::CoercionError, "should be one of #{@enum.values.all.map(&:to_s).inspect}"
|
70
|
+
raise ReeMapper::CoercionError, "`#{name}` should be one of #{@enum.values.all.map(&:to_s).inspect}"
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
72
74
|
contract(
|
73
75
|
ReeEnum::Value,
|
74
76
|
Kwargs[
|
77
|
+
name: String,
|
75
78
|
role: Nilor[Symbol, ArrayOf[Symbol]]
|
76
79
|
] => Integer
|
77
80
|
)
|
78
|
-
def db_dump(value, role: nil)
|
81
|
+
def db_dump(value, name:, role: nil)
|
79
82
|
value.to_i
|
80
83
|
end
|
81
84
|
|
82
85
|
contract(
|
83
86
|
Integer,
|
84
87
|
Kwargs[
|
88
|
+
name: String,
|
85
89
|
role: Nilor[Symbol, ArrayOf[Symbol]]
|
86
90
|
] => ReeEnum::Value
|
87
91
|
).throws(ReeMapper::TypeError)
|
88
|
-
def db_load(value, role: nil)
|
89
|
-
cast(value, role: role)
|
92
|
+
def db_load(value, name:, role: nil)
|
93
|
+
cast(value, name: name, role: role)
|
90
94
|
end
|
91
95
|
end
|
92
96
|
|
@@ -112,7 +112,7 @@ RSpec.describe ReeEnum::DSL do
|
|
112
112
|
state: 'first',
|
113
113
|
type: 'invalid',
|
114
114
|
})
|
115
|
-
}.to raise_error(ReeMapper::CoercionError, 'should be one of ["account"]')
|
115
|
+
}.to raise_error(ReeMapper::CoercionError, '`type` should be one of ["account"]')
|
116
116
|
|
117
117
|
expect(
|
118
118
|
mapper.cast({
|
data/lib/ree_lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ree_lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ruslan Gatiyatov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ree
|
@@ -248,15 +248,21 @@ files:
|
|
248
248
|
- lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_dao.rb
|
249
249
|
- lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_pg_connection.rb
|
250
250
|
- lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_sqlite_connection.rb
|
251
|
+
- lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_many.rb
|
252
|
+
- lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_one.rb
|
251
253
|
- lib/ree_lib/packages/ree_dao/package/ree_dao/functions/persist_assoc.rb
|
252
254
|
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/beans/connections.schema.json
|
253
255
|
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_connection.schema.json
|
254
256
|
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_dao.schema.json
|
255
257
|
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_pg_connection.schema.json
|
256
258
|
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_sqlite_connection.schema.json
|
259
|
+
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/one_to_many.schema.json
|
260
|
+
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/one_to_one.schema.json
|
257
261
|
- lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/persist_assoc.schema.json
|
258
262
|
- lib/ree_lib/packages/ree_dao/spec/package_schema_spec.rb
|
259
263
|
- lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/build_sqlite_connection_spec.rb
|
264
|
+
- lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_many_spec.rb
|
265
|
+
- lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_one_spec.rb
|
260
266
|
- lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/persist_assoc_spec.rb
|
261
267
|
- lib/ree_lib/packages/ree_dao/spec/spec_helper.rb
|
262
268
|
- lib/ree_lib/packages/ree_date/.gitignore
|