katalyst-html-attributes 1.0.1 → 1.1.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: ebf02bb3d00b36a7de997289b233babcc769526e94fdb2c4794dfa87a72304b5
4
- data.tar.gz: e873c07f7f2afe9723883fa8742274a22b6c1b634335dc5ed43a3c0ff78c7060
3
+ metadata.gz: 22dc61eb82f19345cd8a5b4e2929cb74b41578fe37950629f37219cd85e958ab
4
+ data.tar.gz: 72168e12c5d010ec54233e5fb89933c77ebef08fc121c6a559feb0e2462f4cad
5
5
  SHA512:
6
- metadata.gz: 4f1bc239f47e06a941336e78047ce0b915ad533bf40f54775619f5e3c7797471adc829f8f14e75e8ff6d23962d8491a480b64e40fbac1f602806e763b87030e0
7
- data.tar.gz: 583b0588f9b353b17a0b54537d1d31c1f68f08a8e18df8496fd111253ce263e3cdd0a670fd36a5b23430b24f9a040c4a31132104631adf8ad611db23f0e6ac67
6
+ metadata.gz: e1db494a3f7b7d503455df70b2dfb3ee593c2954e4b04d2fea91dfd919ebdb8582239b1b0366c4891e64719b44b0a68777083fa3ea4e0899bb8a9b725c91d62e
7
+ data.tar.gz: 781b25b38f0d78c0ddb7e517663feba486ca6ad3e15eab41eefaef3f252cdf370344309376ddefa9c12cb52bd659dc53950ab89c88c90353c014bd7693e20f85
data/README.md CHANGED
@@ -30,3 +30,49 @@ class MyViewComponent < ViewComponent::Base
30
30
  end
31
31
  end
32
32
  ```
33
+
34
+ You can also define your own named attributes:
35
+
36
+ ```ruby
37
+ class MyViewComponent < ViewComponent::Base
38
+ include Katalyst::HtmlAttributes
39
+
40
+ define_html_attributes :link_attributes, :button_attributes
41
+
42
+ def initialize(link:, button:, **html_attributes)
43
+ super(**html_attributes)
44
+
45
+ update_link_attributes(**link) if link
46
+ update_button_attributes(**button) if button
47
+ end
48
+
49
+ def call
50
+ tag.div(**html_attributes) do
51
+ tag.a(**link_attributes) do
52
+ "Link"
53
+ end +
54
+ tag.button(**button_attributes) do
55
+ "Button"
56
+ end
57
+ end
58
+ end
59
+
60
+ def default_html_attributes
61
+ {
62
+ class: "my-class"
63
+ }
64
+ end
65
+
66
+ def default_link_attributes
67
+ {
68
+ class: "my-link"
69
+ }
70
+ end
71
+
72
+ def default_button_attributes
73
+ {
74
+ class: "my-button"
75
+ }
76
+ end
77
+ end
78
+ ```
@@ -1,24 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "html_attributes/has_html_attributes"
3
+ require "active_support"
4
+ require "active_support/rails"
4
5
 
5
6
  module Katalyst
6
7
  module HtmlAttributes
8
+ extend ActiveSupport::Autoload
7
9
  extend ActiveSupport::Concern
8
10
 
9
- class_methods do
10
- using HasHtmlAttributes
11
+ autoload :HasHtmlAttributes
12
+
13
+ using HasHtmlAttributes
11
14
 
15
+ class_methods do
12
16
  def define_html_attribute_methods(name, default: {})
13
- define_method("default_#{name}") { default }
14
- private("default_#{name}")
17
+ ivar = :"@#{name}"
18
+ default_method = :"default_#{name}"
19
+ define_method(default_method) { default.deep_dup }
20
+ private(default_method)
15
21
 
16
22
  define_method(name) do
17
- send("default_#{name}").merge_html(instance_variable_get("@#{name}") || {})
23
+ html_attributes_get(ivar, default_method)
24
+ end
25
+
26
+ define_method(:"#{name}=") do |options|
27
+ html_attributes_set(ivar, options)
18
28
  end
19
29
 
20
- define_method("#{name}=") do |options|
21
- instance_variable_set("@#{name}", options.slice(:id, :aria, :class, :data).merge(options.fetch(:html, {})))
30
+ define_method(:"update_#{name}") do |**options, &block|
31
+ html_attributes_update(ivar, options, &block)
22
32
  end
23
33
  end
24
34
  end
@@ -32,5 +42,31 @@ module Katalyst
32
42
 
33
43
  self.html_attributes = options
34
44
  end
45
+
46
+ def options_to_html_attributes(options)
47
+ options.slice(:id, :aria, :class, :data).merge_html(options.fetch(:html, {}))
48
+ end
49
+ module_function(:options_to_html_attributes)
50
+
51
+ private
52
+
53
+ def html_attributes_get(ivar, default)
54
+ if instance_variable_defined?(ivar)
55
+ send(default).merge_html(instance_variable_get(ivar))
56
+ else
57
+ send(default)
58
+ end
59
+ end
60
+
61
+ def html_attributes_set(ivar, options)
62
+ instance_variable_set(ivar, options_to_html_attributes(options))
63
+ end
64
+
65
+ def html_attributes_update(ivar, options, &block)
66
+ attributes = instance_variable_get(ivar) || {}
67
+ attributes = attributes.merge_html(options_to_html_attributes(options))
68
+ attributes = yield(attributes) if block
69
+ instance_variable_set(ivar, attributes)
70
+ end
35
71
  end
36
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-html-attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-15 00:00:00.000000000 Z
11
+ date: 2024-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  requirements: []
71
- rubygems_version: 3.4.10
71
+ rubygems_version: 3.5.11
72
72
  signing_key:
73
73
  specification_version: 4
74
74
  summary: HTML Attributes utilities for use with ViewComponents