sprockets-components 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 289b2d31182c7ceb8cf37b3ef9d452f5684efb15ebb3a43d16540fc278773306
4
+ data.tar.gz: 63ff1537b1dbc46a2933d17509a7400569c6650337f85ff6cc7218da38df3cad
5
+ SHA512:
6
+ metadata.gz: ef741329802e424ea353733b2723f342559dddcdb9c483a6c725d4b27f0d171c5936dd5bc4a3956250b4a73ae1160a959f92ee59964a18709f3213d33f491cbf
7
+ data.tar.gz: 50a33291ae8f4e150ac82dee4cb25b4dcdd1efbd2638aedb05aa4cbb4826ffd17a73ce85445ae5505006759c4963ebf6fba8c8118ad94ec4cf664102446b4975
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-3.2.2@sprockets-components
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2024 Micah Geisel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # Sprockets::Components
2
+
3
+ Make web components easier to develop in Rails using Sprockets.
4
+
5
+ ## Installation
6
+
7
+ Just add `gem "sprockets-components` to your Gemfile.
8
+
9
+ ## Usage
10
+
11
+ Use one directory per component, under `app/assets/components`:
12
+
13
+ ```
14
+ app/assets/
15
+ └── components
16
+    └── my-counter
17
+    ├── index.js
18
+    ├── my-counter.js
19
+    ├── my-counter.scss
20
+    └── my-counter.slim
21
+ ```
22
+
23
+ Each component's index.js file wires everything up in a single line:
24
+ ```js
25
+ //= component my-counter
26
+ ```
27
+
28
+ Now, from the perspective of the main my-counter.js file, there are two things done:
29
+ 1. There is an `HTML` variable available for use in the component. It is a string of the compiled template, with the compiled CSS inlined into an interior <style> tag.
30
+ 2. `window.customElements.define("my-counter", MyCounter)` is appended to the compiled file, so the JavaScript component class should be named appropriately.
31
+
32
+
33
+ Use the component in your views, as you'd expect. Sprockets compiles it all down to a single compiled js file. This file can be included directly, or `//= require`d into other files, or exposed to the importmap, or whatever you want!
34
+ ```html.erb
35
+ <!-- app/views/test/test.html.erb -->
36
+ <%= javascript_include_tag "my-counter" %>
37
+ <my-counter value="0"></my-counter>
38
+ ```
39
+
40
+
41
+ ## Development
42
+
43
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
44
+
45
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
46
+
47
+ ## Contributing
48
+
49
+ Bug reports and pull requests are welcome on GitHub at https://github.com/botandrose/sprockets-components.
50
+
51
+ ## License
52
+
53
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sprockets
4
+ module Components
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "components/version"
4
+
5
+ module Sprockets
6
+ module Components
7
+ class Engine < ::Rails::Engine
8
+ initializer "sprockets-components" do |app|
9
+ Sprockets::DirectiveProcessor.include Directives
10
+ app.config.after_initialize do
11
+ app.assets.register_pipeline :component, Pipeline.new
12
+ end
13
+ end
14
+ end
15
+
16
+ module Directives
17
+ protected
18
+
19
+ def process_component_directive name
20
+ process_component_css_directive "#{name}/#{name}.css"
21
+ process_component_html_directive "#{name}/#{name}.html"
22
+ process_component_js_directive "#{name}/#{name}.js"
23
+ end
24
+
25
+ def process_component_css_directive path
26
+ @required << resolve(path, accept: "text/css", pipeline: :component)
27
+ end
28
+
29
+ def process_component_html_directive path
30
+ @required << resolve(path, accept: "text/html", pipeline: :component)
31
+ end
32
+
33
+ def process_component_js_directive path
34
+ @required << resolve(path, accept: "application/javascript", pipeline: :component)
35
+ end
36
+ end
37
+
38
+ class Pipeline
39
+ def call env, type, file_type
40
+ {
41
+ "text/css" => [CSSProcessor.new],
42
+ "text/html" => [HTMLProcessor.new],
43
+ "application/javascript" => [JSProcessor.new],
44
+ }.fetch(type) +
45
+ env.send(:default_processors_for, type, file_type)
46
+ end
47
+ end
48
+
49
+ class CSSProcessor
50
+ def call input
51
+ "const CSS = `#{input[:data]}`;\n"
52
+ end
53
+ end
54
+
55
+ class HTMLProcessor
56
+ def call input
57
+ "const HTML = `<style>${CSS}</style>\n#{input[:data]}`;\n"
58
+ end
59
+ end
60
+
61
+ class JSProcessor
62
+ def call input
63
+ name = input[:name].split("/").first
64
+ "#{input[:data]};window.customElements.define('#{name}', #{name.underscore.classify})"
65
+ end
66
+ end
67
+ end
68
+ end
69
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sprockets-components
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Micah Geisel
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-01-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sprockets
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ description: Make web components easier to develop using Sprockets.
28
+ email:
29
+ - micah@botandrose.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rspec"
35
+ - ".ruby-version"
36
+ - LICENSE.txt
37
+ - README.md
38
+ - Rakefile
39
+ - lib/sprockets/components.rb
40
+ - lib/sprockets/components/version.rb
41
+ homepage: https://github.com/botandrose/sprockets-components
42
+ licenses:
43
+ - MIT
44
+ metadata:
45
+ homepage_uri: https://github.com/botandrose/sprockets-components
46
+ source_code_uri: https://github.com/botandrose/sprockets-components
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 3.0.0
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubygems_version: 3.5.3
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: Make web components easier to develop using Sprockets.
66
+ test_files: []