vident 0.10.0 → 0.10.1

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: 95a2b00a3176fdc3fbd06569b20665b3e1d1bc8032758b0945d2dc58990d2fa5
4
- data.tar.gz: e946108732b2abd5af47e5437b13e72983838cad032fb6b5c4c460504dc4cf8c
3
+ metadata.gz: a56c925065ab67c7c41493cd5ab9a1c19fedde171ebc2fcc60477359318ef258
4
+ data.tar.gz: 595d0ae7292a2548aece9749cbd7dc4e8f177faa6ea49aebfe90a1864c0014ce
5
5
  SHA512:
6
- metadata.gz: 3fd4da39749c72675965bf507287db253b305a2203c29a323a6342fa593709c06480ce1a3671e6044b562503853b78c56ca9a698e5962217a4a1becf23a29722
7
- data.tar.gz: 11e8f9e658bb2ff4459719a205ae13bcecb7f2c65b1e4d89edb718879d5a54fe947922c0328cf5c15b19f066d46695250a935599fa37fcfd8de0fbfb9e2975af
6
+ metadata.gz: c0ee94c716fee4aa83d496beac7f2d7053e82742006ca1483dbd6ba38ba5ec32fc6f8c8b9f0ca691b05ff2c42947f52aa7937a35c5aef6cfd1bacc6454a7d90c
7
+ data.tar.gz: 399b0db4d117ee191f871eb5bb23d5419065ca083a58ba778e9a871839e9de1950837868b4b4043a8d72b7e97f18138678f41ef12813905543bc4c4a1619428a
data/CHANGELOG.md CHANGED
@@ -14,6 +14,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
14
14
 
15
15
  ### Fixed
16
16
 
17
+ ## [0.10.1] - 2024-02-21
18
+
19
+ ### Added
20
+
21
+ - `outlets` option now accepts either a string stimulus controller identifier, a component instance, or a tuple of
22
+ identifier and CSS selector for the outlet.
23
+
24
+
17
25
  ## [0.10.0] - 2024-02-21
18
26
 
19
27
  ### Added
data/lib/vident/base.rb CHANGED
@@ -80,6 +80,11 @@ module Vident
80
80
  @id.presence || random_id
81
81
  end
82
82
 
83
+ # If connecting an outlet to this specific component instance, use this ID
84
+ def outlet_id
85
+ @outlet_id ||= [stimulus_identifier, "##{id}"]
86
+ end
87
+
83
88
  # Methods to use in component views
84
89
  # ---------------------------------
85
90
 
@@ -185,7 +190,7 @@ module Vident
185
190
  end
186
191
 
187
192
  def random_id
188
- @random_id ||= "#{self.class.component_name}-#{StableId.next_id_in_sequence}"
193
+ @random_id ||= "#{component_class_name}-#{StableId.next_id_in_sequence}"
189
194
  end
190
195
 
191
196
  CLASSNAME_SEPARATOR = " "
@@ -133,7 +133,19 @@ module Vident
133
133
 
134
134
  def outlet_list
135
135
  return {} unless @outlets&.size&.positive?
136
- @outlets.each_with_object({}) { |o, obj| obj["#{implied_controller_name}-#{o.stimulus_identifier}-outlet"] = "[data-controller~=#{o.stimulus_identifier}]" }
136
+
137
+ @outlets.each_with_object({}) do |outlet_config, obj|
138
+ identifier, css_selector = if outlet_config.is_a?(String)
139
+ [outlet_config, "[data-controller~=#{outlet_config}]"]
140
+ elsif outlet_config.is_a?(Array)
141
+ outlet_config[..1]
142
+ elsif respond_to?(:stimulus_identifier)
143
+ [outlet_config.stimulus_identifier, "[data-controller~=#{outlet_config.stimulus_identifier}]"]
144
+ else
145
+ raise ArgumentError, "Invalid outlet config: #{outlet_config}"
146
+ end
147
+ obj[:"#{implied_controller_name}-#{identifier}-outlet"] = css_selector
148
+ end
137
149
  end
138
150
 
139
151
  # Actions can be specified as a symbol, in which case they imply an action on the primary
@@ -189,7 +201,7 @@ module Vident
189
201
  end
190
202
 
191
203
  def parse_attributes(attrs, controller = nil)
192
- attrs.transform_keys { |k| "#{controller || implied_controller_name}-#{k}" }
204
+ attrs.transform_keys { |k| :"#{controller || implied_controller_name}-#{k}" }
193
205
  end
194
206
 
195
207
  def data_map_attributes
@@ -219,7 +231,7 @@ module Vident
219
231
 
220
232
  def build_named_classes_data_attributes(named_classes)
221
233
  parse_named_classes_hash(named_classes)
222
- .map { |c| ["#{c[:controller]}-#{c[:name]}-class", c[:classes]] }
234
+ .map { |c| [:"#{c[:controller]}-#{c[:name]}-class", c[:classes]] }
223
235
  .to_h
224
236
  end
225
237
 
@@ -1,23 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "random/formatter"
4
+
3
5
  module Vident
4
6
  class StableId
5
7
  class << self
6
8
  def set_current_sequence_generator
7
9
  ::Thread.current[:vident_number_sequence_generator] = id_sequence_generator
8
10
  end
11
+ alias_method :new_current_sequence_generator, :set_current_sequence_generator
12
+
13
+ def clear_current_sequence_generator
14
+ ::Thread.current[:vident_number_sequence_generator] = nil
15
+ end
9
16
 
10
17
  def next_id_in_sequence
11
18
  generator = ::Thread.current[:vident_number_sequence_generator]
12
- return "?" unless generator
19
+ # When no generator exists, use a random value. This means we loose the stability of the ID sequence but
20
+ # at least generate unique IDs for the current render.
21
+ return Random.hex(16) unless generator
13
22
  generator.next.join("-")
14
23
  end
15
24
 
16
25
  private
17
26
 
18
27
  def id_sequence_generator
19
- number_generator = Random.new(296_865_628_524)
20
- Enumerator.produce { number_generator.rand(10_000_000) }.with_index
28
+ number_generator = Random.new(42)
29
+ Enumerator.produce { number_generator.hex(16) }.with_index
21
30
  end
22
31
  end
23
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vident
4
- VERSION = "0.10.0"
4
+ VERSION = "0.10.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vident
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou