hyper-model 1.0.alpha1.3 → 1.0.alpha1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/Rakefile +17 -5
- data/hyper-model.gemspec +1 -1
- data/lib/active_record_base.rb +32 -15
- data/lib/hyper_model/version.rb +1 -1
- data/lib/reactive_record/active_record/base.rb +17 -0
- data/lib/reactive_record/active_record/class_methods.rb +22 -26
- data/lib/reactive_record/active_record/instance_methods.rb +3 -1
- data/lib/reactive_record/active_record/reactive_record/backing_record_inspector.rb +18 -1
- data/lib/reactive_record/active_record/reactive_record/base.rb +35 -20
- data/lib/reactive_record/active_record/reactive_record/collection.rb +70 -20
- data/lib/reactive_record/active_record/reactive_record/getters.rb +11 -2
- data/lib/reactive_record/active_record/reactive_record/isomorphic_base.rb +18 -5
- data/lib/reactive_record/active_record/reactive_record/scoped_collection.rb +3 -6
- data/lib/reactive_record/broadcast.rb +21 -8
- data/lib/reactive_record/permissions.rb +1 -1
- data/lib/reactive_record/server_data_cache.rb +16 -7
- metadata +10 -11
- data/Gemfile.lock +0 -440
@@ -5,7 +5,7 @@ module ReactiveRecord
|
|
5
5
|
def get_belongs_to(assoc, reload = nil)
|
6
6
|
getter_common(assoc.attribute, reload) do |has_key, attr|
|
7
7
|
return if new?
|
8
|
-
value =
|
8
|
+
value = fetch_by_id(attr, @model.primary_key) if id.present?
|
9
9
|
value = find_association(assoc, value)
|
10
10
|
sync_ignore_dummy attr, value, has_key
|
11
11
|
end&.cast_to_current_sti_type
|
@@ -77,8 +77,13 @@ module ReactiveRecord
|
|
77
77
|
elsif on_opal_client?
|
78
78
|
sync_ignore_dummy attr, Base.load_from_db(self, *(vector ? vector : [nil]), attr), has_key
|
79
79
|
elsif id.present?
|
80
|
-
sync_attribute attr,
|
80
|
+
sync_attribute attr, fetch_by_id(attr)
|
81
81
|
else
|
82
|
+
# Not sure how to test this branch, it may never execute this line?
|
83
|
+
# If we are on opal_server then we should always be getting an id before getting here
|
84
|
+
# but if we do vector might not be set up properly to fetch the attribute
|
85
|
+
puts "*** Syncing attribute in getters.rb without an id. This may cause problems. ***"
|
86
|
+
puts "*** Report this to hyperstack.org if you see this message: vector = #{[*vector, attr]}"
|
82
87
|
sync_attribute attr, Base.fetch_from_db([*vector, attr])
|
83
88
|
end
|
84
89
|
end
|
@@ -129,5 +134,9 @@ module ReactiveRecord
|
|
129
134
|
self.aggregate_attribute = attr
|
130
135
|
@ar_instance
|
131
136
|
end
|
137
|
+
|
138
|
+
def fetch_by_id(*vector)
|
139
|
+
Base.fetch_from_db([@model, *find_by_vector(@model.primary_key => id), *vector])
|
140
|
+
end
|
132
141
|
end
|
133
142
|
end
|
@@ -47,6 +47,15 @@ module ReactiveRecord
|
|
47
47
|
self.class.instance_variable_get(:@records)
|
48
48
|
end
|
49
49
|
|
50
|
+
# constructs vector for find_by
|
51
|
+
def self.find_by_vector(attrs)
|
52
|
+
[:all, [:___hyperstack_internal_scoped_find_by, attrs], '*0']
|
53
|
+
end
|
54
|
+
|
55
|
+
def find_by_vector(attrs)
|
56
|
+
self.class.find_by_vector(attrs)
|
57
|
+
end
|
58
|
+
|
50
59
|
# Prerendering db access (returns nil if on client):
|
51
60
|
# at end of prerendering dumps all accessed records in the footer
|
52
61
|
|
@@ -58,7 +67,9 @@ module ReactiveRecord
|
|
58
67
|
|
59
68
|
isomorphic_method(:find_in_db) do |f, klass, attrs|
|
60
69
|
f.send_to_server klass.name, attrs if RUBY_ENGINE == 'opal'
|
61
|
-
f.when_on_server
|
70
|
+
f.when_on_server do
|
71
|
+
@server_data_cache[klass, *find_by_vector(attrs), 'id']
|
72
|
+
end
|
62
73
|
end
|
63
74
|
|
64
75
|
class << self
|
@@ -325,8 +336,6 @@ module ReactiveRecord
|
|
325
336
|
elsif method.is_a? Array #__secure_remote_access_to_
|
326
337
|
if method[0] == 'new'
|
327
338
|
object.new
|
328
|
-
elsif method[0] == 'find_by'
|
329
|
-
object.send(*method)
|
330
339
|
else
|
331
340
|
object.send(:"__secure_remote_access_to_#{method[0]}", object, acting_user, *method[1..-1])
|
332
341
|
end
|
@@ -337,7 +346,11 @@ module ReactiveRecord
|
|
337
346
|
end
|
338
347
|
end
|
339
348
|
if id and (found.nil? or !(found.class <= model) or (found.id and found.id.to_s != id.to_s))
|
340
|
-
|
349
|
+
# TODO: the one case that this is okay is when we are doing a find(some_id) which
|
350
|
+
# does not exist. So the above check needs to deal with that if possible,
|
351
|
+
# otherwise we can just skip this check, as it was put in sometime back for
|
352
|
+
# debugging purposes, and is perhaps not necessary anymore
|
353
|
+
#raise "Inconsistent data sent to server - #{model.name}.find(#{id}) != [#{vector}]"
|
341
354
|
end
|
342
355
|
found
|
343
356
|
elsif id
|
@@ -528,7 +541,7 @@ module ReactiveRecord
|
|
528
541
|
|
529
542
|
promise = Promise.new
|
530
543
|
|
531
|
-
if !data_loading?
|
544
|
+
if !data_loading? && (id || vector)
|
532
545
|
Operations::Destroy.run(model: ar_instance.model_name.to_s, id: id, vector: vector)
|
533
546
|
.then do |response|
|
534
547
|
Broadcast.to_self ar_instance
|
@@ -9,10 +9,10 @@ module ReactiveRecord
|
|
9
9
|
def set_pre_sync_related_records(related_records, _record = nil)
|
10
10
|
@pre_sync_related_records = nil
|
11
11
|
ReactiveRecord::Base.catch_db_requests do
|
12
|
-
puts "#{self}.set_pre_sync_related_records filter_records(#{related_records})"
|
12
|
+
# puts "#{self}.set_pre_sync_related_records filter_records(#{related_records})"
|
13
13
|
|
14
14
|
@pre_sync_related_records = filter_records(related_records)
|
15
|
-
puts "returns #{@pre_sync_related_records}"
|
15
|
+
# puts "returns #{@pre_sync_related_records}"
|
16
16
|
live_scopes.each do |scope|
|
17
17
|
scope.set_pre_sync_related_records(@pre_sync_related_records)
|
18
18
|
end
|
@@ -35,9 +35,7 @@ module ReactiveRecord
|
|
35
35
|
if collector?
|
36
36
|
update_collector_scope(related_records)
|
37
37
|
else
|
38
|
-
puts "#{self}.update_collection calling filter_records(#{related_records})"
|
39
38
|
related_records = filter_records(related_records)
|
40
|
-
puts "returns #{related_records}"
|
41
39
|
update_filter_scope(@pre_sync_related_records, related_records)
|
42
40
|
end
|
43
41
|
end
|
@@ -46,8 +44,7 @@ module ReactiveRecord
|
|
46
44
|
current = Set.new([*@collection])
|
47
45
|
(related_records - @pre_sync_related_records).each { |r| current << r }
|
48
46
|
(@pre_sync_related_records - related_records).each { |r| current.delete(r) }
|
49
|
-
|
50
|
-
replace(filter_records(current).tap { |rr| puts "returns #{rr}" })
|
47
|
+
replace(filter_records(current))
|
51
48
|
Set.new([*@collection])
|
52
49
|
end
|
53
50
|
|
@@ -63,7 +63,7 @@ module ReactiveRecord
|
|
63
63
|
ReactiveRecord::Collection.sync_scopes broadcast.process_previous_changes
|
64
64
|
end
|
65
65
|
end
|
66
|
-
end
|
66
|
+
end if RUBY_ENGINE == 'opal'
|
67
67
|
|
68
68
|
def self.to_self(record, data = {})
|
69
69
|
# simulate incoming packet after a local save
|
@@ -145,11 +145,6 @@ module ReactiveRecord
|
|
145
145
|
record.backing_record.destroyed = @destroyed
|
146
146
|
@backing_record = record.backing_record
|
147
147
|
@previous_changes = record.changes
|
148
|
-
# attributes = record.attributes
|
149
|
-
# data.each do |k, v|
|
150
|
-
# next if klass.reflect_on_association(k) || attributes[k] == v
|
151
|
-
# @previous_changes[k] = [attributes[k], v]
|
152
|
-
# end
|
153
148
|
self
|
154
149
|
end
|
155
150
|
|
@@ -162,7 +157,26 @@ module ReactiveRecord
|
|
162
157
|
@previous_changes.merge! params.previous_changes
|
163
158
|
ReactiveRecord::Base.when_not_saving(klass) do
|
164
159
|
@backing_record = ReactiveRecord::Base.exists?(klass, params.record[:id])
|
165
|
-
|
160
|
+
|
161
|
+
# first check to see if we already destroyed it and if so exit the block
|
162
|
+
return if @backing_record&.destroyed
|
163
|
+
|
164
|
+
# We ignore whether the record is being created or not, and just check and see if in our
|
165
|
+
# local copy we have ever loaded this id before. If we have then its not new to us.
|
166
|
+
# BUT if we are destroying a record then it can't be treated as new regardless.
|
167
|
+
# This is because we might be just doing a count on a scope and so no actual records will
|
168
|
+
# exist. Treating a destroyed record as "new" would cause us to first increment the
|
169
|
+
# scope counter and then decrement for the destroy, resulting in a nop instead of a -1 on
|
170
|
+
# the scope count.
|
171
|
+
@is_new = !@backing_record&.id_loaded? && !@destroyed
|
172
|
+
|
173
|
+
# it is possible that we are recieving data on a record for which we are also waiting
|
174
|
+
# on an an inital data load in which case we have not yet set the loaded id, so we
|
175
|
+
# set if now.
|
176
|
+
@backing_record&.loaded_id = params.record[:id]
|
177
|
+
|
178
|
+
# once we have received all the data from all the channels (applies to create and update only)
|
179
|
+
# we yield and process the record
|
166
180
|
yield complete! if @channels == @received
|
167
181
|
end
|
168
182
|
end
|
@@ -219,7 +233,6 @@ module ReactiveRecord
|
|
219
233
|
end
|
220
234
|
[attr, value]
|
221
235
|
end.compact.flatten(1)]
|
222
|
-
# TODO: verify - it used to be current_values.merge(br.attributes)
|
223
236
|
klass._react_param_conversion(br.attributes.merge(current_values))
|
224
237
|
end
|
225
238
|
end
|
@@ -90,7 +90,7 @@ class ActiveRecord::Base
|
|
90
90
|
def belongs_to(attr_name, *args)
|
91
91
|
belongs_to_without_reactive_record_add_is_method(attr_name, *args).tap do
|
92
92
|
define_method "#{attr_name}_is?".to_sym do |model|
|
93
|
-
self.class.reflections[attr_name.to_s].foreign_key == model.id
|
93
|
+
attributes[self.class.reflections[attr_name.to_s].foreign_key] == model.id
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
@@ -291,9 +291,11 @@ module ReactiveRecord
|
|
291
291
|
cache_item.value.check_permission_with_acting_user(@acting_user, :view_permitted?, method)
|
292
292
|
cache_item.build_new_cache_item(timing(:active_record) { cache_item.value.send(*method) }, method, method)
|
293
293
|
else
|
294
|
-
raise "method
|
294
|
+
raise "Method missing while fetching data: \`#{cache_item.value}##{[*method].first}\` "\
|
295
|
+
'should either be an attribute or a method defined using the server_method of finder_method macros.'
|
295
296
|
end
|
296
297
|
# rescue Exception => e # this check may no longer be needed as we are quite explicit now on which methods we apply
|
298
|
+
# binding.pry
|
297
299
|
# # ReactiveRecord::Pry::rescued(e)
|
298
300
|
# #::Rails.logger.debug "\033[0;31;1mERROR: HyperModel exception caught when applying #{method} to db object #{cache_item.value}: #{e}\033[0;30;21m"
|
299
301
|
# raise e, "HyperModel fetching records failed, exception caught when applying #{method} to db object #{cache_item.value}: #{e}", e.backtrace
|
@@ -378,6 +380,8 @@ module ReactiveRecord
|
|
378
380
|
if method == "*"
|
379
381
|
if @value.is_a? Array # this happens when a scope is empty there is test case, but
|
380
382
|
@parent.as_hash({}) # does it work for all edge cases?
|
383
|
+
elsif (@value.class < ActiveRecord::Base) && children.is_a?(Hash)
|
384
|
+
@parent.as_hash({@value.id => merge_inheritance_column(children)})
|
381
385
|
else
|
382
386
|
@parent.as_hash({@value.id => children})
|
383
387
|
end
|
@@ -431,14 +435,20 @@ keys:
|
|
431
435
|
if value is a hash
|
432
436
|
=end
|
433
437
|
|
434
|
-
|
435
438
|
def self.load_from_json(tree, target = nil)
|
436
|
-
|
437
439
|
# have to process *all before any other items
|
438
440
|
# we leave the "*all" key in just for debugging purposes, and then skip it below
|
439
441
|
|
440
442
|
if sorted_collection = tree["*all"]
|
441
|
-
|
443
|
+
loaded_collection = sorted_collection.collect do |id|
|
444
|
+
ReactiveRecord::Base.find_by_id(target.proxy_association.klass, id)
|
445
|
+
end
|
446
|
+
if loaded_collection[0] && target.scope_description&.name == '___hyperstack_internal_scoped_find_by'
|
447
|
+
primary_key = target.proxy_association.klass.primary_key
|
448
|
+
attrs = target.vector[-1][1].reject { |key, _| key == primary_key }
|
449
|
+
loaded_collection[0].backing_record.sync_attributes(attrs)
|
450
|
+
end
|
451
|
+
target.replace loaded_collection
|
442
452
|
end
|
443
453
|
|
444
454
|
if id_value = tree["id"] and id_value.is_a? Array
|
@@ -456,14 +466,13 @@ keys:
|
|
456
466
|
target.set_count_state(value.first)
|
457
467
|
elsif method.is_a? Integer or method =~ /^[0-9]+$/
|
458
468
|
new_target = target.push_and_update_belongs_to(method)
|
459
|
-
#target << (new_target = target.proxy_association.klass.find(method))
|
460
469
|
elsif method.is_a? Array
|
461
470
|
if method[0] == "new"
|
462
471
|
new_target = ReactiveRecord::Base.lookup_by_object_id(method[1])
|
463
472
|
elsif !(target.class < ActiveRecord::Base)
|
464
473
|
new_target = target.send(*method)
|
465
474
|
# value is an array if scope returns nil, so we destroy the bogus record
|
466
|
-
new_target.destroy
|
475
|
+
new_target.destroy && (new_target = nil) if value.is_a? Array
|
467
476
|
else
|
468
477
|
target.backing_record.update_simple_attribute([method], target.backing_record.convert(method, value.first))
|
469
478
|
end
|
@@ -479,7 +488,7 @@ keys:
|
|
479
488
|
target.backing_record.set_attr_value(method, value.first) unless method == :id
|
480
489
|
elsif value.is_a? Hash and value[:id] and value[:id].first and association = target.class.reflect_on_association(method)
|
481
490
|
# not sure if its necessary to check the id above... is it possible to for the method to be an association but not have an id?
|
482
|
-
new_target = association.klass
|
491
|
+
new_target = ReactiveRecord::Base.find_by_id(association.klass, value[:id].first)
|
483
492
|
target.send "#{method}=", new_target
|
484
493
|
elsif !(target.class < ActiveRecord::Base)
|
485
494
|
new_target = target.send(*method)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyper-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.alpha1.
|
4
|
+
version: 1.0.alpha1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitch VanDuyn
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-02-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -45,28 +45,28 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - '='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.0.alpha1.
|
48
|
+
version: 1.0.alpha1.4
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - '='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 1.0.alpha1.
|
55
|
+
version: 1.0.alpha1.4
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: hyper-operation
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - '='
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.0.alpha1.
|
62
|
+
version: 1.0.alpha1.4
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - '='
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0.alpha1.
|
69
|
+
version: 1.0.alpha1.4
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: bundler
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -545,16 +545,16 @@ dependencies:
|
|
545
545
|
name: sqlite3
|
546
546
|
requirement: !ruby/object:Gem::Requirement
|
547
547
|
requirements:
|
548
|
-
- - "
|
548
|
+
- - "~>"
|
549
549
|
- !ruby/object:Gem::Version
|
550
|
-
version:
|
550
|
+
version: 1.3.6
|
551
551
|
type: :development
|
552
552
|
prerelease: false
|
553
553
|
version_requirements: !ruby/object:Gem::Requirement
|
554
554
|
requirements:
|
555
|
-
- - "
|
555
|
+
- - "~>"
|
556
556
|
- !ruby/object:Gem::Version
|
557
|
-
version:
|
557
|
+
version: 1.3.6
|
558
558
|
- !ruby/object:Gem::Dependency
|
559
559
|
name: timecop
|
560
560
|
requirement: !ruby/object:Gem::Requirement
|
@@ -598,7 +598,6 @@ files:
|
|
598
598
|
- ".rspec"
|
599
599
|
- ".travis.yml"
|
600
600
|
- Gemfile
|
601
|
-
- Gemfile.lock
|
602
601
|
- Rakefile
|
603
602
|
- bin/console
|
604
603
|
- bin/setup
|
data/Gemfile.lock
DELETED
@@ -1,440 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../hyper-component
|
3
|
-
specs:
|
4
|
-
hyper-component (1.0.alpha1.3)
|
5
|
-
hyper-state (= 1.0.alpha1.3)
|
6
|
-
hyperstack-config (= 1.0.alpha1.3)
|
7
|
-
libv8 (~> 6.7.0)
|
8
|
-
mini_racer (~> 0.2.4)
|
9
|
-
opal (>= 0.11.0, < 0.12.0)
|
10
|
-
opal-activesupport (~> 0.3.1)
|
11
|
-
react-rails (>= 2.4.0, < 2.5.0)
|
12
|
-
|
13
|
-
PATH
|
14
|
-
remote: ../hyper-operation
|
15
|
-
specs:
|
16
|
-
hyper-operation (1.0.alpha1.3)
|
17
|
-
activerecord (>= 4.0.0)
|
18
|
-
hyper-component (= 1.0.alpha1.3)
|
19
|
-
mutations
|
20
|
-
opal-activesupport (~> 0.3.1)
|
21
|
-
tty-table
|
22
|
-
|
23
|
-
PATH
|
24
|
-
remote: ../hyper-state
|
25
|
-
specs:
|
26
|
-
hyper-state (1.0.alpha1.3)
|
27
|
-
hyperstack-config (= 1.0.alpha1.3)
|
28
|
-
opal (>= 0.11.0, < 0.12.0)
|
29
|
-
|
30
|
-
PATH
|
31
|
-
remote: ../hyperstack-config
|
32
|
-
specs:
|
33
|
-
hyperstack-config (1.0.alpha1.3)
|
34
|
-
listen (~> 3.0)
|
35
|
-
mini_racer (~> 0.2.4)
|
36
|
-
opal (>= 0.11.0, < 0.12.0)
|
37
|
-
opal-browser (~> 0.2.0)
|
38
|
-
uglifier
|
39
|
-
websocket
|
40
|
-
|
41
|
-
PATH
|
42
|
-
remote: .
|
43
|
-
specs:
|
44
|
-
hyper-model (1.0.alpha1.3)
|
45
|
-
activemodel
|
46
|
-
activerecord (>= 4.0.0)
|
47
|
-
hyper-component (= 1.0.alpha1.3)
|
48
|
-
hyper-operation (= 1.0.alpha1.3)
|
49
|
-
|
50
|
-
GEM
|
51
|
-
remote: https://rubygems.org/
|
52
|
-
specs:
|
53
|
-
abstract_type (0.0.7)
|
54
|
-
actioncable (5.2.1)
|
55
|
-
actionpack (= 5.2.1)
|
56
|
-
nio4r (~> 2.0)
|
57
|
-
websocket-driver (>= 0.6.1)
|
58
|
-
actionmailer (5.2.1)
|
59
|
-
actionpack (= 5.2.1)
|
60
|
-
actionview (= 5.2.1)
|
61
|
-
activejob (= 5.2.1)
|
62
|
-
mail (~> 2.5, >= 2.5.4)
|
63
|
-
rails-dom-testing (~> 2.0)
|
64
|
-
actionpack (5.2.1)
|
65
|
-
actionview (= 5.2.1)
|
66
|
-
activesupport (= 5.2.1)
|
67
|
-
rack (~> 2.0)
|
68
|
-
rack-test (>= 0.6.3)
|
69
|
-
rails-dom-testing (~> 2.0)
|
70
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
71
|
-
actionview (5.2.1)
|
72
|
-
activesupport (= 5.2.1)
|
73
|
-
builder (~> 3.1)
|
74
|
-
erubi (~> 1.4)
|
75
|
-
rails-dom-testing (~> 2.0)
|
76
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
77
|
-
activejob (5.2.1)
|
78
|
-
activesupport (= 5.2.1)
|
79
|
-
globalid (>= 0.3.6)
|
80
|
-
activemodel (5.2.1)
|
81
|
-
activesupport (= 5.2.1)
|
82
|
-
activerecord (5.2.1)
|
83
|
-
activemodel (= 5.2.1)
|
84
|
-
activesupport (= 5.2.1)
|
85
|
-
arel (>= 9.0)
|
86
|
-
activestorage (5.2.1)
|
87
|
-
actionpack (= 5.2.1)
|
88
|
-
activerecord (= 5.2.1)
|
89
|
-
marcel (~> 0.3.1)
|
90
|
-
activesupport (5.2.1)
|
91
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
92
|
-
i18n (>= 0.7, < 2)
|
93
|
-
minitest (~> 5.1)
|
94
|
-
tzinfo (~> 1.1)
|
95
|
-
adamantium (0.2.0)
|
96
|
-
ice_nine (~> 0.11.0)
|
97
|
-
memoizable (~> 0.4.0)
|
98
|
-
addressable (2.5.2)
|
99
|
-
public_suffix (>= 2.0.2, < 4.0)
|
100
|
-
archive-zip (0.11.0)
|
101
|
-
io-like (~> 0.3.0)
|
102
|
-
arel (9.0.0)
|
103
|
-
ast (2.4.0)
|
104
|
-
babel-source (5.8.35)
|
105
|
-
babel-transpiler (0.7.0)
|
106
|
-
babel-source (>= 4.0, < 6)
|
107
|
-
execjs (~> 2.0)
|
108
|
-
builder (3.2.3)
|
109
|
-
capybara (3.7.2)
|
110
|
-
addressable
|
111
|
-
mini_mime (>= 0.1.3)
|
112
|
-
nokogiri (~> 1.8)
|
113
|
-
rack (>= 1.6.0)
|
114
|
-
rack-test (>= 0.6.3)
|
115
|
-
xpath (~> 3.1)
|
116
|
-
childprocess (0.9.0)
|
117
|
-
ffi (~> 1.0, >= 1.0.11)
|
118
|
-
chromedriver-helper (1.2.0)
|
119
|
-
archive-zip (~> 0.10)
|
120
|
-
nokogiri (~> 1.8)
|
121
|
-
coderay (1.1.2)
|
122
|
-
concord (0.1.5)
|
123
|
-
adamantium (~> 0.2.0)
|
124
|
-
equalizer (~> 0.0.9)
|
125
|
-
concurrent-ruby (1.0.5)
|
126
|
-
connection_pool (2.2.2)
|
127
|
-
cookiejar (0.3.3)
|
128
|
-
crass (1.0.4)
|
129
|
-
daemons (1.2.6)
|
130
|
-
database_cleaner (1.7.0)
|
131
|
-
diff-lcs (1.3)
|
132
|
-
em-http-request (1.1.5)
|
133
|
-
addressable (>= 2.3.4)
|
134
|
-
cookiejar (!= 0.3.1)
|
135
|
-
em-socksify (>= 0.3)
|
136
|
-
eventmachine (>= 1.0.3)
|
137
|
-
http_parser.rb (>= 0.6.0)
|
138
|
-
em-socksify (0.3.2)
|
139
|
-
eventmachine (>= 1.0.0.beta.4)
|
140
|
-
em-websocket (0.5.1)
|
141
|
-
eventmachine (>= 0.12.9)
|
142
|
-
http_parser.rb (~> 0.6.0)
|
143
|
-
equalizer (0.0.11)
|
144
|
-
equatable (0.5.0)
|
145
|
-
erubi (1.7.1)
|
146
|
-
eventmachine (1.2.7)
|
147
|
-
execjs (2.7.0)
|
148
|
-
factory_bot (4.11.1)
|
149
|
-
activesupport (>= 3.0.0)
|
150
|
-
factory_bot_rails (4.11.1)
|
151
|
-
factory_bot (~> 4.11.1)
|
152
|
-
railties (>= 3.0.0)
|
153
|
-
ffi (1.9.25)
|
154
|
-
globalid (0.4.1)
|
155
|
-
activesupport (>= 4.2.0)
|
156
|
-
hike (1.2.3)
|
157
|
-
http_parser.rb (0.6.0)
|
158
|
-
httpclient (2.8.3)
|
159
|
-
i18n (1.1.0)
|
160
|
-
concurrent-ruby (~> 1.0)
|
161
|
-
ice_nine (0.11.2)
|
162
|
-
interception (0.5)
|
163
|
-
io-like (0.3.0)
|
164
|
-
jquery-rails (4.3.3)
|
165
|
-
rails-dom-testing (>= 1, < 3)
|
166
|
-
railties (>= 4.2.0)
|
167
|
-
thor (>= 0.14, < 2.0)
|
168
|
-
libv8 (6.7.288.46.1)
|
169
|
-
listen (3.1.5)
|
170
|
-
rb-fsevent (~> 0.9, >= 0.9.4)
|
171
|
-
rb-inotify (~> 0.9, >= 0.9.7)
|
172
|
-
ruby_dep (~> 1.2)
|
173
|
-
loofah (2.2.2)
|
174
|
-
crass (~> 1.0.2)
|
175
|
-
nokogiri (>= 1.5.9)
|
176
|
-
mail (2.7.0)
|
177
|
-
mini_mime (>= 0.1.1)
|
178
|
-
marcel (0.3.2)
|
179
|
-
mimemagic (~> 0.3.2)
|
180
|
-
memoizable (0.4.2)
|
181
|
-
thread_safe (~> 0.3, >= 0.3.1)
|
182
|
-
method_source (0.9.0)
|
183
|
-
mimemagic (0.3.2)
|
184
|
-
mini_mime (1.0.1)
|
185
|
-
mini_portile2 (2.3.0)
|
186
|
-
mini_racer (0.2.4)
|
187
|
-
libv8 (>= 6.3)
|
188
|
-
minitest (5.11.3)
|
189
|
-
multi_json (1.13.1)
|
190
|
-
mutations (0.8.3)
|
191
|
-
activesupport
|
192
|
-
mysql2 (0.5.2)
|
193
|
-
necromancer (0.4.0)
|
194
|
-
nio4r (2.3.1)
|
195
|
-
nokogiri (1.8.4)
|
196
|
-
mini_portile2 (~> 2.3.0)
|
197
|
-
opal (0.11.3)
|
198
|
-
ast (>= 2.3.0)
|
199
|
-
hike (~> 1.2)
|
200
|
-
parser (= 2.3.3.1)
|
201
|
-
sourcemap (~> 0.1.0)
|
202
|
-
opal-activesupport (0.3.1)
|
203
|
-
opal (>= 0.5.0, < 1.0.0)
|
204
|
-
opal-browser (0.2.0)
|
205
|
-
opal
|
206
|
-
paggio
|
207
|
-
opal-jquery (0.4.3)
|
208
|
-
opal (>= 0.10.0, < 0.12.0)
|
209
|
-
opal-rails (0.9.5)
|
210
|
-
jquery-rails
|
211
|
-
opal (>= 0.11.0, < 0.12)
|
212
|
-
opal-activesupport (>= 0.0.5)
|
213
|
-
opal-jquery (~> 0.4.0)
|
214
|
-
opal-sprockets (~> 0.4.2)
|
215
|
-
rails (>= 4.1, < 6.0)
|
216
|
-
sprockets-rails (>= 2.3.3, < 4.0)
|
217
|
-
opal-sprockets (0.4.2.0.11.0.3.1)
|
218
|
-
opal (~> 0.11.0)
|
219
|
-
sprockets (~> 3.1)
|
220
|
-
tilt (>= 1.4)
|
221
|
-
paggio (0.2.6)
|
222
|
-
parallel (1.12.1)
|
223
|
-
parser (2.3.3.1)
|
224
|
-
ast (~> 2.2)
|
225
|
-
pastel (0.7.2)
|
226
|
-
equatable (~> 0.5.0)
|
227
|
-
tty-color (~> 0.4.0)
|
228
|
-
powerpack (0.1.2)
|
229
|
-
procto (0.0.3)
|
230
|
-
pry (0.11.3)
|
231
|
-
coderay (~> 1.1.0)
|
232
|
-
method_source (~> 0.9.0)
|
233
|
-
pry-rescue (1.4.5)
|
234
|
-
interception (>= 0.5)
|
235
|
-
pry
|
236
|
-
public_suffix (3.0.3)
|
237
|
-
puma (3.12.0)
|
238
|
-
pusher (1.3.1)
|
239
|
-
httpclient (~> 2.7)
|
240
|
-
multi_json (~> 1.0)
|
241
|
-
pusher-signature (~> 0.1.8)
|
242
|
-
pusher-fake (1.10.0)
|
243
|
-
em-http-request (~> 1.1)
|
244
|
-
em-websocket (~> 0.5)
|
245
|
-
multi_json (~> 1.6)
|
246
|
-
thin (~> 1.5)
|
247
|
-
pusher-signature (0.1.8)
|
248
|
-
rack (2.0.5)
|
249
|
-
rack-test (1.1.0)
|
250
|
-
rack (>= 1.0, < 3)
|
251
|
-
rails (5.2.1)
|
252
|
-
actioncable (= 5.2.1)
|
253
|
-
actionmailer (= 5.2.1)
|
254
|
-
actionpack (= 5.2.1)
|
255
|
-
actionview (= 5.2.1)
|
256
|
-
activejob (= 5.2.1)
|
257
|
-
activemodel (= 5.2.1)
|
258
|
-
activerecord (= 5.2.1)
|
259
|
-
activestorage (= 5.2.1)
|
260
|
-
activesupport (= 5.2.1)
|
261
|
-
bundler (>= 1.3.0)
|
262
|
-
railties (= 5.2.1)
|
263
|
-
sprockets-rails (>= 2.0.0)
|
264
|
-
rails-dom-testing (2.0.3)
|
265
|
-
activesupport (>= 4.2.0)
|
266
|
-
nokogiri (>= 1.6)
|
267
|
-
rails-html-sanitizer (1.0.4)
|
268
|
-
loofah (~> 2.2, >= 2.2.2)
|
269
|
-
railties (5.2.1)
|
270
|
-
actionpack (= 5.2.1)
|
271
|
-
activesupport (= 5.2.1)
|
272
|
-
method_source
|
273
|
-
rake (>= 0.8.7)
|
274
|
-
thor (>= 0.19.0, < 2.0)
|
275
|
-
rainbow (2.2.2)
|
276
|
-
rake
|
277
|
-
rake (12.3.1)
|
278
|
-
rb-fsevent (0.10.3)
|
279
|
-
rb-inotify (0.10.0)
|
280
|
-
ffi (~> 1.0)
|
281
|
-
react-rails (2.4.7)
|
282
|
-
babel-transpiler (>= 0.7.0)
|
283
|
-
connection_pool
|
284
|
-
execjs
|
285
|
-
railties (>= 3.2)
|
286
|
-
tilt
|
287
|
-
reactrb-rails-generator (0.2.0)
|
288
|
-
rails (>= 4.0.0)
|
289
|
-
rspec (3.8.0)
|
290
|
-
rspec-core (~> 3.8.0)
|
291
|
-
rspec-expectations (~> 3.8.0)
|
292
|
-
rspec-mocks (~> 3.8.0)
|
293
|
-
rspec-collection_matchers (1.1.3)
|
294
|
-
rspec-expectations (>= 2.99.0.beta1)
|
295
|
-
rspec-core (3.8.0)
|
296
|
-
rspec-support (~> 3.8.0)
|
297
|
-
rspec-expectations (3.8.1)
|
298
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
299
|
-
rspec-support (~> 3.8.0)
|
300
|
-
rspec-its (1.2.0)
|
301
|
-
rspec-core (>= 3.0.0)
|
302
|
-
rspec-expectations (>= 3.0.0)
|
303
|
-
rspec-mocks (3.8.0)
|
304
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
305
|
-
rspec-support (~> 3.8.0)
|
306
|
-
rspec-rails (3.8.0)
|
307
|
-
actionpack (>= 3.0)
|
308
|
-
activesupport (>= 3.0)
|
309
|
-
railties (>= 3.0)
|
310
|
-
rspec-core (~> 3.8.0)
|
311
|
-
rspec-expectations (~> 3.8.0)
|
312
|
-
rspec-mocks (~> 3.8.0)
|
313
|
-
rspec-support (~> 3.8.0)
|
314
|
-
rspec-steps (2.1.1)
|
315
|
-
rspec (>= 3.0, < 3.99)
|
316
|
-
rspec-support (3.8.0)
|
317
|
-
rspec-wait (0.0.9)
|
318
|
-
rspec (>= 3, < 4)
|
319
|
-
rubocop (0.51.0)
|
320
|
-
parallel (~> 1.10)
|
321
|
-
parser (>= 2.3.3.1, < 3.0)
|
322
|
-
powerpack (~> 0.1)
|
323
|
-
rainbow (>= 2.2.2, < 3.0)
|
324
|
-
ruby-progressbar (~> 1.7)
|
325
|
-
unicode-display_width (~> 1.0, >= 1.0.1)
|
326
|
-
ruby-progressbar (1.10.0)
|
327
|
-
ruby_dep (1.5.0)
|
328
|
-
rubyzip (1.2.2)
|
329
|
-
selenium-webdriver (3.14.0)
|
330
|
-
childprocess (~> 0.5)
|
331
|
-
rubyzip (~> 1.2)
|
332
|
-
shoulda (3.6.0)
|
333
|
-
shoulda-context (~> 1.0, >= 1.0.1)
|
334
|
-
shoulda-matchers (~> 3.0)
|
335
|
-
shoulda-context (1.2.2)
|
336
|
-
shoulda-matchers (3.1.2)
|
337
|
-
activesupport (>= 4.0.0)
|
338
|
-
sourcemap (0.1.1)
|
339
|
-
spring (2.0.2)
|
340
|
-
activesupport (>= 4.2)
|
341
|
-
spring-commands-rspec (1.0.4)
|
342
|
-
spring (>= 0.9.1)
|
343
|
-
sprockets (3.7.2)
|
344
|
-
concurrent-ruby (~> 1.0)
|
345
|
-
rack (> 1, < 3)
|
346
|
-
sprockets-rails (3.2.1)
|
347
|
-
actionpack (>= 4.0)
|
348
|
-
activesupport (>= 4.0)
|
349
|
-
sprockets (>= 3.0.0)
|
350
|
-
sqlite3 (1.3.13)
|
351
|
-
strings (0.1.4)
|
352
|
-
strings-ansi (~> 0.1.0)
|
353
|
-
unicode-display_width (~> 1.4.0)
|
354
|
-
unicode_utils (~> 1.4.0)
|
355
|
-
strings-ansi (0.1.0)
|
356
|
-
thin (1.7.2)
|
357
|
-
daemons (~> 1.0, >= 1.0.9)
|
358
|
-
eventmachine (~> 1.0, >= 1.0.4)
|
359
|
-
rack (>= 1, < 3)
|
360
|
-
thor (0.20.0)
|
361
|
-
thread_safe (0.3.6)
|
362
|
-
tilt (2.0.8)
|
363
|
-
timecop (0.8.1)
|
364
|
-
tty-color (0.4.3)
|
365
|
-
tty-screen (0.6.5)
|
366
|
-
tty-table (0.10.0)
|
367
|
-
equatable (~> 0.5.0)
|
368
|
-
necromancer (~> 0.4.0)
|
369
|
-
pastel (~> 0.7.2)
|
370
|
-
strings (~> 0.1.0)
|
371
|
-
tty-screen (~> 0.6.4)
|
372
|
-
tzinfo (1.2.5)
|
373
|
-
thread_safe (~> 0.1)
|
374
|
-
uglifier (4.1.20)
|
375
|
-
execjs (>= 0.3.0, < 3)
|
376
|
-
unicode-display_width (1.4.0)
|
377
|
-
unicode_utils (1.4.0)
|
378
|
-
unparser (0.2.8)
|
379
|
-
abstract_type (~> 0.0.7)
|
380
|
-
adamantium (~> 0.2.0)
|
381
|
-
concord (~> 0.1.5)
|
382
|
-
diff-lcs (~> 1.3)
|
383
|
-
equalizer (~> 0.0.9)
|
384
|
-
parser (>= 2.3.1.2, < 2.6)
|
385
|
-
procto (~> 0.0.2)
|
386
|
-
websocket (1.2.8)
|
387
|
-
websocket-driver (0.7.0)
|
388
|
-
websocket-extensions (>= 0.1.0)
|
389
|
-
websocket-extensions (0.1.3)
|
390
|
-
xpath (3.1.0)
|
391
|
-
nokogiri (~> 1.8)
|
392
|
-
|
393
|
-
PLATFORMS
|
394
|
-
ruby
|
395
|
-
|
396
|
-
DEPENDENCIES
|
397
|
-
bundler (>= 1.17.3, < 2.1)
|
398
|
-
capybara
|
399
|
-
chromedriver-helper (= 1.2.0)
|
400
|
-
database_cleaner
|
401
|
-
factory_bot_rails
|
402
|
-
hyper-component!
|
403
|
-
hyper-model!
|
404
|
-
hyper-operation!
|
405
|
-
hyper-state!
|
406
|
-
hyperstack-config!
|
407
|
-
libv8
|
408
|
-
mini_racer (~> 0.2.4)
|
409
|
-
mysql2
|
410
|
-
opal-activesupport (~> 0.3.1)
|
411
|
-
opal-browser (~> 0.2.0)
|
412
|
-
opal-rails (~> 0.9.4)
|
413
|
-
parser
|
414
|
-
pry
|
415
|
-
pry-rescue
|
416
|
-
puma
|
417
|
-
pusher
|
418
|
-
pusher-fake
|
419
|
-
rails (>= 4.0.0)
|
420
|
-
rake
|
421
|
-
react-rails (>= 2.4.0, < 2.5.0)
|
422
|
-
reactrb-rails-generator
|
423
|
-
rspec-collection_matchers
|
424
|
-
rspec-expectations
|
425
|
-
rspec-its
|
426
|
-
rspec-mocks
|
427
|
-
rspec-rails
|
428
|
-
rspec-steps (~> 2.1.1)
|
429
|
-
rspec-wait
|
430
|
-
rubocop (~> 0.51.0)
|
431
|
-
selenium-webdriver
|
432
|
-
shoulda
|
433
|
-
shoulda-matchers
|
434
|
-
spring-commands-rspec
|
435
|
-
sqlite3
|
436
|
-
timecop (~> 0.8.1)
|
437
|
-
unparser
|
438
|
-
|
439
|
-
BUNDLED WITH
|
440
|
-
2.0.1
|