hyper-model 1.0.alpha1.3 → 1.0.alpha1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/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
|