acfs 0.44.0 → 0.45.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 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