hyper-state 1.0.alpha1.2 → 1.0.alpha1.7

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: 8a4e6861713a026b7878443bedaf51619c9c7152b62bc4a588d6ebd2744c6cb5
4
- data.tar.gz: 0d4bb03e324e82feb7b59706a8a07fa51eaae50ecbf2069ae6db37307c14056c
3
+ metadata.gz: 3a48f43567dbd4be77ee93df1b0de51fa4097169e8643acd510935bb4c6d9708
4
+ data.tar.gz: a55d85b356193be51f28bad347eaf70497a62f4c59213202b6cfb8687c5a2d76
5
5
  SHA512:
6
- metadata.gz: '09092aa06c724440995f34445310cdf526f0c03003c6fd5fee9b7b0af0dd9eb30534c3674a6ce7a967251bd0359a888d79c5f7a1993c8086e17013fef15a44ff'
7
- data.tar.gz: '0081a14b941ccda9fcc54c5b2079e7dd384a9c20cac6ebbeb2884e151fd8803b26a90b77c619e3786c2dc2ce049954b5446ad060e925545100aaf6943a427447'
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://ruby-hyperloop.org'
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
- spec.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
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.1.15'
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', '~> 0.9.4'
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', '>= 4.0.0'
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', '~> 0.51.0'
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.record(*args); end
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
- if callback.is_a?(Proc)
16
- instance_exec(*args, &callback)
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, &after_define_hook)
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
- send(wrapper_name).concat(args)
31
- send(wrapper_name).push(block) if block_given?
32
- Hotloader.record(self, "@#{wrapper_name}", 4, *args, block)
33
- after_define_hook.call(*args, &block) if after_define_hook
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
- @bulk_update_flag ||
211
- (Hyperstack.on_client? &&
212
- (@immediate_update != @current_observer || @current_observer != object))
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 |&block|
15
- result = block.call if block
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 |*_args, &block|
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 if block
21
+ result = block ? block.call : args.last
22
22
  Internal::State::Mapper.mutated! self
23
23
  result
24
24
  end
@@ -1,5 +1,5 @@
1
1
  module Hyperstack
2
2
  module State
3
- VERSION = '1.0.alpha1.2'
3
+ VERSION = '1.0.alpha1.7'
4
4
  end
5
5
  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.2
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: 2018-11-16 00:00:00.000000000 Z
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.2
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.2
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.2
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.2
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.2
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.2
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-byebug
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-rescue
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: 4.0.0
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: 4.0.0
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.51.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.51.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: '0'
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: '0'
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://ruby-hyperloop.org
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
- rubyforge_project:
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