acfs 0.29.1.1.b257 → 0.29.1.1.b259

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Yzg2OTZhYjY2MTUyY2FkZWIzYWY0ODI1MjI3YjJmM2YzODQ1ZWJmYg==
4
+ OWVkNzczZWRjZWMxNzJlZmQ2YjJjYjQ2ZTQ4ODhjOTA1MDc1M2Y5YQ==
5
5
  data.tar.gz: !binary |-
6
- YTQxOWE5YzgzOTA4Nzk1OTk4NzEyYWQwZDdjZGE5MTU2ZjcyNTMzNA==
6
+ YjJkYTUyZTMwMWRlMDUwYjQ2OTM5YzdiMDZjYWNhZDgyOTRlMGQ0OQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YmM4MGFjYWQwODlkZWI3OTE0Nzc1MWRlY2ZhOTZkZGRjMzIwYzU3ZTcwMGI5
10
- ODljYTlkZTdkODlkMWY4MjI0ZmEwM2I1OWM2NjY3MjdhN2JlYzQyMWY1MDJk
11
- NzI5Zjc0NWQwNGQ5YzAxN2YwMGQ0ZTkxMTkxZDBiYjFjMDQxM2U=
9
+ NTJmMWVjYjA4MTU0YjllOTBiMGUxZDc5N2JmOGJjYjY1ZTdjZmFjOGI5OWMw
10
+ ZDY2NGUxMGZhMGMwZTQzNzIzNGM1ZWM5MmMxMzQ0ZjZmZTM0YzQ4YmI4OWEx
11
+ OTEwOWMwMmFhYTA5NTcyNmI2N2MwZjU4OTk4NGM5NTQ2MTk0M2E=
12
12
  data.tar.gz: !binary |-
13
- ZjMwYzFlZjA3MjhkNTBjZjljNjk5NjAxZTFhM2MzODlmOTU5YTQ2MTQyMmRm
14
- ZGYwNzY5NWE3NzZmMjNiOTE0ODg3ZjNhOGFjYjhhNThmMWNjMGY5YjY5Nzk4
15
- YjVjZGFmZGE5ZmM1YTI5MjhlNDE3OTdjOTNiZjAyNDc3MjMyZDE=
13
+ ZDYxNGJlMDE2ODhlOWY1NWMxNDJkMTg5YjcwM2UyMzlmM2IwMWVlYWI2Y2Rh
14
+ ZTAyNDY2NzYxNzdhNDZlNzg3NDg2ODVhY2E1ZmY1ODQyNzU4MmIwNWYxZmE5
15
+ MWFlOWYwNGU1ZThhNGE4MDRhZmNmOWQxNDZlZGI0NjM3MmVkZTA=
@@ -9,6 +9,7 @@ module Acfs
9
9
  require 'acfs/version'
10
10
  require 'acfs/errors'
11
11
  require 'acfs/global'
12
+ require 'acfs/util'
12
13
 
13
14
  require 'acfs/collection'
14
15
  require 'acfs/configuration'
@@ -6,6 +6,7 @@ module Acfs
6
6
 
7
7
  class Collection < ::Delegator
8
8
  include Model::Loadable
9
+ include Acfs::Util::Callbacks
9
10
 
10
11
  def initialize
11
12
  super([])
@@ -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
- unless data.empty?
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
- block.call model unless block.nil?
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
- block.call model unless block.nil?
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
- block.call collection unless block.nil?
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__
@@ -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.b257
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-06 00:00:00.000000000 Z
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