vident 0.4.1 → 0.5.0

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: eb36bbcf0d3a46ec51c1a68e80dbf0ef4b85076412591d30215779d1ff2816e8
4
- data.tar.gz: 6c4b6f98a4ac9bcbebaea4003a6532231a2e188aa94ec34889f4c1c624c9ae46
3
+ metadata.gz: ba2054320ceb13a2646f5f88f4dcef219ad4a5482118f1245472b07d8848f313
4
+ data.tar.gz: 7e0af03ee04bc52c6b7f35cd0da6490116428581bae587249380df7c71c8d863
5
5
  SHA512:
6
- metadata.gz: 6ccf024bee94cccffccc5b8cf7999b0b1b2e47c1a4185ab2f5a2f5129b7494d66cdde1d7d8ee8364123386dedd3f1f15ae60c27798db73cea3be4f22f68b24f6
7
- data.tar.gz: f09643a2d324a23012b5466b6bd7ad4a205f21238441891557a8d60d5a71860f5a64e866366bdb63744a62f6d7efed53bdfcb17f5711eab54e35675cefd60f88
6
+ metadata.gz: 8cd4c1933065215f12d8640a4274164ddb869f9b013891f6ef569293b84dbcafea761c8442ebee81c0656c3c2d0e560f7d7ee4a36b5390cba2bc2148d5bc62b0
7
+ data.tar.gz: bd3549f2eaf0157bea9b8489c2fc9ea83f71d11afa998b6a013ef65ea86ff4f41cbb39caafb94b4ea5049c00b36e3be3a3b67c3cb9ec24020f842cda85476523
@@ -132,22 +132,28 @@ if Gem.loaded_specs.has_key? "dry-struct"
132
132
 
133
133
  def map_primitive_to_dry_type(signature, options, converter)
134
134
  strict = !options[:convert]
135
- type, subtype = extract_member_type_and_subclass(signature, options)
136
- dry_type = dry_type_from_primary_type(type, strict, converter)
137
- if subtype && dry_type.respond_to?(:of)
138
- subtype_info = dry_type_from_primary_type(subtype, strict, converter)
139
- # Sub types of collections currently can be nil - this should be an option
140
- dry_type.of(subtype_info.optional.meta(required: false))
141
- else
142
- dry_type
135
+ signatures = extract_member_type_and_subclass(signature, options)
136
+ types = signatures.map do |type, subtype|
137
+ dry_type = dry_type_from_primary_type(type, strict, converter)
138
+ if subtype && dry_type.respond_to?(:of)
139
+ subtype_info = dry_type_from_primary_type(subtype, strict, converter)
140
+ # Sub types of collections currently can be nil - this should be an option
141
+ dry_type.of(subtype_info.optional.meta(required: false))
142
+ else
143
+ dry_type
144
+ end
143
145
  end
146
+ types.reduce(:|)
144
147
  end
145
148
 
146
149
  def extract_member_type_and_subclass(signature, options)
147
- if signature.is_a?(Array)
148
- [Array, signature.first]
150
+ case signature
151
+ when Set
152
+ signature.flat_map { |s| extract_member_type_and_subclass(s, options) }
153
+ when Array
154
+ [[Array, signature.first]]
149
155
  else
150
- [signature, options[:type] || options[:sub_type]]
156
+ [[signature, options[:type] || options[:sub_type]]]
151
157
  end
152
158
  end
153
159
 
@@ -185,7 +191,16 @@ if Gem.loaded_specs.has_key? "dry-struct"
185
191
  # values using the default constructor, `new`.
186
192
  Types.Instance(type)
187
193
  else
188
- Types.Constructor(type) { |values| converter ? converter.call(values) : type.new(**values) }
194
+ # dry calls this when initialising the Type. Check if type of input is correct or coerce
195
+ Types.Constructor(type) do |value|
196
+ next value if value.is_a?(type)
197
+
198
+ if converter
199
+ converter.call(value)
200
+ else
201
+ type.new(**value)
202
+ end
203
+ end
189
204
  end
190
205
  end
191
206
  end
data/lib/vident/base.rb CHANGED
@@ -104,7 +104,12 @@ module Vident
104
104
  else
105
105
  RootComponent::UsingViewComponent
106
106
  end
107
- klass.new(**stimulus_options_for_component(options))
107
+ element_attrs = options
108
+ .except(:id, :element_tag, :html_options, :controller, :controllers, :actions, :targets, :named_classes, :data_maps)
109
+ .merge(
110
+ stimulus_options_for_component(options)
111
+ )
112
+ klass.new(**element_attrs)
108
113
  end
109
114
  end
110
115
  alias_method :root, :parent_element
@@ -148,12 +153,11 @@ module Vident
148
153
  end
149
154
  module_function :stimulus_identifier_from_path
150
155
 
151
- protected
156
+ private
152
157
 
153
158
  # Prepare the stimulus attributes for a StimulusComponent
154
159
  def stimulus_options_for_component(options)
155
160
  {
156
- **options.except(:id, :element_tag, :html_options, :controller, :controllers, :actions, :targets, :named_classes, :data_maps),
157
161
  id: respond_to?(:id) ? id : (attribute(:id) || options[:id]),
158
162
  element_tag: attribute(:element_tag) || options[:element_tag] || :div,
159
163
  html_options: prepare_html_options(options[:html_options]),
@@ -167,8 +171,6 @@ module Vident
167
171
  }
168
172
  end
169
173
 
170
- private
171
-
172
174
  def prepare_html_options(erb_options)
173
175
  # Options should override in this order:
174
176
  # - defined on component class methods (lowest priority)
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "benchmark"
4
-
5
3
  # Rails fragment caching works by either expecting the cached key object to respond to `cache_key` or for that object
6
4
  # to be an array or hash. In our case the object maybe an instance of Core::Presenter so here we add a default
7
5
  # `cache_key` implementation.
@@ -26,10 +24,6 @@ module Vident
26
24
  named_cache_key_includes(name, *attrs)
27
25
  end
28
26
 
29
- def enable_cache_key_benchmarking
30
- @enable_cache_key_benchmarking = true
31
- end
32
-
33
27
  attr_reader :named_cache_key_attributes
34
28
 
35
29
  # TypedComponents can be used with fragment caching, but you need to be careful! Read on...
@@ -100,17 +94,7 @@ module Vident
100
94
  else
101
95
  @cache_key ||= {}
102
96
  end
103
-
104
- # TODO: remove the benchmarking code here
105
-
106
- if @enable_cache_key_benchmarking
107
- time = ::Benchmark.measure { generate_cache_key(n) }
108
- ::Logging::Log.debug "Cache key #{self.class.name}: #{time.real}"
109
- ::Thread.current[:total_key_generation_time] ||= 0
110
- ::Thread.current[:total_key_generation_time] += time.real
111
- else
112
- generate_cache_key(n)
113
- end
97
+ generate_cache_key(n)
114
98
  @cache_key[n]
115
99
  end
116
100
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vident
4
- VERSION = "0.4.1"
4
+ VERSION = "0.5.0"
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.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-26 00:00:00.000000000 Z
11
+ date: 2023-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport