acfs 0.44.0 → 0.45.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6d7af15fe21ff66b382cb23061cfa56cbba0ed5
4
- data.tar.gz: 3e037d00c80edce80f8578570a526467c54ac943
3
+ metadata.gz: 94d04da7b680edf457505737b4bcc1d18d6e3fb3
4
+ data.tar.gz: 629b89356e8be9625b20722ca89bfe88ff3d5bc9
5
5
  SHA512:
6
- metadata.gz: 00e78fa5cad1bfc7eff302b05ce92d7bd798cd581a132ed293e28fe47254b54fa2da3095862eb51c42250e81c04aa84bc91e5ad8cbf02e92a196eb34797bd840
7
- data.tar.gz: c690ff3a89317f7a0c488a4752f5d4756bd186cef50306b7bfceff3c07f4b9ca5f4904255aa5ff2ffeecba0783b6d48ad31adae39f595f0a04f740a6cce9f066
6
+ metadata.gz: 7afc2b923b468780cd3dabd0d6ff592e829b2b158d3b96469513ca324e2644a6e4d30f48408efb0ef48bc53e35595b963b8700131d8a8a81933eb4bef8f324b1
7
+ data.tar.gz: 45349a36fa4c76f564f95897102e74e4a934b9ddee69cb785868a9b75a2fd652b4ada7687d4c974a856a65b1dfb18caf372eaa963211851edf75edbc8a1a40d1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.45.0
4
+
5
+ * Fetching multiple records (`find(ary)`) is stable now, but untested (#38)
6
+ * Middleware stack is build on ActionDispatch::MiddlewareStack now
7
+ * Deprecate legacy middleware names (xyEncoder, xyDecoder)
8
+
3
9
  ## 0.44.0
4
10
 
5
11
  * Add option to configure adapter creation and pass option to typhoeus adapter e.g.
data/acfs.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_runtime_dependency 'multi_json'
25
25
 
26
26
  # Bundle update w/o version resolves to 0.3.3 ...
27
- spec.add_runtime_dependency 'typhoeus', '>= 0.6.5'
27
+ spec.add_runtime_dependency 'typhoeus', '~> 1.0'
28
28
 
29
29
  spec.add_runtime_dependency 'rack'
30
30
 
@@ -18,7 +18,10 @@ module Acfs
18
18
  end
19
19
  end
20
20
 
21
+ # @deprecated
21
22
  JsonDecoder = JSON
23
+
24
+ # @deprecated
22
25
  JsonEncoder = JSON
23
26
  end
24
27
  end
@@ -21,7 +21,10 @@ module Acfs
21
21
  end
22
22
  end
23
23
 
24
+ # @deprecated
24
25
  MessagePackEncoder = MessagePack
26
+
27
+ # @deprecated
25
28
  MessagePackDecoder = MessagePack
26
29
  end
27
30
  end
@@ -223,9 +223,9 @@ class Acfs::Resource
223
223
  collection.__callbacks__ << block unless block.nil?
224
224
 
225
225
  counter = 0
226
- ids.each do |id|
226
+ ids.each_with_index do |id, index|
227
227
  find_single id, opts do |resource|
228
- collection << resource
228
+ collection[index] = resource
229
229
  if (counter += 1) == ids.size
230
230
  collection.loaded!
231
231
  collection.__invoke__
@@ -1,3 +1,5 @@
1
+ require 'acfs/service/middleware/stack'
2
+
1
3
  module Acfs
2
4
  class Service
3
5
  # Module providing all function to register middlewares
@@ -15,27 +17,25 @@ module Acfs
15
17
  end
16
18
 
17
19
  module ClassMethods
18
- # @api public
20
+ # @!method use(klass, *args, &block)
21
+ # @api public
19
22
  #
20
- # Register a new middleware to be used for this service.
23
+ # Register a new middleware to be used for this service.
21
24
  #
22
- # @example
23
- # class MyService < Acfs::Service
24
- # self.base_url = 'http://my.srv'
25
- # use Acfs::Middleware::JsonDecoder
26
- # end
25
+ # @example
26
+ # class MyService < Acfs::Service
27
+ # self.base_url = 'http://my.srv'
28
+ # use Acfs::Middleware::JSON
29
+ # end
27
30
  #
28
- # @param [Class] klass Middleware class to instantiate and append to middleware stack.
29
- # @param [Hash, Object] options Options to delegate to middleware class initializer.
30
- # @return [undefined]
31
+ # @param [Class] klass Middleware class to append
32
+ # @param [Array<Object>] args Arguments passed to klass initialize
33
+ # @param [Proc] block Block passed to klass initialize
34
+ # @return [undefined]
31
35
  #
32
- def use(klass, options = {})
33
- @middlewares ||= []
34
-
35
- return false if @middlewares.include? klass
36
-
37
- @middlewares << klass
38
- @middleware = klass.new(middleware, options)
36
+ def use(klass, *args, &block)
37
+ # Backward compatible behavior
38
+ middleware.insert(0, klass, *args, &block)
39
39
  end
40
40
 
41
41
  # @api private
@@ -45,19 +45,11 @@ module Acfs
45
45
  # @return [#call]
46
46
  #
47
47
  def middleware
48
- @middleware ||= proc {|request| request }
48
+ @middleware ||= Stack.new
49
49
  end
50
50
 
51
- # @api public
52
- #
53
- # Clear all registered middlewares.
54
- #
55
- # @return [undefined]
56
- #
57
- def clear
58
- @middleware = nil
59
- @middlewares = []
60
- end
51
+ # @deprecated
52
+ delegate :clear, to: :middleware
61
53
  end
62
54
  end
63
55
  end
@@ -0,0 +1,34 @@
1
+ require 'action_dispatch/middleware/stack'
2
+
3
+ module Acfs
4
+ class Service
5
+ module Middleware
6
+ class Stack < ActionDispatch::MiddlewareStack
7
+ MUTEX = Mutex.new
8
+ IDENTITY = -> (i) { i }
9
+
10
+ def build!
11
+ MUTEX.synchronize do
12
+ return if @stack
13
+
14
+ @stack = build
15
+ end
16
+ end
17
+
18
+ def build(app = IDENTITY)
19
+ super
20
+ end
21
+
22
+ def call(request)
23
+ build! unless @stack
24
+
25
+ @stack.call request
26
+ end
27
+
28
+ def clear
29
+ middlewares.clear
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/acfs/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Acfs
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 44
4
+ MINOR = 45
5
5
  PATCH = 0
6
6
  STAGE = nil
7
7
 
@@ -12,12 +12,6 @@ describe Acfs::Middleware::JSON do
12
12
  decoder.call request
13
13
  end
14
14
 
15
- context 'API compatibility' do
16
- subject { Acfs::Middleware::JSON }
17
- it { is_expected.to eql Acfs::Middleware::JsonDecoder }
18
- it { is_expected.to eql Acfs::Middleware::JsonEncoder }
19
- end
20
-
21
15
  describe 'encode' do
22
16
  context 'with not serialized request' do
23
17
  it 'should set Content-Type' do
@@ -12,12 +12,6 @@ describe Acfs::Middleware::MessagePack do
12
12
  decoder.call request
13
13
  end
14
14
 
15
- context 'API compatibility' do
16
- subject { Acfs::Middleware::MessagePack }
17
- it { is_expected.to eql Acfs::Middleware::MessagePackDecoder }
18
- it { is_expected.to eql Acfs::Middleware::MessagePackEncoder }
19
- end
20
-
21
15
  describe 'encode' do
22
16
  context 'with not serialized request' do
23
17
  it 'should set Content-Type' do
@@ -6,7 +6,6 @@ end
6
6
  describe Acfs::Service::Middleware do
7
7
  let(:srv_class) { Class.new(Acfs::Service) }
8
8
  let(:options) { {} }
9
- let(:service) { srv_class.new options }
10
9
  let(:middleware) { TestMiddleware }
11
10
 
12
11
  describe '.use' do
@@ -15,35 +14,20 @@ describe Acfs::Service::Middleware do
15
14
  it 'should add middleware to list' do
16
15
  srv_class.use middleware
17
16
 
18
- expect(srv_class.instance_variable_get(:@middlewares)).to include(middleware)
17
+ expect(srv_class.middleware).to include(middleware)
19
18
  end
20
19
 
21
20
  it 'should add middleware to stack' do
22
21
  srv_class.use middleware
23
22
 
24
- expect(srv_class.middleware).to be_a(middleware)
23
+ expect(srv_class.middleware.build(1)).to be_a(middleware)
25
24
  end
26
25
 
27
26
  it 'should instantiate middleware object' do
28
27
  expect(middleware).to receive(:new).with(anything, options)
29
28
 
30
29
  srv_class.use middleware, options
31
- end
32
- end
33
-
34
- describe '.clear' do
35
- before { srv_class.use middleware }
36
-
37
- it 'should clear middleware list' do
38
- srv_class.clear
39
-
40
- expect(srv_class.instance_variable_get(:@middlewares)).to be_empty
41
- end
42
-
43
- it 'should reset middleware stack' do
44
- srv_class.clear
45
-
46
- expect(srv_class.instance_variable_get(:@middleware)).to be_nil
30
+ srv_class.middleware.build
47
31
  end
48
32
  end
49
33
  end
data/spec/spec_helper.rb CHANGED
@@ -12,6 +12,7 @@ require 'bundler'
12
12
  Bundler.require
13
13
 
14
14
  require 'acfs'
15
+ require 'webmock/rspec'
15
16
 
16
17
  Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f }
17
18
 
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.44.0
4
+ version: 0.45.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: 2016-04-24 00:00:00.000000000 Z
11
+ date: 2016-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: typhoeus
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.6.5
75
+ version: '1.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.6.5
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rack
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +164,7 @@ files:
164
164
  - lib/acfs/runner.rb
165
165
  - lib/acfs/service.rb
166
166
  - lib/acfs/service/middleware.rb
167
+ - lib/acfs/service/middleware/stack.rb
167
168
  - lib/acfs/singleton_resource.rb
168
169
  - lib/acfs/stub.rb
169
170
  - lib/acfs/util.rb