acfs 0.16.0 → 0.17.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/.gitignore +2 -1
- data/.travis.yml +5 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +13 -5
- data/Guardfile +6 -16
- data/README.md +43 -3
- data/Rakefile +11 -1
- data/acfs.gemspec +7 -6
- data/gemfiles/Gemfile.rails-3-0 +8 -0
- data/gemfiles/Gemfile.rails-3-1 +8 -0
- data/lib/acfs.rb +7 -0
- data/lib/acfs/configuration.rb +52 -1
- data/lib/acfs/global.rb +14 -0
- data/lib/acfs/messaging/client.rb +39 -0
- data/lib/acfs/messaging/message.rb +7 -0
- data/lib/acfs/messaging/receiver.rb +119 -0
- data/lib/acfs/model.rb +3 -0
- data/lib/acfs/model/attributes.rb +97 -12
- data/lib/acfs/model/attributes/boolean.rb +11 -1
- data/lib/acfs/model/attributes/integer.rb +11 -1
- data/lib/acfs/model/attributes/string.rb +11 -1
- data/lib/acfs/model/dirty.rb +14 -4
- data/lib/acfs/model/initialization.rb +7 -2
- data/lib/acfs/model/loadable.rb +16 -0
- data/lib/acfs/model/locatable.rb +25 -4
- data/lib/acfs/model/operational.rb +4 -0
- data/lib/acfs/model/persistence.rb +73 -14
- data/lib/acfs/model/query_methods.rb +44 -7
- data/lib/acfs/model/service.rb +23 -11
- data/lib/acfs/operation.rb +2 -0
- data/lib/acfs/runner.rb +3 -0
- data/lib/acfs/service.rb +38 -5
- data/lib/acfs/service/middleware.rb +23 -5
- data/lib/acfs/version.rb +1 -1
- data/lib/acfs/yard.rb +5 -0
- data/rubydoc.png +0 -0
- data/spec/acfs/configuration_spec.rb +0 -1
- data/spec/acfs/messaging/receiver_spec.rb +55 -0
- data/spec/acfs/model/attributes_spec.rb +4 -4
- data/spec/acfs/stub_spec.rb +1 -1
- data/spec/acfs_messaging_spec.rb +5 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/service.rb +12 -1
- metadata +35 -9
@@ -8,18 +8,28 @@ module Acfs
|
|
8
8
|
module Middleware
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
11
|
-
|
11
|
+
# @api private
|
12
|
+
# @return [Request]
|
13
|
+
#
|
14
|
+
def prepare(request)
|
12
15
|
self.class.middleware.call request
|
13
16
|
end
|
14
17
|
|
15
18
|
module ClassMethods
|
16
19
|
|
20
|
+
# @api public
|
21
|
+
#
|
17
22
|
# Register a new middleware to be used for this service.
|
18
23
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
24
|
+
# @example
|
25
|
+
# class MyService < Acfs::Service
|
26
|
+
# self.base_url = 'http://my.srv'
|
27
|
+
# use Acfs::Middleware::JsonDecoder
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# @param [Class] klass Middleware class to instantiate and append to middleware stack.
|
31
|
+
# @param [Hash, Object] options Options to delegate to middleware class initializer.
|
32
|
+
# @return [undefined]
|
23
33
|
#
|
24
34
|
def use(klass, options = {})
|
25
35
|
@middlewares ||= []
|
@@ -30,14 +40,22 @@ module Acfs
|
|
30
40
|
@middleware = klass.new(middleware, options)
|
31
41
|
end
|
32
42
|
|
43
|
+
# @api private
|
44
|
+
#
|
33
45
|
# Return top most middleware.
|
34
46
|
#
|
47
|
+
# @return [#call]
|
48
|
+
#
|
35
49
|
def middleware
|
36
50
|
@middleware ||= proc { |request| request}
|
37
51
|
end
|
38
52
|
|
53
|
+
# @api public
|
54
|
+
#
|
39
55
|
# Clear all registered middlewares.
|
40
56
|
#
|
57
|
+
# @return [undefined]
|
58
|
+
#
|
41
59
|
def clear
|
42
60
|
@middleware = nil
|
43
61
|
@middlewares = []
|
data/lib/acfs/version.rb
CHANGED
data/lib/acfs/yard.rb
ADDED
data/rubydoc.png
ADDED
Binary file
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module My
|
4
|
+
class CustomReceiver
|
5
|
+
include Acfs::Messaging::Receiver
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Acfs::Messaging::Receiver do
|
10
|
+
let(:rcv_class) { My::CustomReceiver }
|
11
|
+
after { rcv_class.queue nil }
|
12
|
+
|
13
|
+
describe '.queue' do
|
14
|
+
it 'should return queue name based on class name' do
|
15
|
+
expect(rcv_class.queue).to be == 'my.custom_receiver'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should set and return custom queue name' do
|
19
|
+
rcv_class.queue 'special.queue.name'
|
20
|
+
|
21
|
+
expect(rcv_class.queue).to be == 'special.queue.name'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '.receive' do
|
26
|
+
context 'with routed message' do
|
27
|
+
context 'with exact routing key match' do
|
28
|
+
it 'should receive messages' do
|
29
|
+
rcv_class.instance.should_receive(:receive).with(anything, anything, { message: 'Hello!'})
|
30
|
+
|
31
|
+
Acfs::Messaging::Client.instance.publish('my.custom_receiver', { message: 'Hello!' })
|
32
|
+
sleep 1 # Nothing better?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with partial routing key match' do
|
37
|
+
it 'should receive messages' do
|
38
|
+
rcv_class.instance.should_receive(:receive).with(anything, anything, { message: 'Hello!'})
|
39
|
+
|
40
|
+
Acfs::Messaging::Client.instance.publish('my.different', { message: 'Hello!' })
|
41
|
+
sleep 1 # Nothing better?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with not routed message' do
|
47
|
+
it 'should not receive messages' do
|
48
|
+
rcv_class.instance.should_not_receive(:receive)
|
49
|
+
|
50
|
+
Acfs::Messaging::Client.instance.publish('abc.cde', { message: 'Hello!' })
|
51
|
+
sleep 1 # Nothing better?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -119,25 +119,25 @@ describe Acfs::Model::Attributes do
|
|
119
119
|
it 'should add an attribute to model attribute list' do
|
120
120
|
model.send :attribute, :name, :string
|
121
121
|
|
122
|
-
expect(model.attributes).to be == { :name => nil }
|
122
|
+
expect(model.attributes).to be == { :name => nil }.stringify_keys
|
123
123
|
end
|
124
124
|
|
125
125
|
it 'should accept a default value' do
|
126
126
|
model.send :attribute, :name, :string, default: 'John'
|
127
127
|
|
128
|
-
expect(model.attributes).to be == { :name => 'John' }
|
128
|
+
expect(model.attributes).to be == { :name => 'John' }.stringify_keys
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'should accept an symbolic type' do
|
132
132
|
model.send :attribute, :age, :integer, default: '12'
|
133
133
|
|
134
|
-
expect(model.attributes).to be == { :age => 12 }
|
134
|
+
expect(model.attributes).to be == { :age => 12 }.stringify_keys
|
135
135
|
end
|
136
136
|
|
137
137
|
it 'should accept an class type' do
|
138
138
|
model.send :attribute, :age, Acfs::Model::Attributes::Integer, default: '12'
|
139
139
|
|
140
|
-
expect(model.attributes).to be == { :age => 12 }
|
140
|
+
expect(model.attributes).to be == { :age => 12 }.stringify_keys
|
141
141
|
end
|
142
142
|
end
|
143
143
|
end
|
data/spec/acfs/stub_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/support/service.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
Acfs.configure do
|
3
3
|
locate :user_service, 'http://users.example.org'
|
4
|
-
locate :
|
4
|
+
locate :comments, 'http://comments.example.org'
|
5
5
|
end
|
6
6
|
|
7
7
|
class UserService < Acfs::Service
|
@@ -11,6 +11,8 @@ class UserService < Acfs::Service
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class CommentService < Acfs::Service
|
14
|
+
identity :comments
|
15
|
+
|
14
16
|
use Acfs::Middleware::JsonDecoder
|
15
17
|
end
|
16
18
|
|
@@ -38,3 +40,12 @@ class Comment
|
|
38
40
|
attribute :id, :integer
|
39
41
|
attribute :text, :string
|
40
42
|
end
|
43
|
+
|
44
|
+
class UserMessageReceiver
|
45
|
+
include Acfs::Messaging::Receiver
|
46
|
+
route 'my.#'
|
47
|
+
|
48
|
+
def receive(delivery_info, metadata, payload)
|
49
|
+
puts "UserMessageReceiver received : #{payload.inspect}"
|
50
|
+
end
|
51
|
+
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.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '3.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: actionpack
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.1'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: multi_json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bunny
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.9.0.pre12
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.9.0.pre12
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rack
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,6 +139,8 @@ files:
|
|
125
139
|
- README.md
|
126
140
|
- Rakefile
|
127
141
|
- acfs.gemspec
|
142
|
+
- gemfiles/Gemfile.rails-3-0
|
143
|
+
- gemfiles/Gemfile.rails-3-1
|
128
144
|
- gemfiles/Gemfile.rails-3-2
|
129
145
|
- gemfiles/Gemfile.rails-4-0
|
130
146
|
- lib/acfs.rb
|
@@ -134,6 +150,9 @@ files:
|
|
134
150
|
- lib/acfs/configuration.rb
|
135
151
|
- lib/acfs/errors.rb
|
136
152
|
- lib/acfs/global.rb
|
153
|
+
- lib/acfs/messaging/client.rb
|
154
|
+
- lib/acfs/messaging/message.rb
|
155
|
+
- lib/acfs/messaging/receiver.rb
|
137
156
|
- lib/acfs/middleware/base.rb
|
138
157
|
- lib/acfs/middleware/json_decoder.rb
|
139
158
|
- lib/acfs/middleware/json_encoder.rb
|
@@ -166,7 +185,10 @@ files:
|
|
166
185
|
- lib/acfs/service/middleware.rb
|
167
186
|
- lib/acfs/stub.rb
|
168
187
|
- lib/acfs/version.rb
|
188
|
+
- lib/acfs/yard.rb
|
189
|
+
- rubydoc.png
|
169
190
|
- spec/acfs/configuration_spec.rb
|
191
|
+
- spec/acfs/messaging/receiver_spec.rb
|
170
192
|
- spec/acfs/middleware/json_decoder_spec.rb
|
171
193
|
- spec/acfs/middleware/msgpack_decoder_spec.rb
|
172
194
|
- spec/acfs/model/attributes_spec.rb
|
@@ -183,12 +205,13 @@ files:
|
|
183
205
|
- spec/acfs/service/middleware_spec.rb
|
184
206
|
- spec/acfs/service_spec.rb
|
185
207
|
- spec/acfs/stub_spec.rb
|
208
|
+
- spec/acfs_messaging_spec.rb
|
186
209
|
- spec/acfs_spec.rb
|
187
210
|
- spec/fixtures/config.yml
|
188
211
|
- spec/spec_helper.rb
|
189
212
|
- spec/support/response.rb
|
190
213
|
- spec/support/service.rb
|
191
|
-
homepage:
|
214
|
+
homepage: https://github.com/jgraichen/acfs
|
192
215
|
licenses:
|
193
216
|
- MIT
|
194
217
|
metadata: {}
|
@@ -214,6 +237,7 @@ specification_version: 4
|
|
214
237
|
summary: An abstract API base client for service oriented application.
|
215
238
|
test_files:
|
216
239
|
- spec/acfs/configuration_spec.rb
|
240
|
+
- spec/acfs/messaging/receiver_spec.rb
|
217
241
|
- spec/acfs/middleware/json_decoder_spec.rb
|
218
242
|
- spec/acfs/middleware/msgpack_decoder_spec.rb
|
219
243
|
- spec/acfs/model/attributes_spec.rb
|
@@ -230,8 +254,10 @@ test_files:
|
|
230
254
|
- spec/acfs/service/middleware_spec.rb
|
231
255
|
- spec/acfs/service_spec.rb
|
232
256
|
- spec/acfs/stub_spec.rb
|
257
|
+
- spec/acfs_messaging_spec.rb
|
233
258
|
- spec/acfs_spec.rb
|
234
259
|
- spec/fixtures/config.yml
|
235
260
|
- spec/spec_helper.rb
|
236
261
|
- spec/support/response.rb
|
237
262
|
- spec/support/service.rb
|
263
|
+
has_rdoc:
|