acfs 0.29.1.1.b257 → 0.29.1.1.b259
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 +8 -8
- data/lib/acfs.rb +1 -0
- data/lib/acfs/collection.rb +1 -0
- data/lib/acfs/global.rb +23 -0
- data/lib/acfs/model/query_methods.rb +13 -13
- data/lib/acfs/singleton_resource.rb +1 -1
- data/lib/acfs/util.rb +20 -0
- data/spec/acfs/model/query_methods_spec.rb +75 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWVkNzczZWRjZWMxNzJlZmQ2YjJjYjQ2ZTQ4ODhjOTA1MDc1M2Y5YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjJkYTUyZTMwMWRlMDUwYjQ2OTM5YzdiMDZjYWNhZDgyOTRlMGQ0OQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTJmMWVjYjA4MTU0YjllOTBiMGUxZDc5N2JmOGJjYjY1ZTdjZmFjOGI5OWMw
|
10
|
+
ZDY2NGUxMGZhMGMwZTQzNzIzNGM1ZWM5MmMxMzQ0ZjZmZTM0YzQ4YmI4OWEx
|
11
|
+
OTEwOWMwMmFhYTA5NTcyNmI2N2MwZjU4OTk4NGM5NTQ2MTk0M2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDYxNGJlMDE2ODhlOWY1NWMxNDJkMTg5YjcwM2UyMzlmM2IwMWVlYWI2Y2Rh
|
14
|
+
ZTAyNDY2NzYxNzdhNDZlNzg3NDg2ODVhY2E1ZmY1ODQyNzU4MmIwNWYxZmE5
|
15
|
+
MWFlOWYwNGU1ZThhNGE4MDRhZmNmOWQxNDZlZGI0NjM3MmVkZTA=
|
data/lib/acfs.rb
CHANGED
data/lib/acfs/collection.rb
CHANGED
data/lib/acfs/global.rb
CHANGED
@@ -40,5 +40,28 @@ module Acfs
|
|
40
40
|
self.runner.clear
|
41
41
|
Acfs::Stub.clear
|
42
42
|
end
|
43
|
+
|
44
|
+
# @api public
|
45
|
+
#
|
46
|
+
# Add an additional callback hook to not loaded resource.
|
47
|
+
# If given resource already loaded callback will be invoked immediately.
|
48
|
+
#
|
49
|
+
# This method will be replaced by explicit callback handling when query methods
|
50
|
+
# return explicit future objects.
|
51
|
+
#
|
52
|
+
# @example
|
53
|
+
# user = MyUser.find 1, &callback_one
|
54
|
+
# Acfs.add_callback(user, &callback_two)
|
55
|
+
#
|
56
|
+
def add_callback(resource, &block)
|
57
|
+
raise ArgumentError.new "Given resource is not an Acfs resource but a: #{resource.class.name}" unless resource.respond_to?(:__callbacks__)
|
58
|
+
return false if block.nil?
|
59
|
+
|
60
|
+
if resource.loaded?
|
61
|
+
block.call resource
|
62
|
+
else
|
63
|
+
resource.__callbacks__ << block
|
64
|
+
end
|
65
|
+
end
|
43
66
|
end
|
44
67
|
end
|
@@ -98,15 +98,16 @@ module Acfs::Model
|
|
98
98
|
# @return [ self ] Resource object, nil if empty list is returned
|
99
99
|
#
|
100
100
|
def find_by(params, &block)
|
101
|
-
model = ResourceDelegator.new self.new
|
101
|
+
model = Acfs::Util::ResourceDelegator.new self.new
|
102
|
+
model.__callbacks__ << block unless block.nil?
|
102
103
|
|
103
104
|
operation :list, params: params do |data|
|
104
|
-
|
105
|
-
model.__setobj__ create_resource data.first, origin: model.__getobj__
|
106
|
-
else
|
105
|
+
if data.empty?
|
107
106
|
model.__setobj__ nil
|
107
|
+
else
|
108
|
+
model.__setobj__ create_resource data.first, origin: model.__getobj__
|
108
109
|
end
|
109
|
-
|
110
|
+
model.__invoke__
|
110
111
|
end
|
111
112
|
|
112
113
|
model
|
@@ -130,21 +131,18 @@ module Acfs::Model
|
|
130
131
|
end
|
131
132
|
end
|
132
133
|
|
133
|
-
# TODO: Replace delegator with promise or future for the long run.
|
134
|
-
class ResourceDelegator < SimpleDelegator
|
135
|
-
delegate :class, :is_a?, :kind_of?, :nil?, to: :__getobj__
|
136
|
-
end
|
137
|
-
|
138
134
|
private
|
139
135
|
def find_single(id, opts, &block)
|
140
|
-
model = ResourceDelegator.new self.new
|
136
|
+
model = Acfs::Util::ResourceDelegator.new self.new
|
141
137
|
|
142
138
|
opts[:params] ||= {}
|
143
139
|
opts[:params].merge!({ id: id })
|
144
140
|
|
141
|
+
model.__callbacks__ << block unless block.nil?
|
142
|
+
|
145
143
|
operation :read, opts do |data|
|
146
144
|
model.__setobj__ create_resource data, origin: model.__getobj__
|
147
|
-
|
145
|
+
model.__invoke__
|
148
146
|
end
|
149
147
|
|
150
148
|
model
|
@@ -152,13 +150,15 @@ module Acfs::Model
|
|
152
150
|
|
153
151
|
def find_multiple(ids, opts, &block)
|
154
152
|
::Acfs::Collection.new.tap do |collection|
|
153
|
+
collection.__callbacks__ << block unless block.nil?
|
154
|
+
|
155
155
|
counter = 0
|
156
156
|
ids.each do |id|
|
157
157
|
find_single id, opts do |resource|
|
158
158
|
collection << resource
|
159
159
|
if (counter += 1) == ids.size
|
160
160
|
collection.loaded!
|
161
|
-
|
161
|
+
collection.__invoke__
|
162
162
|
end
|
163
163
|
end
|
164
164
|
end
|
@@ -69,7 +69,7 @@ module Acfs
|
|
69
69
|
def find(*attrs, &block)
|
70
70
|
opts = { params: attrs.extract_options! }
|
71
71
|
|
72
|
-
model = ResourceDelegator.new self.new
|
72
|
+
model = Util::ResourceDelegator.new self.new
|
73
73
|
|
74
74
|
operation :read, opts do |data|
|
75
75
|
model.__setobj__ create_resource data, origin: model.__getobj__
|
data/lib/acfs/util.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Acfs
|
2
|
+
module Util
|
3
|
+
# TODO: Merge wit features in v1.0
|
4
|
+
module Callbacks
|
5
|
+
def __callbacks__
|
6
|
+
@__callbacks__ ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def __invoke__
|
10
|
+
__callbacks__.each{|c| c.call self}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# TODO: Replace delegator with promise or future for the long run.
|
15
|
+
class ResourceDelegator < SimpleDelegator
|
16
|
+
delegate :class, :is_a?, :kind_of?, :nil?, to: :__getobj__
|
17
|
+
include Callbacks
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -29,6 +29,23 @@ describe Acfs::Model::QueryMethods do
|
|
29
29
|
Acfs.run
|
30
30
|
end
|
31
31
|
|
32
|
+
it 'should invoke multiple callback after model is loaded' do
|
33
|
+
proc1 = Proc.new { }
|
34
|
+
proc2 = Proc.new { }
|
35
|
+
expect(proc1).to receive(:call) do |user|
|
36
|
+
expect(user).to equal @user
|
37
|
+
expect(user).to be_loaded
|
38
|
+
end
|
39
|
+
expect(proc2).to receive(:call) do |user|
|
40
|
+
expect(user).to equal @user
|
41
|
+
expect(user).to be_loaded
|
42
|
+
end
|
43
|
+
|
44
|
+
@user = model.find 1, &proc1
|
45
|
+
Acfs.add_callback(@user, &proc2)
|
46
|
+
Acfs.run
|
47
|
+
end
|
48
|
+
|
32
49
|
context 'with resource type inheritance' do
|
33
50
|
let!(:user) { MyUser.find 2 }
|
34
51
|
subject { user }
|
@@ -104,6 +121,25 @@ describe Acfs::Model::QueryMethods do
|
|
104
121
|
Acfs.run
|
105
122
|
end
|
106
123
|
|
124
|
+
it 'should invoke multiple callback after all models are loaded' do
|
125
|
+
proc1 = Proc.new { }
|
126
|
+
proc2 = Proc.new { }
|
127
|
+
expect(proc1).to receive(:call) do |users|
|
128
|
+
expect(users).to be === @users
|
129
|
+
expect(users.size).to be == 2
|
130
|
+
expect(users).to be_loaded
|
131
|
+
end
|
132
|
+
expect(proc2).to receive(:call) do |users|
|
133
|
+
expect(users).to be === @users
|
134
|
+
expect(users.size).to be == 2
|
135
|
+
expect(users).to be_loaded
|
136
|
+
end
|
137
|
+
|
138
|
+
@users = model.find 1, 2, &proc1
|
139
|
+
Acfs.add_callback(@users, &proc2)
|
140
|
+
Acfs.run
|
141
|
+
end
|
142
|
+
|
107
143
|
it 'should respect resource type inheritance' do
|
108
144
|
customers = MyUser.find 3, 4
|
109
145
|
Acfs.run
|
@@ -220,6 +256,27 @@ describe Acfs::Model::QueryMethods do
|
|
220
256
|
Acfs.run
|
221
257
|
end
|
222
258
|
|
259
|
+
it 'should invoke multiple callbacks after model is loaded' do
|
260
|
+
proc1 = Proc.new { }
|
261
|
+
proc2 = Proc.new { }
|
262
|
+
|
263
|
+
expect(proc1).to receive(:call) do |user|
|
264
|
+
expect(user).to eql @user.__getobj__
|
265
|
+
expect(user).to be_a MyUser
|
266
|
+
expect(user).to be_loaded
|
267
|
+
end
|
268
|
+
|
269
|
+
expect(proc2).to receive(:call) do |user|
|
270
|
+
expect(user).to eql @user.__getobj__
|
271
|
+
expect(user).to be_a MyUser
|
272
|
+
expect(user).to be_loaded
|
273
|
+
end
|
274
|
+
|
275
|
+
@user = model.send described_method, age: 24, &proc1
|
276
|
+
Acfs.add_callback @user, &proc2
|
277
|
+
Acfs.run
|
278
|
+
end
|
279
|
+
|
223
280
|
it 'should load a single MyUser object' do
|
224
281
|
expect(subject).to be_a MyUser
|
225
282
|
end
|
@@ -260,6 +317,24 @@ describe Acfs::Model::QueryMethods do
|
|
260
317
|
@user = model.find_by age: 24, &proc
|
261
318
|
Acfs.run
|
262
319
|
end
|
320
|
+
|
321
|
+
it 'should invoke multiple callbacks after model is loaded' do
|
322
|
+
proc1 = Proc.new { }
|
323
|
+
proc2 = Proc.new { }
|
324
|
+
|
325
|
+
expect(proc1).to receive(:call) do |user|
|
326
|
+
expect(user).to eql @user.__getobj__
|
327
|
+
expect(user).to be_a NilClass
|
328
|
+
end
|
329
|
+
expect(proc2).to receive(:call) do |user|
|
330
|
+
expect(user).to eql @user.__getobj__
|
331
|
+
expect(user).to be_a NilClass
|
332
|
+
end
|
333
|
+
|
334
|
+
@user = model.find_by age: 24, &proc1
|
335
|
+
Acfs.add_callback @user, &proc2
|
336
|
+
Acfs.run
|
337
|
+
end
|
263
338
|
end
|
264
339
|
end
|
265
340
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.29.1.1.
|
4
|
+
version: 0.29.1.1.b259
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -165,6 +165,7 @@ files:
|
|
165
165
|
- lib/acfs/service/middleware.rb
|
166
166
|
- lib/acfs/singleton_resource.rb
|
167
167
|
- lib/acfs/stub.rb
|
168
|
+
- lib/acfs/util.rb
|
168
169
|
- lib/acfs/version.rb
|
169
170
|
- lib/acfs/yard.rb
|
170
171
|
- spec/acfs/configuration_spec.rb
|