motion 0.4.2 → 0.4.3

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: 00d428a43d143191e5faba15d7b7aa25376bf375820eacc283c0aeb4148653e1
4
- data.tar.gz: 3471947a7f72af5df84b13a2d995998201102c8174fd7a7dfee6a27a08a86a79
3
+ metadata.gz: d25829b24f8c2781bcc44f9132061532d3c5b3466e60e69ab646407d27c32519
4
+ data.tar.gz: c3e69af9595e1fe7b659a6ed51a57c252d2028581aa4f154e4a150ee2a74b12c
5
5
  SHA512:
6
- metadata.gz: ea47401782fe8331ee73c8201263de1ad75853842d14c57f68a416d821ae92416ac3c9bd5e6859bd6a10dc8785f8ecfe71a8e84417f02461afef3a8fda69ab0f
7
- data.tar.gz: 8ce1dc79f7344bbf14b8537c806ff1b66e2dd6cfdddfc995925081edb2e7fdbc3ca10a9fdd5b04d9addbd78a8ba1333e7c324bb0a50644d71fbd515548d11f3b
6
+ metadata.gz: f1bb6c0022e3636d62d6ba054aeac9e16c353bc5d646aa83c460a0eaf1f0fc0774efd71b03d3eb47456a033a66521907fc3e23e29fc02c4d09124a03732e940c
7
+ data.tar.gz: aa336213b2487da46b868b8c89f74ff55ec745078ffdb1e75fdeafe7d7707870f8f140013d8d9218e68998f89911813f9e0437d75f9261ccc29ec957990b6b02
@@ -1,5 +1,5 @@
1
- import { createClient } from '@unabridged/motion';
2
- import consumer from './channels/consumer';
1
+ import { createClient } from '@unabridged/motion'
2
+ import consumer from './channels/consumer'
3
3
 
4
4
  export default createClient({
5
5
 
@@ -11,7 +11,7 @@ export default createClient({
11
11
  // Motion can log information about the lifecycle of components to the
12
12
  // browser's console. It is recommended to turn this feature off outside of
13
13
  // development.
14
- logging: process.env["RAILS_ENV"] === "development",
14
+ logging: process.env.RAILS_ENV === 'development'
15
15
 
16
16
  // This function will be called for every motion, and the return value will be
17
17
  // made available at `Motion::Event#extra_data`:
@@ -30,8 +30,8 @@ export default createClient({
30
30
  // The data attributes used by Motion can be customized, but these values must
31
31
  // also be updated in the Ruby initializer:
32
32
  //
33
- // keyAttribute: "data-motion-key",
34
- // stateAttribute: "data-motion-state",
35
- // motionAttribute: "data-motion",
33
+ // keyAttribute: 'data-motion-key',
34
+ // stateAttribute: 'data-motion-state',
35
+ // motionAttribute: 'data-motion',
36
36
 
37
- });
37
+ })
@@ -19,41 +19,43 @@ module Motion
19
19
  autoload :Serializer, "motion/serializer"
20
20
  autoload :TestHelpers, "motion/test_helpers"
21
21
 
22
- def self.configure(&block)
23
- raise AlreadyConfiguredError if @config
24
-
25
- @config = Configuration.new(&block)
26
- end
27
-
28
- def self.config
29
- @config ||= Configuration.default
30
- end
31
-
32
- singleton_class.alias_method :configuration, :config
33
-
34
- def self.serializer
35
- @serializer ||= Serializer.new
36
- end
37
-
38
- def self.markup_transformer
39
- @markup_transformer ||= MarkupTransformer.new
40
- end
41
-
42
- def self.build_renderer_for(websocket_connection)
43
- config.renderer_for_connection_proc.call(websocket_connection)
44
- end
45
-
46
- def self.notify_error(error, message)
47
- config.error_notification_proc&.call(error, message)
48
- end
49
-
50
- # This method only exists for testing. Changing configuration while Motion is
51
- # in use is not supported. It is only safe to call this method when no
52
- # components are currently mounted.
53
- def self.reset_internal_state_for_testing!(new_configuration = nil)
54
- @config = new_configuration
55
- @serializer = nil
56
- @markup_transformer = nil
22
+ class << self
23
+ def configure(&block)
24
+ raise AlreadyConfiguredError if @config
25
+
26
+ @config = Configuration.new(&block)
27
+ end
28
+
29
+ def config
30
+ @config ||= Configuration.default
31
+ end
32
+
33
+ alias_method :configuration, :config
34
+
35
+ def serializer
36
+ @serializer ||= Serializer.new
37
+ end
38
+
39
+ def markup_transformer
40
+ @markup_transformer ||= MarkupTransformer.new
41
+ end
42
+
43
+ def build_renderer_for(websocket_connection)
44
+ config.renderer_for_connection_proc.call(websocket_connection)
45
+ end
46
+
47
+ def notify_error(error, message)
48
+ config.error_notification_proc&.call(error, message)
49
+ end
50
+
51
+ # This method only exists for testing. Changing configuration while Motion
52
+ # is in use is not supported. It is only safe to call this method when no
53
+ # components are currently mounted.
54
+ def reset_internal_state_for_testing!(new_configuration = nil)
55
+ @config = new_configuration
56
+ @serializer = nil
57
+ @markup_transformer = nil
58
+ end
57
59
  end
58
60
  end
59
61
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support/concern"
4
- require "active_support/core_ext/class/attribute"
5
4
  require "active_support/core_ext/object/to_param"
6
5
  require "active_support/core_ext/hash/except"
7
6
 
@@ -12,6 +11,9 @@ module Motion
12
11
  module Broadcasts
13
12
  extend ActiveSupport::Concern
14
13
 
14
+ DEFAULT = {}.freeze
15
+ private_constant :DEFAULT
16
+
15
17
  # Analogous to `module_function` (available on both class and instance)
16
18
  module ModuleFunctions
17
19
  def stream_from(broadcast, handler)
@@ -37,14 +39,6 @@ module Motion
37
39
  end
38
40
  end
39
41
 
40
- included do
41
- class_attribute :_broadcast_handlers,
42
- instance_reader: false,
43
- instance_writer: false,
44
- instance_predicate: false,
45
- default: {}.freeze
46
- end
47
-
48
42
  class_methods do
49
43
  include ModuleFunctions
50
44
 
@@ -56,6 +50,15 @@ module Motion
56
50
  serialize_broadcasting([name, model])
57
51
  end
58
52
 
53
+ attr_writer :_broadcast_handlers
54
+
55
+ def _broadcast_handlers
56
+ return @_broadcast_handlers if defined?(@_broadcast_handlers)
57
+ return superclass._broadcast_handlers if superclass.respond_to?(:_broadcast_handlers)
58
+
59
+ DEFAULT
60
+ end
61
+
59
62
  private
60
63
 
61
64
  # This definition is copied from ActionCable::Channel::Broadcasting
@@ -105,8 +105,7 @@ module Motion
105
105
 
106
106
  run_callbacks(:action, &block)
107
107
  ensure
108
- # `@_action_callback_context = nil` would still appear in the state
109
- remove_instance_variable(:@_action_callback_context)
108
+ @_action_callback_context = nil
110
109
  end
111
110
  end
112
111
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support/concern"
4
- require "active_support/core_ext/class/attribute"
5
4
  require "active_support/core_ext/hash/except"
6
5
 
7
6
  require "motion"
@@ -11,6 +10,9 @@ module Motion
11
10
  module Motions
12
11
  extend ActiveSupport::Concern
13
12
 
13
+ DEFAULT = {}.freeze
14
+ private_constant :DEFAULT
15
+
14
16
  # Analogous to `module_function` (available on both class and instance)
15
17
  module ModuleFunctions
16
18
  def map_motion(motion, handler = motion)
@@ -28,16 +30,17 @@ module Motion
28
30
  end
29
31
  end
30
32
 
31
- included do
32
- class_attribute :_motion_handlers,
33
- instance_reader: false,
34
- instance_writer: false,
35
- instance_predicate: false,
36
- default: {}.freeze
37
- end
38
-
39
33
  class_methods do
40
34
  include ModuleFunctions
35
+
36
+ attr_writer :_motion_handlers
37
+
38
+ def _motion_handlers
39
+ return @_motion_handlers if defined?(@_motion_handlers)
40
+ return superclass._motion_handlers if superclass.respond_to?(:_motion_handlers)
41
+
42
+ DEFAULT
43
+ end
41
44
  end
42
45
 
43
46
  include ModuleFunctions
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support/concern"
4
- require "active_support/core_ext/class/attribute"
5
4
  require "active_support/core_ext/hash/except"
6
5
 
7
6
  require "motion"
@@ -11,6 +10,9 @@ module Motion
11
10
  module PeriodicTimers
12
11
  extend ActiveSupport::Concern
13
12
 
13
+ DEFAULT = {}.freeze
14
+ private_constant :DEFAULT
15
+
14
16
  # Analogous to `module_function` (available on both class and instance)
15
17
  module ModuleFunctions
16
18
  def every(interval, handler, name: handler)
@@ -32,16 +34,17 @@ module Motion
32
34
  end
33
35
  end
34
36
 
35
- included do
36
- class_attribute :_periodic_timers,
37
- instance_reader: false,
38
- instance_writer: false,
39
- instance_predicate: false,
40
- default: {}.freeze
41
- end
42
-
43
37
  class_methods do
44
38
  include ModuleFunctions
39
+
40
+ attr_writer :_periodic_timers
41
+
42
+ def _periodic_timers
43
+ return @_periodic_timers if defined?(@_periodic_timers)
44
+ return superclass._periodic_timers if superclass.respond_to?(:_periodic_timers)
45
+
46
+ DEFAULT
47
+ end
45
48
  end
46
49
 
47
50
  include ModuleFunctions
@@ -5,27 +5,34 @@ require "motion"
5
5
  module Motion
6
6
  module Component
7
7
  module Rendering
8
- # Use the presence/absence of the ivar instead of true/false to avoid
9
- # extra serialized state (Note that in this scheme, the presence of
10
- # the ivar will never be serialized).
11
- RERENDER_MARKER_IVAR = :@__awaiting_forced_rerender__
12
- private_constant :RERENDER_MARKER_IVAR
13
-
14
- # Some changes to Motion's state are specifically supported during render.
15
- ALLOWED_NEW_IVARS_DURING_RENDER = %i[
16
- @_broadcast_handlers
17
- @_stable_instance_identifier_for_callbacks
18
- @_motion_handlers
19
- @_periodic_timers
8
+ STATE_EXCLUDED_IVARS = %i[
9
+ @_action_callback_context
10
+ @_awaiting_forced_rerender
11
+ @_routes
12
+
13
+ @view_context
14
+ @lookup_context
15
+ @view_renderer
16
+ @view_flow
17
+ @virtual_path
18
+ @variant
19
+ @current_template
20
+ @output_buffer
21
+
22
+ @helpers
23
+ @controller
24
+ @request
25
+ @tag_builder
20
26
  ].freeze
21
- private_constant :ALLOWED_NEW_IVARS_DURING_RENDER
27
+
28
+ private_constant :STATE_EXCLUDED_IVARS
22
29
 
23
30
  def rerender!
24
- instance_variable_set(RERENDER_MARKER_IVAR, true)
31
+ @_awaiting_forced_rerender = true
25
32
  end
26
33
 
27
34
  def awaiting_forced_rerender?
28
- instance_variable_defined?(RERENDER_MARKER_IVAR)
35
+ @_awaiting_forced_rerender
29
36
  end
30
37
 
31
38
  # * This can be overwritten.
@@ -43,7 +50,7 @@ module Motion
43
50
  _run_action_callbacks(context: :render) {
44
51
  _clear_awaiting_forced_rerender!
45
52
 
46
- view_context.capture { _without_new_instance_variables { super } }
53
+ view_context.capture { super }
47
54
  }
48
55
 
49
56
  raise RenderAborted, self if html == false
@@ -54,21 +61,19 @@ module Motion
54
61
  private
55
62
 
56
63
  def _clear_awaiting_forced_rerender!
57
- return unless awaiting_forced_rerender?
58
-
59
- remove_instance_variable(RERENDER_MARKER_IVAR)
64
+ @_awaiting_forced_rerender = false
60
65
  end
61
66
 
62
- def _without_new_instance_variables
63
- existing_instance_variables = instance_variables
67
+ def marshal_dump
68
+ (instance_variables - STATE_EXCLUDED_IVARS)
69
+ .map { |ivar| [ivar, instance_variable_get(ivar)] }
70
+ .to_h
71
+ end
64
72
 
65
- yield
66
- ensure
67
- (
68
- instance_variables -
69
- existing_instance_variables -
70
- ALLOWED_NEW_IVARS_DURING_RENDER
71
- ).each(&method(:remove_instance_variable))
73
+ def marshal_load(instance_variables)
74
+ instance_variables.each do |ivar, value|
75
+ instance_variable_set(ivar, value)
76
+ end
72
77
  end
73
78
  end
74
79
  end
@@ -18,7 +18,7 @@ module Motion
18
18
  raw["type"]
19
19
  end
20
20
 
21
- alias name type
21
+ alias_method :name, :type
22
22
 
23
23
  def details
24
24
  raw.fetch("details", {})
@@ -34,14 +34,12 @@ module Motion
34
34
  @target = Motion::Element.from_raw(raw["target"])
35
35
  end
36
36
 
37
- def current_target
38
- return @current_target if defined?(@current_target)
37
+ def element
38
+ return @element if defined?(@element)
39
39
 
40
- @current_target = Motion::Element.from_raw(raw["currentTarget"])
40
+ @element = Motion::Element.from_raw(raw["element"])
41
41
  end
42
42
 
43
- alias element current_target
44
-
45
43
  def form_data
46
44
  element&.form_data
47
45
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Motion
4
- VERSION = "0.4.2"
4
+ VERSION = "0.4.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alec Larsen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-02 00:00:00.000000000 Z
12
+ date: 2020-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '5.2'
34
+ version: '5.1'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '5.2'
41
+ version: '5.1'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: lz4-ruby
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -102,7 +102,7 @@ metadata:
102
102
  source_code_uri: https://github.com/unabridged/motion
103
103
  post_install_message: |
104
104
  Friendly reminder: When updating the motion gem, don't forget to update the
105
- NPM package as well (`bin/yarn add '@unabridged/motion@0.4.2'`).
105
+ NPM package as well (`bin/yarn add '@unabridged/motion@0.4.3'`).
106
106
  rdoc_options: []
107
107
  require_paths:
108
108
  - lib
@@ -110,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
110
  requirements:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 2.3.0
113
+ version: 2.5.0
114
114
  required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ">="