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.
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: