turbo_ready 0.0.4 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -3
- data/Gemfile.lock +55 -52
- data/README.md +259 -99
- data/Rakefile +13 -1
- data/app/assets/builds/turbo_ready.js +1 -1
- data/app/assets/builds/turbo_ready.js.map +3 -3
- data/app/assets/images/turbo-ready-logo-dark.webp +0 -0
- data/app/assets/images/turbo-ready-logo-light.webp +0 -0
- data/app/javascript/turbo_ready.js +1 -1
- data/app/jobs/turbo_ready/broadcast_invoke_job.rb +9 -0
- data/bin/loc +1 -1
- data/lib/turbo_ready/engine.rb +13 -0
- data/lib/turbo_ready/patches/broadcastable.rb +21 -0
- data/lib/turbo_ready/patches/broadcasts.rb +18 -0
- data/lib/turbo_ready/patches/tag_builder.rb +15 -0
- data/lib/turbo_ready/patches.rb +8 -0
- data/lib/turbo_ready/string_wrapper.rb +28 -0
- data/lib/turbo_ready/tag_helper.rb +42 -0
- data/lib/turbo_ready/version.rb +1 -1
- data/lib/turbo_ready.rb +1 -10
- data/package.json +2 -2
- data/turbo_ready.gemspec +28 -19
- data/yarn-error.log +3003 -11
- data/yarn.lock +158 -153
- metadata +140 -7
- data/lib/turbo_ready/railtie.rb +0 -6
- data/lib/turbo_ready/string.rb +0 -36
- data/lib/turbo_ready/tag_builder.rb +0 -33
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class TurboReady::StringWrapper
|
4
|
+
include TurboReady::TagHelper
|
5
|
+
attr_reader :turbo_stream_string
|
6
|
+
|
7
|
+
delegate_missing_to :turbo_stream_string
|
8
|
+
|
9
|
+
def initialize(turbo_stream_string, turbo_stream_strings: Set.new)
|
10
|
+
@turbo_stream_string = turbo_stream_string
|
11
|
+
@turbo_stream_strings = turbo_stream_strings
|
12
|
+
@turbo_stream_strings << turbo_stream_string
|
13
|
+
end
|
14
|
+
|
15
|
+
def invoke(...)
|
16
|
+
TurboReady::StringWrapper.new turbo_stream_invoke_tag(...), turbo_stream_strings: turbo_stream_strings
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
turbo_stream_strings.to_a.join("\n").html_safe
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def turbo_stream_strings
|
26
|
+
@turbo_stream_strings ||= Set.new
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TurboReady::TagHelper
|
4
|
+
def turbo_stream_invoke_tag(method, args: [], selector: nil, camelize: true, id: nil)
|
5
|
+
id = SecureRandom.uuid if id.blank?
|
6
|
+
payload = HashWithIndifferentAccess.new(id: id.to_s, selector: selector)
|
7
|
+
payload.merge! method_details(method, args: args, camelize: camelize)
|
8
|
+
payload.select! { |_, v| v.present? }
|
9
|
+
%(<turbo-stream action="invoke" target="DOM"><template>#{payload.to_json}</template></turbo-stream>).html_safe
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def method_details(method, args: [], camelize: true)
|
15
|
+
if camelize
|
16
|
+
method = camelize_method(method)
|
17
|
+
args = camelize_args(args)
|
18
|
+
end
|
19
|
+
|
20
|
+
method_parts = method.to_s.split(".")
|
21
|
+
|
22
|
+
HashWithIndifferentAccess.new(
|
23
|
+
receiver: method_parts[0..-2].join("."),
|
24
|
+
method: method_parts.last,
|
25
|
+
args: args
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def camelize_method(method)
|
30
|
+
method.to_s.split(".").map { |s| s.camelize(:lower) }.join(".")
|
31
|
+
end
|
32
|
+
|
33
|
+
def camelize_args(args = [])
|
34
|
+
args.map do |param|
|
35
|
+
if param.is_a? Hash
|
36
|
+
param.deep_transform_keys { |key| key.to_s.camelize(:lower) }
|
37
|
+
else
|
38
|
+
param
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/turbo_ready/version.rb
CHANGED
data/lib/turbo_ready.rb
CHANGED
@@ -1,12 +1,3 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "turbo_ready/
|
4
|
-
require "turbo_ready/railtie"
|
5
|
-
require "turbo_ready/string"
|
6
|
-
require "turbo_ready/tag_builder"
|
7
|
-
|
8
|
-
module TurboReady
|
9
|
-
def self.patch!
|
10
|
-
Turbo::Streams::TagBuilder.send :include, TurboReady::TagBuilder
|
11
|
-
end
|
12
|
-
end
|
3
|
+
require "turbo_ready/engine"
|
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "turbo_ready",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.6",
|
4
4
|
"description": "Take full control of the DOM with Turbo Streams",
|
5
5
|
"main": "app/assets/builds/turbo_ready.js",
|
6
6
|
"repository": "https://github.com/hopsoft/turbo_ready",
|
@@ -10,7 +10,7 @@
|
|
10
10
|
"@hotwired/turbo-rails": ">= 7.1"
|
11
11
|
},
|
12
12
|
"devDependencies": {
|
13
|
-
"esbuild": "^0.
|
13
|
+
"esbuild": "^0.15.5",
|
14
14
|
"eslint": "^8.19.0",
|
15
15
|
"prettier-standard": "^16.4.1"
|
16
16
|
},
|
data/turbo_ready.gemspec
CHANGED
@@ -2,27 +2,36 @@
|
|
2
2
|
|
3
3
|
require_relative "lib/turbo_ready/version"
|
4
4
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "turbo_ready"
|
7
|
+
s.version = TurboReady::VERSION
|
8
|
+
s.authors = ["Nate Hopkins (hopsoft)"]
|
9
|
+
s.email = ["natehop@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/hopsoft/turbo_ready"
|
11
|
+
s.summary = "Take full control of the DOM with Turbo Streams"
|
12
|
+
s.description = s.summary
|
13
|
+
s.license = "MIT"
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
s.metadata["homepage_uri"] = s.homepage
|
16
|
+
s.metadata["source_code_uri"] = s.homepage
|
17
|
+
s.metadata["changelog_uri"] = s.homepage + "/blob/master/CHANGELOG.md"
|
18
18
|
|
19
|
-
|
19
|
+
s.files = Dir["lib/**/*.rb", "app/**/*", "bin/*", "[A-Z]*"]
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
s.add_dependency "rails", ">= 6.1"
|
22
|
+
s.add_dependency "turbo-rails", ">= 1.1"
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
s.add_development_dependency "capybara"
|
25
|
+
s.add_development_dependency "importmap-rails"
|
26
|
+
s.add_development_dependency "magic_frozen_string_literal"
|
27
|
+
s.add_development_dependency "net-smtp"
|
28
|
+
s.add_development_dependency "pry-byebug"
|
29
|
+
s.add_development_dependency "puma"
|
30
|
+
s.add_development_dependency "rake"
|
31
|
+
s.add_development_dependency "rexml"
|
32
|
+
s.add_development_dependency "selenium-webdriver"
|
33
|
+
s.add_development_dependency "sprockets-rails"
|
34
|
+
s.add_development_dependency "sqlite3"
|
35
|
+
s.add_development_dependency "standardrb"
|
36
|
+
s.add_development_dependency "webdrivers"
|
28
37
|
end
|