fiber_store 0.0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c7bf243d9c045780ad98af177c0e9ac8f41c2360bdb615cc82601730cdf8c7ae
4
+ data.tar.gz: 02d1df24640d811170b6da48e81c4ac156262dfa462ab7a64d41bea427ff1938
5
+ SHA512:
6
+ metadata.gz: de1a8f55139ae2518afef0eaa5f85c94759c50083de383a2e1d98985e78adab839096c57c1c7d2f0dfc3ed03cd0fae1fad5cb5c068d33f1547c501703d8e64f5
7
+ data.tar.gz: 937111d5cfe4397adaf56fabbc0aaed61fad388dfbf430e5ae4a5227dfae0efd8ff9257e82cea1b44afa20443bfc7c3cfe027ef01026a37896bc5ac8d95e04bf
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack/body_proxy'
4
+
5
+ module FiberStore
6
+ class Middleware
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ returned = false
13
+ status, headers, body = @app.call(env)
14
+
15
+ body =
16
+ Rack::BodyProxy.new(body) do
17
+ FiberStore.clear!
18
+ end
19
+
20
+ returned = true
21
+
22
+ [status, headers, body]
23
+ ensure
24
+ FiberStore.clear! unless returned
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FiberStore
4
+ class Railtie < ::Rails::Railtie
5
+ initializer 'fiber_store.insert_middleware' do |app|
6
+ insert_after =
7
+ if ActionDispatch.const_defined? :RequestId
8
+ ActionDispatch::RequestId
9
+ else
10
+ Rack::MethodOverride
11
+ end
12
+
13
+ app.config.middleware.insert_after insert_after, FiberStore::Middleware
14
+
15
+ if ActiveSupport.const_defined?(:Reloader) && ActiveSupport::Reloader.respond_to?(:to_complete)
16
+ ActiveSupport::Reloader.to_complete { FiberStore.clear! }
17
+ elsif ActionDispatch.const_defined?(:Reloader) && ActionDispatch::Reloader.respond_to?(:to_cleanup)
18
+ ActionDispatch::Reloader.to_cleanup { FiberStore.clear! }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FiberStore
4
+ VERSION = '0.0.3'
5
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fiber_store/version'
4
+ require 'fiber_store/middleware'
5
+ require 'fiber_store/railtie' if defined?(Rails::Railtie)
6
+
7
+ module FiberStore
8
+ class << self
9
+ def store
10
+ Fiber[:fiber_store] ||= {}
11
+ end
12
+
13
+ def [](key)
14
+ store[key]
15
+ end
16
+
17
+ def fetch(key, default = :__undefined__)
18
+ warn 'warning: block supersedes default value argument' if block_given? && default != :__undefined__
19
+
20
+ return store[key] if store[key]
21
+ return yield if block_given?
22
+ return default unless default == :__undefined__
23
+
24
+ raise KeyError, "key not found: #{key.inspect}"
25
+ end
26
+
27
+ def []=(key, value)
28
+ store[key] = value
29
+ end
30
+
31
+ def clear!
32
+ Fiber[:fiber_store] = {}
33
+ end
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fiber_store
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Viacheslav Alekseev
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rspec
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rack
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ description: Per-request fiber-based storage for Rack
41
+ email: alexeev.corp@gmail.com
42
+ executables: []
43
+ extensions: []
44
+ extra_rdoc_files: []
45
+ files:
46
+ - lib/fiber_store.rb
47
+ - lib/fiber_store/middleware.rb
48
+ - lib/fiber_store/railtie.rb
49
+ - lib/fiber_store/version.rb
50
+ homepage: https://rubygems.org/gems/fiber_store
51
+ licenses:
52
+ - MIT
53
+ metadata: {}
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '3.2'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubygems_version: 3.6.9
69
+ specification_version: 4
70
+ summary: Per-request fiber-based storage for Rack
71
+ test_files: []