model_updates 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -1
- data/app/assets/javascripts/model_updates/activator.es6 +89 -0
- data/app/assets/javascripts/model_updates/model_updates_class.es6 +24 -0
- data/app/assets/javascripts/model_updates.js +5 -1
- data/lib/model_updates/version.rb +1 -1
- metadata +4 -4
- data/app/assets/javascripts/model_updates/activate_elements.js +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f43d80cfa164be08bec5f099089518e873e4edb7
|
4
|
+
data.tar.gz: c7d5eeefdfab73846b9ae909bce65d32086d9058
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2a59b69019b2b9b75d4b9867d8039becab8c02f90b64dce8c675e188173e5e947d7a684d1f6e189d1e332f3c9dcc4fd088b12d1d23d6018e6e6c75f9c10e49b
|
7
|
+
data.tar.gz: e04a7d37da13e364fd1cb95c15735a58b20d7f11abe693becb4093e5bc0e5f1ecb3ab6de315b9752e6aec36d9b947e2c3982bb0d2af222f8255b33e76b1dc4ed
|
data/README.md
CHANGED
@@ -42,7 +42,7 @@ private
|
|
42
42
|
delegate :authorize!, :can?, to: :current_ability
|
43
43
|
|
44
44
|
def current_ability
|
45
|
-
@_current_ability ||=
|
45
|
+
@_current_ability ||= CanCanAbility.new(user: current_user)
|
46
46
|
end
|
47
47
|
|
48
48
|
def current_user
|
@@ -51,6 +51,15 @@ private
|
|
51
51
|
end
|
52
52
|
```
|
53
53
|
|
54
|
+
In order to get the current user with Devise, you also have to add the following `config/initializers/warden_hooks.rb`:
|
55
|
+
```ruby
|
56
|
+
Warden::Manager.after_set_user do |user, auth, opts|
|
57
|
+
scope = opts[:scope]
|
58
|
+
auth.cookies.signed["#{scope}.id"] = user.id
|
59
|
+
auth.cookies.signed["#{scope}.expires_at"] = 70.minutes.from_now
|
60
|
+
end
|
61
|
+
```
|
62
|
+
|
54
63
|
You can define `authorize!(ability, model)` yourself, if you aren't using CanCan.
|
55
64
|
|
56
65
|
Choose which attributes should be broadcasted automatically:
|
@@ -79,6 +88,7 @@ end
|
|
79
88
|
|
80
89
|
## Usage
|
81
90
|
|
91
|
+
Update content on page live automatically
|
82
92
|
|
83
93
|
Do like this in your views if you are using HAML to receive automatic updates:
|
84
94
|
|
@@ -154,6 +164,14 @@ ModelUpdates.Destroy.connect({
|
|
154
164
|
})
|
155
165
|
```
|
156
166
|
|
167
|
+
### Live updating new elements added dynamically after page load
|
168
|
+
|
169
|
+
You can refresh elements with a simple call like this:
|
170
|
+
|
171
|
+
```js
|
172
|
+
ModelUpdates.update()
|
173
|
+
```
|
174
|
+
|
157
175
|
## Contributing
|
158
176
|
|
159
177
|
Contribution directions go here.
|
@@ -0,0 +1,89 @@
|
|
1
|
+
ModelUpdates.Activator = class Activator {
|
2
|
+
constructor() {
|
3
|
+
ModelUpdates.debug("Activator constructor")
|
4
|
+
|
5
|
+
this.modelSubscriptions = {}
|
6
|
+
this.modelDestroys = {}
|
7
|
+
this.connectedUpdates = {}
|
8
|
+
this.connectedDestroyes = {}
|
9
|
+
}
|
10
|
+
|
11
|
+
update() {
|
12
|
+
ModelUpdates.debug("Update was called")
|
13
|
+
this.updateFoundElements()
|
14
|
+
this.updateSubscribedUpdates()
|
15
|
+
this.updateSubscribedDestroys()
|
16
|
+
}
|
17
|
+
|
18
|
+
updateFoundElements() {
|
19
|
+
ModelUpdates.debug("Activator#updateFoundElements called")
|
20
|
+
|
21
|
+
// Find all models that should be subscribed to
|
22
|
+
var that = this
|
23
|
+
$(".model-updates").each(function() {
|
24
|
+
var element = $(this)
|
25
|
+
|
26
|
+
var model = element.data("model-updates-model")
|
27
|
+
var id = element.data("model-updates-id")
|
28
|
+
|
29
|
+
ModelUpdates.debug("Model found: " + model + "(" + id + ")")
|
30
|
+
|
31
|
+
if (!that.modelSubscriptions[model])
|
32
|
+
that.modelSubscriptions[model] = {}
|
33
|
+
|
34
|
+
if (element.data("model-updates-key"))
|
35
|
+
that.modelSubscriptions[model][id] = true
|
36
|
+
|
37
|
+
if (element.data("model-updates-remove-on-destroy")) {
|
38
|
+
if (!that.modelDestroys[model])
|
39
|
+
that.modelDestroys[model] = {}
|
40
|
+
|
41
|
+
that.modelDestroys[model][id] = true
|
42
|
+
}
|
43
|
+
})
|
44
|
+
}
|
45
|
+
|
46
|
+
updateSubscribedUpdates() {
|
47
|
+
ModelUpdates.debug("Activator#updateSubscribedUpdates called")
|
48
|
+
|
49
|
+
for(var model in this.modelSubscriptions) {
|
50
|
+
for(var id in this.modelSubscriptions[model]) {
|
51
|
+
if (!this.connectedUpdates[model])
|
52
|
+
this.connectedUpdates[model] = {}
|
53
|
+
|
54
|
+
if (!this.connectedUpdates[model][id]) {
|
55
|
+
this.connectedUpdates[model][id] = true
|
56
|
+
|
57
|
+
ModelUpdates.debug("Add subscription for update of " + model + "(" + id + ")")
|
58
|
+
|
59
|
+
ModelUpdates.Update.connect({
|
60
|
+
"id": id,
|
61
|
+
"model": model
|
62
|
+
})
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
updateSubscribedDestroys() {
|
69
|
+
ModelUpdates.debug("Activator#updateSubscribedDestroys called")
|
70
|
+
|
71
|
+
for(var model in this.modelDestroys) {
|
72
|
+
for(var id in this.modelDestroys[model]) {
|
73
|
+
if (!this.connectedDestroyes[model])
|
74
|
+
this.connectedDestroyes[model] = {}
|
75
|
+
|
76
|
+
if (!this.connectedDestroyes[model][id]) {
|
77
|
+
this.connectedDestroyes[model][id] = true
|
78
|
+
|
79
|
+
ModelUpdates.debug("Add subscription for destruction of " + model + "(" + id + ")")
|
80
|
+
|
81
|
+
ModelUpdates.Destroy.connect({
|
82
|
+
"id": id,
|
83
|
+
"model": model
|
84
|
+
})
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
@@ -4,6 +4,30 @@ class ModelUpdates {
|
|
4
4
|
console.log("ModelUpdates: " + message)
|
5
5
|
}
|
6
6
|
}
|
7
|
+
|
8
|
+
static current() {
|
9
|
+
if (!this.currentElement)
|
10
|
+
this.currentElement = new ModelUpdates()
|
11
|
+
|
12
|
+
return this.currentElement
|
13
|
+
}
|
14
|
+
|
15
|
+
static update() {
|
16
|
+
ModelUpdates.debug("Static update called")
|
17
|
+
ModelUpdates.current().update()
|
18
|
+
}
|
19
|
+
|
20
|
+
activator() {
|
21
|
+
if (!this.activatorElement)
|
22
|
+
this.activatorElement = new ModelUpdates.Activator()
|
23
|
+
|
24
|
+
return this.activatorElement
|
25
|
+
}
|
26
|
+
|
27
|
+
update() {
|
28
|
+
ModelUpdates.debug("Instance method update called")
|
29
|
+
this.activator().update()
|
30
|
+
}
|
7
31
|
}
|
8
32
|
|
9
33
|
ModelUpdates.configuration = {
|
@@ -1,6 +1,10 @@
|
|
1
1
|
//= require model_updates/model_updates_class
|
2
|
-
//= require model_updates/
|
2
|
+
//= require model_updates/activator
|
3
3
|
//= require model_updates/create
|
4
4
|
//= require model_updates/destroy
|
5
5
|
//= require model_updates/formatters
|
6
6
|
//= require model_updates/update
|
7
|
+
|
8
|
+
$(document).ready(function() {
|
9
|
+
ModelUpdates.update()
|
10
|
+
})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model_updates
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -50,7 +50,7 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- app/assets/config/model_updates_manifest.js
|
52
52
|
- app/assets/javascripts/model_updates.js
|
53
|
-
- app/assets/javascripts/model_updates/
|
53
|
+
- app/assets/javascripts/model_updates/activator.es6
|
54
54
|
- app/assets/javascripts/model_updates/create.es6
|
55
55
|
- app/assets/javascripts/model_updates/destroy.es6
|
56
56
|
- app/assets/javascripts/model_updates/formatters.js
|
@@ -93,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
93
|
version: '0'
|
94
94
|
requirements: []
|
95
95
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.6.
|
96
|
+
rubygems_version: 2.6.13
|
97
97
|
signing_key:
|
98
98
|
specification_version: 4
|
99
99
|
summary: Rails gem to push updates to models into the frontend through ActionCable
|
@@ -1,44 +0,0 @@
|
|
1
|
-
$(document).ready(function() {
|
2
|
-
// Find all models that should be subscribed to
|
3
|
-
modelSubscriptions = {}
|
4
|
-
modelDestroys = {}
|
5
|
-
|
6
|
-
$(".model-updates").each(function() {
|
7
|
-
element = $(this)
|
8
|
-
|
9
|
-
model = element.data("model-updates-model")
|
10
|
-
id = element.data("model-updates-id")
|
11
|
-
|
12
|
-
if (!modelSubscriptions[model])
|
13
|
-
modelSubscriptions[model] = {}
|
14
|
-
|
15
|
-
if (element.data("model-updates-key"))
|
16
|
-
modelSubscriptions[model][id] = true
|
17
|
-
|
18
|
-
if (element.data("model-updates-remove-on-destroy")) {
|
19
|
-
if (!modelDestroys[model])
|
20
|
-
modelDestroys[model] = {}
|
21
|
-
|
22
|
-
modelDestroys[model][id] = true
|
23
|
-
}
|
24
|
-
})
|
25
|
-
|
26
|
-
// Subscribe to the found models
|
27
|
-
for(var model in modelSubscriptions) {
|
28
|
-
for(var id in modelSubscriptions[model]) {
|
29
|
-
ModelUpdates.Update.connect({
|
30
|
-
"id": id,
|
31
|
-
"model": model
|
32
|
-
})
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
for(var model in modelDestroys) {
|
37
|
-
for(var id in modelDestroys[model]) {
|
38
|
-
ModelUpdates.Destroy.connect({
|
39
|
-
"id": id,
|
40
|
-
"model": model
|
41
|
-
})
|
42
|
-
}
|
43
|
-
}
|
44
|
-
})
|