hyper-state 1.0.alpha1.1 → 1.0.alpha1.6

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: eb10ec05b438da9beead09918566a05d03ad119dd9711507ea6073e7dd08bc12
4
- data.tar.gz: 55bff91b14d242a57e1792deafcfe8204ca773c782f918fe005161ab28fac267
3
+ metadata.gz: acfff47e32791c6d2f2bb0d4f2b0f171db4a0b041f45ff8424d5695cc515a4cf
4
+ data.tar.gz: 62c00f7a40cd804b285d72b31465946498e5e4cd842daca9ac07b9d5fc9754cd
5
5
  SHA512:
6
- metadata.gz: 6f44826d393b99865fb6d5501d5beffbf7e01152557e19bd4e5269599b57b14cd52cba54e9de50f8446c10e950403c37d722997094866fe910dc8b5263d58b9a
7
- data.tar.gz: 1bdce0a88d8c6307bea7ca9e1e286f547bc5927daf4eeff744bb06ee8b82fc4366a9baa1eb0753f7bf65f1c4781784a5a8acd1bfa86385867e23fca87d70aff8
6
+ metadata.gz: 8e27eb935d489093c38b53fd05bcb1d03a9b34deeaf1729eb7427916b251f1dcd0b9ea7bec9718003a10f4bd436347f52be6762dad08a4fe11c7b8acc39491d8
7
+ data.tar.gz: bc0b139edc6a1f62f0d16766a7f20590b4a3ca71e54f9e2c9d3ec012e73869159c6e8ef4d6ec9725424a778b3b8e709e0dce068a6dd28097b0ed964b6f7f9ff8
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
@@ -22,26 +22,25 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ['lib']
23
23
 
24
24
  spec.add_dependency 'hyperstack-config', Hyperstack::State::VERSION
25
- spec.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
25
+
26
26
  spec.add_development_dependency 'bundler'
27
27
  spec.add_development_dependency 'chromedriver-helper'
28
28
  spec.add_development_dependency 'hyper-component', Hyperstack::State::VERSION
29
29
  spec.add_development_dependency 'hyper-spec', Hyperstack::State::VERSION
30
30
  spec.add_development_dependency 'listen'
31
- spec.add_development_dependency 'mini_racer', '~> 0.1.15'
31
+ # spec.add_development_dependency 'mini_racer', '~> 0.2.4'
32
32
  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'
33
+ spec.add_development_dependency 'opal-rails', '>= 0.9.4', '< 2.0'
35
34
  spec.add_development_dependency 'pry-rescue'
35
+ spec.add_development_dependency 'pry-stack_explorer'
36
36
  spec.add_development_dependency 'puma'
37
- spec.add_development_dependency 'rails', '>= 4.0.0'
37
+ spec.add_development_dependency 'rails', ENV['RAILS_VERSION'] || '>= 5.0.0', '< 7.0'
38
38
  spec.add_development_dependency 'rake'
39
39
  spec.add_development_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
40
40
  spec.add_development_dependency 'rspec', '~> 3.7.0'
41
41
  spec.add_development_dependency 'rspec-rails'
42
42
  spec.add_development_dependency 'rspec-steps', '~> 2.1.1'
43
43
  spec.add_development_dependency 'rubocop', '~> 0.51.0'
44
- spec.add_development_dependency 'sqlite3'
44
+ spec.add_development_dependency 'sqlite3', '~> 1.4.2' # see https://github.com/rails/rails/issues/35153
45
45
  spec.add_development_dependency 'timecop', '~> 0.8.1'
46
-
47
46
  end
data/lib/hyper-state.rb CHANGED
@@ -5,6 +5,7 @@ require 'hyperstack/internal/callbacks'
5
5
  require 'hyperstack/internal/auto_unmount'
6
6
 
7
7
  require 'hyperstack/internal/state/mapper'
8
+ require 'hyperstack/internal/state/variable'
8
9
  require 'hyperstack/internal/auto_unmount'
9
10
  require 'hyperstack/internal/receiver'
10
11
  require 'hyperstack/state/observable'
@@ -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
@@ -0,0 +1,176 @@
1
+ module Hyperstack
2
+ module Internal
3
+ module State
4
+ module Variable
5
+ class << self
6
+ def legacy_map
7
+ @legacy_map ||= Hash.new { |h, k| h[k] = Hash.new { |h2, k2| h2[k2] = Array.new }}
8
+ end
9
+
10
+ def get(obj, name)
11
+ map_object = legacy_map[obj][name]
12
+ Hyperstack::Internal::State::Mapper.observed!(map_object.object_id)
13
+ map_object[0]
14
+ end
15
+
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.
19
+ map_object = legacy_map[obj][name]
20
+ map_object[0] = value
21
+ Hyperstack::Internal::State::Mapper.mutated!(map_object.object_id)
22
+ value
23
+ end
24
+
25
+ def observed?(obj, name)
26
+ map_object = legacy_map[obj][name]
27
+ Hyperstack::Internal::State::Mapper.observed?(map_object.object_id)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ # ALWAYS_UPDATE_STATE_AFTER_RENDER = Hyperstack.on_client? # if on server then we don't wait to update the state
36
+ # @rendering_level = 0
37
+ #
38
+ # class << self
39
+ # attr_reader :current_observer
40
+ #
41
+ # def has_observers?(object, name)
42
+ # !observers_by_name[object][name].empty?
43
+ # end
44
+ #
45
+ # def bulk_update
46
+ # saved_bulk_update_flag = @bulk_update_flag
47
+ # @bulk_update_flag = true
48
+ # yield
49
+ # ensure
50
+ # @bulk_update_flag = saved_bulk_update_flag
51
+ # end
52
+ #
53
+ # def set_state2(object, name, value, updates, exclusions = nil)
54
+ # # set object's name state to value, tell all observers it has changed.
55
+ # # Observers must implement update_react_js_state
56
+ # object_needs_notification = object.respond_to?(:update_react_js_state)
57
+ # observers_by_name[object][name].dup.each do |observer|
58
+ # next if exclusions && exclusions.include?(observer)
59
+ # updates[observer] += [object, name, value]
60
+ # object_needs_notification = false if object == observer
61
+ # end
62
+ # updates[object] += [nil, name, value] if object_needs_notification
63
+ # end
64
+ #
65
+ # def initialize_states(object, initial_values) # initialize objects' name/value pairs
66
+ # states[object].merge!(initial_values || {})
67
+ # end
68
+ #
69
+ # def get_state(object, name, current_observer = @current_observer)
70
+ # # get current value of name for object, remember that the current object depends on this state,
71
+ # # current observer can be overriden with last param
72
+ # if current_observer && !new_observers[current_observer][object].include?(name)
73
+ # new_observers[current_observer][object] << name
74
+ # end
75
+ # if @delayed_updates && @delayed_updates[object][name]
76
+ # @delayed_updates[object][name][1] << current_observer
77
+ # end
78
+ # states[object][name]
79
+ # end
80
+ #
81
+ # # ReactDOM.unstable_batchedUpdates does not seem to improve things here, ill leave it here commented for reference
82
+ # # and later investigation
83
+ # #if `ReactDOM.unstable_batchedUpdates !== undefined`
84
+ # # %x{
85
+ # # ReactDOM.unstable_batchedUpdates(function(){
86
+ # # #{updates.each { |observer, args| observer.update_react_js_state(*args) }}
87
+ # # });
88
+ # # }
89
+ # #else # run the other one
90
+ # def set_state(object, name, value, delay=ALWAYS_UPDATE_STATE_AFTER_RENDER)
91
+ # states[object][name] = value
92
+ # delay = false if object.respond_to?(:set_state_synchronously?) && object.set_state_synchronously?
93
+ # if delay || @bulk_update_flag
94
+ # @delayed_updates ||= Hash.new { |h, k| h[k] = {} }
95
+ # @delayed_updates[object][name] = [value, Set.new]
96
+ # @delayed_updater ||= after(0.001) do
97
+ # delayed_updates = @delayed_updates
98
+ # @delayed_updates = Hash.new { |h, k| h[k] = {} } # could this be nil???
99
+ # @delayed_updater = nil
100
+ # updates = Hash.new { |hash, key| hash[key] = Array.new }
101
+ # delayed_updates.each do |object, name_hash|
102
+ # name_hash.each do |name, value_and_set|
103
+ # set_state2(object, name, value_and_set[0], updates, value_and_set[1])
104
+ # end
105
+ # end
106
+ # updates.each { |observer, args| observer.update_react_js_state(*args) }
107
+ # end
108
+ # elsif @rendering_level == 0
109
+ # updates = Hash.new { |hash, key| hash[key] = Array.new }
110
+ # set_state2(object, name, value, updates)
111
+ # updates.each { |observer, args| observer.update_react_js_state(*args) }
112
+ # end
113
+ # value
114
+ # end
115
+ #
116
+ # def will_be_observing?(object, name, current_observer)
117
+ # current_observer && new_observers[current_observer][object].include?(name)
118
+ # end
119
+ #
120
+ # def is_observing?(object, name, current_observer)
121
+ # current_observer && observers_by_name[object][name].include?(current_observer)
122
+ # end
123
+ #
124
+ # def update_states_to_observe(current_observer = @current_observer) # should be called after the last after_render callback, currently called after components render method
125
+ # raise "update_states_to_observer called outside of watch block" unless current_observer
126
+ # current_observers[current_observer].each do |object, names|
127
+ # names.each do |name|
128
+ # observers_by_name[object][name].delete(current_observer)
129
+ # end
130
+ # end
131
+ # observers = current_observers[current_observer] = new_observers[current_observer]
132
+ # new_observers.delete(current_observer)
133
+ # observers.each do |object, names|
134
+ # names.each do |name|
135
+ # observers_by_name[object][name] << current_observer
136
+ # end
137
+ # end
138
+ # end
139
+ #
140
+ # def remove # call after component is unmounted
141
+ # raise "remove called outside of watch block" unless @current_observer
142
+ # current_observers[@current_observer].each do |object, names|
143
+ # names.each do |name|
144
+ # observers_by_name[object][name].delete(@current_observer)
145
+ # end
146
+ # end
147
+ # current_observers.delete(@current_observer)
148
+ # end
149
+ #
150
+ # def set_state_context_to(observer, rendering = nil) # wrap all execution that may set or get states in a block so we know which observer is executing
151
+ # saved_current_observer = @current_observer
152
+ # @current_observer = observer
153
+ # @rendering_level += 1 if rendering
154
+ # return_value = yield
155
+ # return_value
156
+ # ensure
157
+ # @current_observer = saved_current_observer
158
+ # @rendering_level -= 1 if rendering
159
+ # return_value
160
+ # end
161
+ #
162
+ # def states
163
+ # @states ||= Hash.new { |h, k| h[k] = {} }
164
+ # end
165
+ #
166
+ # [:new_observers, :current_observers, :observers_by_name].each do |method_name|
167
+ # define_method(method_name) do
168
+ # instance_variable_get("@#{method_name}") ||
169
+ # instance_variable_set("@#{method_name}", Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = [] } })
170
+ # end
171
+ # end
172
+ # end
173
+ # end
174
+ # end
175
+ # end
176
+ # end
@@ -11,14 +11,21 @@ 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
+ Internal::State::Mapper.mutated! self
23
+ result
24
+ end
25
+ base.send(:"define_#{kind}", :toggle) do |var|
26
+ # @var = !@var
27
+ var = "@#{var}"
28
+ result = instance_variable_set(var, !instance_variable_get(var))
22
29
  Internal::State::Mapper.mutated! self
23
30
  result
24
31
  end
@@ -1,5 +1,5 @@
1
1
  module Hyperstack
2
2
  module State
3
- VERSION = '1.0.alpha1.1'
3
+ VERSION = '1.0.alpha1.6'
4
4
  end
5
5
  end
data/notes.md CHANGED
@@ -1,6 +1,6 @@
1
1
  typically we see this:
2
2
 
3
- `State.get_state(obj_or_class, key)` and `State.set_state(obj_or_class, key, val)`
3
+ `State::Variable.get(obj_or_class, key)` and `State::Variable.set(obj_or_class, key, val)`
4
4
 
5
5
  we would like to see this:
6
6
 
@@ -66,11 +66,11 @@ internally without reaction
66
66
  so one approach would be to just provide two methods: `observed!` and `mutated!`
67
67
  ```ruby
68
68
  def observed!
69
- State.get_state(self, self)
69
+ State::Variable.get(self, self)
70
70
  end
71
71
 
72
72
  def mutated!
73
- State.set_state(self, self, self)
73
+ State::Variable.set(self, self, self)
74
74
  end
75
75
  ```
76
76
 
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.1
4
+ version: 1.0.alpha1.6
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-14 00:00:00.000000000 Z
13
+ date: 2021-03-29 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.1
21
+ version: 1.0.alpha1.6
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.1
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.6
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.1
63
+ version: 1.0.alpha1.6
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.1
70
+ version: 1.0.alpha1.6
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.1
77
+ version: 1.0.alpha1.6
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.1
84
+ version: 1.0.alpha1.6
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
@@ -308,16 +286,16 @@ dependencies:
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
@@ -352,6 +330,7 @@ files:
352
330
  - lib/hyperstack/internal/callbacks.rb
353
331
  - lib/hyperstack/internal/receiver.rb
354
332
  - lib/hyperstack/internal/state/mapper.rb
333
+ - lib/hyperstack/internal/state/variable.rb
355
334
  - lib/hyperstack/state/observable.rb
356
335
  - lib/hyperstack/state/observer.rb
357
336
  - lib/hyperstack/state/version.rb
@@ -375,8 +354,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
375
354
  - !ruby/object:Gem::Version
376
355
  version: 1.3.1
377
356
  requirements: []
378
- rubyforge_project:
379
- rubygems_version: 2.7.8
357
+ rubygems_version: 3.0.8
380
358
  signing_key:
381
359
  specification_version: 4
382
360
  summary: Flux Stores and more for Hyperloop