hyper-resource 1.0.0.lap52 → 1.0.0.lap53
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fdb0a8d50f4f15b310d470b2e409627c2793c0512907b643b57919d204f58bb
|
4
|
+
data.tar.gz: b61972174d030887f5d07b4a3a299f77ce0b7c816a97b4c882d18e26d9c28235
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a4c12776795ea0c9cfbc88af0114e436b7b774fe7ddea644bbf06ef8d922721c8e5d290805c3bd148edcbda23c828c402a144a61eca4e6249ae68928bd2d0f1
|
7
|
+
data.tar.gz: 3577ebf9be0425fad5d02e0a4151b3915b96cb037155c663c3a2f8333b1471f565d3fb494917d2f6e5fc2ebb1dac02be3ac531f86345a4adb179dbaacf203423
|
@@ -326,7 +326,7 @@ module HyperRecord
|
|
326
326
|
_notify_class_observers
|
327
327
|
rest_methods[name][:result]
|
328
328
|
end.fail do |response|
|
329
|
-
error_message = "#{self.to_s}.#{name}, a rest_method, failed to
|
329
|
+
error_message = "#{self.to_s}.#{name}, a rest_method, failed to execute!"
|
330
330
|
`console.error(error_message)`
|
331
331
|
response
|
332
332
|
end
|
@@ -360,14 +360,14 @@ module HyperRecord
|
|
360
360
|
_notify_observers
|
361
361
|
@rest_methods_hash[name][:result]
|
362
362
|
end.fail do |response|
|
363
|
-
error_message = "#{self.class.to_s}[#{self.id}].#{name}, a rest_method, failed to
|
363
|
+
error_message = "#{self.class.to_s}[#{self.id}].#{name}, a rest_method, failed to execute!"
|
364
364
|
`console.error(error_message)`
|
365
365
|
response
|
366
366
|
end
|
367
367
|
end
|
368
368
|
define_method(name) do |*args|
|
369
369
|
_register_observer
|
370
|
-
if self.id && (@rest_methods_hash[name][:force] || !@rest_methods_hash[name].has_key?(:result))
|
370
|
+
if self.id && (self.class.rest_methods[name][:force] || @rest_methods_hash[name][:force] || !@rest_methods_hash[name].has_key?(:result))
|
371
371
|
self.send("promise_#{name}", *args)
|
372
372
|
end
|
373
373
|
if @rest_methods_hash[name].has_key?(:result)
|
@@ -0,0 +1,186 @@
|
|
1
|
+
module HyperRecord
|
2
|
+
module PubSub
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(HyperRecord::PubSub::ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def _pusher_client
|
9
|
+
Hyperloop.pusher_instance ||= Pusher::Client.new(
|
10
|
+
app_id: Hyperloop.pusher[:app_id],
|
11
|
+
key: Hyperloop.pusher[:key],
|
12
|
+
secret: Hyperloop.pusher[:secret],
|
13
|
+
cluster: Hyperloop.pusher[:cluster]
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def publish_relation(base_record, relation_name, record = nil)
|
18
|
+
subscribers = Hyperloop.redis_instance.hgetall("HRPS__#{base_record.class}__#{base_record.id}__#{relation_name}")
|
19
|
+
time_now = Time.now.to_f
|
20
|
+
scrub_time = time_now - 24.hours.to_f
|
21
|
+
message = {
|
22
|
+
record_type: base_record.class.to_s,
|
23
|
+
id: base_record.id,
|
24
|
+
updated_at: base_record.updated_at,
|
25
|
+
relation: relation_name
|
26
|
+
}
|
27
|
+
if record
|
28
|
+
message[:cause] = {}
|
29
|
+
message[:cause][:record_type] = record.class.to_s
|
30
|
+
message[:cause][:id] = record.id
|
31
|
+
message[:cause][:updated_at] = record.updated_at
|
32
|
+
end
|
33
|
+
subscribers.each do |session_id, last_requested|
|
34
|
+
if last_requested.to_f < scrub_time
|
35
|
+
Hyperloop.redis_instance.hdel("HRPS__#{base_record.class}__#{base_record.id}__#{relation_name}", session_id)
|
36
|
+
next
|
37
|
+
end
|
38
|
+
if Hyperloop.resource_transport == :pusher
|
39
|
+
_pusher_client.trigger("hyper-record-update-channel-#{session_id}", 'update', message)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def publish_record(record)
|
45
|
+
subscribers = Hyperloop.redis_instance.hgetall("HRPS__#{record.class}__#{record.id}")
|
46
|
+
time_now = Time.now.to_f
|
47
|
+
scrub_time = time_now - 24.hours.to_f
|
48
|
+
|
49
|
+
message = {
|
50
|
+
record_type: record.class.to_s,
|
51
|
+
id: record.id,
|
52
|
+
updated_at: record.updated_at
|
53
|
+
}
|
54
|
+
message[:destroyed] = true if record.destroyed?
|
55
|
+
|
56
|
+
subscribers.each_slice(50) do |slice|
|
57
|
+
channel_array= []
|
58
|
+
slice.each do |session_id, last_requested|
|
59
|
+
if last_requested.to_f < scrub_time
|
60
|
+
Hyperloop.redis_instance.hdel("HRPS__#{record.class}__#{record.id}", session_id)
|
61
|
+
next
|
62
|
+
end
|
63
|
+
channel_array << "hyper-record-update-channel-#{session_id}"
|
64
|
+
end
|
65
|
+
if Hyperloop.resource_transport == :pusher && channel_array.size > 0
|
66
|
+
_pusher_client.trigger(channel_array, 'update', message)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
Hyperloop.redis_instance.del("HRPS__#{record.class}__#{record.id}") if record.destroyed?
|
70
|
+
end
|
71
|
+
|
72
|
+
def publish_scope(record_class, scope_name)
|
73
|
+
subscribers = Hyperloop.redis_instance.hgetall("HRPS__#{record_class}__scope__#{scope_name}")
|
74
|
+
time_now = Time.now.to_f
|
75
|
+
scrub_time = time_now - 24.hours.to_f
|
76
|
+
subscribers.each do |session_id, last_requested|
|
77
|
+
if last_requested.to_f < scrub_time
|
78
|
+
Hyperloop.redis_instance.hdel("HRPS__#{record_class}__scope__#{scope_name}", session_id)
|
79
|
+
next
|
80
|
+
end
|
81
|
+
message = {
|
82
|
+
record_type: record_class.to_s,
|
83
|
+
scope: scope_name
|
84
|
+
}
|
85
|
+
if Hyperloop.resource_transport == :pusher
|
86
|
+
_pusher_client.trigger("hyper-record-update-channel-#{session_id}", 'update', message)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def subscribe_relation(relation, base_record = nil, relation_name = nil)
|
92
|
+
return unless session.id
|
93
|
+
time_now = Time.now.to_f.to_s
|
94
|
+
session_id = session.id.to_s
|
95
|
+
Hyperloop.redis_instance.pipelined do
|
96
|
+
if relation.is_a?(Enumerable)
|
97
|
+
# has_many
|
98
|
+
relation.each do |record|
|
99
|
+
Hyperloop.redis_instance.hset("HRPS__#{record.class}__#{record.id}", session_id, time_now)
|
100
|
+
end
|
101
|
+
elsif !relation.nil?
|
102
|
+
# has_one, belongs_to
|
103
|
+
Hyperloop.redis_instance.hset("HRPS__#{relation.class}__#{relation.id}", session_id, time_now)
|
104
|
+
end
|
105
|
+
Hyperloop.redis_instance.hset("HRPS__#{base_record.class}__#{base_record.id}__#{relation_name}", session_id, time_now) if base_record && relation_name
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def subscribe_record(record)
|
110
|
+
return unless session.id
|
111
|
+
Hyperloop.redis_instance.hset "HRPS__#{record.class}__#{record.id}", session.id.to_s, Time.now.to_f.to_s
|
112
|
+
end
|
113
|
+
|
114
|
+
def subscribe_scope(collection, record_class = nil, scope_name = nil)
|
115
|
+
return unless session.id
|
116
|
+
time_now = Time.now.to_f.to_s
|
117
|
+
session_id = session.id.to_s
|
118
|
+
Hyperloop.redis_instance.pipelined do
|
119
|
+
if collection.is_a?(Enumerable)
|
120
|
+
collection.each do |record|
|
121
|
+
Hyperloop.redis_instance.hset("HRPS__#{record.class}__#{record.id}", session_id, time_now)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
Hyperloop.redis_instance.hset("HRPS__#{record_class}__scope__#{scope_name}", session_id, time_now) if record_class && scope_name
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def pub_sub_relation(relation, base_record, relation_name, causing_record = nil)
|
129
|
+
subscribe_relation(relation, base_record, relation_name)
|
130
|
+
publish_relation(base_record, relation_name, causing_record)
|
131
|
+
end
|
132
|
+
|
133
|
+
def pub_sub_record(record)
|
134
|
+
subscribe_record(record)
|
135
|
+
publish_record(record)
|
136
|
+
end
|
137
|
+
|
138
|
+
def pub_sub_scope(collection, record_class, scope_name)
|
139
|
+
subscribe_scope(collection, record_class, scope_name)
|
140
|
+
publish_scope(record_class, scope_name)
|
141
|
+
end
|
142
|
+
|
143
|
+
def session
|
144
|
+
@_hyper_resource_session
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# instance methods
|
149
|
+
|
150
|
+
def publish_relation(base_record, relation_name, record = nil)
|
151
|
+
self.class.publish_relation(base_record, relation_name, record)
|
152
|
+
end
|
153
|
+
|
154
|
+
def publish_record(record)
|
155
|
+
self.class.publish_record(record)
|
156
|
+
end
|
157
|
+
|
158
|
+
def publish_scope(record_class, scope_name)
|
159
|
+
self.class.publish_scope(record_class, scope_name)
|
160
|
+
end
|
161
|
+
|
162
|
+
def subscribe_relation(relation, base_record = nil, relation_name = nil)
|
163
|
+
self.class.subscribe_relation(relation, base_record, relation_name)
|
164
|
+
end
|
165
|
+
|
166
|
+
def subscribe_record(record)
|
167
|
+
self.class.subscribe_record(record)
|
168
|
+
end
|
169
|
+
|
170
|
+
def subscribe_scope(collection, record_class = nil, scope_name = nil)
|
171
|
+
self.class.subscribe_scope(collection, record_class, scope_name)
|
172
|
+
end
|
173
|
+
|
174
|
+
def pub_sub_relation(relation, base_record, relation_name, causing_record = nil)
|
175
|
+
self.class.pub_sub_relation(relation, base_record, relation_name, causing_record)
|
176
|
+
end
|
177
|
+
|
178
|
+
def pub_sub_record(record)
|
179
|
+
self.class.pub_sub_record(record)
|
180
|
+
end
|
181
|
+
|
182
|
+
def pub_sub_scope(collection, record_class, scope_name)
|
183
|
+
self.class.pub_sub_scope(collection, record_class, scope_name)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
data/lib/hyper_record.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyper-resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.lap53
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- lib/hyper_record/client_instance_methods.rb
|
209
209
|
- lib/hyper_record/collection.rb
|
210
210
|
- lib/hyper_record/dummy_value.rb
|
211
|
+
- lib/hyper_record/pub_sub.rb
|
211
212
|
- lib/hyper_record/server_class_methods.rb
|
212
213
|
- lib/hyperloop/resource/client_drivers.rb
|
213
214
|
- lib/hyperloop/resource/config.rb
|