view_component_reflex 3.1.10 → 3.1.11

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.
@@ -1,61 +1,61 @@
1
- module ViewComponentReflex
2
- class ReflexFactory
3
- def initialize(component)
4
- @component = component
5
- @new = false
6
- reflex.component_class = component
7
- end
8
-
9
- def nested?
10
- @nested ||= @component.name.include?("::")
11
- end
12
-
13
- def reflex_name
14
- @reflex_name ||= if nested?
15
- @component.name.split("::").last
16
- else
17
- @component.name
18
- end + "Reflex"
19
- end
20
-
21
- def new?
22
- @new
23
- end
24
-
25
- def reflex
26
- @reflex ||= if nested?
27
- reflex_from_nested_component
28
- else
29
- reflex_from_component
30
- end
31
- end
32
-
33
- def reflex_instance
34
- @reflex_instance ||= Class.new(@component.reflex_base_class)
35
- end
36
-
37
- def reflex_from_nested_component
38
- parent = if @component.respond_to? :module_parent
39
- @component.module_parent
40
- else
41
- @component.parent
42
- end
43
-
44
- if parent.const_defined?(reflex_name)
45
- parent.const_get(reflex_name)
46
- else
47
- @new = true
48
- parent.const_set(reflex_name, reflex_instance)
49
- end
50
- end
51
-
52
- def reflex_from_component
53
- if Object.const_defined?(reflex_name)
54
- Object.const_get(reflex_name)
55
- else
56
- @new = true
57
- Object.const_set(reflex_name, reflex_instance)
58
- end
59
- end
60
- end
61
- end
1
+ module ViewComponentReflex
2
+ class ReflexFactory
3
+ def initialize(component)
4
+ @component = component
5
+ @new = false
6
+ reflex.component_class = component
7
+ end
8
+
9
+ def nested?
10
+ @nested ||= @component.name.include?("::")
11
+ end
12
+
13
+ def reflex_name
14
+ @reflex_name ||= if nested?
15
+ @component.name.split("::").last
16
+ else
17
+ @component.name
18
+ end + "Reflex"
19
+ end
20
+
21
+ def new?
22
+ @new
23
+ end
24
+
25
+ def reflex
26
+ @reflex ||= if nested?
27
+ reflex_from_nested_component
28
+ else
29
+ reflex_from_component
30
+ end
31
+ end
32
+
33
+ def reflex_instance
34
+ @reflex_instance ||= Class.new(@component.reflex_base_class)
35
+ end
36
+
37
+ def reflex_from_nested_component
38
+ parent = if @component.respond_to? :module_parent
39
+ @component.module_parent
40
+ else
41
+ @component.parent
42
+ end
43
+
44
+ if parent.const_defined?(reflex_name)
45
+ parent.const_get(reflex_name)
46
+ else
47
+ @new = true
48
+ parent.const_set(reflex_name, reflex_instance)
49
+ end
50
+ end
51
+
52
+ def reflex_from_component
53
+ if Object.const_defined?(reflex_name)
54
+ Object.const_get(reflex_name)
55
+ else
56
+ @new = true
57
+ Object.const_set(reflex_name, reflex_instance)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,18 +1,18 @@
1
- module ViewComponentReflex
2
- module StateAdapter
3
- class Base
4
-
5
- private
6
-
7
- def self.extract_id(request)
8
- session = request&.session
9
- if session.respond_to? :id
10
- session.id.to_s
11
- else
12
- nil
13
- end
14
- end
15
-
16
- end
17
- end
18
- end
1
+ module ViewComponentReflex
2
+ module StateAdapter
3
+ class Base
4
+
5
+ private
6
+
7
+ def self.extract_id(request)
8
+ session = request&.session
9
+ if session.respond_to? :id
10
+ session.id.to_s
11
+ else
12
+ nil
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -1,33 +1,33 @@
1
- VIEW_COMPONENT_REFLEX_MEMORY_STATE = {}
2
- module ViewComponentReflex
3
- module StateAdapter
4
- class Memory < Base
5
- def self.state(request, key)
6
- id = extract_id(request)
7
-
8
- VIEW_COMPONENT_REFLEX_MEMORY_STATE[id] ||= {}
9
- VIEW_COMPONENT_REFLEX_MEMORY_STATE[id][key] ||= {}
10
- end
11
-
12
- def self.set_state(request, _, key, new_state)
13
- new_state.each do |k, v|
14
- state(request, key)[k] = v
15
- end
16
- end
17
-
18
- def self.store_state(request, key, new_state = {})
19
- id = extract_id(request)
20
-
21
- VIEW_COMPONENT_REFLEX_MEMORY_STATE[id] ||= {}
22
- VIEW_COMPONENT_REFLEX_MEMORY_STATE[id][key] = {}
23
- new_state.each do |k, v|
24
- VIEW_COMPONENT_REFLEX_MEMORY_STATE[id][key][k] = v
25
- end
26
- end
27
-
28
- def self.wrap_write_async
29
- yield
30
- end
31
- end
32
- end
33
- end
1
+ VIEW_COMPONENT_REFLEX_MEMORY_STATE = {}
2
+ module ViewComponentReflex
3
+ module StateAdapter
4
+ class Memory < Base
5
+ def self.state(request, key)
6
+ id = extract_id(request)
7
+
8
+ VIEW_COMPONENT_REFLEX_MEMORY_STATE[id] ||= {}
9
+ VIEW_COMPONENT_REFLEX_MEMORY_STATE[id][key] ||= {}
10
+ end
11
+
12
+ def self.set_state(request, _, key, new_state)
13
+ new_state.each do |k, v|
14
+ state(request, key)[k] = v
15
+ end
16
+ end
17
+
18
+ def self.store_state(request, key, new_state = {})
19
+ id = extract_id(request)
20
+
21
+ VIEW_COMPONENT_REFLEX_MEMORY_STATE[id] ||= {}
22
+ VIEW_COMPONENT_REFLEX_MEMORY_STATE[id][key] = {}
23
+ new_state.each do |k, v|
24
+ VIEW_COMPONENT_REFLEX_MEMORY_STATE[id][key][k] = v
25
+ end
26
+ end
27
+
28
+ def self.wrap_write_async
29
+ yield
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,75 +1,75 @@
1
- # A redis based adapter for component_reflex
2
- #
3
- # ViewComponentReflex::Engine.configure do |config|
4
- # config.state_adapter = ViewComponentReflex::StateAdapter::Redis.new(
5
- # redis_opts: {
6
- # url: "redis://localhost:6379/1", driver: :hiredis
7
- # },
8
- # ttl: 3600)
9
- # end
10
-
11
- module ViewComponentReflex
12
- module StateAdapter
13
- class Redis < Base
14
- attr_reader :client, :ttl
15
-
16
- def initialize(redis_opts:, ttl: 3600)
17
- @client = ::Redis.new(redis_opts)
18
- @ttl = ttl
19
- end
20
-
21
- def state(request, key)
22
- cache_key = get_key(request, key)
23
- value = client.hgetall(cache_key)
24
-
25
- return {} if value.nil?
26
-
27
- value.map do |k, v|
28
- [k, Marshal.load(v)]
29
- end.to_h
30
- end
31
-
32
- def set_state(request, _, key, new_state)
33
- cache_key = get_key(request, key)
34
- save_to_redis(cache_key, new_state)
35
- end
36
-
37
- def store_state(request, key, new_state = {})
38
- cache_key = get_key(request, key)
39
- optimized_store_to_redis(cache_key, new_state, request)
40
- end
41
-
42
- def wrap_write_async
43
- client.pipelined do
44
- yield
45
- end
46
- end
47
-
48
- private
49
-
50
- # Reduce number of calls coming from #store_state to save Redis
51
- # when it's first rendered
52
- def optimized_store_to_redis(cache_key, new_state, request)
53
- request.env["CACHE_REDIS_REFLEX"] ||= []
54
- return if request.env["CACHE_REDIS_REFLEX"].include?(cache_key)
55
- request.env["CACHE_REDIS_REFLEX"].push(cache_key)
56
-
57
- save_to_redis(cache_key, new_state)
58
- end
59
-
60
- def save_to_redis(cache_key, new_state)
61
- new_state_json = new_state.map do |k, v|
62
- [k, Marshal.dump(v)]
63
- end
64
-
65
- client.hmset(cache_key, new_state_json.flatten)
66
- client.expire(cache_key, ttl)
67
- end
68
-
69
- def get_key(request, key)
70
- id = Redis.extract_id(request)
71
- "#{id}_#{key}_session_reflex_redis"
72
- end
73
- end
74
- end
75
- end
1
+ # A redis based adapter for component_reflex
2
+ #
3
+ # ViewComponentReflex::Engine.configure do |config|
4
+ # config.state_adapter = ViewComponentReflex::StateAdapter::Redis.new(
5
+ # redis_opts: {
6
+ # url: "redis://localhost:6379/1", driver: :hiredis
7
+ # },
8
+ # ttl: 3600)
9
+ # end
10
+
11
+ module ViewComponentReflex
12
+ module StateAdapter
13
+ class Redis < Base
14
+ attr_reader :client, :ttl
15
+
16
+ def initialize(redis_opts:, ttl: 3600)
17
+ @client = ::Redis.new(redis_opts)
18
+ @ttl = ttl
19
+ end
20
+
21
+ def state(request, key)
22
+ cache_key = get_key(request, key)
23
+ value = client.hgetall(cache_key)
24
+
25
+ return {} if value.nil?
26
+
27
+ value.map do |k, v|
28
+ [k, Marshal.load(v)]
29
+ end.to_h
30
+ end
31
+
32
+ def set_state(request, _, key, new_state)
33
+ cache_key = get_key(request, key)
34
+ save_to_redis(cache_key, new_state)
35
+ end
36
+
37
+ def store_state(request, key, new_state = {})
38
+ cache_key = get_key(request, key)
39
+ optimized_store_to_redis(cache_key, new_state, request)
40
+ end
41
+
42
+ def wrap_write_async
43
+ client.pipelined do
44
+ yield
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ # Reduce number of calls coming from #store_state to save Redis
51
+ # when it's first rendered
52
+ def optimized_store_to_redis(cache_key, new_state, request)
53
+ request.env["CACHE_REDIS_REFLEX"] ||= []
54
+ return if request.env["CACHE_REDIS_REFLEX"].include?(cache_key)
55
+ request.env["CACHE_REDIS_REFLEX"].push(cache_key)
56
+
57
+ save_to_redis(cache_key, new_state)
58
+ end
59
+
60
+ def save_to_redis(cache_key, new_state)
61
+ new_state_json = new_state.map do |k, v|
62
+ [k, Marshal.dump(v)]
63
+ end
64
+
65
+ client.hmset(cache_key, new_state_json.flatten)
66
+ client.expire(cache_key, ttl)
67
+ end
68
+
69
+ def get_key(request, key)
70
+ id = Redis.extract_id(request)
71
+ "#{id}_#{key}_session_reflex_redis"
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,30 +1,28 @@
1
- module ViewComponentReflex
2
- module StateAdapter
3
- class Session < Base
4
- def self.state(request, key)
5
- request.session[key] ||= {}
6
- end
7
-
8
- def self.set_state(request, controller, key, new_state)
9
- new_state.each do |k, v|
10
- state(request, key)[k] = v
11
- end
12
- p new_state
13
- store = request.session.instance_variable_get("@by")
14
- store.commit_session request, controller.response
15
- end
16
-
17
- def self.store_state(request, key, new_state = {})
18
- request.session[key] = {}
19
- new_state.each do |k, v|
20
- request.session[key][k] = v
21
- end
22
- p new_state
23
- end
24
-
25
- def self.wrap_write_async
26
- yield
27
- end
28
- end
29
- end
30
- end
1
+ module ViewComponentReflex
2
+ module StateAdapter
3
+ class Session < Base
4
+ def self.state(request, key)
5
+ request.session[key] ||= {}
6
+ end
7
+
8
+ def self.set_state(request, controller, key, new_state)
9
+ new_state.each do |k, v|
10
+ state(request, key)[k] = v
11
+ end
12
+ store = request.session.instance_variable_get("@by")
13
+ store.commit_session request, controller.response
14
+ end
15
+
16
+ def self.store_state(request, key, new_state = {})
17
+ request.session[key] = {}
18
+ new_state.each do |k, v|
19
+ request.session[key][k] = v
20
+ end
21
+ end
22
+
23
+ def self.wrap_write_async
24
+ yield
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
- module ViewComponentReflex
2
- VERSION = '3.1.10'
3
- end
1
+ module ViewComponentReflex
2
+ VERSION = '3.1.11'
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view_component_reflex
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.10
4
+ version: 3.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua LeBlanc
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-29 00:00:00.000000000 Z
11
+ date: 2021-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -97,7 +97,7 @@ licenses:
97
97
  - MIT
98
98
  metadata:
99
99
  allowed_push_host: https://rubygems.org
100
- post_install_message:
100
+ post_install_message:
101
101
  rdoc_options: []
102
102
  require_paths:
103
103
  - lib
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubygems_version: 3.1.4
116
- signing_key:
116
+ signing_key:
117
117
  specification_version: 4
118
118
  summary: Allow stimulus reflexes in a view component
119
119
  test_files: []