view_component_reflex 2.1.3 → 2.2.2

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
  SHA256:
3
- metadata.gz: f5ffbf1eef5f6b3a5d7d65f4d541dffb0d396125b23c4db8f768928a2e5d7477
4
- data.tar.gz: 67e7902d699879181cf2bfba948a93967eda19d355b85e785b61f41a3f89e0dc
3
+ metadata.gz: 884879671f11072c36d18205c1bb452c8b0ff9e2e50c6e57b70e1bfb602f1b87
4
+ data.tar.gz: dd3ac067aaa30fa45785b6abd1b609b7a09fadf9c11ca272d829271675750fb9
5
5
  SHA512:
6
- metadata.gz: 6912fa047d572bf7d666e5cb1f151164103709d93b473ab1a40642d2828b64807928fb064621ce1804a6144899483a98b5440f1d615eb7bf451e924d8e8f21ed
7
- data.tar.gz: 5f4c565c378d6caad49fd2f18064dc474535fbff28f64c8480354398cb23e9d164a45138424cf2dc70c983bb1cbd6b842a8fed57c83356e4be2a9e3c268ae7c3
6
+ metadata.gz: 6740d002a2fae276c4ff60433485461cb43a90ac4a6fdb2431fa757b326fc2f882f86b662d7b23ba735f65ca89d87a047ebdb5f7874f3db08826fe3cb880d39c
7
+ data.tar.gz: fc558e67327441ea6c1f813f7d005e57ce6b127221e4ab34835c78e1a7d6a0b2fd25e406de405ae615a6d204d691e8a94d669eb28df7bb64192e770bd88f06df
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ViewComponentReflex allows you to write reflexes right in your view component code.
4
4
 
5
+ It builds upon [stimulus_reflex](https://github.com/hopsoft/stimulus_reflex) and [view_component](https://github.com/github/view_component)
6
+
5
7
  ## Usage
6
8
 
7
9
  You can add reflexes to your component by adding inheriting from `ViewComponentReflex::Component`.
@@ -88,12 +90,30 @@ This shares the same definition as `content_tag`, except it accepts a reflex as
88
90
 
89
91
  Would add a click handler to the `increment` method on your component.
90
92
 
91
- To use a non-click event, specific that with `->` notiation
93
+ To use a non-click event, specific that with `->` notation
92
94
 
93
95
  ```erb
94
96
  <%= reflex_tag "mouseenter->increment", :button, "Click me!" %>
95
97
  ```
96
98
 
99
+ ### reflex_data_attributes(reflex)
100
+
101
+ This helper will give you the data attributes used in the reflex_tag above if you want to build your own elements.
102
+
103
+ Build your own tag:
104
+
105
+ ```erb
106
+ <%= link_to (image_tag photo.image.url(:medium)), data: reflex_data_attributes(:increment) %>
107
+ ```
108
+
109
+ Render a ViewComponent
110
+
111
+ ```erb
112
+ <%= render ButtonComponent.new(data: reflex_data_attributes("mouseenter->increment")) %>
113
+ ```
114
+
115
+ Make sure that you assign the reflex_data_attributes to the correct element in your component.
116
+
97
117
  ### collection_key
98
118
  If you're rendering a component as a collection with `MyComponent.with_collection(SomeCollection)`, you must define this method to return some unique value for the component.
99
119
  This is used to reconcile state in the background.
@@ -136,7 +156,7 @@ end
136
156
  Returns the unique selector for this component. Useful to pass to `refresh!` when refreshing custom elements.
137
157
 
138
158
  ### prevent_refresh!
139
- By default, VCR will re-render your component after it executes your method. `revent_refresh!` prevents this from happening.
159
+ By default, VCR will re-render your component after it executes your method. `prevent_refresh!` prevents this from happening.
140
160
 
141
161
  ```ruby
142
162
  def my_method
@@ -219,7 +239,7 @@ ViewComponentReflex uses session for its state by default. To change this, add
219
239
  an initializer to `config/initializers/view_component_reflex.rb`.
220
240
 
221
241
  ```ruby
222
- ViewComponentReflex.configure do |config|
242
+ ViewComponentReflex::Engine.configure do |config|
223
243
  config.state_adapter = YourAdapter
224
244
  end
225
245
  ```
@@ -279,9 +299,9 @@ Or install it yourself as:
279
299
  $ gem install view_component_reflex
280
300
  ```
281
301
 
282
- ## Common problems
302
+ # Common problems
283
303
 
284
- # Uninitialized constants \<component\>Reflex
304
+ ## Uninitialized constants \<component\>Reflex
285
305
  A component needs to be wrapped in `<%= component_controller do %>` in order to properly initialize, otherwise the Reflex class won't get created.
286
306
 
287
307
  ## License
@@ -2,10 +2,10 @@ module ViewComponentReflex
2
2
  class Component < ViewComponent::Base
3
3
  class << self
4
4
  def init_stimulus_reflex
5
- if name.include? "::"
6
- @stimulus_reflex ||= module_parent.const_set(name.split("::").last + "Reflex", Class.new(Reflex))
5
+ @stimulus_reflex ||= if name.include? "::"
6
+ module_parent.const_set(name.split("::").last + "Reflex", Class.new(ViewComponentReflex::Reflex))
7
7
  else
8
- @stimulus_reflex ||= Object.const_set(name + "Reflex", Class.new(Reflex))
8
+ Object.const_set(name + "Reflex", Class.new(ViewComponentReflex::Reflex))
9
9
  end
10
10
  @stimulus_reflex.component_class = self
11
11
  end
@@ -24,11 +24,11 @@ module ViewComponentReflex
24
24
  init_key
25
25
 
26
26
  tag = :div
27
- if opts_or_tag.is_a? Hash
28
- options = opts_or_tag
27
+ options = if opts_or_tag.is_a? Hash
28
+ opts_or_tag
29
29
  else
30
30
  tag = opts_or_tag
31
- options = opts
31
+ opts
32
32
  end
33
33
  options[:data] = {
34
34
  controller: self.class.stimulus_controller,
@@ -49,25 +49,30 @@ module ViewComponentReflex
49
49
  def init_key
50
50
  # we want the erb file that renders the component. `caller` gives the file name,
51
51
  # and line number, which should be unique. We hash it to make it a nice number
52
- key = caller.select { |p| p.include? ".html.erb" }[1]&.hash.to_s
52
+ key = caller.select { |p| p.match? /.\.html\.(haml|erb|slim)/ }[1]&.hash.to_s
53
53
  key += collection_key.to_s if collection_key
54
54
  @key = key
55
55
  end
56
56
 
57
- def reflex_tag(reflex, name, content_or_options_with_block = {}, options = {}, escape = true, &block)
57
+ # Helper to use to create the proper reflex data attributes for an element
58
+ def reflex_data_attributes(reflex)
58
59
  action, method = reflex.to_s.split("->")
59
60
  if method.nil?
60
61
  method = action
61
62
  action = "click"
62
63
  end
63
- data_attributes = {
64
+
65
+ {
64
66
  reflex: "#{action}->#{self.class.name}##{method}",
65
67
  key: key
66
68
  }
69
+ end
70
+
71
+ def reflex_tag(reflex, name, content_or_options_with_block = {}, options = {}, escape = true, &block)
67
72
  if content_or_options_with_block.is_a?(Hash)
68
- merge_data_attributes(content_or_options_with_block, data_attributes)
73
+ merge_data_attributes(content_or_options_with_block, reflex_data_attributes(reflex))
69
74
  else
70
- merge_data_attributes(options, data_attributes)
75
+ merge_data_attributes(options, reflex_data_attributes(reflex))
71
76
  end
72
77
  content_tag(name, content_or_options_with_block, options, escape, &block)
73
78
  end
@@ -97,8 +102,8 @@ module ViewComponentReflex
97
102
  ViewComponentReflex::Engine.state_adapter.state(request, @key).each do |k, v|
98
103
  instance_value = instance_variable_get(k)
99
104
  if permit_parameter?(initial_state[k], instance_value)
100
- ViewComponentReflex::Engine.state_adapter.set_state(request, controller, "#{@key}_initial", { k => instance_value })
101
- ViewComponentReflex::Engine.state_adapter.set_state(request, controller, @key, { k => instance_value })
105
+ ViewComponentReflex::Engine.state_adapter.set_state(request, controller, "#{@key}_initial", {k => instance_value})
106
+ ViewComponentReflex::Engine.state_adapter.set_state(request, controller, @key, {k => instance_value})
102
107
  else
103
108
  instance_variable_set(k, v)
104
109
  end
@@ -1,8 +1,8 @@
1
+ require "stimulus_reflex"
1
2
  require "view_component_reflex/state_adapter/session"
2
3
  require "view_component_reflex/state_adapter/memory"
3
- require "view_component_reflex/engine"
4
- require "stimulus_reflex"
5
4
  require "view_component_reflex/reflex"
5
+ require "view_component_reflex/engine"
6
6
 
7
7
  module ViewComponentReflex
8
8
  # Your code goes here...
@@ -1,3 +1,3 @@
1
1
  module ViewComponentReflex
2
- VERSION = '2.1.3'
2
+ VERSION = '2.2.2'
3
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: 2.1.3
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua LeBlanc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-06 00:00:00.000000000 Z
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -34,16 +34,16 @@ dependencies:
34
34
  name: stimulus_reflex
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ">="
37
+ - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: '0'
39
+ version: 3.3.0.pre2
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
44
+ - - '='
45
45
  - !ruby/object:Gem::Version
46
- version: '0'
46
+ version: 3.3.0.pre2
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: view_component
49
49
  requirement: !ruby/object:Gem::Requirement