vident 0.10.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
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