futurism 1.2.0.pre4 → 1.2.0.pre8

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: 4d6957dab754ba0fa363c7636d060efee6cd1c0bf55d0e4ba71d6af6e5a4dd70
4
- data.tar.gz: 59fd73ff311a606a26e307eab3185882c89bf3c27ac23ee7940dd32b1565ade2
3
+ metadata.gz: c1bffa6e39b44603caf5ef679a8785e0df31e1019d57e2aef49208751a4fd7ba
4
+ data.tar.gz: f725d03372fa6919fb633801b884395cfefb88f95944adc22b08889bee97827c
5
5
  SHA512:
6
- metadata.gz: 8333bc75d032dfeec4c3776c71df44a56f0c6a057ddfb2f09b026e27550e07289c425b9253c4bbb7d04ccd22497c5b67edf40828dd06b42b8b5315abd5451c32
7
- data.tar.gz: 91c0f41783e97e8be0645a0a2814dbb29466c0d7bcda3a69d81fdc4267d21d72db98e4161f326c5792cab320cf711bb060fe348b7fe8fe9e27c7c1802b207517
6
+ metadata.gz: 55a981065cef8d8a62f169b0bb360418b642deaee1fc590ef2460c1e2723a60791df0f11e482c14985bfd40daaa9ff8e4a5d223fd26d204e68e31c7eb1675d2d
7
+ data.tar.gz: 2cdf24b379ca0d654a08981b130b500d2399243d8deeecd59164bc40ff1296f03c64c44606418ff29012dc72b8f546631e79df1af9fca90287340218af2e5a36
data/README.md CHANGED
@@ -21,6 +21,7 @@ Lazy-load Rails partials via CableReady
21
21
  - [Explicit Partial](#explicit-partial)
22
22
  - [HTML Options](#html-options)
23
23
  - [Eager Loading](#eager-loading)
24
+ - [Bypassing](#bypassing)
24
25
  - [Broadcast Partials Individually](#broadcast-partials-individually)
25
26
  - [Contextual Placeholder Arguments](#contextual-placeholder-arguments)
26
27
  - [Events](#events)
@@ -175,6 +176,19 @@ Futurism makes that dead simple:
175
176
  <% end %>
176
177
  ```
177
178
 
179
+ ### Bypassing
180
+
181
+ In some rare cases, e.g. when combined with CableReady's async `updates_for` mechanism, you'll want to bypass futurism entirely and fall back to native `rendering`. You can do this by passing an `unless` option:
182
+
183
+ ```erb
184
+ <%= futurize 'some_tab', unless: bypass_futurism?, extends: :tr do %>
185
+ <div class="placeholder"</td>
186
+ <% end %>
187
+ ```
188
+
189
+ Internally, this works the same as [bypassing futurism in tests](#testing)
190
+
191
+
178
192
  ### Broadcast Partials Individually
179
193
  Futurism's default behavior is to `broadcast` partials as they are generated in batches:
180
194
 
@@ -188,7 +202,7 @@ For collections, however, you can opt into individual broadcasts by specifying `
188
202
  <% end %>
189
203
  ```
190
204
 
191
- ## Contextual Placeholder Arguments
205
+ ### Contextual Placeholder Arguments
192
206
 
193
207
  For individual models or arbitrary collections, you can pass `record` and `index` to the placeholder block as arguments:
194
208
 
@@ -1,7 +1,7 @@
1
1
  module Futurism
2
2
  module Helpers
3
3
  def futurize(records_or_string = nil, extends:, **options, &block)
4
- if Rails.env.test? && Futurism.skip_in_test
4
+ if (Rails.env.test? && Futurism.skip_in_test) || options[:unless]
5
5
  if records_or_string.nil?
6
6
  return render(**options)
7
7
  else
@@ -11,6 +11,9 @@ module Futurism
11
11
 
12
12
  options[:eager] = true unless block_given?
13
13
 
14
+ # cannot serialize a proc
15
+ options.delete(:cached) if options[:cached].is_a?(Proc)
16
+
14
17
  if records_or_string.is_a?(ActiveRecord::Base) || records_or_string.is_a?(ActiveRecord::Relation)
15
18
  futurize_active_record(records_or_string, extends: extends, **options, &block)
16
19
  elsif records_or_string.is_a?(String)
@@ -55,6 +58,7 @@ module Futurism
55
58
  class WrappingFuturismElement
56
59
  include ActionView::Helpers
57
60
  include Futurism::MessageVerifier
61
+ include Futurism::OptionsTransformer
58
62
 
59
63
  attr_reader :extends, :placeholder, :html_options, :data_attributes, :model, :options, :eager, :broadcast_each, :controller
60
64
 
@@ -92,14 +96,7 @@ module Futurism
92
96
  end
93
97
 
94
98
  def transformed_options
95
- require_relative "shims/deep_transform_values" unless options.respond_to? :deep_transform_values
96
-
97
- options.deep_transform_values do |value|
98
- next(value) unless value.respond_to?(:to_global_id)
99
- next(value) if value.is_a?(ActiveRecord::Base) && value.new_record?
100
-
101
- value.to_global_id.to_s
102
- end
99
+ dump_options(options)
103
100
  end
104
101
 
105
102
  private
@@ -55,6 +55,7 @@ module Futurism
55
55
  class WrappingFuturismElement
56
56
  include ActionView::Helpers
57
57
  include Futurism::MessageVerifier
58
+ include Futurism::OptionsTransformer
58
59
 
59
60
  attr_reader :extends, :placeholder, :html_options, :data_attributes, :model, :options, :eager, :broadcast_each, :controller
60
61
 
@@ -92,14 +93,7 @@ module Futurism
92
93
  end
93
94
 
94
95
  def transformed_options
95
- require_relative "shims/deep_transform_values" unless options.respond_to? :deep_transform_values
96
-
97
- options.deep_transform_values do |value|
98
- next(value) unless value.respond_to?(:to_global_id)
99
- next(value) if value.is_a?(ActiveRecord::Base) && value.new_record?
100
-
101
- value.to_global_id.to_s
102
- end
96
+ dump_options(options)
103
97
  end
104
98
 
105
99
  private
@@ -0,0 +1,20 @@
1
+ module Futurism
2
+ module OptionsTransformer
3
+ def dump_options(options)
4
+ require_relative "shims/deep_transform_values" unless options.respond_to? :deep_transform_values
5
+
6
+ options.deep_transform_values do |value|
7
+ next(value) unless value.respond_to?(:to_global_id)
8
+ next(value) if value.is_a?(ActiveRecord::Base) && value.new_record?
9
+
10
+ value.to_global_id.to_s
11
+ end
12
+ end
13
+
14
+ def load_options(options)
15
+ require_relative "shims/deep_transform_values" unless options.respond_to? :deep_transform_values
16
+
17
+ options.deep_transform_values { |value| value.is_a?(String) && value.start_with?("gid://") ? GlobalID::Locator.locate(value) : value }
18
+ end
19
+ end
20
+ end
File without changes
@@ -2,6 +2,7 @@ module Futurism
2
2
  module Resolver
3
3
  class Resources
4
4
  include Futurism::MessageVerifier
5
+ include Futurism::OptionsTransformer
5
6
 
6
7
  # resource definitions are an array of [signed_params, sgid, signed_controller, url, broadcast_each]
7
8
  def initialize(resource_definitions:, connection:, params:)
@@ -20,11 +21,11 @@ module Futurism
20
21
  end
21
22
 
22
23
  @resources_without_sgids.each do |resource_definition|
23
- resource = lookup_resource(resource_definition)
24
+ options = options_from_resource(resource_definition)
24
25
  renderer = renderer_for(resource_definition: resource_definition)
25
26
  html =
26
27
  begin
27
- renderer.render(resource)
28
+ renderer.render(options)
28
29
  rescue => exception
29
30
  error_renderer.render(exception)
30
31
  end
@@ -91,10 +92,9 @@ module Futurism
91
92
  GlobalID::Locator.locate_many_signed @resources_with_sgids.map(&:sgid)
92
93
  end
93
94
 
94
- def lookup_resource(resource_definition)
95
- message_verifier
96
- .verify(resource_definition.signed_params)
97
- .deep_transform_values { |value| value.is_a?(String) && value.start_with?("gid://") ? GlobalID::Locator.locate(value) : value }
95
+ def options_from_resource(resource_definition)
96
+ load_options(message_verifier
97
+ .verify(resource_definition.signed_params))
98
98
  end
99
99
  end
100
100
  end
@@ -1,3 +1,3 @@
1
1
  module Futurism
2
- VERSION = "1.2.0.pre4"
2
+ VERSION = "1.2.0.pre8"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module Futurism
2
- VERSION = "1.2.0.pre3"
2
+ VERSION = "1.2.0.pre7"
3
3
  end
data/lib/futurism.rb CHANGED
@@ -3,6 +3,7 @@ require "action_cable"
3
3
  require "cable_ready"
4
4
  require "futurism/engine"
5
5
  require "futurism/message_verifier"
6
+ require "futurism/options_transformer"
6
7
  require "futurism/resolver/resources"
7
8
  require "futurism/resolver/controller"
8
9
  require "futurism/resolver/controller/renderer"
data/lib/futurism.rb~ CHANGED
@@ -3,6 +3,7 @@ require "action_cable"
3
3
  require "cable_ready"
4
4
  require "futurism/engine"
5
5
  require "futurism/message_verifier"
6
+ require "futurism/resolver/resources"
6
7
  require "futurism/resolver/controller"
7
8
  require "futurism/resolver/controller/renderer"
8
9
  require "futurism/channel"
@@ -20,7 +21,10 @@ module Futurism
20
21
  (@@default_controller || "::ApplicationController").to_s.constantize
21
22
  end
22
23
 
23
- ActiveSupport.on_load(:action_view) {
24
+ ActiveSupport.on_load(:action_view) do
24
25
  include Futurism::Helpers
25
- }
26
+ end
27
+
28
+ mattr_accessor :logger
29
+ self.logger ||= Rails.logger ? Rails.logger.new : Logger.new($stdout)
26
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: futurism
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.pre4
4
+ version: 1.2.0.pre8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Rubisch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-07 00:00:00.000000000 Z
11
+ date: 2021-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 5.0.0.pre5
131
+ version: 5.0.0.pre7
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 5.0.0.pre5
138
+ version: 5.0.0.pre7
139
139
  description: Uses custom html elements with attached IntersectionObserver to automatically
140
140
  lazy load partials via websockets
141
141
  email:
@@ -156,6 +156,8 @@ files:
156
156
  - lib/futurism/helpers.rb
157
157
  - lib/futurism/helpers.rb~
158
158
  - lib/futurism/message_verifier.rb
159
+ - lib/futurism/options_transformer.rb
160
+ - lib/futurism/options_transformer.rb~
159
161
  - lib/futurism/resolver/controller.rb
160
162
  - lib/futurism/resolver/controller.rb~
161
163
  - lib/futurism/resolver/controller/renderer.rb