hyper-state 1.0.alpha1.2 → 1.0.alpha1.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/hyper-state.gemspec +8 -14
- data/lib/hyperstack/internal/callbacks.rb +21 -12
- data/lib/hyperstack/internal/state/mapper.rb +16 -3
- data/lib/hyperstack/internal/state/variable.rb +3 -1
- data/lib/hyperstack/state/observable.rb +4 -4
- data/lib/hyperstack/state/version.rb +1 -1
- metadata +36 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a48f43567dbd4be77ee93df1b0de51fa4097169e8643acd510935bb4c6d9708
|
4
|
+
data.tar.gz: a55d85b356193be51f28bad347eaf70497a62f4c59213202b6cfb8687c5a2d76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e80a2cc027924df1acf000f4a7d6209c97ca878c929edfd07cdbd2518be6f92427d2aa3349767c9ad8b9faa3952a2dc9ef6dad9364414eb61b78134315ea977
|
7
|
+
data.tar.gz: 10b73543e0b25ef0e528b562ddef5272fefcc2ea1e6bf6c35fed4d99d0788b198ae5d9d7b532ee596d2426f4a31d79a6f8db71c4e553b37ac78554ddac007768
|
data/.gitignore
CHANGED
@@ -11,7 +11,6 @@ capybara-*.html
|
|
11
11
|
**.orig
|
12
12
|
rerun.txt
|
13
13
|
pickle-email-*.html
|
14
|
-
Gemfile.lock
|
15
14
|
|
16
15
|
# TODO Comment out these rules if you are OK with secrets being uploaded to the repo
|
17
16
|
config/initializers/secret_token.rb
|
@@ -51,3 +50,7 @@ bower.json
|
|
51
50
|
|
52
51
|
# ignore IDE files
|
53
52
|
.idea
|
53
|
+
|
54
|
+
# ignore Gemfile.locks https://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
|
55
|
+
/spec/test_app/Gemfile.lock
|
56
|
+
/Gemfile.lock
|
data/hyper-state.gemspec
CHANGED
@@ -9,39 +9,33 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ['Mitch VanDuyn', 'Adam Creekroad', 'Jan Biedermann']
|
10
10
|
spec.email = ['mitch@catprint.com', 'jan@kursator.com']
|
11
11
|
spec.summary = 'Flux Stores and more for Hyperloop'
|
12
|
-
spec.homepage = 'https://
|
12
|
+
spec.homepage = 'https://hyperstack.org'
|
13
13
|
spec.license = 'MIT'
|
14
|
-
# spec.metadata = {
|
15
|
-
# "homepage_uri" => 'http://ruby-hyperloop.org',
|
16
|
-
# "source_code_uri" => 'https://github.com/ruby-hyperloop/hyper-component'
|
17
|
-
# }
|
18
|
-
|
19
14
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(gemfiles|spec)/}) }
|
20
15
|
spec.bindir = 'exe'
|
21
16
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
17
|
spec.require_paths = ['lib']
|
23
18
|
|
24
19
|
spec.add_dependency 'hyperstack-config', Hyperstack::State::VERSION
|
25
|
-
|
20
|
+
|
26
21
|
spec.add_development_dependency 'bundler'
|
27
22
|
spec.add_development_dependency 'chromedriver-helper'
|
28
23
|
spec.add_development_dependency 'hyper-component', Hyperstack::State::VERSION
|
29
24
|
spec.add_development_dependency 'hyper-spec', Hyperstack::State::VERSION
|
30
25
|
spec.add_development_dependency 'listen'
|
31
|
-
spec.add_development_dependency 'mini_racer', '~> 0.
|
26
|
+
# spec.add_development_dependency 'mini_racer', '~> 0.2.4'
|
32
27
|
spec.add_development_dependency 'opal-browser', '~> 0.2.0'
|
33
|
-
spec.add_development_dependency 'opal-rails', '
|
34
|
-
spec.add_development_dependency 'pry-byebug'
|
28
|
+
spec.add_development_dependency 'opal-rails', '>= 0.9.4', '< 2.0'
|
35
29
|
spec.add_development_dependency 'pry-rescue'
|
30
|
+
spec.add_development_dependency 'pry-stack_explorer'
|
36
31
|
spec.add_development_dependency 'puma'
|
37
|
-
spec.add_development_dependency 'rails', '>=
|
32
|
+
spec.add_development_dependency 'rails', ENV['RAILS_VERSION'] || '>= 5.0.0', '< 7.0'
|
38
33
|
spec.add_development_dependency 'rake'
|
39
34
|
spec.add_development_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
|
40
35
|
spec.add_development_dependency 'rspec', '~> 3.7.0'
|
41
36
|
spec.add_development_dependency 'rspec-rails'
|
42
37
|
spec.add_development_dependency 'rspec-steps', '~> 2.1.1'
|
43
|
-
spec.add_development_dependency 'rubocop'
|
44
|
-
spec.add_development_dependency 'sqlite3'
|
38
|
+
spec.add_development_dependency 'rubocop' #, '~> 0.51.0'
|
39
|
+
spec.add_development_dependency 'sqlite3', '~> 1.4.2' # see https://github.com/rails/rails/issues/35153
|
45
40
|
spec.add_development_dependency 'timecop', '~> 0.8.1'
|
46
|
-
|
47
41
|
end
|
@@ -3,7 +3,7 @@ module Hyperstack
|
|
3
3
|
module Callbacks
|
4
4
|
if RUBY_ENGINE != 'opal'
|
5
5
|
class Hyperstack::Hotloader
|
6
|
-
def self.
|
6
|
+
def self.when_file_updates(&block); end
|
7
7
|
end
|
8
8
|
end
|
9
9
|
def self.included(base)
|
@@ -11,26 +11,31 @@ module Hyperstack
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def run_callback(name, *args)
|
14
|
-
self.class.callbacks_for(name).each do |callback|
|
15
|
-
|
16
|
-
|
17
|
-
else
|
18
|
-
send(callback, *args)
|
19
|
-
end
|
14
|
+
self.class.callbacks_for(name).flatten.each do |callback|
|
15
|
+
callback = method(callback) unless callback.is_a? Proc
|
16
|
+
args = self.class.send("_#{name}_before_call_hook", name, self, callback, *args)
|
20
17
|
end
|
18
|
+
args
|
21
19
|
end
|
22
20
|
|
23
21
|
module ClassMethods
|
24
|
-
def define_callback(callback_name,
|
22
|
+
def define_callback(callback_name, before_call_hook: nil, after_define_hook: nil)
|
25
23
|
wrapper_name = "_#{callback_name}_callbacks"
|
26
24
|
define_singleton_method(wrapper_name) do
|
27
25
|
Context.set_var(self, "@#{wrapper_name}", force: true) { [] }
|
28
26
|
end
|
27
|
+
before_call_hook ||= lambda do |_name, sself, proc, *args|
|
28
|
+
sself.instance_exec(*args, &proc)
|
29
|
+
args
|
30
|
+
end
|
31
|
+
define_singleton_method("_#{callback_name}_before_call_hook", &before_call_hook)
|
29
32
|
define_singleton_method(callback_name) do |*args, &block|
|
30
|
-
|
31
|
-
send(wrapper_name).push
|
32
|
-
Hotloader.
|
33
|
-
|
33
|
+
args << block if block_given?
|
34
|
+
send(wrapper_name).push args
|
35
|
+
Hotloader.when_file_updates do
|
36
|
+
send(wrapper_name).delete_if { |item| item.equal? args }
|
37
|
+
end
|
38
|
+
after_define_hook.call(self) if after_define_hook
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
@@ -42,6 +47,10 @@ module Hyperstack
|
|
42
47
|
[]
|
43
48
|
end + send(wrapper_name)
|
44
49
|
end
|
50
|
+
|
51
|
+
def callbacks?(name)
|
52
|
+
callbacks_for(name).any?
|
53
|
+
end
|
45
54
|
end
|
46
55
|
end
|
47
56
|
end
|
@@ -102,6 +102,18 @@ module Hyperstack
|
|
102
102
|
@bulk_update_flag = saved_bulk_update_flag
|
103
103
|
end
|
104
104
|
|
105
|
+
# React already will batch together updates inside of event handlers
|
106
|
+
# so we don't have to, and having Hyperstack batch them outside of the
|
107
|
+
# event handler causes INPUT/TEXT/SELECT s not to work properly.
|
108
|
+
# This method is called by the Component event wrapper.
|
109
|
+
def ignore_bulk_updates(*args)
|
110
|
+
saved_ignore_bulk_update_flag = @ignore_bulk_update_flag
|
111
|
+
@ignore_bulk_update_flag = true
|
112
|
+
yield(*args)
|
113
|
+
ensure
|
114
|
+
@ignore_bulk_update_flag = saved_ignore_bulk_update_flag
|
115
|
+
end
|
116
|
+
|
105
117
|
def ignore_mutations
|
106
118
|
saved_ignore_mutations_flag = @ignore_mutations
|
107
119
|
@ignore_mutations = true
|
@@ -207,9 +219,10 @@ module Hyperstack
|
|
207
219
|
# case that the object being updated is themselves.
|
208
220
|
|
209
221
|
def delay_updates?(object)
|
210
|
-
@
|
211
|
-
|
212
|
-
|
222
|
+
return false if @ignore_bulk_update_flag
|
223
|
+
return true if @bulk_update_flag
|
224
|
+
return false unless Hyperstack.on_client?
|
225
|
+
(@immediate_update != @current_observer || @current_observer != object)
|
213
226
|
end
|
214
227
|
|
215
228
|
# schedule_delayed_updater adds a new set to the
|
@@ -13,7 +13,9 @@ module Hyperstack
|
|
13
13
|
map_object[0]
|
14
14
|
end
|
15
15
|
|
16
|
-
def set(obj, name, value)
|
16
|
+
def set(obj, name, value, _x = nil)
|
17
|
+
# _x is some legacy function, which I think queued up state changes to the end
|
18
|
+
# which is perhaps now the default.
|
17
19
|
map_object = legacy_map[obj][name]
|
18
20
|
map_object[0] = value
|
19
21
|
Hyperstack::Internal::State::Mapper.mutated!(map_object.object_id)
|
@@ -11,14 +11,14 @@ module Hyperstack
|
|
11
11
|
base.send(:"define_#{kind}", :receives) do |*args, &block|
|
12
12
|
Internal::Receiver.mount(self, *args, &block)
|
13
13
|
end
|
14
|
-
base.send(:"define_#{kind}", :observe) do
|
15
|
-
result = block.call
|
14
|
+
base.send(:"define_#{kind}", :observe) do |*args, &block|
|
15
|
+
result = block ? block.call : args.last
|
16
16
|
Internal::State::Mapper.observed! self
|
17
17
|
result
|
18
18
|
end
|
19
|
-
base.send(:"define_#{kind}", :mutate) do |*
|
19
|
+
base.send(:"define_#{kind}", :mutate) do |*args, &block|
|
20
20
|
# any args will be ignored thus allowing us to say `mutate @foo = 123, @bar[:x] = 7` etc
|
21
|
-
result = block.call
|
21
|
+
result = block ? block.call : args.last
|
22
22
|
Internal::State::Mapper.mutated! self
|
23
23
|
result
|
24
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyper-state
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.alpha1.
|
4
|
+
version: 1.0.alpha1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitch VanDuyn
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-04-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hyperstack-config
|
@@ -18,34 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.0.alpha1.
|
21
|
+
version: 1.0.alpha1.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 1.0.alpha1.
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: opal
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - ">="
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: 0.11.0
|
36
|
-
- - "<"
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: 0.12.0
|
39
|
-
type: :runtime
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 0.11.0
|
46
|
-
- - "<"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 0.12.0
|
28
|
+
version: 1.0.alpha1.7
|
49
29
|
- !ruby/object:Gem::Dependency
|
50
30
|
name: bundler
|
51
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,28 +60,28 @@ dependencies:
|
|
80
60
|
requirements:
|
81
61
|
- - '='
|
82
62
|
- !ruby/object:Gem::Version
|
83
|
-
version: 1.0.alpha1.
|
63
|
+
version: 1.0.alpha1.7
|
84
64
|
type: :development
|
85
65
|
prerelease: false
|
86
66
|
version_requirements: !ruby/object:Gem::Requirement
|
87
67
|
requirements:
|
88
68
|
- - '='
|
89
69
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.0.alpha1.
|
70
|
+
version: 1.0.alpha1.7
|
91
71
|
- !ruby/object:Gem::Dependency
|
92
72
|
name: hyper-spec
|
93
73
|
requirement: !ruby/object:Gem::Requirement
|
94
74
|
requirements:
|
95
75
|
- - '='
|
96
76
|
- !ruby/object:Gem::Version
|
97
|
-
version: 1.0.alpha1.
|
77
|
+
version: 1.0.alpha1.7
|
98
78
|
type: :development
|
99
79
|
prerelease: false
|
100
80
|
version_requirements: !ruby/object:Gem::Requirement
|
101
81
|
requirements:
|
102
82
|
- - '='
|
103
83
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.0.alpha1.
|
84
|
+
version: 1.0.alpha1.7
|
105
85
|
- !ruby/object:Gem::Dependency
|
106
86
|
name: listen
|
107
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,20 +96,6 @@ dependencies:
|
|
116
96
|
- - ">="
|
117
97
|
- !ruby/object:Gem::Version
|
118
98
|
version: '0'
|
119
|
-
- !ruby/object:Gem::Dependency
|
120
|
-
name: mini_racer
|
121
|
-
requirement: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - "~>"
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 0.1.15
|
126
|
-
type: :development
|
127
|
-
prerelease: false
|
128
|
-
version_requirements: !ruby/object:Gem::Requirement
|
129
|
-
requirements:
|
130
|
-
- - "~>"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: 0.1.15
|
133
99
|
- !ruby/object:Gem::Dependency
|
134
100
|
name: opal-browser
|
135
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,18 +114,24 @@ dependencies:
|
|
148
114
|
name: opal-rails
|
149
115
|
requirement: !ruby/object:Gem::Requirement
|
150
116
|
requirements:
|
151
|
-
- - "
|
117
|
+
- - ">="
|
152
118
|
- !ruby/object:Gem::Version
|
153
119
|
version: 0.9.4
|
120
|
+
- - "<"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '2.0'
|
154
123
|
type: :development
|
155
124
|
prerelease: false
|
156
125
|
version_requirements: !ruby/object:Gem::Requirement
|
157
126
|
requirements:
|
158
|
-
- - "
|
127
|
+
- - ">="
|
159
128
|
- !ruby/object:Gem::Version
|
160
129
|
version: 0.9.4
|
130
|
+
- - "<"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '2.0'
|
161
133
|
- !ruby/object:Gem::Dependency
|
162
|
-
name: pry-
|
134
|
+
name: pry-rescue
|
163
135
|
requirement: !ruby/object:Gem::Requirement
|
164
136
|
requirements:
|
165
137
|
- - ">="
|
@@ -173,7 +145,7 @@ dependencies:
|
|
173
145
|
- !ruby/object:Gem::Version
|
174
146
|
version: '0'
|
175
147
|
- !ruby/object:Gem::Dependency
|
176
|
-
name: pry-
|
148
|
+
name: pry-stack_explorer
|
177
149
|
requirement: !ruby/object:Gem::Requirement
|
178
150
|
requirements:
|
179
151
|
- - ">="
|
@@ -206,14 +178,20 @@ dependencies:
|
|
206
178
|
requirements:
|
207
179
|
- - ">="
|
208
180
|
- !ruby/object:Gem::Version
|
209
|
-
version:
|
181
|
+
version: 5.0.0
|
182
|
+
- - "<"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '7.0'
|
210
185
|
type: :development
|
211
186
|
prerelease: false
|
212
187
|
version_requirements: !ruby/object:Gem::Requirement
|
213
188
|
requirements:
|
214
189
|
- - ">="
|
215
190
|
- !ruby/object:Gem::Version
|
216
|
-
version:
|
191
|
+
version: 5.0.0
|
192
|
+
- - "<"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '7.0'
|
217
195
|
- !ruby/object:Gem::Dependency
|
218
196
|
name: rake
|
219
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -294,30 +272,30 @@ dependencies:
|
|
294
272
|
name: rubocop
|
295
273
|
requirement: !ruby/object:Gem::Requirement
|
296
274
|
requirements:
|
297
|
-
- - "
|
275
|
+
- - ">="
|
298
276
|
- !ruby/object:Gem::Version
|
299
|
-
version: 0
|
277
|
+
version: '0'
|
300
278
|
type: :development
|
301
279
|
prerelease: false
|
302
280
|
version_requirements: !ruby/object:Gem::Requirement
|
303
281
|
requirements:
|
304
|
-
- - "
|
282
|
+
- - ">="
|
305
283
|
- !ruby/object:Gem::Version
|
306
|
-
version: 0
|
284
|
+
version: '0'
|
307
285
|
- !ruby/object:Gem::Dependency
|
308
286
|
name: sqlite3
|
309
287
|
requirement: !ruby/object:Gem::Requirement
|
310
288
|
requirements:
|
311
|
-
- - "
|
289
|
+
- - "~>"
|
312
290
|
- !ruby/object:Gem::Version
|
313
|
-
version:
|
291
|
+
version: 1.4.2
|
314
292
|
type: :development
|
315
293
|
prerelease: false
|
316
294
|
version_requirements: !ruby/object:Gem::Requirement
|
317
295
|
requirements:
|
318
|
-
- - "
|
296
|
+
- - "~>"
|
319
297
|
- !ruby/object:Gem::Version
|
320
|
-
version:
|
298
|
+
version: 1.4.2
|
321
299
|
- !ruby/object:Gem::Dependency
|
322
300
|
name: timecop
|
323
301
|
requirement: !ruby/object:Gem::Requirement
|
@@ -357,7 +335,7 @@ files:
|
|
357
335
|
- lib/hyperstack/state/observer.rb
|
358
336
|
- lib/hyperstack/state/version.rb
|
359
337
|
- notes.md
|
360
|
-
homepage: https://
|
338
|
+
homepage: https://hyperstack.org
|
361
339
|
licenses:
|
362
340
|
- MIT
|
363
341
|
metadata: {}
|
@@ -376,8 +354,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
376
354
|
- !ruby/object:Gem::Version
|
377
355
|
version: 1.3.1
|
378
356
|
requirements: []
|
379
|
-
|
380
|
-
rubygems_version: 2.7.8
|
357
|
+
rubygems_version: 3.0.8
|
381
358
|
signing_key:
|
382
359
|
specification_version: 4
|
383
360
|
summary: Flux Stores and more for Hyperloop
|