hotwire_combobox 0.1.7 → 0.1.8

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: 01a08bf7fdf486660daebfd29960a62c8435ad87939a8963d805967872ffca4d
4
- data.tar.gz: 2ca73e1f2693d9adf838463187bd2c79867b8086d59beea0bb699c12a49e8507
3
+ metadata.gz: 9cb2abe7ffd7dc81c39b774fb0028f0f9650182978735f3d21a3d375a32a948e
4
+ data.tar.gz: a038bd3ce8baff5a47e281be380cc0c4c0b77433cab3161174958a0f135fab08
5
5
  SHA512:
6
- metadata.gz: d505fbfb95060cb730a5533dd4d850f4691391a94f4849fd12017f1ebca12df55a12871d29f784e55dccbe2a8512c007c7516f960225e1a13f6ab74d5d8a3431
7
- data.tar.gz: 6792bae8acf5f9051f2a5605f95e86d7e3b755d323e47e9dff65dc0a02eb27771fa145d2129b246518711e4b050cc2e3cba8b03e83b581ea519c31c30a2ad5d6
6
+ metadata.gz: 52b14433be746e89f6e0612f42d3a84ed323ebb2931a93d535b90bb9eb1fbde555ea3bf0a3496774b9eb91c30ba0035576e6c3fab7da69e97e7228e927767e69
7
+ data.tar.gz: '09662cb44deb6854dca5d7a6919ae6170dff3ebcbbae9cab7ea7b1b368ec85e0db82f823a3471886cb55b9e4a44da6bd7e141bdc0e5948266b118ed96b2873bc'
data/README.md CHANGED
@@ -6,6 +6,7 @@ A combobox implementation for Ruby on Rails apps running on Hotwire.
6
6
  > This gem is pre-release software. It's not ready for production use yet and the API is subject to change.
7
7
 
8
8
  ## Installation
9
+
9
10
  Add this line to your application's Gemfile:
10
11
 
11
12
  ```ruby
@@ -49,34 +50,25 @@ Options are what you see when you open the combobox.
49
50
 
50
51
  The `options` argument takes an array of any objects which respond to:
51
52
 
52
- | Attribute | Description | Required? |
53
- |----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|-------------------|
54
- | `id` | Used as the option element's `id` attribute. Only required if `value` is not provided. | Required* |
55
- | `value` | Used to populate the input element's `value` attribute. Falls back to calling `id` on the object if not provided. | Optional |
56
- | `content` <br> **Supports HTML** | Used as the option element's content. Falls back to calling `display` on the object if not provided. | Optional |
57
- | `filterable_as` | Used to filter down the options when the user types into the input element. Falls back to calling `display` on the object if not provided. | Optional |
58
- | `autocompletable_as` | Used to autocomplete the input element when the user types into it. Falls back to calling `display` on the object if not provided. | Optional |
59
- | `display` | Used as a short-hand for other attributes. See the rest of the list for details. | Optional |
60
-
53
+ | Method | Description |
54
+ |--------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
55
+ | id | Used as the option element's `id` attribute. Only required if `value` is not provided. |
56
+ | value | Used to populate the input element's `value` attribute. Falls back to calling `id` on the object if not provided. |
57
+ | content | **Supports HTML** <br> Used as the option element's content. Falls back to calling `display` on the object if not provided. |
58
+ | filterable_as | Used to filter down the options when the user types into the input element. Falls back to calling `display` on the object if not provided. |
59
+ | autocompletable_as | Used to autocomplete the input element when the user types into it. Falls back to calling `display` on the object if not provided. |
60
+ | display | Used as a short-hand for other attributes. See the rest of the list for details. |
61
61
 
62
62
  > [!NOTE]
63
63
  > The `id` attribute is required only if `value` is not provided.
64
64
 
65
-
66
- The gem provides a `HotwireCombobox::Option` class which you can use to create options:
67
-
68
- ```ruby
69
- @states = [
70
- HotwireCombobox::Option.new(value: "AL", display: "Alabama"),
71
- # ...
72
- ]
73
- ```
74
-
75
- If you feel `HotwireCombobox::Option` is too verbose, you can also use the `hwbox_options` helper. It will destructure the hashes you pass to it and create `HotwireCombobox::Option` instances for you:
65
+ You can use the `combobox_options` helper to create an array of option objects which respond to the above methods:
76
66
 
77
67
  ```ruby
78
- @states = hwbox_options [
68
+ combobox_options [
79
69
  { value: "AL", display: "Alabama" },
70
+ { value: "AK", display: "Alaska" },
71
+ { value: "AZ", display: "Arizona" },
80
72
  # ...
81
73
  ]
82
74
  ```
@@ -90,7 +82,7 @@ The combobox is completely unstyled by default. You can use the following CSS se
90
82
  * `.hw-combobox [role="listbox"]` targets the listbox which encloses all option elements.
91
83
  * `.hw-combobox [role="option"]` targets each option element inside the listbox.
92
84
 
93
- Additionally, you can pass the following [Stimulus class values](https://stimulus.hotwired.dev/reference/css-classes) to `hw_combobox_tag`:
85
+ Additionally, you can pass the following [Stimulus class values](https://stimulus.hotwired.dev/reference/css-classes) to `combobox_tag`:
94
86
 
95
87
  * `data-hw-combobox-selected-class`: The class to apply to the selected option while shown inside an open listbox.
96
88
  * `data-hw-combobox-invalid-class`: The class to apply to the input element when the current value is invalid.
@@ -108,33 +100,25 @@ The library will mark the element as invalid but this won't be noticeable in the
108
100
  > [!CAUTION]
109
101
  > Bad actors can still submit invalid values to the server. You should always validate the input on the server side.
110
102
 
111
- ## Contributing
103
+ ### Naming Conflicts
112
104
 
113
- ### Setup
114
- ```bash
115
- $ bin/setup
116
- ```
105
+ If your application has naming conflicts with this gem, the following config will turn:
117
106
 
118
- ### Running the tests
119
- ```bash
120
- $ bundle exec rake app:test
121
- ```
107
+ * `#combobox_tag` into `#hw_combobox_tag`
108
+ * `#combobox_options` into `#hw_combobox_options`
122
109
 
123
- ```bash
124
- $ bundle exec rake app:test:system
125
- ```
110
+ ```ruby
111
+ # config/initializers/hotwire_combobox.rb
126
112
 
127
- ### Running the dummy app
128
- ```bash
129
- $ bin/rails s
113
+ HotwireCombobox.setup do |config|
114
+ config.bypass_convenience_methods = true
115
+ end
130
116
  ```
131
117
 
132
- ### Releasing
118
+ ## Contributing
133
119
 
134
- 1. Bump the version in `lib/hotwire_combobox/version.rb` (e.g. `VERSION = "0.1.0"`)
135
- 2. Bump the version in `Gemfile.lock` (e.g. `hotwire_combobox (0.1.0)`)
136
- 3. Commit the change (e.g. `git commit -am "Bump to 0.1.0"`)
137
- 4. Run `bundle exec rake release`
120
+ Please read [CONTRIBUTING.md](./CONTRIBUTING.md).
138
121
 
139
122
  ## License
123
+
140
124
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,11 +1,7 @@
1
1
  module HotwireCombobox
2
2
  module Helper
3
- def hwbox_option(...)
4
- HotwireCombobox::Option.new(...)
5
- end
6
-
7
- def hwbox_options(options)
8
- options.map { |option| hwbox_option(**option) }
3
+ def hw_combobox_options(options)
4
+ options.map { |option| hw_combobox_option(**option) }
9
5
  end
10
6
 
11
7
  def hw_combobox_tag(name, value = nil, form: nil, options: [], data: {}, input: {}, **attrs)
@@ -28,6 +24,11 @@ module HotwireCombobox
28
24
  parent_data: default_hw_combobox_parent_data(attrs, data)
29
25
  end
30
26
 
27
+ unless HotwireCombobox.bypass_convenience_methods?
28
+ alias_method :combobox_options, :hw_combobox_options
29
+ alias_method :combobox_tag, :hw_combobox_tag
30
+ end
31
+
31
32
  def hw_listbox_option_id(option)
32
33
  option.try(:id)
33
34
  end
@@ -49,6 +50,10 @@ module HotwireCombobox
49
50
  end
50
51
 
51
52
  private
53
+ def hw_combobox_option(...)
54
+ HotwireCombobox::Option.new(...)
55
+ end
56
+
52
57
  def default_hw_combobox_value_field_id(attrs, form, name)
53
58
  attrs.delete(:id) || form&.field_id(name)
54
59
  end
@@ -1,3 +1,3 @@
1
1
  module HotwireCombobox
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
@@ -3,4 +3,17 @@ require "hotwire_combobox/engine"
3
3
 
4
4
  module HotwireCombobox
5
5
  Option = Struct.new(:id, :value, :display, :content, :filterable_as, :autocompletable_as)
6
+
7
+ mattr_accessor :bypass_convenience_methods
8
+ @@bypass_convenience_methods = false
9
+
10
+ class << self
11
+ def setup
12
+ yield self
13
+ end
14
+
15
+ def bypass_convenience_methods?
16
+ bypass_convenience_methods
17
+ end
18
+ end
6
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hotwire_combobox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Farias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-10 00:00:00.000000000 Z
11
+ date: 2023-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails