turbo_ready 0.0.4 → 0.0.7

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.
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TurboReady
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.7"
5
5
  end
data/lib/turbo_ready.rb CHANGED
@@ -1,12 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "turbo_ready/version"
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",
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.14.48",
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 |spec|
6
- spec.name = "turbo_ready"
7
- spec.version = TurboReady::VERSION
8
- spec.authors = ["Nate Hopkins (hopsoft)"]
9
- spec.email = ["natehop@gmail.com"]
10
- spec.homepage = "https://github.com/hopsoft/turbo_ready"
11
- spec.summary = "Take full control of the DOM with Turbo Streams"
12
- spec.description = spec.summary
13
- spec.license = "MIT"
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
- spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = spec.homepage
17
- spec.metadata["changelog_uri"] = spec.homepage + "/blob/master/CHANGELOG.md"
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
- spec.files = Dir["lib/**/*.rb", "app/**/*", "bin/*", "[A-Z]*"]
19
+ s.files = Dir["lib/**/*.rb", "app/**/*", "bin/*", "[A-Z]*"]
20
20
 
21
- spec.add_dependency "rails", ">= 6.1"
22
- spec.add_dependency "turbo-rails", ">= 1.1"
21
+ s.add_dependency "rails", ">= 6.1"
22
+ s.add_dependency "turbo-rails", ">= 1.1"
23
23
 
24
- spec.add_development_dependency "magic_frozen_string_literal"
25
- spec.add_development_dependency "pry-byebug"
26
- spec.add_development_dependency "standardrb"
27
- spec.add_development_dependency "tocer"
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