turbo_reflex 0.0.23 → 0.0.26

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: 94a743b2b5affa9a74da2b18ada148e17e1cb24538027716742c4c037d23a646
4
- data.tar.gz: cd14a193d0e77cad794ee96bcfedded9aac76a491327157ddec8f79983c0b065
3
+ metadata.gz: 54eb80fcd5f3e12b66c58770328a188c35da892dff8f5bf5997bbd2e8933d577
4
+ data.tar.gz: b2b58f76eb46a235913b47833758e6f6f625eec10207f3f4a766be1e3ed42329
5
5
  SHA512:
6
- metadata.gz: 9e36653da2dfa283fb45f78a4f124f043fdf3f68d20514d6c5902a300d4eeab136c4ae69ccf591e6cf7e51fc2de95c29d2c86b078876798e1b9e83d87f29c62b
7
- data.tar.gz: f82d726508e0dc8494d6ee7fa101478bd57095348c77d65318b6e8c387a8d870d380f2e88af3b2e691d709a81ae9fa045b4a7c04aa4187904ae4275e992006da
6
+ metadata.gz: 9e684166fcb0c77a18d18948d82cd51c092a0bff82bece9e5d359d0d3c156fc7ac8dfd4bae3354ea06b628ae1f8664a8bd309ff44f265408dbe668ecfa454ec0
7
+ data.tar.gz: f910af2bbe2db405159c9a09a74e3818b79ac6ba8494274bbf73bdc69613b6da50f4eb4460563f8a09cb1aaa8524f4090fe775d1ec831c31a896d6d41ad14373
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- turbo_reflex (0.0.23)
4
+ turbo_reflex (0.0.26)
5
5
  rails (>= 6.1)
6
6
  turbo-rails (>= 1.1)
7
7
  turbo_ready (>= 0.1)
@@ -94,11 +94,11 @@ GEM
94
94
  coderay (1.1.3)
95
95
  concurrent-ruby (1.1.10)
96
96
  crass (1.0.6)
97
- cuprite (0.14.2)
97
+ cuprite (0.14.3)
98
98
  capybara (~> 3.0)
99
- ferrum (~> 0.12.0)
99
+ ferrum (~> 0.13.0)
100
100
  erubi (1.11.0)
101
- ferrum (0.12)
101
+ ferrum (0.13)
102
102
  addressable (~> 2.5)
103
103
  concurrent-ruby (~> 1.1)
104
104
  webrick (~> 1.7)
@@ -190,22 +190,22 @@ GEM
190
190
  zeitwerk (~> 2.5)
191
191
  rainbow (3.1.1)
192
192
  rake (13.0.6)
193
- regexp_parser (2.6.0)
193
+ regexp_parser (2.6.1)
194
194
  rexml (3.2.5)
195
195
  rouge (4.0.0)
196
- rubocop (1.35.1)
196
+ rubocop (1.39.0)
197
197
  json (~> 2.3)
198
198
  parallel (~> 1.10)
199
199
  parser (>= 3.1.2.1)
200
200
  rainbow (>= 2.2.2, < 4.0)
201
201
  regexp_parser (>= 1.8, < 3.0)
202
202
  rexml (>= 3.2.5, < 4.0)
203
- rubocop-ast (>= 1.20.1, < 2.0)
203
+ rubocop-ast (>= 1.23.0, < 2.0)
204
204
  ruby-progressbar (~> 1.7)
205
205
  unicode-display_width (>= 1.4.0, < 3.0)
206
206
  rubocop-ast (1.23.0)
207
207
  parser (>= 3.1.1.0)
208
- rubocop-performance (1.14.3)
208
+ rubocop-performance (1.15.1)
209
209
  rubocop (>= 1.7.0, < 2.0)
210
210
  rubocop-ast (>= 0.4.0)
211
211
  ruby-progressbar (1.11.0)
@@ -222,15 +222,15 @@ GEM
222
222
  actionpack (>= 5.2)
223
223
  activesupport (>= 5.2)
224
224
  sprockets (>= 3.0.0)
225
- sqlite3 (1.5.3-arm64-darwin)
226
- standard (1.16.1)
227
- rubocop (= 1.35.1)
228
- rubocop-performance (= 1.14.3)
225
+ sqlite3 (1.5.4-arm64-darwin)
226
+ standard (1.18.1)
227
+ rubocop (= 1.39.0)
228
+ rubocop-performance (= 1.15.1)
229
229
  standardrb (1.0.1)
230
230
  standard
231
- tailwindcss-rails (2.0.19-aarch64-linux)
231
+ tailwindcss-rails (2.0.21-aarch64-linux)
232
232
  railties (>= 6.0.0)
233
- tailwindcss-rails (2.0.19-arm64-darwin)
233
+ tailwindcss-rails (2.0.21-arm64-darwin)
234
234
  railties (>= 6.0.0)
235
235
  thor (1.2.1)
236
236
  timeout (0.3.0)
data/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  </h1>
9
9
  <p align="center">
10
10
  <a href="http://blog.codinghorror.com/the-best-code-is-no-code-at-all/">
11
- <img alt="Lines of Code" src="https://img.shields.io/badge/loc-1209-47d299.svg" />
11
+ <img alt="Lines of Code" src="https://img.shields.io/badge/loc-1232-47d299.svg" />
12
12
  </a>
13
13
  <a href="https://codeclimate.com/github/hopsoft/turbo_reflex/maintainability">
14
14
  <img src="https://api.codeclimate.com/v1/badges/fe1162a742fe83a4fdfd/maintainability" />
@@ -112,6 +112,7 @@ TurboReflex is a lightweight Turbo Frame extension... which means that reactivit
112
112
  - [rails](https://rubygems.org/gems/rails) `>=6.1`
113
113
  - [turbo-rails](https://rubygems.org/gems/turbo-rails) `>=1.1`
114
114
  - [@hotwired/turbo-rails](https://yarnpkg.com/package/@hotwired/turbo-rails) `>=7.1`
115
+ - [ruby](https://github.com/ruby/ruby) `>=2.7`
115
116
 
116
117
  ## Setup
117
118
 
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TurboReflex::AttributeSet
4
+ def initialize(prefix, attributes: {})
5
+ prefix = prefix.to_s
6
+ attrs = attributes.to_h.transform_values(&:to_s)
7
+
8
+ attrs.each do |key, value|
9
+ key = key.to_s.strip
10
+
11
+ next unless key.start_with?(prefix)
12
+
13
+ name = key.parameterize.underscore.delete_prefix("#{prefix}_")
14
+ value = value.to_i if value.to_s.match?(/\A\d+\z/)
15
+ value = value == "true" if value.is_a?(String) && value.match?(/\A(true|false)\z/i)
16
+ instance_variable_set "@#{name}", value
17
+
18
+ next if orig_respond_to_missing?(name, false)
19
+
20
+ self.class.define_method(name) { instance_variable_get :"@#{name}" }
21
+ self.class.define_method("#{name}?") { public_send(name).present? }
22
+ end
23
+ end
24
+
25
+ def respond_to?(name, include_all = false)
26
+ respond_to_missing? name, include_all
27
+ end
28
+
29
+ alias_method :orig_respond_to_missing?, :respond_to_missing?
30
+
31
+ def respond_to_missing?(name, include_all)
32
+ true
33
+ end
34
+
35
+ def method_missing(name, *args)
36
+ return false if name.end_with?("?")
37
+ nil
38
+ end
39
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "attribute_set"
4
+
3
5
  # TurboReflex base superclass.
4
6
  # All TurboReflex classes should inherit from this class.
5
7
  #
@@ -99,20 +101,10 @@ class TurboReflex::Base
99
101
  def element
100
102
  @element ||= begin
101
103
  attributes = params[:element_attributes]
102
- attrs = attributes.keys.each_with_object({}) do |key, memo|
103
- memo[:aria] ||= {}
104
- memo[:dataset] ||= {}
105
- if key.start_with?("data_")
106
- memo[:dataset][key[5..].parameterize.underscore.to_sym] = attributes[key]
107
- elsif key.start_with?("aria_")
108
- memo[:aria][key[5..].parameterize.underscore.to_sym] = attributes[key]
109
- else
110
- memo[key.parameterize.underscore.to_sym] = attributes[key]
111
- end
112
- end
113
- attrs[:aria] = OpenStruct.new(attrs[:aria])
114
- attrs[:dataset] = OpenStruct.new(attrs[:dataset])
115
- OpenStruct.new attrs
104
+ OpenStruct.new attributes.merge(
105
+ aria: TurboReflex::AttributeSet.new(:aria, attributes: attributes),
106
+ dataset: TurboReflex::AttributeSet.new(:data, attributes: attributes)
107
+ )
116
108
  end
117
109
  end
118
110
 
@@ -5,13 +5,22 @@ require_relative "version"
5
5
  require_relative "base"
6
6
  require_relative "controller_pack"
7
7
 
8
- class TurboReflex::Engine < ::Rails::Engine
9
- config.turbo_reflex = ActiveSupport::OrderedOptions.new
10
- initializer "turbo_reflex.configuration" do
11
- Mime::Type.register "text/vnd.turbo-reflex.html", :turbo_reflex
8
+ module TurboReflex
9
+ def self.config
10
+ Rails.application.config.turbo_reflex
11
+ end
12
+
13
+ class Engine < ::Rails::Engine
14
+ config.turbo_reflex = ActiveSupport::OrderedOptions.new
15
+ config.turbo_reflex[:max_cookie_size] = ActionDispatch::Cookies::MAX_COOKIE_SIZE / 2
16
+ config.turbo_reflex[:validate_client_token] = true
17
+
18
+ initializer "turbo_reflex.configuration" do
19
+ Mime::Type.register "text/vnd.turbo-reflex.html", :turbo_reflex
12
20
 
13
- config.to_prepare do |app|
14
- ::ActionController::Base.send :include, TurboReflex::Controller
21
+ ActiveSupport.on_load(:action_controller_base) do
22
+ include TurboReflex::Controller
23
+ end
15
24
  end
16
25
  end
17
26
  end
@@ -195,6 +195,7 @@ class TurboReflex::Runner
195
195
  end
196
196
 
197
197
  def valid_client_token?
198
+ return true unless Rails.configuration.turbo_reflex.validate_client_token
198
199
  return false unless client_token.present?
199
200
  return false unless message_verifier.valid_message?(client_token)
200
201
  unmasked_client_token = message_verifier.verify(client_token)
@@ -92,13 +92,13 @@ class TurboReflex::State
92
92
  return if internal_keys.blank?
93
93
  return if internal_data.blank?
94
94
 
95
- percentage = max_bytesize > 0 ? ordinal_payload.bytesize / max_bytesize.to_f : 0
95
+ percentage = (max_bytesize > 0) ? ordinal_payload.bytesize / max_bytesize.to_f : 0
96
96
  while percentage > 1
97
97
  keys_to_keep = internal_keys.slice((internal_keys.length - (internal_keys.length / percentage).floor)..-1)
98
98
  keys_to_remove = internal_keys - keys_to_keep
99
99
  @internal_keys = keys_to_keep
100
100
  keys_to_remove.each { |key| internal_data.delete key }
101
- percentage = max_bytesize > 0 ? ordinal_payload.bytesize / max_bytesize.to_f : 0
101
+ percentage = (max_bytesize > 0) ? ordinal_payload.bytesize / max_bytesize.to_f : 0
102
102
  end
103
103
  end
104
104
 
@@ -18,12 +18,6 @@ class TurboReflex::StateManager
18
18
  include ActiveModel::Dirty
19
19
 
20
20
  class << self
21
- attr_writer :cookie_max_bytesize
22
-
23
- def cookie_max_bytesize
24
- @cookie_max_bytesize ||= 2.kilobytes
25
- end
26
-
27
21
  def state_override_blocks
28
22
  @state_overrides ||= {}
29
23
  end
@@ -130,12 +124,12 @@ class TurboReflex::StateManager
130
124
  def ordinal_payload
131
125
  provisional_state.clear
132
126
  state.shrink!
133
- state.prune! max_bytesize: TurboReflex::StateManager.cookie_max_bytesize
127
+ state.prune! max_bytesize: TurboReflex.config.max_cookie_size
134
128
  state.ordinal_payload
135
129
  end
136
130
 
137
131
  def write_cookie
138
- return unless changed?
132
+ return unless changed? || cookie.blank?
139
133
  cookies.signed["turbo_reflex.state"] = {value: ordinal_payload, path: "/", expires: 1.day.from_now}
140
134
  changes_applied
141
135
  rescue => error
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TurboReflex
4
- VERSION = "0.0.23"
4
+ VERSION = "0.0.26"
5
5
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "turbo_reflex",
3
- "version": "0.0.22",
3
+ "version": "0.0.25",
4
4
  "description": "Reflexes for Turbo Frames that help you build robust reactive applications",
5
5
  "main": "app/javascript/index.js",
6
6
  "repository": "https://github.com/hopsoft/turbo_reflex",