zyra 0.0.2 → 1.0.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/.rubocop.yml +1 -0
- data/README.md +67 -1
- data/config/yardstick.yml +7 -15
- data/lib/zyra/{builder.rb → creator.rb} +18 -49
- data/lib/zyra/exceptions.rb +3 -2
- data/lib/zyra/finder.rb +103 -0
- data/lib/zyra/finder_creator.rb +162 -0
- data/lib/zyra/registry.rb +179 -13
- data/lib/zyra/version.rb +1 -1
- data/lib/zyra.rb +130 -56
- data/spec/integration/readme/zyra_spec.rb +54 -0
- data/spec/integration/yard/zyra/registry_spec.rb +135 -0
- data/spec/integration/yard/zyra_spec.rb +128 -0
- data/spec/lib/zyra/creator_spec.rb +75 -0
- data/spec/lib/zyra/finder_creator_spec.rb +263 -0
- data/spec/lib/zyra/finder_spec.rb +117 -0
- data/spec/lib/zyra/registry_spec.rb +6 -92
- data/spec/lib/zyra_spec.rb +8 -144
- data/spec/spec_helper.rb +13 -0
- data/spec/support/factories/user.rb +9 -0
- data/spec/support/factory_bot.rb +7 -0
- data/spec/support/models/post.rb +5 -0
- data/spec/support/models/user.rb +1 -0
- data/spec/support/schema.rb +8 -0
- data/spec/support/shared_examples/registry/find_or_create.rb +130 -0
- data/spec/support/shared_examples/registry/on.rb +42 -0
- data/spec/support/shared_examples/registry/register.rb +54 -0
- data/zyra.gemspec +3 -1
- metadata +53 -12
- data/spec/lib/zyra/builder_spec.rb +0 -129
@@ -0,0 +1,128 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Zyra do
|
6
|
+
describe 'yard' do
|
7
|
+
describe '.register' do
|
8
|
+
it 'Register models searching' do
|
9
|
+
Zyra.register(User, find_by: :email)
|
10
|
+
Zyra
|
11
|
+
.register(User, :user_by_name, find_by: :name)
|
12
|
+
.on(:return) do |user|
|
13
|
+
user.update(email: "#{user.name.gsub(/ /, '_')}@srv.com")
|
14
|
+
end
|
15
|
+
|
16
|
+
attributes = {
|
17
|
+
name: 'my name',
|
18
|
+
email: 'my_email@srv.com'
|
19
|
+
}
|
20
|
+
|
21
|
+
user = Zyra.find_or_create(:user, attributes)
|
22
|
+
expect(user.email).to eq('my_email@srv.com')
|
23
|
+
|
24
|
+
user = Zyra.find_or_create(:user_by_name, attributes)
|
25
|
+
expect(user.email).to eq('my_name@srv.com')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.find_or_create' do
|
30
|
+
it 'Regular usage passing all attributes' do
|
31
|
+
Zyra.register(User, find_by: :email)
|
32
|
+
|
33
|
+
email = 'email@srv.com'
|
34
|
+
|
35
|
+
user = Zyra.find_or_create(
|
36
|
+
:user,
|
37
|
+
email: email, name: 'initial name'
|
38
|
+
)
|
39
|
+
|
40
|
+
expect(user.name).to eq('initial name')
|
41
|
+
|
42
|
+
user = Zyra.find_or_create(
|
43
|
+
:user,
|
44
|
+
email: email, name: 'final name'
|
45
|
+
)
|
46
|
+
|
47
|
+
expect(user.name).to eq('initial name')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '.on' do
|
52
|
+
it 'Adding a hook on return' do
|
53
|
+
Zyra.register(User, find_by: :email)
|
54
|
+
Zyra.on(:user, :return) do |user|
|
55
|
+
user.update(name: 'initial name')
|
56
|
+
end
|
57
|
+
|
58
|
+
email = 'email@srv.com'
|
59
|
+
|
60
|
+
user = Zyra.find_or_create(
|
61
|
+
:user,
|
62
|
+
email: email
|
63
|
+
)
|
64
|
+
|
65
|
+
expect(user.name).to eq('initial name')
|
66
|
+
user.update(name: 'some other name')
|
67
|
+
|
68
|
+
user = Zyra.find_or_create(:user, email: email)
|
69
|
+
|
70
|
+
expect(user.name).to eq('initial name')
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'Adding a hook on found' do
|
74
|
+
Zyra.register(User, find_by: :email)
|
75
|
+
Zyra.on(:user, :found) do |user|
|
76
|
+
user.update(name: 'final name')
|
77
|
+
end
|
78
|
+
|
79
|
+
email = 'email@srv.com'
|
80
|
+
attributes = { email: email, name: 'initial name' }
|
81
|
+
|
82
|
+
user = Zyra.find_or_create(:user, attributes)
|
83
|
+
|
84
|
+
expect(user.name).to eq('initial name')
|
85
|
+
|
86
|
+
user = Zyra.find_or_create(:user, attributes)
|
87
|
+
|
88
|
+
expect(user.name).to eq('final name')
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'Adding a hook on build' do
|
92
|
+
Zyra.register(User, find_by: :email)
|
93
|
+
Zyra.on(:user, :build) do |user|
|
94
|
+
user.name = 'initial name'
|
95
|
+
end
|
96
|
+
|
97
|
+
email = 'email@srv.com'
|
98
|
+
|
99
|
+
user = Zyra.find_or_create(:user, email: email)
|
100
|
+
|
101
|
+
expect(user.name).to eq('initial name')
|
102
|
+
user.update(name: 'some other name')
|
103
|
+
|
104
|
+
user = Zyra.find_or_create(:user, email: email)
|
105
|
+
|
106
|
+
expect(user.name).to eq('some other name')
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'Adding a hook on create' do
|
110
|
+
Zyra.register(User, find_by: :email)
|
111
|
+
Zyra.on(:user, :create) do |user|
|
112
|
+
user.update(name: 'initial name')
|
113
|
+
end
|
114
|
+
|
115
|
+
email = 'email@srv.com'
|
116
|
+
|
117
|
+
user = Zyra.find_or_create(:user, email: email)
|
118
|
+
|
119
|
+
expect(user.name).to eq('initial name')
|
120
|
+
user.update(name: 'some other name')
|
121
|
+
|
122
|
+
user = Zyra.find_or_create(:user, email: email)
|
123
|
+
|
124
|
+
expect(user.name).to eq('some other name')
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Zyra::Creator do
|
6
|
+
subject(:creator) do
|
7
|
+
described_class.new(model_class, event_registry: event_registry)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:event_registry) { Jace::Registry.new }
|
11
|
+
let(:model_class) { User }
|
12
|
+
|
13
|
+
describe '#create' do
|
14
|
+
it do
|
15
|
+
expect(creator.create).to be_a(model_class)
|
16
|
+
end
|
17
|
+
|
18
|
+
it do
|
19
|
+
expect(creator.create)
|
20
|
+
.to be_persisted
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when attributes are given' do
|
24
|
+
let(:name) { SecureRandom.hex(10) }
|
25
|
+
|
26
|
+
it 'initializes the model with the given attribute' do
|
27
|
+
expect(creator.create(name: name).name)
|
28
|
+
.to eq(name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when a block is given' do
|
33
|
+
let(:name) { SecureRandom.hex(10) }
|
34
|
+
|
35
|
+
it 'initializes the model with the given attribute' do
|
36
|
+
value = name
|
37
|
+
expect(creator.create { |model| model.name = value }.name)
|
38
|
+
.to eq(name)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when building has an after build handler' do
|
43
|
+
let(:name) { SecureRandom.hex(10) }
|
44
|
+
|
45
|
+
before do
|
46
|
+
value = name
|
47
|
+
event_registry.register(:build) do |model|
|
48
|
+
model.name = "#{value}#{model.id}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'runs the event handler' do
|
53
|
+
expect(creator.create.name)
|
54
|
+
.to eq(name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when building has an after create handler' do
|
59
|
+
let(:name) { SecureRandom.hex(10) }
|
60
|
+
|
61
|
+
before do
|
62
|
+
value = name
|
63
|
+
event_registry.register(:create) do |model|
|
64
|
+
model.name = "#{value}#{model.id}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'runs the event handler' do
|
69
|
+
model = creator.create
|
70
|
+
expect(model.name)
|
71
|
+
.to eq("#{name}#{model.id}")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,263 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Zyra::FinderCreator do
|
6
|
+
subject(:finder) do
|
7
|
+
described_class.new(model_class, keys)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:event_registry) { Jace::Registry.new }
|
11
|
+
let(:model_class) { User }
|
12
|
+
let(:keys) { :email }
|
13
|
+
let(:email) { SecureRandom.hex(10) }
|
14
|
+
|
15
|
+
describe '#find_or_create' do
|
16
|
+
let(:attributes) do
|
17
|
+
{
|
18
|
+
name: 'Some Name',
|
19
|
+
email: email,
|
20
|
+
password: 'SomePassword'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when there is no entry in the database' do
|
25
|
+
it do
|
26
|
+
expect(finder.find_or_create(attributes)).to be_a(model_class)
|
27
|
+
end
|
28
|
+
|
29
|
+
it do
|
30
|
+
expect { finder.find_or_create(attributes) }
|
31
|
+
.to change(model_class, :count)
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when a block is given' do
|
35
|
+
it 'runs the block' do
|
36
|
+
user = finder.find_or_create(attributes) do |u|
|
37
|
+
u.update(name: 'new name')
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(user.name).to eq('new name')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when there is an entry and a block is given' do
|
46
|
+
before { create(:user, **attributes) }
|
47
|
+
|
48
|
+
it 'runs the block' do
|
49
|
+
user = finder.find_or_create(attributes) do |u|
|
50
|
+
u.update(name: 'new name')
|
51
|
+
end
|
52
|
+
|
53
|
+
expect(user.name).to eq('new name')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when the entry is there with the same attributes' do
|
58
|
+
let!(:user) { create(:user, **attributes) }
|
59
|
+
|
60
|
+
it 'returns the user' do
|
61
|
+
expect(finder.find_or_create(attributes)).to eq(user)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when the entry is there with other attributes' do
|
66
|
+
let!(:user) { create(:user, email: email) }
|
67
|
+
|
68
|
+
it 'returns the user' do
|
69
|
+
expect(finder.find_or_create(attributes)).to eq(user)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when there is another entry' do
|
74
|
+
before { create(:user) }
|
75
|
+
|
76
|
+
it 'returns a new model' do
|
77
|
+
expect(finder.find_or_create(attributes)).to be_a(model_class)
|
78
|
+
end
|
79
|
+
|
80
|
+
it do
|
81
|
+
expect { finder.find_or_create(attributes) }
|
82
|
+
.to change(model_class, :count)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when the keys is set as string' do
|
87
|
+
let(:keys) { 'email' }
|
88
|
+
let!(:user) { create(:user, **attributes) }
|
89
|
+
|
90
|
+
it 'finds the user the same way' do
|
91
|
+
expect(finder.find_or_create(attributes)).to eq(user)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when the attributes have string keys' do
|
96
|
+
let(:attributes) { { 'email' => email } }
|
97
|
+
let!(:user) { create(:user, **attributes) }
|
98
|
+
|
99
|
+
it 'finds the user the same way' do
|
100
|
+
expect(finder.find_or_create(attributes)).to eq(user)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when there is an event handler on found' do
|
105
|
+
let(:name) { 'new_name' }
|
106
|
+
|
107
|
+
before do
|
108
|
+
new_name = name
|
109
|
+
|
110
|
+
finder.on(:found) do |model|
|
111
|
+
model.update(name: new_name)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'when the model is found' do
|
116
|
+
let!(:user) { create(:user, **attributes) }
|
117
|
+
|
118
|
+
it 'runs the event after the model was found' do
|
119
|
+
expect { finder.find_or_create(attributes) }
|
120
|
+
.to change { user.reload.name }
|
121
|
+
.to(name)
|
122
|
+
end
|
123
|
+
|
124
|
+
it do
|
125
|
+
expect { finder.find_or_create(attributes) }
|
126
|
+
.not_to change(model_class, :count)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'when the model is not found' do
|
131
|
+
it 'does not run the event after the model was found' do
|
132
|
+
expect(finder.find_or_create(attributes).name)
|
133
|
+
.not_to eq(name)
|
134
|
+
end
|
135
|
+
|
136
|
+
it do
|
137
|
+
expect(finder.find_or_create(attributes)).to be_a(model_class)
|
138
|
+
end
|
139
|
+
|
140
|
+
it do
|
141
|
+
expect { finder.find_or_create(attributes) }
|
142
|
+
.to change(model_class, :count)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context 'when there is an event handler on build' do
|
148
|
+
let(:name) { 'new_name' }
|
149
|
+
|
150
|
+
before do
|
151
|
+
new_name = name
|
152
|
+
|
153
|
+
finder.on(:build) do |model|
|
154
|
+
model.name = new_name
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'when the model is found' do
|
159
|
+
let!(:user) { create(:user, **attributes) }
|
160
|
+
|
161
|
+
it 'does not run the event after the model was found' do
|
162
|
+
expect { finder.find_or_create(attributes) }
|
163
|
+
.not_to change { user.reload.name }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when the model is not found' do
|
168
|
+
it 'runs the event after the model was build' do
|
169
|
+
expect(finder.find_or_create(attributes).reload.name)
|
170
|
+
.to eq(name)
|
171
|
+
end
|
172
|
+
|
173
|
+
it do
|
174
|
+
expect(finder.find_or_create(attributes)).to be_a(model_class)
|
175
|
+
end
|
176
|
+
|
177
|
+
it do
|
178
|
+
expect { finder.find_or_create(attributes) }
|
179
|
+
.to change(model_class, :count)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'when there is an event handler on create' do
|
185
|
+
let(:name) { 'new_name' }
|
186
|
+
|
187
|
+
before do
|
188
|
+
new_name = name
|
189
|
+
|
190
|
+
finder.on(:create) do |model|
|
191
|
+
model.name = new_name
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context 'when the model is found' do
|
196
|
+
before { create(:user, **attributes) }
|
197
|
+
|
198
|
+
it 'does not run the event after the model was found' do
|
199
|
+
expect(finder.find_or_create(attributes).name)
|
200
|
+
.not_to eq(name)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
context 'when the model is not found' do
|
205
|
+
it 'runs the event after the model was created' do
|
206
|
+
expect(finder.find_or_create(attributes).name)
|
207
|
+
.to eq(name)
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'does not run the event after the model was build' do
|
211
|
+
expect(finder.find_or_create(attributes).reload.name)
|
212
|
+
.not_to eq(name)
|
213
|
+
end
|
214
|
+
|
215
|
+
it do
|
216
|
+
expect(finder.find_or_create(attributes)).to be_a(model_class)
|
217
|
+
end
|
218
|
+
|
219
|
+
it do
|
220
|
+
expect { finder.find_or_create(attributes) }
|
221
|
+
.to change(model_class, :count)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
context 'when there is an event handler on return' do
|
227
|
+
let(:name) { 'new_name' }
|
228
|
+
|
229
|
+
before do
|
230
|
+
new_name = name
|
231
|
+
|
232
|
+
finder.on(:return) do |model|
|
233
|
+
model.update(name: new_name)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
context 'when the model is found' do
|
238
|
+
let!(:user) { create(:user, **attributes) }
|
239
|
+
|
240
|
+
it 'does not run the event after the model was found' do
|
241
|
+
expect { finder.find_or_create(attributes) }
|
242
|
+
.to change { user.reload.name }
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context 'when the model is not found' do
|
247
|
+
it 'runs the event after the model was returned' do
|
248
|
+
expect(finder.find_or_create(attributes).reload.name)
|
249
|
+
.to eq(name)
|
250
|
+
end
|
251
|
+
|
252
|
+
it do
|
253
|
+
expect(finder.find_or_create(attributes)).to be_a(model_class)
|
254
|
+
end
|
255
|
+
|
256
|
+
it do
|
257
|
+
expect { finder.find_or_create(attributes) }
|
258
|
+
.to change(model_class, :count)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Zyra::Finder do
|
6
|
+
subject(:finder) do
|
7
|
+
described_class.new(model_class, keys, event_registry: event_registry)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:event_registry) { Jace::Registry.new }
|
11
|
+
let(:model_class) { User }
|
12
|
+
let(:keys) { :email }
|
13
|
+
let(:email) { SecureRandom.hex(10) }
|
14
|
+
|
15
|
+
describe '#find' do
|
16
|
+
let(:attributes) do
|
17
|
+
{
|
18
|
+
name: 'Some Name',
|
19
|
+
email: email,
|
20
|
+
password: 'SomePassword'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when there is no entry in the database' do
|
25
|
+
it do
|
26
|
+
expect(finder.find(attributes)).to be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when a block is given' do
|
30
|
+
it do
|
31
|
+
user = finder.find(attributes) { |u| u.name = 'other' }
|
32
|
+
expect(user).to be_nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when the model is found and a block is given' do
|
38
|
+
let!(:user) { create(:user, **attributes) }
|
39
|
+
|
40
|
+
it 'runs the block' do
|
41
|
+
expect { finder.find(attributes) { |u| u.update(name: 'other') } }
|
42
|
+
.to change { user.reload.name }
|
43
|
+
.to('other')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when the entry is there with the same attributes' do
|
48
|
+
let!(:user) { create(:user, **attributes) }
|
49
|
+
|
50
|
+
it 'returns the user' do
|
51
|
+
expect(finder.find(attributes)).to eq(user)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when the entry is there with other attributes' do
|
56
|
+
let!(:user) { create(:user, email: email) }
|
57
|
+
|
58
|
+
it 'returns the user' do
|
59
|
+
expect(finder.find(attributes)).to eq(user)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when there is another entry' do
|
64
|
+
before { create(:user) }
|
65
|
+
|
66
|
+
it 'returns the user' do
|
67
|
+
expect(finder.find(attributes)).to be_nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when the keys is set as string' do
|
72
|
+
let(:keys) { 'email' }
|
73
|
+
let!(:user) { create(:user, **attributes) }
|
74
|
+
|
75
|
+
it 'finds the user the same way' do
|
76
|
+
expect(finder.find(attributes)).to eq(user)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when the attributes have string keys' do
|
81
|
+
let(:attributes) { { 'email' => email } }
|
82
|
+
let!(:user) { create(:user, **attributes) }
|
83
|
+
|
84
|
+
it 'finds the user the same way' do
|
85
|
+
expect(finder.find(attributes)).to eq(user)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when there is an event handler' do
|
90
|
+
let(:name) { 'new_name' }
|
91
|
+
|
92
|
+
before do
|
93
|
+
new_name = name
|
94
|
+
|
95
|
+
event_registry.register(:found) do |model|
|
96
|
+
model.update(name: new_name)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'when the model is found' do
|
101
|
+
let!(:user) { create(:user, **attributes) }
|
102
|
+
|
103
|
+
it 'runs the event after the model was found' do
|
104
|
+
expect { finder.find(attributes) }
|
105
|
+
.to change { user.reload.name }
|
106
|
+
.to(name)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'when the model is not found' do
|
111
|
+
it do
|
112
|
+
expect(finder.find(attributes)).to be_nil
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -6,100 +6,14 @@ describe Zyra::Registry do
|
|
6
6
|
let(:registry) { described_class.new }
|
7
7
|
|
8
8
|
describe '#register' do
|
9
|
-
|
10
|
-
let(:key) { :user_alias }
|
11
|
-
|
12
|
-
it 'creates a builder for the given class' do
|
13
|
-
expect(registry.register(User, key))
|
14
|
-
.to eq(Zyra::Builder.new(User))
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'register builder under the key' do
|
18
|
-
expect { registry.register(User, key) }
|
19
|
-
.to change { registry.builder_for(key) }
|
20
|
-
.from(nil).to(Zyra::Builder.new(User))
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when providing string alias' do
|
25
|
-
let(:key) { 'user' }
|
26
|
-
|
27
|
-
it 'creates a builder for the given class' do
|
28
|
-
expect(registry.register(User, key))
|
29
|
-
.to eq(Zyra::Builder.new(User))
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'register builder under the key' do
|
33
|
-
expect { registry.register(User, key) }
|
34
|
-
.to change { registry.builder_for(key) }
|
35
|
-
.from(nil).to(Zyra::Builder.new(User))
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'when not providing an alias' do
|
40
|
-
let(:key) { :user }
|
41
|
-
|
42
|
-
it 'creates a builder for the given class' do
|
43
|
-
expect(registry.register(User))
|
44
|
-
.to eq(Zyra::Builder.new(User))
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'register builder under the correct key' do
|
48
|
-
expect { registry.register(User) }
|
49
|
-
.to change { registry.builder_for(key) }
|
50
|
-
.from(nil).to(Zyra::Builder.new(User))
|
51
|
-
end
|
52
|
-
end
|
9
|
+
it_behaves_like 'a method that registers a finder creator'
|
53
10
|
end
|
54
11
|
|
55
|
-
describe '#
|
56
|
-
|
57
|
-
|
58
|
-
context 'when there is no builder registered' do
|
59
|
-
it do
|
60
|
-
expect(registry.builder_for(key))
|
61
|
-
.to be_nil
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'when there is no builder registered on a symbol key' do
|
66
|
-
before do
|
67
|
-
registry.register(User, :user)
|
68
|
-
end
|
69
|
-
|
70
|
-
it do
|
71
|
-
expect(registry.builder_for(key))
|
72
|
-
.to eq(Zyra::Builder.new(User))
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'when passing a string key' do
|
76
|
-
let(:key) { 'user' }
|
77
|
-
|
78
|
-
it do
|
79
|
-
expect(registry.builder_for(key))
|
80
|
-
.to eq(Zyra::Builder.new(User))
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context 'when there is no builder registered on a string key' do
|
86
|
-
before do
|
87
|
-
registry.register(User, 'user')
|
88
|
-
end
|
89
|
-
|
90
|
-
it do
|
91
|
-
expect(registry.builder_for(key))
|
92
|
-
.to eq(Zyra::Builder.new(User))
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'when passing a string key' do
|
96
|
-
let(:key) { 'user' }
|
12
|
+
describe '#on' do
|
13
|
+
it_behaves_like 'a method that registers an event handler'
|
14
|
+
end
|
97
15
|
|
98
|
-
|
99
|
-
|
100
|
-
.to eq(Zyra::Builder.new(User))
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
16
|
+
describe '#find_or_create' do
|
17
|
+
it_behaves_like 'a method that returns or create a model'
|
104
18
|
end
|
105
19
|
end
|