vident 0.11.0 → 0.12.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: ea398d33c180c2198ac689bd70d6f830dc625f9e70fd17bd94cb1acbaa7ec690
4
- data.tar.gz: 86b1e7379929fbbe3e5b83b9356debfa18490a9cca60599a1a7ecbd9537d97f7
3
+ metadata.gz: 8f7d8ace3954ce0426a72c2b2d82c847955a78744a88b79bae5c3fa89bc9376c
4
+ data.tar.gz: 18ea411abbd7d1ecc4a052fe7278a4be99d120bb359a93c069a15d6519fd3c6f
5
5
  SHA512:
6
- metadata.gz: 3e36f069043b62f9d300993e7be4d2cc8666aac6f782ee4ba04fd5efeaffe9ebd28ace5dbfd1022f90f515b253b9778d1123e516606fc20255b0d1bcb5a7bfe5
7
- data.tar.gz: abf930b3b049e617544a8fe274b0c7deac1ad4f8226642d88fe120246fa0935b90cbcd3206480604290e2f2b9ff540dbf234ab72df8fb4051d8b6838cbecbc11
6
+ metadata.gz: 56cb329e6bb4b3d0a1111b8015f5d6e2c768087a9c67258dc53016ce04823a2bb1c5b6a96a3983bb2b53b99308ed79191b04727cf518ac97196b3ed8e73f080b
7
+ data.tar.gz: 5b627477ac164a072b0faf035ef20df401340d4d6fecf6523645908aa3cbe6f5bde8037c9371f194a0ec14e04a669e23abeeaa77a81261f04306b07a4874ca2a
data/CHANGELOG.md CHANGED
@@ -14,6 +14,21 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
14
14
 
15
15
  ### Fixed
16
16
 
17
+ ## [0.12.1] - 2024-06-12
18
+
19
+ ### Fixed
20
+
21
+ - parsing of targets where the controller is also specified
22
+
23
+ ## [0.12.0] - 2024-02-25
24
+
25
+ ### Added
26
+
27
+ - `outlet` DSL methods updated so that the selector is scoped to the component's root element by default. This
28
+ is probably the most common use case, and it's now the default.
29
+ - `with_outlets` DSL method added to generate the data-* attributes for the outlets and return as a fragment
30
+ of HTML
31
+
17
32
 
18
33
  ## [0.11.0] - 2024-02-21
19
34
 
@@ -69,10 +69,15 @@ module Vident
69
69
  build_target_data_attributes([target(name)])
70
70
  end
71
71
 
72
+ def build_outlet_selector(outlet_selector)
73
+ prefix = @id ? "##{@id} " : ""
74
+ "#{prefix}[data-controller~=#{outlet_selector}]"
75
+ end
76
+
72
77
  def outlet(css_selector: nil)
73
78
  controller = implied_controller_name
74
79
  if css_selector.nil?
75
- [controller, "[data-controller~=#{controller}]"]
80
+ [controller, build_outlet_selector(controller)]
76
81
  else
77
82
  [controller, css_selector]
78
83
  end
@@ -104,6 +109,13 @@ module Vident
104
109
  end
105
110
  alias_method :with_action, :with_actions
106
111
 
112
+ # Return the HTML `data-` attribute for the given outlets
113
+ def with_outlets(*outlets)
114
+ attrs = build_outlet_data_attributes(outlets)
115
+ attrs.map { |dt, n| "data-#{dt}=\"#{n}\"" }.join(" ").html_safe
116
+ end
117
+ alias_method :with_outlet, :with_outlets
118
+
107
119
  private
108
120
 
109
121
  # An implicit Stimulus controller name is built from the implicit controller path
@@ -150,19 +162,29 @@ module Vident
150
162
 
151
163
  def outlet_list
152
164
  return {} unless @outlets&.size&.positive?
165
+ build_outlet_data_attributes(@outlets)
166
+ end
167
+
168
+ def parse_outlet(outlet_config)
169
+ if outlet_config.is_a?(String)
170
+ [outlet_config, build_outlet_selector(outlet_config)]
171
+ elsif outlet_config.is_a?(Symbol)
172
+ outlet_config = outlet_config.to_s.tr("_", "-")
173
+ [outlet_config, build_outlet_selector(outlet_config)]
174
+ elsif outlet_config.is_a?(Array)
175
+ outlet_config[..1]
176
+ elsif outlet_config.respond_to?(:stimulus_identifier) # Is a Component
177
+ [outlet_config.stimulus_identifier, build_outlet_selector(outlet_config.stimulus_identifier)]
178
+ elsif outlet_config.send(:implied_controller_name) # Is a RootComponent ?
179
+ [outlet_config.send(:implied_controller_name), build_outlet_selector(outlet_config.send(:implied_controller_name))]
180
+ else
181
+ raise ArgumentError, "Invalid outlet config: #{outlet_config}"
182
+ end
183
+ end
153
184
 
154
- @outlets.each_with_object({}) do |outlet_config, obj|
155
- identifier, css_selector = if outlet_config.is_a?(String)
156
- [outlet_config, "[data-controller~=#{outlet_config}]"]
157
- elsif outlet_config.is_a?(Array)
158
- outlet_config[..1]
159
- elsif outlet_config.respond_to?(:stimulus_identifier) # Is a Component
160
- [outlet_config.stimulus_identifier, "[data-controller~=#{outlet_config.stimulus_identifier}]"]
161
- elsif outlet_config.send(:implied_controller_name) # Is a RootComponent ?
162
- [outlet_config.send(:implied_controller_name), "[data-controller~=#{outlet_config.send(:implied_controller_name)}]"]
163
- else
164
- raise ArgumentError, "Invalid outlet config: #{outlet_config}"
165
- end
185
+ def build_outlet_data_attributes(outlets)
186
+ outlets.each_with_object({}) do |outlet_config, obj|
187
+ identifier, css_selector = parse_outlet(outlet_config)
166
188
  obj[:"#{implied_controller_name}-#{identifier}-outlet"] = css_selector
167
189
  end
168
190
  end
@@ -207,7 +229,11 @@ module Vident
207
229
 
208
230
  def parse_target(raw_target)
209
231
  return raw_target if raw_target.is_a?(String)
210
- return raw_target if raw_target.is_a?(Hash)
232
+ if raw_target.is_a?(Hash)
233
+ raw_target[:name] = js_name(raw_target[:name]) if raw_target[:name].is_a?(Symbol)
234
+ return raw_target
235
+ end
236
+ return target(*raw_target) if raw_target.is_a?(Array)
211
237
  target(raw_target)
212
238
  end
213
239
 
@@ -1,6 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "random/formatter"
3
+ begin
4
+ # Introduced in Ruby 3.1
5
+ require "random/formatter"
6
+ rescue LoadError
7
+ # to support Ruby 3.0
8
+ require "securerandom"
9
+ end
4
10
 
5
11
  module Vident
6
12
  class StableId
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vident
4
- VERSION = "0.11.0"
4
+ VERSION = "0.12.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vident
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-21 00:00:00.000000000 Z
11
+ date: 2024-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties