hyper-store 1.0.alpha1.8 → 1.0.0.lap28
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 +1 -4
- data/.rubocop.yml +107 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/DOCS.md +312 -0
- data/Gemfile +1 -4
- data/LICENSE.txt +21 -0
- data/README.md +80 -0
- data/Rakefile +2 -0
- data/dciy.toml +3 -0
- data/hyper-store.gemspec +18 -20
- data/lib/hyper-store.rb +16 -19
- data/lib/hyper-store/class_methods.rb +32 -0
- data/lib/hyper-store/dispatch_receiver.rb +38 -0
- data/lib/hyper-store/instance_methods.rb +40 -0
- data/lib/hyper-store/mutator_wrapper.rb +71 -0
- data/lib/hyper-store/state_wrapper.rb +107 -0
- data/lib/hyper-store/state_wrapper/argument_validator.rb +91 -0
- data/lib/hyper-store/version.rb +3 -0
- data/lib/hyperloop/application/boot.rb +34 -0
- data/lib/hyperloop/store.rb +12 -0
- data/lib/hyperloop/store/mixin.rb +21 -0
- data/lib/react/observable.rb +29 -0
- data/lib/react/state.rb +143 -0
- metadata +64 -116
- data/lib/hyperstack/internal/store/class_methods.rb +0 -36
- data/lib/hyperstack/internal/store/dispatch_receiver.rb +0 -41
- data/lib/hyperstack/internal/store/instance_methods.rb +0 -45
- data/lib/hyperstack/internal/store/mutator_wrapper.rb +0 -84
- data/lib/hyperstack/internal/store/observable.rb +0 -33
- data/lib/hyperstack/internal/store/state_wrapper.rb +0 -116
- data/lib/hyperstack/internal/store/state_wrapper/argument_validator.rb +0 -93
- data/lib/hyperstack/legacy/store.rb +0 -23
- data/lib/hyperstack/legacy/store/version.rb +0 -7
@@ -0,0 +1,91 @@
|
|
1
|
+
module HyperStore
|
2
|
+
class StateWrapper < BaseStoreClass
|
3
|
+
module ArgumentValidator
|
4
|
+
class InvalidOptionError < StandardError; end
|
5
|
+
|
6
|
+
def validate_args!(klass, *args, &block)
|
7
|
+
name, initial_value, opts = parse_arguments(*args, &block)
|
8
|
+
|
9
|
+
opts[:scope] ||= default_scope(klass)
|
10
|
+
opts[:initializer] = validate_initializer(initial_value, klass, opts)
|
11
|
+
opts[:block] = block if block
|
12
|
+
|
13
|
+
if opts[:reader]
|
14
|
+
opts[:reader] = opts[:reader] == true ? name : opts[:reader]
|
15
|
+
end
|
16
|
+
|
17
|
+
[name, opts]
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def invalid_option(message)
|
23
|
+
raise InvalidOptionError, message
|
24
|
+
end
|
25
|
+
|
26
|
+
# Parses the arguments given to get the name, initial_value (if any), and options
|
27
|
+
def parse_arguments(*args)
|
28
|
+
# If the only argument is a hash, the first key => value is name => inital_value
|
29
|
+
if args.first.is_a?(Hash)
|
30
|
+
# If the first key passed in is not the name, raise an error
|
31
|
+
if [:reader, :initializer, :scope].include?(args.first.keys.first.to_sym)
|
32
|
+
message = 'The name of the state must be specified first as '\
|
33
|
+
"either 'state :name' or 'state name: nil'"
|
34
|
+
invalid_option(message)
|
35
|
+
end
|
36
|
+
|
37
|
+
name, initial_value = args[0].shift
|
38
|
+
# Otherwise just the name is passed in by itself first
|
39
|
+
else
|
40
|
+
name = args.shift
|
41
|
+
end
|
42
|
+
|
43
|
+
# [name, initial_value (can be nil), args (if nil then return an empty hash)]
|
44
|
+
[name, initial_value, args[0] || {}]
|
45
|
+
end
|
46
|
+
|
47
|
+
# Converts the initialize option to a Proc
|
48
|
+
def validate_initializer(initial_value, klass, opts) # rubocop:disable Metrics/MethodLength
|
49
|
+
# If we pass in the name as a hash with a value ex: state foo: :bar,
|
50
|
+
# we just put that value inside a Proc and return that
|
51
|
+
if initial_value != nil
|
52
|
+
dup_or_return_intial_value(initial_value)
|
53
|
+
# If we pass in the initialize option
|
54
|
+
elsif opts[:initializer]
|
55
|
+
# If it's a Symbol we convert to to a Proc that calls the method on the instance
|
56
|
+
if [Symbol, String].include?(opts[:initializer].class)
|
57
|
+
method_name = opts[:initializer]
|
58
|
+
if [:class, :shared].include?(opts[:scope])
|
59
|
+
-> { klass.send(:"#{method_name}") }
|
60
|
+
else
|
61
|
+
->(instance) { instance.send(:"#{method_name}") }
|
62
|
+
end
|
63
|
+
# If it is already a Proc we do nothing and just return what was given
|
64
|
+
elsif opts[:initializer].is_a?(Proc)
|
65
|
+
opts[:initializer]
|
66
|
+
# If it's not a Proc or a String we raise an error and return an empty Proc
|
67
|
+
else
|
68
|
+
invalid_option("'state' option 'initialize' must either be a Symbol or a Proc")
|
69
|
+
-> {}
|
70
|
+
end
|
71
|
+
# Otherwise if it's not specified we just return an empty Proc
|
72
|
+
else
|
73
|
+
-> {}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Dup the initial value if possible, otherwise just return it
|
78
|
+
# Ruby has no nice way of doing this...
|
79
|
+
def dup_or_return_intial_value(value)
|
80
|
+
value =
|
81
|
+
begin
|
82
|
+
value.dup
|
83
|
+
rescue
|
84
|
+
value
|
85
|
+
end
|
86
|
+
|
87
|
+
-> { value }
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Hyperloop
|
2
|
+
# insure at least a stub of operation is defined. If
|
3
|
+
# Hyperloop::Operation is already loaded it will have
|
4
|
+
# defined these.
|
5
|
+
class Operation
|
6
|
+
class << self
|
7
|
+
def on_dispatch(&block)
|
8
|
+
receivers << block
|
9
|
+
end unless method_defined? :on_dispatch
|
10
|
+
|
11
|
+
def receivers
|
12
|
+
# use the force: true option so that system code needing to receive
|
13
|
+
# boot will NOT be erased on the next Hyperloop::Context.reset!
|
14
|
+
Hyperloop::Context.set_var(self, :@receivers, force: true) { [] }
|
15
|
+
end unless method_defined? :receivers
|
16
|
+
end
|
17
|
+
end
|
18
|
+
class Application
|
19
|
+
class Boot < Operation
|
20
|
+
class ReactDummyParams
|
21
|
+
attr_reader :context
|
22
|
+
def initialize(context)
|
23
|
+
@context = context
|
24
|
+
end
|
25
|
+
end
|
26
|
+
def self.run(context: nil)
|
27
|
+
params = ReactDummyParams.new(context)
|
28
|
+
receivers.each do |receiver|
|
29
|
+
receiver.call params
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end unless defined? Boot
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Hyperloop
|
2
|
+
class Store
|
3
|
+
module Mixin
|
4
|
+
class << self
|
5
|
+
def included(base)
|
6
|
+
base.include(HyperStore::InstanceMethods)
|
7
|
+
base.extend(HyperStore::ClassMethods)
|
8
|
+
base.extend(HyperStore::DispatchReceiver)
|
9
|
+
|
10
|
+
base.singleton_class.define_singleton_method(:__state_wrapper) do
|
11
|
+
@__state_wrapper ||= Class.new(HyperStore::StateWrapper)
|
12
|
+
end
|
13
|
+
|
14
|
+
base.singleton_class.define_singleton_method(:state) do |*args, &block|
|
15
|
+
__state_wrapper.define_state_methods(base, *args, &block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module React
|
2
|
+
class Observable
|
3
|
+
def initialize(value, on_change = nil, &block)
|
4
|
+
@value = value
|
5
|
+
@on_change = on_change || block
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_missing(method_sym, *args, &block)
|
9
|
+
@value.send(method_sym, *args, &block).tap { |result| @on_change.call @value }
|
10
|
+
end
|
11
|
+
|
12
|
+
def respond_to?(method, *args)
|
13
|
+
if [:call, :to_proc].include? method
|
14
|
+
true
|
15
|
+
else
|
16
|
+
@value.respond_to? method, *args
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(new_value)
|
21
|
+
@on_change.call new_value
|
22
|
+
@value = new_value
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_proc
|
26
|
+
lambda { |arg = @value| @on_change.call arg }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/react/state.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
module React
|
2
|
+
class State
|
3
|
+
|
4
|
+
ALWAYS_UPDATE_STATE_AFTER_RENDER = Hyperloop.on_client? # if on server then we don't wait to update the state
|
5
|
+
@rendering_level = 0
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_reader :current_observer
|
9
|
+
|
10
|
+
def has_observers?(object, name)
|
11
|
+
!observers_by_name[object][name].empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
def bulk_update
|
15
|
+
saved_bulk_update_flag = @bulk_update_flag
|
16
|
+
@bulk_update_flag = true
|
17
|
+
yield
|
18
|
+
ensure
|
19
|
+
@bulk_update_flag = saved_bulk_update_flag
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_state2(object, name, value, updates, exclusions = nil)
|
23
|
+
# set object's name state to value, tell all observers it has changed.
|
24
|
+
# Observers must implement update_react_js_state
|
25
|
+
object_needs_notification = object.respond_to?(:update_react_js_state)
|
26
|
+
observers_by_name[object][name].dup.each do |observer|
|
27
|
+
next if exclusions && exclusions.include?(observer)
|
28
|
+
updates[observer] += [object, name, value]
|
29
|
+
object_needs_notification = false if object == observer
|
30
|
+
end
|
31
|
+
updates[object] += [nil, name, value] if object_needs_notification
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize_states(object, initial_values) # initialize objects' name/value pairs
|
35
|
+
states[object].merge!(initial_values || {})
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_state(object, name, current_observer = @current_observer)
|
39
|
+
# get current value of name for object, remember that the current object depends on this state,
|
40
|
+
# current observer can be overriden with last param
|
41
|
+
if current_observer && !new_observers[current_observer][object].include?(name)
|
42
|
+
new_observers[current_observer][object] << name
|
43
|
+
end
|
44
|
+
if @delayed_updates && @delayed_updates[object][name]
|
45
|
+
@delayed_updates[object][name][1] << current_observer
|
46
|
+
end
|
47
|
+
states[object][name]
|
48
|
+
end
|
49
|
+
|
50
|
+
# ReactDOM.unstable_batchedUpdates does not seem to improve things here, ill leave it here commented for reference
|
51
|
+
# and later investigation
|
52
|
+
#if `ReactDOM.unstable_batchedUpdates !== undefined`
|
53
|
+
# %x{
|
54
|
+
# ReactDOM.unstable_batchedUpdates(function(){
|
55
|
+
# #{updates.each { |observer, args| observer.update_react_js_state(*args) }}
|
56
|
+
# });
|
57
|
+
# }
|
58
|
+
#else # run the other one
|
59
|
+
def set_state(object, name, value, delay=ALWAYS_UPDATE_STATE_AFTER_RENDER)
|
60
|
+
states[object][name] = value
|
61
|
+
delay = false if object.respond_to?(:set_state_synchronously?) && object.set_state_synchronously?
|
62
|
+
if delay || @bulk_update_flag
|
63
|
+
@delayed_updates ||= Hash.new { |h, k| h[k] = {} }
|
64
|
+
@delayed_updates[object][name] = [value, Set.new]
|
65
|
+
@delayed_updater ||= after(0.001) do
|
66
|
+
delayed_updates = @delayed_updates
|
67
|
+
@delayed_updates = Hash.new { |h, k| h[k] = {} } # could this be nil???
|
68
|
+
@delayed_updater = nil
|
69
|
+
updates = Hash.new { |hash, key| hash[key] = Array.new }
|
70
|
+
delayed_updates.each do |object, name_hash|
|
71
|
+
name_hash.each do |name, value_and_set|
|
72
|
+
set_state2(object, name, value_and_set[0], updates, value_and_set[1])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
updates.each { |observer, args| observer.update_react_js_state(*args) }
|
76
|
+
end
|
77
|
+
elsif @rendering_level == 0
|
78
|
+
updates = Hash.new { |hash, key| hash[key] = Array.new }
|
79
|
+
set_state2(object, name, value, updates)
|
80
|
+
updates.each { |observer, args| observer.update_react_js_state(*args) }
|
81
|
+
end
|
82
|
+
value
|
83
|
+
end
|
84
|
+
|
85
|
+
def will_be_observing?(object, name, current_observer)
|
86
|
+
current_observer && new_observers[current_observer][object].include?(name)
|
87
|
+
end
|
88
|
+
|
89
|
+
def is_observing?(object, name, current_observer)
|
90
|
+
current_observer && observers_by_name[object][name].include?(current_observer)
|
91
|
+
end
|
92
|
+
|
93
|
+
def update_states_to_observe(current_observer = @current_observer) # should be called after the last after_render callback, currently called after components render method
|
94
|
+
raise "update_states_to_observer called outside of watch block" unless current_observer
|
95
|
+
current_observers[current_observer].each do |object, names|
|
96
|
+
names.each do |name|
|
97
|
+
observers_by_name[object][name].delete(current_observer)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
observers = current_observers[current_observer] = new_observers[current_observer]
|
101
|
+
new_observers.delete(current_observer)
|
102
|
+
observers.each do |object, names|
|
103
|
+
names.each do |name|
|
104
|
+
observers_by_name[object][name] << current_observer
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def remove # call after component is unmounted
|
110
|
+
raise "remove called outside of watch block" unless @current_observer
|
111
|
+
current_observers[@current_observer].each do |object, names|
|
112
|
+
names.each do |name|
|
113
|
+
observers_by_name[object][name].delete(@current_observer)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
current_observers.delete(@current_observer)
|
117
|
+
end
|
118
|
+
|
119
|
+
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
|
120
|
+
saved_current_observer = @current_observer
|
121
|
+
@current_observer = observer
|
122
|
+
@rendering_level += 1 if rendering
|
123
|
+
return_value = yield
|
124
|
+
return_value
|
125
|
+
ensure
|
126
|
+
@current_observer = saved_current_observer
|
127
|
+
@rendering_level -= 1 if rendering
|
128
|
+
return_value
|
129
|
+
end
|
130
|
+
|
131
|
+
def states
|
132
|
+
@states ||= Hash.new { |h, k| h[k] = {} }
|
133
|
+
end
|
134
|
+
|
135
|
+
[:new_observers, :current_observers, :observers_by_name].each do |method_name|
|
136
|
+
define_method(method_name) do
|
137
|
+
instance_variable_get("@#{method_name}") ||
|
138
|
+
instance_variable_set("@#{method_name}", Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = [] } })
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyper-store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.0.lap28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitch VanDuyn
|
@@ -10,52 +10,44 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-05-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: hyperloop-config
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.0.
|
21
|
+
version: 1.0.0.lap28
|
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.
|
28
|
+
version: 1.0.0.lap28
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
30
|
+
name: opal
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.11.0
|
36
|
+
- - "<"
|
34
37
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
38
|
+
version: 0.12.0
|
36
39
|
type: :runtime
|
37
40
|
prerelease: false
|
38
41
|
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - '='
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 1.0.alpha1.8
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: bundler
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
42
|
requirements:
|
47
43
|
- - ">="
|
48
44
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
50
|
-
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
45
|
+
version: 0.11.0
|
46
|
+
- - "<"
|
55
47
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
48
|
+
version: 0.12.0
|
57
49
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
50
|
+
name: bundler
|
59
51
|
requirement: !ruby/object:Gem::Requirement
|
60
52
|
requirements:
|
61
53
|
- - ">="
|
@@ -69,33 +61,33 @@ dependencies:
|
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '0'
|
71
63
|
- !ruby/object:Gem::Dependency
|
72
|
-
name: hyper-
|
64
|
+
name: hyper-react
|
73
65
|
requirement: !ruby/object:Gem::Requirement
|
74
66
|
requirements:
|
75
67
|
- - '='
|
76
68
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.0.
|
69
|
+
version: 1.0.0.lap28
|
78
70
|
type: :development
|
79
71
|
prerelease: false
|
80
72
|
version_requirements: !ruby/object:Gem::Requirement
|
81
73
|
requirements:
|
82
74
|
- - '='
|
83
75
|
- !ruby/object:Gem::Version
|
84
|
-
version: 1.0.
|
76
|
+
version: 1.0.0.lap28
|
85
77
|
- !ruby/object:Gem::Dependency
|
86
78
|
name: hyper-spec
|
87
79
|
requirement: !ruby/object:Gem::Requirement
|
88
80
|
requirements:
|
89
81
|
- - '='
|
90
82
|
- !ruby/object:Gem::Version
|
91
|
-
version: 1.0.
|
83
|
+
version: 1.0.0.lap28
|
92
84
|
type: :development
|
93
85
|
prerelease: false
|
94
86
|
version_requirements: !ruby/object:Gem::Requirement
|
95
87
|
requirements:
|
96
88
|
- - '='
|
97
89
|
- !ruby/object:Gem::Version
|
98
|
-
version: 1.0.
|
90
|
+
version: 1.0.0.lap28
|
99
91
|
- !ruby/object:Gem::Dependency
|
100
92
|
name: listen
|
101
93
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,69 +103,49 @@ dependencies:
|
|
111
103
|
- !ruby/object:Gem::Version
|
112
104
|
version: '0'
|
113
105
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
106
|
+
name: mini_racer
|
115
107
|
requirement: !ruby/object:Gem::Requirement
|
116
108
|
requirements:
|
117
109
|
- - "~>"
|
118
110
|
- !ruby/object:Gem::Version
|
119
|
-
version: 0.
|
111
|
+
version: 0.1.15
|
120
112
|
type: :development
|
121
113
|
prerelease: false
|
122
114
|
version_requirements: !ruby/object:Gem::Requirement
|
123
115
|
requirements:
|
124
116
|
- - "~>"
|
125
117
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0.
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: opal-rails
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
130
|
-
requirements:
|
131
|
-
- - ">="
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: 0.9.4
|
134
|
-
- - "<"
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: '2.0'
|
137
|
-
type: :development
|
138
|
-
prerelease: false
|
139
|
-
version_requirements: !ruby/object:Gem::Requirement
|
140
|
-
requirements:
|
141
|
-
- - ">="
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: 0.9.4
|
144
|
-
- - "<"
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: '2.0'
|
118
|
+
version: 0.1.15
|
147
119
|
- !ruby/object:Gem::Dependency
|
148
|
-
name:
|
120
|
+
name: opal-browser
|
149
121
|
requirement: !ruby/object:Gem::Requirement
|
150
122
|
requirements:
|
151
|
-
- - "
|
123
|
+
- - "~>"
|
152
124
|
- !ruby/object:Gem::Version
|
153
|
-
version:
|
125
|
+
version: 0.2.0
|
154
126
|
type: :development
|
155
127
|
prerelease: false
|
156
128
|
version_requirements: !ruby/object:Gem::Requirement
|
157
129
|
requirements:
|
158
|
-
- - "
|
130
|
+
- - "~>"
|
159
131
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
132
|
+
version: 0.2.0
|
161
133
|
- !ruby/object:Gem::Dependency
|
162
|
-
name:
|
134
|
+
name: opal-rails
|
163
135
|
requirement: !ruby/object:Gem::Requirement
|
164
136
|
requirements:
|
165
|
-
- - "
|
137
|
+
- - "~>"
|
166
138
|
- !ruby/object:Gem::Version
|
167
|
-
version:
|
139
|
+
version: 0.9.4
|
168
140
|
type: :development
|
169
141
|
prerelease: false
|
170
142
|
version_requirements: !ruby/object:Gem::Requirement
|
171
143
|
requirements:
|
172
|
-
- - "
|
144
|
+
- - "~>"
|
173
145
|
- !ruby/object:Gem::Version
|
174
|
-
version:
|
146
|
+
version: 0.9.4
|
175
147
|
- !ruby/object:Gem::Dependency
|
176
|
-
name:
|
148
|
+
name: pry-byebug
|
177
149
|
requirement: !ruby/object:Gem::Requirement
|
178
150
|
requirements:
|
179
151
|
- - ">="
|
@@ -192,20 +164,14 @@ dependencies:
|
|
192
164
|
requirements:
|
193
165
|
- - ">="
|
194
166
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
196
|
-
- - "<"
|
197
|
-
- !ruby/object:Gem::Version
|
198
|
-
version: '7.0'
|
167
|
+
version: 4.0.0
|
199
168
|
type: :development
|
200
169
|
prerelease: false
|
201
170
|
version_requirements: !ruby/object:Gem::Requirement
|
202
171
|
requirements:
|
203
172
|
- - ">="
|
204
173
|
- !ruby/object:Gem::Version
|
205
|
-
version:
|
206
|
-
- - "<"
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '7.0'
|
174
|
+
version: 4.0.0
|
209
175
|
- !ruby/object:Gem::Dependency
|
210
176
|
name: rake
|
211
177
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,20 +220,6 @@ dependencies:
|
|
254
220
|
- - "~>"
|
255
221
|
- !ruby/object:Gem::Version
|
256
222
|
version: 3.7.0
|
257
|
-
- !ruby/object:Gem::Dependency
|
258
|
-
name: rspec-rails
|
259
|
-
requirement: !ruby/object:Gem::Requirement
|
260
|
-
requirements:
|
261
|
-
- - ">="
|
262
|
-
- !ruby/object:Gem::Version
|
263
|
-
version: '0'
|
264
|
-
type: :development
|
265
|
-
prerelease: false
|
266
|
-
version_requirements: !ruby/object:Gem::Requirement
|
267
|
-
requirements:
|
268
|
-
- - ">="
|
269
|
-
- !ruby/object:Gem::Version
|
270
|
-
version: '0'
|
271
223
|
- !ruby/object:Gem::Dependency
|
272
224
|
name: rspec-steps
|
273
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -284,46 +236,32 @@ dependencies:
|
|
284
236
|
version: 2.1.1
|
285
237
|
- !ruby/object:Gem::Dependency
|
286
238
|
name: rubocop
|
287
|
-
requirement: !ruby/object:Gem::Requirement
|
288
|
-
requirements:
|
289
|
-
- - ">="
|
290
|
-
- !ruby/object:Gem::Version
|
291
|
-
version: '0'
|
292
|
-
type: :development
|
293
|
-
prerelease: false
|
294
|
-
version_requirements: !ruby/object:Gem::Requirement
|
295
|
-
requirements:
|
296
|
-
- - ">="
|
297
|
-
- !ruby/object:Gem::Version
|
298
|
-
version: '0'
|
299
|
-
- !ruby/object:Gem::Dependency
|
300
|
-
name: sqlite3
|
301
239
|
requirement: !ruby/object:Gem::Requirement
|
302
240
|
requirements:
|
303
241
|
- - "~>"
|
304
242
|
- !ruby/object:Gem::Version
|
305
|
-
version:
|
243
|
+
version: 0.51.0
|
306
244
|
type: :development
|
307
245
|
prerelease: false
|
308
246
|
version_requirements: !ruby/object:Gem::Requirement
|
309
247
|
requirements:
|
310
248
|
- - "~>"
|
311
249
|
- !ruby/object:Gem::Version
|
312
|
-
version:
|
250
|
+
version: 0.51.0
|
313
251
|
- !ruby/object:Gem::Dependency
|
314
|
-
name:
|
252
|
+
name: sqlite3
|
315
253
|
requirement: !ruby/object:Gem::Requirement
|
316
254
|
requirements:
|
317
|
-
- - "
|
255
|
+
- - ">="
|
318
256
|
- !ruby/object:Gem::Version
|
319
|
-
version: 0
|
257
|
+
version: '0'
|
320
258
|
type: :development
|
321
259
|
prerelease: false
|
322
260
|
version_requirements: !ruby/object:Gem::Requirement
|
323
261
|
requirements:
|
324
|
-
- - "
|
262
|
+
- - ">="
|
325
263
|
- !ruby/object:Gem::Version
|
326
|
-
version: 0
|
264
|
+
version: '0'
|
327
265
|
description:
|
328
266
|
email:
|
329
267
|
- mitch@catprint.com
|
@@ -333,23 +271,32 @@ extensions: []
|
|
333
271
|
extra_rdoc_files: []
|
334
272
|
files:
|
335
273
|
- ".gitignore"
|
274
|
+
- ".rubocop.yml"
|
336
275
|
- ".travis.yml"
|
276
|
+
- CODE_OF_CONDUCT.md
|
277
|
+
- DOCS.md
|
337
278
|
- Gemfile
|
279
|
+
- LICENSE.txt
|
280
|
+
- README.md
|
338
281
|
- Rakefile
|
339
282
|
- bin/console
|
340
283
|
- bin/setup
|
284
|
+
- dciy.toml
|
341
285
|
- hyper-store.gemspec
|
342
286
|
- lib/hyper-store.rb
|
343
|
-
- lib/
|
344
|
-
- lib/
|
345
|
-
- lib/
|
346
|
-
- lib/
|
347
|
-
- lib/
|
348
|
-
- lib/
|
349
|
-
- lib/
|
350
|
-
- lib/
|
351
|
-
- lib/
|
352
|
-
|
287
|
+
- lib/hyper-store/class_methods.rb
|
288
|
+
- lib/hyper-store/dispatch_receiver.rb
|
289
|
+
- lib/hyper-store/instance_methods.rb
|
290
|
+
- lib/hyper-store/mutator_wrapper.rb
|
291
|
+
- lib/hyper-store/state_wrapper.rb
|
292
|
+
- lib/hyper-store/state_wrapper/argument_validator.rb
|
293
|
+
- lib/hyper-store/version.rb
|
294
|
+
- lib/hyperloop/application/boot.rb
|
295
|
+
- lib/hyperloop/store.rb
|
296
|
+
- lib/hyperloop/store/mixin.rb
|
297
|
+
- lib/react/observable.rb
|
298
|
+
- lib/react/state.rb
|
299
|
+
homepage: https://ruby-hyperloop.org
|
353
300
|
licenses:
|
354
301
|
- MIT
|
355
302
|
metadata: {}
|
@@ -368,7 +315,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
368
315
|
- !ruby/object:Gem::Version
|
369
316
|
version: 1.3.1
|
370
317
|
requirements: []
|
371
|
-
|
318
|
+
rubyforge_project:
|
319
|
+
rubygems_version: 2.7.6
|
372
320
|
signing_key:
|
373
321
|
specification_version: 4
|
374
322
|
summary: Flux Stores and more for Hyperloop
|