acfs 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +5 -0
  4. data/CHANGELOG.md +5 -0
  5. data/Gemfile +13 -5
  6. data/Guardfile +6 -16
  7. data/README.md +43 -3
  8. data/Rakefile +11 -1
  9. data/acfs.gemspec +7 -6
  10. data/gemfiles/Gemfile.rails-3-0 +8 -0
  11. data/gemfiles/Gemfile.rails-3-1 +8 -0
  12. data/lib/acfs.rb +7 -0
  13. data/lib/acfs/configuration.rb +52 -1
  14. data/lib/acfs/global.rb +14 -0
  15. data/lib/acfs/messaging/client.rb +39 -0
  16. data/lib/acfs/messaging/message.rb +7 -0
  17. data/lib/acfs/messaging/receiver.rb +119 -0
  18. data/lib/acfs/model.rb +3 -0
  19. data/lib/acfs/model/attributes.rb +97 -12
  20. data/lib/acfs/model/attributes/boolean.rb +11 -1
  21. data/lib/acfs/model/attributes/integer.rb +11 -1
  22. data/lib/acfs/model/attributes/string.rb +11 -1
  23. data/lib/acfs/model/dirty.rb +14 -4
  24. data/lib/acfs/model/initialization.rb +7 -2
  25. data/lib/acfs/model/loadable.rb +16 -0
  26. data/lib/acfs/model/locatable.rb +25 -4
  27. data/lib/acfs/model/operational.rb +4 -0
  28. data/lib/acfs/model/persistence.rb +73 -14
  29. data/lib/acfs/model/query_methods.rb +44 -7
  30. data/lib/acfs/model/service.rb +23 -11
  31. data/lib/acfs/operation.rb +2 -0
  32. data/lib/acfs/runner.rb +3 -0
  33. data/lib/acfs/service.rb +38 -5
  34. data/lib/acfs/service/middleware.rb +23 -5
  35. data/lib/acfs/version.rb +1 -1
  36. data/lib/acfs/yard.rb +5 -0
  37. data/rubydoc.png +0 -0
  38. data/spec/acfs/configuration_spec.rb +0 -1
  39. data/spec/acfs/messaging/receiver_spec.rb +55 -0
  40. data/spec/acfs/model/attributes_spec.rb +4 -4
  41. data/spec/acfs/stub_spec.rb +1 -1
  42. data/spec/acfs_messaging_spec.rb +5 -0
  43. data/spec/spec_helper.rb +1 -1
  44. data/spec/support/service.rb +12 -1
  45. metadata +35 -9
@@ -8,18 +8,28 @@ module Acfs
8
8
  module Middleware
9
9
  extend ActiveSupport::Concern
10
10
 
11
- def prepare(request) # :nodoc:
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
- # class MyService < Acfs::Service
20
- # self.base_url = 'http://my.srv'
21
- # use Acfs::Middleware::JsonDecoder
22
- # end
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 = []
@@ -1,7 +1,7 @@
1
1
  module Acfs
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 16
4
+ MINOR = 17
5
5
  PATCH = 0
6
6
  STAGE = nil
7
7
 
@@ -0,0 +1,5 @@
1
+ # YARD macros
2
+
3
+ # @!macro [new] experimental
4
+ # @api experimental
5
+ # @note This class or method is *experimental*. It may change without further notice or major version bump.
Binary file
@@ -7,7 +7,6 @@ describe Acfs::Configuration do
7
7
  after { Acfs::Configuration.set @configuration }
8
8
 
9
9
  describe 'Acfs.configure' do
10
-
11
10
  it 'should invoke configure on current configuration' do
12
11
  Acfs::Configuration.current.should_receive(:configure).once.and_call_original
13
12
 
@@ -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
@@ -87,7 +87,7 @@ describe Acfs::Stub do
87
87
  Acfs::Stub.allow_requests = false
88
88
  end
89
89
 
90
- it 'should allow real requests' do
90
+ it 'should not allow real requests' do
91
91
  @user = MyUser.find 2
92
92
  expect { Acfs.run }.to raise_error(Acfs::RealRequestsNotAllowedError)
93
93
  end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Acfs messaging' do
4
+
5
+ end
@@ -1,9 +1,9 @@
1
- require 'acfs'
2
1
  require 'coveralls'
3
2
  Coveralls.wear! do
4
3
  add_filter 'spec'
5
4
  end
6
5
 
6
+ require 'acfs'
7
7
  require 'webmock/rspec'
8
8
 
9
9
  Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f}
@@ -1,7 +1,7 @@
1
1
 
2
2
  Acfs.configure do
3
3
  locate :user_service, 'http://users.example.org'
4
- locate :comment_service, 'http://comments.example.org'
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.16.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 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: